본문으로 이동
Spring JDBC 성능 문제, 네트워크 분석으로 파악하기
문서

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

[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...

백엔드 데이터베이스

문서 이세찬

토스페이먼츠 데이터 엔지니어링 팀이 50억 건의 데이터를 1초 이내로 조회하는 시스템을 구축한 이야기를 들려드려요.

백엔드 데이터베이스

문서 강병수

이번 글에서 토스증권 실시간 데이터 프로세싱에 활용 중인 ksqlDB에 대해서 소개하려고 합니다.

백엔드 데이터베이스

문서 김성두

Feign과 다중 스레드를 사용하는 과정에서 생긴 문제를 이해하고 성능 개선까지 한 경험을 공유해요.

백엔드 프로그래밍 언어

문서 김동호

DB Connection과 Garbage Collector의 관계를 중심으로 mysql-connector-j 사용 시 발생할 수 있는 메모리 누수를 탐지하고 해결한 경험을 공유합니다.

백엔드 데이터베이스

문서 유형환

애플리케이션, DB 모두 행복한 BULK 처리

백엔드 데이터베이스