개요Spring에서는 @Scheduled 어노테이션을 통해 간편하게 스케쥴러 기능을 구현할 수 있다. 주기적으로 특정 로직을 수행하거나, 특정 시간에 작업을 예약해서 기능을 실행시킬 수 있다. 정말 편리한 기능이지만, 여러가지 부딪힌 이슈들이 있기에 공유해보려 한다. 설정설정 클래스에 @EnableScheduling 어노테이션을 사용하여, @Scheduled 어노테이션을 사용할 수 있다.@Configuration// 스케쥴링 기능 활성화@EnableSchedulingpublic class SchedulerConfig { } @Scheduled을 통한 스케쥴링 작업 실행일정 주기로 작업을 실행하고 싶다면 @Scheduled 어노테이션에 fixedDelay 옵션을 통해 주기를 입력해주면 된다.@Com..
개요서비스가 커질수록 하나의 비즈니스 동작의 여러 부수 효과를 동반하게 된다.예를 들어 DDD로 설계된 어플리케이션에서 회원가입을 하면 환영 이메일 발송 및 쿠폰 지급 등 회원 관련 서비스에서 다양한 도메인이 경계를 넘나들게 되어 결합성이 높아지게 된다. Spring Event는 결합성을 낮추고 복잡성을 해결하기에 가장 간단하면서도 효율적인 방법 중 하나이다. Spring Event 구조와 동작Spring Event는 애플리케이션 내부의 PUB/SUB 패턴으로 동작한다. 이벤트 발행을 통해 도메인의 상태의 변경을 알리고, 해당 이벤트에 대한 구독자가 이벤트에 반응하는 구조이다. Spring Event의 구조는 이벤트 객체, Publisher, Listener 세 가지로 구성되어 있다.이벤트 객체는 도메..
개요Spring의 @Async 어노테이션은 메서드를 비동기적으로 실행할 수 있게 해주는 강력한 기능이다.스레드를 통해 비동기 방식으로 로직을 처리하여, 시간이 오래 걸리는 작업을 백그라운드에서 수행할 수 있다. @Async 사용 이점ThreadPoolExecutor를 직접 사용하지 않고 @Async를 사용할 때 얻을 수 있는 이점은 정말 많지만 가장 큰 이점을 뽑자면 코드의 간결성이다. //1. ThreadPoolExecutor 사용public void sendEmail(String email) { executor.execute(() -> { try { // 비동기로 실행할 로직 } catch (Exception e) { log.er..