회사 내 프로젝트의 배포 시간이 긴 문제가 있었다. 이 문제를 다들 쉬쉬하고 있었지만, 이젠 이를 개선하기 위해 작업을 진행하려고 한다. 현재 평균 배포 시간은 대략 8분에서 10분 사이가 걸리고 있다. 배포가 느린 이유배포가 느린 이유는 빌드 속도가 매우 오래 걸렸다. ➜ NestJS를 사용하고 있었는데 ts를 js로 컴파일하는 과정이 매우 오래 걸렸다. 그 문제의 파일은 `filter.ts`로 배포시간이 긴 것만이 문제가 아니라 IDE 툴로 작업을 할 때 이 파일만 들어가거나 수정이 일어나면 IDE가 엄청 느려지고 정신을 못 차렸다... (작업하는데 매우 불편함) 간단하게 `filter.ts`를 보자면,export class typeOfFilter { @IsOptional() @IsString()..
우선 배치시스템 전체적인 구조를 보자. 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..
우선 우리의 테스트 환경 구성은 두 가지 핵심 추상 클래스, ControllerTestSupport와 IntegrationTestSupport에 의존한다. 이 두 클래스를 통해 통합 테스트 환경을 구축했다. 중요한 점은, 이 구조를 통해 스프링 부트 인스턴스를 단 두 개만 로드하도록 설정했다는 것이다. 이렇게 함으로써, 테스트 환경의 효율성과 관리의 용이성을 동시에 달성할 수 있었다. 문제 상황 문제상황 인지: 평소와 같이 테스트를 돌려보고 테스트가 조금 느려진 것 같아서 확인해 보니 스프링 부트가 3개가 올라가 있었고, 테스트 코드를 확인해 봤다. @ActiveProfiles("test") @SpringBootTest public class ConfirmEmailServiceTest { @Autowir..
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..
이해를 돕기 위한 기존 시스템 간단 설명 기존시스템은 EC2에 MongoDB를 구축해서 사용하고 있었고, 데이터 보호와 복구를 위해, crontab을 사용해서 일정 시간마다 MongoDump를 하고 S3로 옮기고 삭제하는 방식을 사용하고 있었던 것 같다. 문제 상황 분석 및 예상 갑작스럽게 MongoDB 서비스가 다운되는 상황이 생겼다. 확인해 보니 EC2 인스턴스 용량 부족으로 다운이 됐었다. 그래서 EC2 인스턴스 용량을 확인해 보니 20GB였고 데이터를 확인해 보면 아직 충분히 여유가 있는 용량이었다. 명령어를 통해 어떤 폴더의 용량이 가장 큰지 파보니 백업 dump가 매우 크게 잡아먹고 있었다. 백업 스크립트들을 보며 분석해 봤는데 백업파일이 1시간마다 실행되고 S3로 옮기고 삭제하는 스크립트는 ..
SecurityContextHolder에서 유저 정보를 가져오며 테스트 중 겪었던 작은 문제와 그에 대한 대처를 이야기하고자 한다. 같은 경험을 했거나 더 좋은 경험이 있다면 댓글로 ✍️ 🙏 SecurityContextHolder에서 유저 정보를 효율적으로 가져오기 첫 번째 문제 상황 진행하던 프로젝트에서 Spring Security의 `SecurityContextHolder`를 사용해 로그인한 유저의 정보를 가져와야 하는 상황이 생겼다. 흔히 많은 예제에서 username 필드로 email을 사용해서 우선 처음에는 email로 세팅했다. 여기서 작은 문제가 생겼다. user와 연결된 다른 많은 테이블들이 있었고, 이 테이블들과 join을 할 때마다 email로 먼저 유저 정보를 조회하고, 그 후 use..
먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 EC2 pem키를 ppk파일로 변환 [p.252] puttygen을 사용해서 pem키를 ppk파일로 변환할 수 있고, 과거에는 그렇게 했다. 이제는 그럴 필요 없이 아래의 그림과 같이 ppk를 받으면 된다! 당연히 이렇게 했겠지만 처음 접한 사람은 무심코 놓칠 수도 있기에 정리했다. CodeDeploy 에이전트 설치 실패 ..
먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 spring-security-config : 6.1.2 우선 책에서는 @RequiredArgsConstructor @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final CustomOAuth2UserS..
결론으로 바로 가기 먼저 이 문제는 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'라는 책을 실습하는 과정에서 마주친 상황이다. 책은 몇 년 전에 지어진 기준이라 자바나 스프링부트의 버전이 낮게 되어있다. 그렇지만 그 당시 버전보다는 지금 상황에서 안정된 최신 버전으로 변경사항은 고치며 해보고 싶어 최신버전으로 진행했다. Spring Boot : 3.1.2 Java : 17 Gradle : 8.2.1 문제 상황 스프링 부트에서 공식 지원하는 템플릿 엔진 Mustache를 사용하던 중 이렇게 한글이 깨지는 현상이 발생했다. 결론 스프링 부트 2.7.X 버전 이상부터는 한글 깨짐이 발생한다. 스프링 부트 버전을 2.7.0 이하로 낮추거나 버전을 낮추지 못한다면 //aplication.properties ..