Feign 코드 분석과 서버 성능 개선
토스페이먼츠의 서버 모니터링 시스템에서 성능 저하 문제를 발견한 후, 이를 해결하기 위한 과정을 공유한 글.
문제 발견: 약 15,000건의 데이터를 10분 내외로 처리해야 하는 요구사항에 대응하기 위해 다중 스레드를 활용했으나, 동시성 문제가 발생. 이 문제는 HTTP 클라이언트 인터페이스인 Feign의 내부 구조와 관련이 있었음.
문제 이해: 로그 분석을 통해 문제의 원인을 파악. Feign 클라이언트를 사용한 API 호출이 많아지면서 여러 스레드가 공유자원에 동시에 접근하게 되었고, 이로 인해 서버 성능이 저하되었음.
Feign 설정 분석: Feign이 기본적으로 Java Standard Library의 HttpURLConnection 클래스를 사용하고 있었으며, 이 클래스가 내부적으로 사용하는 HTTP 클라이언트에서 동시성 문제가 발생할 수 있음을 발견.
문제 해결 및 성능 개선: 문제 해결을 위해 두 가지 방법을 고려. 첫 번째는 Feign 클라이언트가 사용하는 HTTP 클라이언트의 구현체를 변경하는 것이고, 두 번째는 JDK 버전을 17 이상으로 업그레이드하는 것. 결과적으로, 동시성 문제를 해결하고 API 처리량이 최소 8배 이상 향상되었음.
