..
FeignClient: 리턴 타입이 void인 서비스의 비동기 처리
1. 궁금증의 시작
OpenFeign 서비스를 이용할 때 응답 결과가 딱히 필요 없는 작업(void)이라면, 굳이 응답을 기다리지 않고 비동기로 던져버릴 수 없을까?
2. 핵심 고찰
Feign 인터페이스에서 메소드 리턴 타입을 void로 선언하는 것만으로는 비동기 처리가 되지 않습니다. 기본적으로는 “응답이 올 때까지(성취감 없는 빈 응답이라도) 대기”하게 됩니다.
- 비동기화 방법: 스프링의
@Async어노테이션을 함께 사용하거나,CompletableFuture등을 활용하여 별도의 스레드에서 Feign을 호출하도록 감싸주어야 진정한 논블로킹 처리가 가능합니다. - 에러 핸들링: 비동기로 던졌을 때 발생하는 예외는 호출한 쪽에서 즉시 알기 어렵습니다. 따라서 호출 성공 여부보다는 “일단 시도했다”는 것에 의미가 있는 부가적인 작업에 적합한 전략입니다.
단순히 void로 리턴하는 것이 성능 최적화의 전부는 아닙니다. 필요에 따라 비동기 전담 스레드 풀을 활용하여 시스템의 응답 속도를 개선해 보시기 바랍니다.