스프링 배치를 쓸 때 넣어야 하는 설정 파일 내용이 있다.
?rewriteBatchedStatements=true
spring.jpa.properties.hibernate.default_batch_fetch_size=100
처음에는 이 두가지를 넣지 않았는데도
JDBC Template의 batchUpdate()가 작동해서 넣지 않아도 되는 줄 알았다.
배포 서버에 데이터 5000건을 넣는데 3분이 걸렸다.
데이터 5천건을 카카오맵 API에 파라미터로 보내서 전처리를 하지만, 배치치곤 느렸다.
저 설정파일을 넣어주니.
시간은 1분도 걸리지 않았다.
그런데 DB를 보니 데이터가 하나도 없었다!
지금 로직상 데이터에는 복합 PK가 중복되는 것들이 있다.
배치를 사용하니 들어가지 않았던 것

이 예외가 문제인가 싶어서 try catch로 예외를 잡고서 아무런 작업도 하지 않도록 했다.
예외는 잡혔는데 데이터가 DB에 또 들어가지 않았다.
나는 이게 예외가 발생해서 JDBC Template가 롤백을 시킨 것이 아닐까? 하는 의심이 들었다.
jdbcTemplate batchUpdate can't capture the exception and rollback all rows
이런 유사한 문제를 격는 사례가 스택오버플로우에도 올라왔다.
해결방법을 찾기 어려워서 클로드에게 물어보니 INSERT IGNORE를 쓰면 된다고 한다.
중복된 데이터가 있으면 이를 넣지 않는 방식이다.
어차피 중복 데이터가 있으면 이걸 넣지 않는 게 우리 비즈니스 로직이라서 INSERT IGNORE를 쓰고 따로 어떤 처리를 해주지 않아도 됐다.

처음 들어가는 ID가 1만대번으로 시작하는 거보니 계속 롤백이 됐던 것으로 보인다.
어떻게 처리할지 잘 몰라서... 사실 클로드에게 물어본거지만 좀더 정확한 방법을 찾고싶다..