@EventListener, @TransactionalEventListener 설에 따른 이벤트 동작 방식
·
Java & Spring
안녕하세요 이번 포스팅에서는 이벤트 리스너 어노테이션에 대해 다루고자 합니다. 도입하여 사용하게된 계기는 다음과 같았습니다.1. 메인 비지니스 로직과 알림과 같은 부가적인 로직의 분리 - 알림 발송에 대한 처리2. 분리를 통한 결합도 낮춤 및 확장 가능한 설계3. @Async 도입을 통해 비동기 처리로 퍼포먼스 향상 그럼 스프링에서 제공하는 @EventListener, @TransactionalEventListener를 통해 어떤 경우에 어떻게 동작하는지 정리해 보겠습니다. 1. @EventListener이벤트를 publish 해주는 곳에서 PostCreatedEventFail 타입으로 발행해주면 해당 타입으로 리스너가 구성되어 있는 메소드는수행되게 됩니다EventListener 안에 별도로 class ..
Awaitility로 비동기 이벤트 테스트 하기: Spring @Async와 함께 쓰는 법
·
Java & Spring
Awaitility란 무엇인가?Awaitility는 단순히 "조건을 만족할 때까지 기다리는" 라이브러리입니다. 자바의 while 루프나 Thread.sleep을 사용하지 않고, 안정적으로 polling 하며 조건이 만족될 때까지 기다립니다. 비동기 테스트 도입 계기Spring에서 @Async 와 같이 비동기적으로 수행되는 코드를 테스트할 때 가장 어려운 점은 "테스트 메소드가 먼저 종료되어 비동기 로직이 미처 수행되지 못하는 것"입니다. Thread.sleep() 으로 기다리는 방식 보단 적절한 시간을 두고 polling 으로 완료가 되면 종료되는게 더 효율적이라 판단하였습니다. 기본 사용법await().atMost(5, SECONDS) .until(() -> someService.getSta..