아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
네이버 페이 favicon네이버 페이

Spring JDBC 컨버터, 왜 안 될까? 래퍼 클래스로 해결!

by DD
2025-08-05
11개월 전
조회수 10

Spring Data JDBC에서 커스텀 컨버터를 사용했지만, LocalDate 변환이 예상과 다르게 동작함

JDBC 드라이버의 타입 처리 우선순위와 Oracle JDBC의 관대한 변환 정책이 문제의 원인

CustomLocalDate 래퍼 클래스를 통해 타입 안정성을 유지하면서 문제 해결

Spring JDBC 동작 원리: 타입 변환의 숨겨진 비밀

Spring JDBC는 `instanceof` 연산자를 사용하여 Java 타입을 확인하고, 타입에 따라 `setDate`, `setTimestamp` 등의 메서드를 호출한다. 구체적으로, LocalDate는 `setDate`로 처리되어 Oracle JDBC 드라이버의 DATE 타입 변환을 거친다. 따라서, 커스텀 컨버터가 무시되는 경우가 발생한다.

Oracle JDBC 드라이버의 관대함: TIMESTAMP vs DATE

Oracle JDBC 드라이버는 TIMESTAMP 타입에 대해 관대하게 문자열 변환을 허용한다. 반면, DATE 타입은 엄격하게 처리하여 타입 불일치 시 오류를 발생시킨다. 따라서, LocalDateTime은 자동 변환되어 정상 동작하는 것처럼 보였지만, LocalDate는 오류가 발생했다.

CustomLocalDate 래퍼 클래스: 깔끔한 해결책

CustomLocalDate 래퍼 클래스를 사용하면 Spring JDBC의 특별 처리를 우회할 수 있다. 따라서, 커스텀 컨버터가 정상적으로 동작하여 타입 안정성을 확보할 수 있다. 결과적으로, Spring Data JDBC의 기능을 유지하면서 데이터베이스 저장 형식을 제어할 수 있다.

똑같은 코드인데 왜 안 돼? Spring JDBC 컨버터 미궁 탈출기
고급
아키텍처
Spring Data JDBC
JDBC
Oracle
Java
SQL
Backend
Data
원문 읽기
원문 읽기

관련 추천 글

여기어때, AI로 Oracle DB를 6주 만에 Aurora MySQL로 마이그레이션 성공!

AWS 로고

소프트웨어 혁신의 역사, 어떤 기술이 세상을 바꿨을까?

랍스타즈 로고

미국 개발자 채용 시장, 지금 가장 핫한 기술은?

레딧 로고

20년 레거시를 혁신한 토스페이먼츠의 기술 여정

토스 로고

주소 정제, 단독 건물 정복! 행정구역 변경에도 끄떡없다!

컬리 로고

JFR(Java Flight Recording)으로 자바(Java) 성능 병목을 찾아내고 5배 향상시키다!

레딧 로고
네이버 페이 favicon네이버 페이
고급
아키텍처
Spring Data JDBC
JDBC
Oracle
Java
SQL
Backend
Data

관련 추천 글

여기어때, AI로 Oracle DB를 6주 만에 Aurora MySQL로 마이그레이션 성공!

AWS 로고

소프트웨어 혁신의 역사, 어떤 기술이 세상을 바꿨을까?

랍스타즈 로고

미국 개발자 채용 시장, 지금 가장 핫한 기술은?

레딧 로고

댓글 0

첫 번째 댓글을 남겨보세요!