webclient 2

Spring WebClient block() vs subscribe(): 계층별 사용법 정리

Spring WebFlux나 WebClient를 처음 사용할 때 가장 많이 고민하게 되는 포인트 중 하나는 바로 block()과 subscribe() 중 무엇을 써야 하는가이다. 특히 테스트 코드, 서비스 코드, 컨트롤러, API 응답부 등 **계층마다 요구되는 특성이 다르다.이번 포스트에서는 WebClient를 사용하는 각 계층에서의 전략적 선택 기준을 정리해본다.기본 개념: block() vs subscribe()메서드 설명 특징block()Mono/Flux의 결과를 동기적으로 대기하여 반환블로킹 (스레드 점유), 흐름 제어 쉬움subscribe()Mono/Flux를 비동기적으로 실행하고 콜백으로 결과를 처리논블로킹, 백그라운드 실행, 흐름 관리 어려움 계층별 전략 정리계층 사용 추천 이유✅ 단위 테..

Spring 2025.06.18

Spring 테스트가 끝나지 않던 이유: subscribe(), @Value, MockWebServer

배경최근 프로젝트에서 Slack 알림 기능을 WebClient로 구현하고, 그에 대한 단위 테스트를 작성했다.Slack API를 직접 호출하지 않기 위해 MockWebServer를 활용했고,비즈니스 로직에서는 Spring의 @Value를 이용해 외부 설정값을 주입했다.@Value("${slack.enabled:true}")private boolean slackEnabled;그러나 테스트를 실행하자 문제가 발생했다.✅ 테스트는 통과하지 못하고 무한히 실행 중인 상태로 멈춰 있었다.✅ GitHub Actions에서는 6시간 제한 초과로 build가 자동 취소되었다.✅ 로그에는 특별한 에러도 없고, WebClient 요청도 정상처럼 보였다. 도대체 왜 테스트가 끝나지 않았던 걸까?원인SlackNotifica..