Spring JDBC 성능 문제, 네트워크 분석으로 파악하기
강민주 토스 · 토스 기술 블로그
AI 핵심 요약
Spring Batch에서 JDBC `batchUpdate()`로 정산 데이터를 대량 삽입할 때 지연이 발생했지만, 쿼리 로그만으로는 원인을 찾지 못했다. Wireshark로 TCP 패킷을 분석해 insert 전에 반복되는 조회를 발견했고, Spring JDBC 코드를 추적해 null 파라미터의 SQL 타입을 알 수 없을 때 Oracle 드라이버가 `ParameterMetaData`를 얻기 위한 쿼리를 실행한다는 점을 확인했다. 전역 설정을 바꾸는 대신 null이 가능한 파라미터에 SQL 타입을 명시해 추가 조회를 막았으며, 약 100만 건 처리 시간이 18분에서 2분으로 줄었다. 이 사례는 네트워크 분석과 JDBC·드라이버 구현 확인이 로그만으로 드러나지 않는 성능 병목을 찾는 데 유용하며, 드라이버별 동작 차이도 고려해야 함을 보여준다.
- 애플리케이션 로그에 원인이 보이지 않을 때는 Wireshark로 TCP 스트림을 확인해 실제 데이터베이스 통신을 살펴볼 수 있다.
- JDBC 파라미터에 null을 전달하면 SQL 타입이 불명확할 수 있어 드라이버가 ParameterMetaData를 조회할 수 있다.
- null이 가능한 파라미터에는 `MapSqlParameterSource.addValue()` 등에 SQL 타입을 명시하면 불필요한 메타데이터 조회를 피할 수 있다.
- `spring.jdbc.getParameterType.ignore` 설정은 전역 동작에 영향을 줄 수 있으므로, 적용 범위와 데이터베이스별 동작을 고려해 선택해야 한다.
- JDBC의 동작은 데이터베이스 드라이버마다 다르므로, 같은 코드라도 Oracle과 MySQL에서 성능 특성이 달라질 수 있다.
소개
토스페이먼츠 정산 플랫폼에서 많은 양의 정산 데이터 처리 과정에서 생긴 지연 이슈를 처리한 방법을 소개해요.
비슷한 학습 자료
컨퍼런스 if kakao
Spring Batch 애플리케이션 성능 향상을 위한 주요 팁 (김남윤, Yun)
컨퍼런스 if kakao
[2023.07.18. 제2회 kakao tech meet 발표] 배치 애플리케이션이 어느 구간에서 쉽게 느려지는지 파악하고, 이를 해결하기 위한 방법에 대해 다룹니다. 특히, IO 작업이 처리 시간에 큰 영향을 주는데, 이를 해결하기 위해 병렬 처리 및 벌크 IO 처리를 활용하여 IO 작업의 효율성을 높이는 성능 최적화 방법에 대해 다루게 됩니다. 배치 애플리케이션 개발자, 대량 처리에 관심있는 분이 듣길 추천합니다. 발표자: @yun.cheese(김남윤) 카카오페이 정산팀 Yun 입니다. Yun Blog를 운영하고 있으며, 서버 개발자로서 좋은 코드 설계와 아키텍처에 관심이 많습니다. #springbatch #대량처리성능최적화 💬 발표자 인터뷰: https://tech.kakao.com/2023/08/01/techmeet-spring-batch/ ✨ 카카오테크 페이스북: https://www.facebook.com/kakaotech ✨ 카카오테크 톡채널: http://pf...
백엔드 데이터베이스
문서 김성두
Feign 코드 분석과 서버 성능 개선
문서 유형환