logo

[Spring] Spring Event 스레드의 동작원리 (동기/비동기)

language-logoSpring

• 스프링에서 이벤트를 발행하면 기본적으로 이벤트는 발행한 스레드에서 동기적으로 처리되며, 이는 이벤트 처리 시간이 길어질 경우 요청 처리 시간도 증가하는 단점이 있다. 이를 해결하기 위해 @Async 어노테이션을 사용하여 이벤트를 비동기적으로 처리할 수 있으며, 이 경우 이벤트 처리가 메인 로직의 처리를 방해하지 않아 응답성이 향상된다.
• 이벤트 리스너가 여러 개인 경우, 동기 방식에서는 이벤트 리스너들이 순차적으로 실행되어 처리 시간이 길어질 수 있으나, 비동기 방식(@Async 사용)에서는 각 리스너가 독립적인 스레드에서 동시에 실행되어 처리 시간을 단축할 수 있지만, 실행 순서가 보장되지 않고 동시성 문제에 대한 고려가 필요하다.
• 스프링에서 동기식 이벤트 처리는 @Order 어노테이션을 사용하여 리스너의 호출 순서를 지정할 수 있으며, 이는 숫자가 낮을수록 높은 우선순위를 가지고 먼저 호출된다. 반면, 비동기식 이벤트 처리에서는 @Order가 적용되지 않아, CompletableFuture나 CountDownLatch 같은 동시성 유틸리티를 사용하거나 별도의 이벤트 관리 컴포넌트를 통해 순서를 관리해야 한다.
• 동기 방식은 이벤트 처리 순서가 자동으로 보장되어 코드 흐름을 쉽게 이해할 수 있고, 처리 시간이 짧고 순서가 중요한 경우에 적합하다. 비동기 방식은 시스템의 응답성을 향상시킬 수 있지만, 이벤트 처리 순서 보장이나 데이터 일관성 유지를 위해 추가적인 조치가 필요하다.

thumbnail
북마크
공유하기
신고하기
12분 분량
조회수 319
profile-imageStark
일 년 전
Copyright © 2025. Codenary All Rights Reserved.