회사 내 프로젝트의 배포 시간이 긴 문제가 있었다. 이 문제를 다들 쉬쉬하고 있었지만, 이젠 이를 개선하기 위해 작업을 진행하려고 한다. 현재 평균 배포 시간은 대략 8분에서 10분 사이가 걸리고 있다. 배포가 느린 이유배포가 느린 이유는 빌드 속도가 매우 오래 걸렸다. ➜ NestJS를 사용하고 있었는데 ts를 js로 컴파일하는 과정이 매우 오래 걸렸다. 그 문제의 파일은 `filter.ts`로 배포시간이 긴 것만이 문제가 아니라 IDE 툴로 작업을 할 때 이 파일만 들어가거나 수정이 일어나면 IDE가 엄청 느려지고 정신을 못 차렸다... (작업하는데 매우 불편함) 간단하게 `filter.ts`를 보자면,export class typeOfFilter { @IsOptional() @IsString()..
nGrinder 네이버에서 개발한 서버 부하 테스트를 위한 오픈 소스 프로젝트다. 애플리케이션을 개발하고 nGrinder에서 여러 가지 가상 시나리오를 만들어 트래픽이 몰렸을 때 성능을 측정할 수 있도록 도와준다. 부하 테스트 nGrinder nGrinder는 웹 애플리케이션 Controller와 자바 애플리케이션 Agent로 구성되어 있다. nGrinder 설치 https://github.com/naver/ngrinder/releases Releases · naver/ngrinder enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub. gi..
애플리케이션의 성능 모니터링을 위해 다양한 도구를 사용하고 있다. 이번에 도입해 본 Scouter는 LG CNS에서 개발한 APM(Application Performance Monitoring) 도구로, 애플리케이션의 성능을 실시간으로 모니터링하고, 문제를 식별하여 해결하는 데 필수적인 인사이트를 제공한다. Spring Boot: 3.0.11 Java: 17 WAS EC2: t4g.small (vCPU: 2, RAM: 2GB) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2: t2.micro (vCPU: 1, RAM: 1GB) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2 구성 ec2 생성은 다른 글에서도 너무 많이 다뤄서 넘어가겠다. JAVA 8 설치 s..
우선 배치시스템 전체적인 구조를 보자. GitHub - luckkids/luckkids-batch-server: 럭키즈 배치 서버 👨🏻💻🍀럭키즈 배치 서버 👨🏻💻🍀. Contribute to luckkids/luckkids-batch-server development by creating an account on GitHub.github.com Batch와 Scheduler의 차이배치(Batch)는 논리적 또는 물리적으로 관련된 데이터를 그룹화하여 일괄 처리하는 방법을 의미한다. 스케줄러(Scheduler)는 주어진 작업을 미리 정의된 시간에 실행할 수 있게 해주는 도구나 소프트웨어를 의미한다. 여기서 주의할 점은 배치는 대량의 데이터를 일괄적으로 처리할 뿐, 특정 주기마다 자동으로 돌..
핀포인트 웹에 안 들어가지거나 연결이 안 됨 ps -ef | grep java# 시스템에서 실행 중인 모든 프로세스 중에서 "java"라는 문자열을 포함하는 프로세스들의 정보를 보여주는 데 사용 나의 이슈는 hbase가 안 떠져있어서 연결이 안 됐었다. 핀포인트 웹은 들어가지는데 애플리케이션이 안 된다면 로그가 뜰 테니 그걸로 디버깅해 보거나 아예 들어가지 지도 않는다면 agent > logs, collector > logs, web > logs를 다 확인해봐야 한다. 그렇지만 대부분의 경우 필요한 것들이 다 잘 실행 중이고, Agent 부분에서 config를 잘 설정했고, 인바운드 설정도 잘했다면 문제가 없을 가능성이 크다. (3가지를 잘 확인해 보자.) `REAL TIME > Active Reques..
기존에 CI/CD를 구성하며 올려줬던 WAS에 분산 환경 APM 도구이며 네이버에서 만든 pinpoint를 도입하며 겪었던 경험을 공유하고자 한다. Spring Boot: 3.0.11 java: 17 WAS EC2: t4g.small (vCPU: 2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM)) APM EC2: t4g.small (vCPU:2, RAM: 2) (AMI: Amazon Linux 2 AMI (HVM)) 더보기 처음에는 APM EC2는 t2.micro로 구성했는데 RAM 1기가 이상을 사용해서 바로 터져버려서 t4g.small로 업그레이드.. 😅 (2기가도 부족한 것 같다, 매우 불안정..) APM EC2 구성 AMI: Amazon Linux 2 AMI (HVM)를 ..
우선 우리의 테스트 환경 구성은 두 가지 핵심 추상 클래스, ControllerTestSupport와 IntegrationTestSupport에 의존한다. 이 두 클래스를 통해 통합 테스트 환경을 구축했다. 중요한 점은, 이 구조를 통해 스프링 부트 인스턴스를 단 두 개만 로드하도록 설정했다는 것이다. 이렇게 함으로써, 테스트 환경의 효율성과 관리의 용이성을 동시에 달성할 수 있었다. 문제 상황 문제상황 인지: 평소와 같이 테스트를 돌려보고 테스트가 조금 느려진 것 같아서 확인해 보니 스프링 부트가 3개가 올라가 있었고, 테스트 코드를 확인해 봤다. @ActiveProfiles("test") @SpringBootTest public class ConfirmEmailServiceTest { @Autowir..
우선 배포과정을 설명하기 전에 전체적인 구조부터 보자. 조금은 추상적일 수도 있는 배포과정을 전체적으로 정리해보려고 한다. 1. GitHub Actions Workflow 트리거: Merge가 완료되면, `.github/workflows/cicd-deploy.yml`에 정의된 GitHub Actions Workflow가 자동으로 트리거 된다. 이 Workflow는 배포 프로세스를 자동으로 실행하기 위한 단계들을 포함하고 있다. 2. 깃 서브모듈 및 시크릿 설정: Workflow가 실행되면서 먼저 깃 서브모듈을 초기화하고 업데이트하여 의존하는 외부 또는 공유 코드 라이브러리를 가져온다. 그다음에 GitHub Secrets에 저장된 비밀 설정 파일(예: 환경 변수, 인증 키 등)을 사용하여 애플리케이션에 필..
프로젝트에 대한 후기 처음에 요구사항을 작성할 때는 시스템에 대한 이해가 부족한 입장에서 적는 것이 미숙했던 것 같다. 시스템을 잘 모른다고 생각하고 요구사항을 작성했다면 더 좋았을 것이라는 생각이 든다. 이를 최대한 보완하여 더욱 상세하게 작성하려 노력하고 있다. 그런데 여기서 한 가지 고민이 생겼는데, 사실 요구사항에 모든 것을 상세하게 기술하지는 않았다. 일부로 이 시스템에서 꼭 알아야 하는 중요한 부분은 추상적으로 남겨뒀다. 그 과정에서 풀어가는 과정을 보고 싶었는데 이것을 어디까지 적어야 할지 경계를 정하는 일은 계속 어려운 부분으로 남을 것 같다. 더보기 사실 프로젝트마다 후기를 요청하고 싶었지만 부담을 느끼실까 봐 전체 프로젝트의 중간에서 후반정도의 진도일 때 후기를 받았다. 번외 가끔 흥미..
Gitub Actions를 통해 PR이 올라오면 자동으로 테스트를 돌려주는 기능을 적용하면서 삽질을 했던 것을 풀어보려고 한다. 아직 완벽하게 해결하지 못한 문제가 있어서 밤이 깊어가는데도 마음 한구석에 찝찝하고 아쉬움이 남았다. 이 과정에서 배운 것도 많고, 앞으로 더 개선할 부분에 대한 고민도 많이 하게 되었다..🤣 삽질을 해야 얻는 게 많아, 너무 잘 풀리면 배우는 게 없어 ~ (라고 세뇌 중....) 12/06 결국 해결완료🔥🔥 workflows에서 Actions이 작동이 안 한다!? name: Java CI with Gradle on: pull_request: branches: [ "main" ] permissions: contents: read jobs: test: runs-on: ubuntu..