JAVA/Spring(113)
-
Spring 서버 OOM 알림 메일 전송하기(Prometheus + AlertManager)
개요fineAnts 프로젝트를 진행하던 중, Prometheus와 Grafana를 도입하여 JVM 상태를 시각화하고 모니터링 할 수 있었습니다. 그러나 메모리 부족(OutOfMemory, OOM)이나 인스턴스 다운과 같은 치명적인 상황 발생 시 별도의 알림 시스템이 없어 즉각적인 대응이 어려웠습니다.이 글에서는 Spring 서버에서 OOM 상황이 발생할 때 관리자 이메일로 알림을 전송하는 방법을 정리합니다. Prometheus로 메모리 상태를 감지하고 AlertManager를 통해서 이메일 알림을 전송하는 구조입니다.목표Spring 애플리케이션의 JVM 힙 메모리 사용률이 90%를 초과하거나, OOM이 발생한 경우 관리자에게 이메일로 알림을 전송합니다.사전 준비사항Prometheus 서버가 정상 작동 ..
2025.04.12 -
Spring 다중 인스턴스 환경에서 스케줄러 단일 실행 처리
배경Spring 서버가 스케일 아웃하면서 동시 실행하는 구조가 되면서 각 인스턴스에 등록된 @Scheduled 작업이 중복 실행되는 문제가 발생할 수 있습니다. 예를 들어 5초마다 종목의 현재가를 갱신하는 스케줄러 작업이 있습니다. 해당 작업은 외부 API에 요청하여 종목의 현재가를 질의한 다음에 Redis에 저장합니다. 종목의 현재가 데이터는 여러 Spring 인스턴스가 공통적으로 사용하기 때문에 각각의 Spring 인스턴스가 스케줄러 작업을 수행 할 필요없이 하나의 Spring 인스턴스가 맡아서 수행하여 데이터를 저장하면 됩니다.문제정의다중 Spring 인스턴스 환경에서 @Scheduled 메서드가 모든 인스턴스에서 실행됩니다.한번만 실행되어야 할 작업이 중복 실행되어 불필요한 수행이 발생합니다.스케..
2025.04.11 -
Spring Cache: CaffeineCache 설정
CaffeineCache는 무엇인가?CaffeineCache는 Java 기반의 고성능 캐시 라이브러리인 Caffeine을 사용하여 데이터를 메모리에 캐시하는 기능입니다. Spring Boot CaffeineCache 설정의존성 라이브러리 추가implementation 'org.springframework.boot:spring-boot-starter-cache'implementation 'com.github.ben-manes.caffeine:caffeine' Cache 설정 클래스 추가다음과 같이 설정 클래스를 구현하여 CaffeineCacheManager 스프링 빈을 정의합니다. 저 같은 경우 weatherCache 캐시를 10분으로 설정하기 위해서 다음과 같이 인스턴스 생성시 "weatherCache"..
2024.11.06 -
@EventListener vs @TransactionalEventListener
@EventListener@EventListener는 스프링 이벤트 리스너를 등록하는데 사용되는 애노테이션입니다. 이 애노테이션을 적용한 메서드는 특정한 이벤트가 발생했을 때 수신하여 애노테이션을 적용한 메서드를 실행시킵니다. @EventListener 애노테이션을 적용한 리스너 메서드는 다음과 같은 특징을 가지고 있습니다. 앞으로의 설명에서 @EventListener 애노테이션을 적용한 메서드를 리스너 메서드라고 표현합니다.기본적인 동기적 처리 : 리스너 메서드는 기본적으로 이벤트를 동기적으로 처리합니다. 이벤트를 동기적으로 처리하게 되면 이벤트를 발생시킨 곳에서 이벤트를 호출하고나서 이벤트를 처리한 다음에 그 이후의 코드를 실행하게 됩니다.비동기 처리 가능 : @Async 애노테이션을 리스너 메서드에..
2024.08.31 -
SpringBoot 3.1 TestContainer
개요이 글에서는 SpringBoot 3.1 이상 버전의 프레임워크에서 테스트 컨테이너를 구현하는 방법에 대해서 소개합니다. 3.1 버전 이전까지 SpringBoot 프레임워크에서 테스트 컨테이너를 실행하기 위해서는 @DynamicPropertySource 애노테이션을 이용하여 동적 프로퍼티들을 설정하고 명시적으로 시작하도록 호출 했어야 했습니다. 하지만 3.1 버전 이상부터는 spring-boot-testcontainers 의존성을 지원하기 시작하면서 특정한 애노테이션만 적용해주면 동적 프토퍼티 설정들을 자동으로 설정해줍니다. 만약 SpringBoot 3.1 이전 버전을 사용해야 한다면 다음 링크를 참고해주시면 감사하겠습니다. https://yonghwankim-dev.tistory.com/607 Sp..
2024.05.13 -
SpringBoot 2.7 TestContainer
개요Spring 프레임워크로 웹 애플리케이션 개발시 테스트 코드를 구현하는 일이 많습니다. 하지만 웹 애플리케이션이 단독으로 사용되는 일은 많지 않고 MySQL과 같은 데이터베이스와 같이 서비스하는 경우가 많습니다. 테스트 코드 실행시 데이터베이스와 연결하는 방법중 하나는 데이터베이스 프로세스를 실행시킨 상태에서 JDBC를 통하여 연결하는 방법이 존재합니다. 그러나 테스트 코드를 실행할때 사전 조건으로 데이터베이스 프로세스를 실행되어야 정상적으로 수행되야 하는 제약이 있습니다. 이러한 문제를 해결하기 위한 방법 중 하나는 테스트 컨테이너(TestContainer)를 사용하는 방법이 있습니다. 테스트 컨테이너는 도커 기술을 사용하여 테스트 코드를 수행할때만 일시적으로 데이터베이스 컨테이너를 실행시킨 다음에..
2024.05.13