개요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..
개요AuthenticationEntryPoint를 통해 인증되지 않은 사용자가 접근할 때에 대한 예외 처리를 하는 것이 목적이었다. 하지만 인증 예외 처리가 일어나지 말아야 할 상황에서도 인증 에러 메시지가 호출 되었다. 해당 과정에서 있었던 트러블 슈팅을 기록하려 한다. 코드CustomAuthenticationEntryPoint@Component@Slf4jpublic class CustomAuthenticationEntryPoint implements AuthenticationEntryPoint { private final ObjectMapper mapper = new ObjectMapper(); private String toJson(ErrorResponse response) thro..
개요현재 프로젝트에 인증 & 인가 부분을 맡게 되면서, 요구사항으로 OAuth2.0을 이용한 로그인 기능을 구현하고 JWT 토큰 방식을 접목하게 되었다. Security OAuth2.0 기능이 추가되면 그 기능이 FilterChain 안에서 어떻게 동작하게 되고, 커스텀을 위해 어떤 부분을 어떻게 건드려야 되는지 간단히 알아보았다. OAuth2.0 인증 방법 OAuth2.0은 여러 인증 방법이 있지만, 대게 Authorization Code Grant 방식을 사용한다고 한다.코드 안에서는 여러 일이 일어나지만, Flow는 다음과 같다. Flow 1. 사용자가 어플리케이션에 소셜 로그인 요청 -> 소셜 로그인 페이지로 리다이렉트 Flow 2. 소셜 인증 완료 -> 인증 서버에서 Authorization ..