|| Spring Data JDBC Composite PK를 쓰고 싶었을 뿐인데, Batch·Kotlin·Jackson·Gradle까지 함께 정리하게 된 이야기
안녕하세요. 네이버페이 카드 BE 팀 오규석 입니다. 네이버페이에서 카드결제 매입/정산 개발을 담당하고 있습니다.
이 글은 카드 매입/정산 배치 모듈을 Spring Boot 3.5.0 → 4.0.1로 업그레이드하면서 만났던 시행착오와 진행과정을 정리한 기록입니다.
용어 한 줄 정리이 글에서는 같은 대상을 두 가지로 부릅니다. Composite PK는 DB 관점에서 PK가 여러 컬럼으로 구성된 키를 가리키고, Composite ID는 이 PK를 Spring Data JDBC에서 표현한 ID 클래스 매핑을 가리킵니다. 즉 “DB의 Composite PK를 Spring Data JDBC의 Composite ID로 매핑하는 작업” 이라고 보시면 됩니다.먼저 요약하면
시작은 Spring Data JDBC의 Composite ID 적용이었습니다.
실제 작업은 Spring Boot 4 / Spring Framework 7 / Spring Batch 6 / Jackson 3 전환으로 확장되었습니다.
가장 큰 변경은 Batch 메타데이터 저장 방식, Job 실행 API, JobParameters 구조, listener·item 패키지 이동이었습니다.
운영 반영 전에는 Spring Batch v5에서 실패한 JobExecution 정리, Batch 메타 스키마 마이그레이션, DB 접근 정책 확인이 필요했습니다.
메이저 업그레이드는 “컴파일 통과”보다 “운영에서 기존과 동일하게 동작하는지”를 확인하는 작업에 가까웠습니다.
이 글의 전제
이 글은 실제 업그레이드 작업 당시 적용한 Spring Boot 4.0.1 버전 기준의 기록입니다.
이 글을 읽으시는 시점에는 더 최신 패치 버전이 있을 수 있고, Spring Boot 4 / Spring Batch 6은 패치 버전에 따라 세부적인 내용이 이 글과 차이가 있을 수 있습니다.
이 글에서 나오는 코드는 실제 프로젝트 코드가 아닌 상황을 단순화한 예제입니다.
또한 이 글은 일반적인 Spring WAS 서버가 아니라, Spring Batch Application 모듈 업그레이드이니 일반적인 Spring 서버 업그레이드시에는 추가 사항이 필요할 수 있습니다.
이 글은 다음 환경을 기준으로 작성했습니다. (화살표(→) 앞은 업그레이드 전, 뒤는 업그레이드 후 버전입니다)
Spring Boot 3.5.0 → 4.0.1 (Spring Framework 6.2.7 → 7.0.2)
Spring Batch 5.2.2 → 6.0.1
Spring Data JDBC 3.5.0 → 4.0.1
Kotlin 2.1 → 2.3
Java 21
ojdbc8 → ojdbc11
kotest 5.9.1 → 6.0.7
spring-boot-starter-aop → spring-boot-starter-aspectj
Oracle DB에 JDBC 기반 Spring Batch 메타데이터 저장
이 글을 읽는 법글이 다루는 범위가 꽤 넓습니다. 관심사에 따라 다음 순서로 골라 읽으셔도 됩니다.- Spring Data JDBC Composite ID가 뭔지 궁금하다면 → 1장- Spring Batch 6 마이그레이션이 주 목적이라면 → 3장- 운영 반영 체크리스트가 필요하다면 → 5장과 마지막 체크리스트참고한 공식 문서- Spring Boot Upgrading Guide — https://docs.spring.io/spring-boot/upgrading.html#upgrading.from-3x- Spring Boot 4.0 Migration Guide — https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide- Spring Boot Release Notes — https://github.com/spring-projects/spring-boot