목록 보기
우리의 애플리케이션에서 PreparedStatement는 어떻게 동작하고 있는가
백엔드

우리의 애플리케이션에서 PreparedStatement는 어떻게 동작하고 있는가

카카오페이
카카오페이
2025년 5월 13일

두줄요약

PreparedStatement가 JDBC, HikariCP, Hibernate, MySQL Connector/J에서 어떻게 동작하는지 내부 구현까지 살펴본 글입니다. 설정별 성능 차이와 운영 시 주의할 점도 함께 정리했습니다.

핵심 내용

  • JDBC의 Statement와 PreparedStatement 차이, MySQL의 PREPARE 동작 방식 정리
  • Hibernate, HikariCP, MySQL Connector/J 각 계층에서 PreparedStatement 설정과 내부 구현 흐름 분석
  • useServerPrepStmts, cachePrepStmts, prepStmtCacheSize, prepStmtCacheSqlLimit의 역할과 적용 범위 설명

성능/운영 포인트

  • 서버 측 PREPARE와 JDBC 드라이버 캐시 조합에 따른 실행 시간 비교
  • 단순 쿼리 테스트에서는 큰 차이가 적었고, useServerPrepStmts=true & cachePrepStmts=false 조합이 가장 비효율적
  • MySQL의 max_prepared_stmt_count 한도와 Connection 당 캐시 방식에 대한 주의 필요

주의할 점

  • Hibernate의 동적 insert/update는 쿼리 다양성을 늘려 PreparedStatement 캐시 효율을 낮출 수 있음
  • HikariCP는 PreparedStatement 캐시를 직접 관리하지 않고 JDBC 드라이버에 위임
  • 내부 구현은 변경될 수 있어 코드 의존은 지양 필요

다음 읽기

#HikariCP 주제를 이어서 읽기

배포 직후 발생하는 응답 지연을 해결하기 위한 여정 (feat. JVM 웜업)

배포 직후 발생하던 DB Connection Timeout과 응답 지연의 원인을 분석했습니다. JVM 웜업과 startupProbe 적용으로 초기 지연 문제를 해결했습니다.

카카오페이
카카오페이
백엔드

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...