Spring4 관리자 마케팅 알람 페이지의 조회 지연 및 OOM 문제 해결 후기 문제 발생어느날 모바일 앱에서 여러 API 호출이 일제히 실패하는 현상이 발생했다. 슬랙 알림을 확인해 보니 매니지 서버가 중지되어 있었고, 해당 서버에 접속해 보니 힙 덤프가 생성되어 있었다. 매니지 서버는 단순 관리자 페이지용이 아니라, 앱에서 사용하는 휴일 정보, 이벤트 정보, 공지 사항 등 다양한 데이터를 제공하고 있었다. 매니지 서버의 중단은 전체 앱 API 흐름에 큰 영향을 주는 연쇄 장애로 이어졌다. 장애 직전에는 특정 페이지의 응답 속도가 점점 느려지고 있었으며, 이후 과도한 메모리 적재가 누적되면서 OOM이 발생한 것으로 분석되었다. 원인 분석힙 덤프와 스택 트레이스를 분석한 결과, 마케팅 알림 전송 결과 페이지 조회 시 특정 엔티티가 140만 개 이상 메모리에 적재되어 있었고, 이로 인.. 2025. 5. 11. 요금/재고 동기화 병목 문제를 스프링 스케줄링 개선으로 해결한 후기 문제 상황현재 서비스에서는 외부 연동사의 숙박 업체 정보를 가져와 판매하기 위해, 데이터를 동기화하는 별도의 서버를 운영하고 있다. 해당 서버는 여러 개의 큐(자바 내부의 큐)를 통해 데이터를 스케쥴링하여 처리하고 있었는데, 인수인계 받았을 당시 요금/재고 관련 큐에 하루 약 10만 건, 며칠이 지나면 수십만 건의 데이터가 누적되는 현상이 발생하고 있었다. 문제는 이 큐들이 좀처럼 해소되지 않았고, 시간이 지날수록 데이터가 쌓여가고 있었다. 이에 따라, 요금/재고가 동기화 지연이 발생했고, 외부 연동사의 숙박 상품의 예약 실패 사례도 점점 늘어나고 있었다. 원인 분석문제의 원인을 파악하기 위해 코드와 실행 로그를 함께 확인했다. 코드상으로는 약 6개의 주기적인 스케줄링 작업이 존재했고, 실제 로그를 확인.. 2025. 5. 10. QueryDSL fetchOne() OOM 문제 분석 및 해결 후기 문제 발생어느 날 회사 슬랙에 인증 서버에서 문제가 발생했다는 알림이 도착했다. 다행히 인증 서버는 OOM(Out Of Memory) 발생 시 힙 덤프를 자동으로 생성하도록 설정되어 있었고, 이를 기반으로 메모리 덤프를 분석할 수 있었다. 분석 결과, 약 73만 개가 넘는 회원 정보 객체가 메모리에 적재되었고, 이로 인해 OOM이 발생한 것으로 확인되었다. 왜 그렇게 많은 객체가 한 번에 올라왔는지 추적하기 위해 스택 트레이스를 분석한 결과, 특정 사용자의 설정 정보를 조회하기 전, 회원 정보를 불러오는 로직에서 문제가 발생하고 있었다. 기존에 작성되어 있던 코드에서는 fetchOne()으로 특정 회원의 정보를 가져오고 있었다.// 문제가 발생한 부분 (QueryDSL 버전은 5.0.0 버전 사용중)re.. 2025. 5. 8. [Spring] @Bean vs @Component @Bean vs @Component스프링 코어 강의를 보던중 스프링에서 자바 클래스를 빈(Bean) 객체로 등록하기 위해 사용하는 두 가지 어노테이션이 있다고 했다. @Bean과 @Component 어노테이션인데, 강의에서는 어노테이션 사용법만 알려주고 두 어노테이션의 차이점을 알려주지 않아서 차이점을 알아보기로 했다.@Bean@Configurationpublic class TestConfig { @Bean public ArrayList listBean() { return new ArrayList(); }}@Component@Configuration@ComponentScan(basePackages = "com.springex.college")public class TestConfig {}@Co.. 2020. 8. 2. 이전 1 다음