목록 보기
똑같은 코드인데 왜 안 돼? Spring JDBC 컨버터 미궁 탈출기
백엔드

똑같은 코드인데 왜 안 돼? Spring JDBC 컨버터 미궁 탈출기

네이버 페이
네이버 페이
2025년 8월 5일

두줄요약

Spring Data JDBC에서 LocalDate 컨버터가 기대와 다르게 동작하는 이유를 JDBC 내부 처리 순서와 Oracle 드라이버 차이로 분석했습니다. 이를 피하기 위해 커스텀 래퍼 타입과 양방향 컨버터로 저장 형식을 제어하는 방법을 정리했습니다.

문제 상황

  • Spring Data JDBC에서 LocalDate 커스텀 컨버터가 기대와 다르게 동작하는 현상
  • 동일 패턴의 LocalDateTime은 동작하지만 LocalDate는 Oracle 저장 형식이 달라지는 문제

원인 분석

  • Spring JDBC 내부의 StatementCreatorUtils.setParameterValue()가 Java 타입별 특별 처리 경로를 먼저 적용
  • LocalDatesetDate(), LocalDateTimesetTimestamp()로 전달되어 JDBC 드라이버 동작이 달라짐
  • Oracle 드라이버의 DATETIMESTAMP에 대한 컬럼 변환 관대함 차이

해결 방법

  • LocalDate를 직접 쓰지 않고 CustomLocalDate 래퍼 타입으로 감싸기
  • 커스텀 타입에 대해 읽기/쓰기 컨버터를 쌍으로 등록해 문자열 저장 형식 제어
  • Spring Data JDBC의 자동 매핑과 타입 안정성을 함께 유지

댓글 0

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

댓글을 불러오는 중...