목록 보기
우리의 애플리케이션에서 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 드라이버에 위임
  • 내부 구현은 변경될 수 있어 코드 의존은 지양 필요

댓글 0

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

댓글을 불러오는 중...