Feign 코드 분석과 서버 성능 개선
김성두 토스 · 토스 기술 블로그
AI 핵심 요약
약 15,000건의 데이터를 다중 스레드로 처리하던 중 서버가 느려지는 문제가 발생했고, 스레드 덤프의 `locked` 표시를 따라 원인을 조사했습니다. Feign의 기본 클라이언트가 `HttpURLConnection`을 사용하고, JDK 11의 내부 `KeepAliveCache`가 정적 공유 자원인 데다 `synchronized`로 보호되어 여러 스레드가 대기하는 것이 원인이었습니다. Spring Boot 2.x에서 Apache HttpClient 5 의존성만 추가하고 활성화 설정을 빠뜨린 점을 바로잡거나 JDK 17 이상으로 업그레이드해 해결할 수 있었습니다. 개선 후 API 처리량은 최소 8배 향상됐고, 약 10분 걸리던 작업이 1분대로 줄어 Feign의 실제 런타임 구현과 JDK 내부 동작을 확인하는 중요성을 얻었습니다.
- Feign 의존성을 추가하는 것만으로 원하는 HTTP 클라이언트가 선택되는지 가정하지 말고, 실제 런타임 구현체를 확인하세요.
- Spring Boot 2.x에서 Feign과 Apache HttpClient 5를 함께 쓸 때는 `feign.httpclient.hc5.enabled: true` 설정이 필요합니다.
- 스레드 덤프의 `locked` 표시를 단서로 삼아 호출 경로를 추적하면 공유 자원과 동기화 지점을 찾는 데 도움이 됩니다.
- JDK 17 이상으로 업그레이드하거나 Feign의 HTTP 클라이언트를 교체하는 방식으로 문제를 해결할 수 있습니다.
소개
Feign과 다중 스레드를 사용하는 과정에서 생긴 문제를 이해하고 성능 개선까지 한 경험을 공유해요.
비슷한 학습 자료
컨퍼런스 SLASH
토스ㅣSLASH 23 - 프로파일러로 시스템 성능 향상시키기
컨퍼런스 SLASH
서비스 운영 과정 속 여러 장애들, 어떻게 그 원인을 빠르고 정확하게 파악할 수 있을까요? 상황에 맞는 다양한 ‘프로파일러’로 문제 원인을 파악하고 또 해결한 과정을 소개합니다. 조유성 / 토스 Frontend Developer 발표 자료 👉🏻 https://bit.ly/42ypWpE 토스 개발자 컨퍼런스 SLASH에 대한 자세한 정보는 👉🏻 https://bit.ly/43kW3tO 컨퍼런스 및 세션에 대한 문의는 👉🏻 slash@toss.im 토스에 합류하고 싶다면 👉🏻 https://toss.im/career/jobs #profiler #서비스성능 #serverdeveloper #토스 #개발자컨퍼런스 #SLASH *본 발표자료의 저작권은 연사에 있으며, 저작권자의 사전 서면 동의 없이 자료의 일부 또는 전부를 이용하거나 배포할 수 없습니다. *또한 해당 자료를 복제하여 SLASH 행사 홈페이지를 제외한 온라인상에 게재하는 행위는 연사가 동의한 저작...
백엔드 데브옵스 · 인프라 로드맵 2개에 담김
문서 정진우/문현경