WebClient 도입 이유
- 도입 배경
MOMO 플랫폼에서 도메인 간 통신과 외부 API 연동(토스페이먼츠, FCM 등)을 위한 HTTP 클라이언트가 필요했습니다. 사용자 증가에 따른 성능 확장성과 동시 요청 처리 능력 향상이 필요했고, RestTemplate은 Spring 5.0부터 유지보수 모드에 진입해 대안이 필요했습니다.
- 선택지
- RestTemplate
- 동기식 프로그래밍 모델로 이해하기 쉬움
- 블로킹 I/O로 각 요청이 스레드를 점유하여 확장성 제한
- Spring 5.0부터 유지보수 모드 진입
- Apache HttpClient
- 강력한 기능과 세밀한 설정 옵션
- 복잡한 초기 설정과 별도의 Spring 통합 작업 필요
- WebClient
- Spring WebFlux와 완벽한 통합
- 논블로킹 I/O 기반으로 높은 동시성 처리
- Netty 기반 고성능 커넥션 관리
- 유연한 필터 체인과 재시도 메커니즘
- 최종 결정
RestTemplate은 확장성 제한과 유지보수 모드 진입으로 제외했습니다. Apache HttpClient는 프로젝트 규모 대비 과도한 복잡성으로 제외했습니다. 따라서 WebClient로 결정했습니다.