1. 개요
대용량 데이터를 처리하면서 BatchSession과 SqlSession을 통한 진행이 어떠한 차이점이 있는지 고민해보았다. 배치와 일반 대용량 데이터 처리를 어떠한 방향으로 바라보아야 할지 명확히 하기 위해 기록한다.
https://velog.io/@gyrbs22/Java-SqlSession-BatchSession%EC%9D%98-%EC%B0%A8%EC%9D%B4mybatis-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%97%B0%EA%B2%B0%ED%95%98%EB%A9%B0
이전에 작성한 글의 연장선이다.
2. 대용량 데이터 처리 - 배치와 일반 SqlSession의 차이
- BatchSession은 “대량의 데이터를 <효과적>으로 처리를 한다”에 있다. 이때 SqlSession과 방법적인 측면에서는 차이가 없을 수도 있겠으나(똑같은 대량 데이터 처리를 하고, chunk size를 나누어 처리한다는 등), 작동 방식을 정해줄 수 있다는 점(일괄/스케쥴러/항시 등)과 DB Connection pool 등 특정 목적의 대량 데이터를 효율적으로 처리할 수 있다는 점에서 SqlSession과 차이가 있다.
- 단순하게 말하면, 대량 데이터를 두 AOP를 통해 처리할 수 있지만 BatchSession에서 아무런 목적없이 단건/다건의 데이터를 처리하는 것은 의미가 없다.
- 또한 Batch는 정보성 데이터로 관리한다. 본 실무의 경우, 배치 진행 전 배치ID의 존재여부를 확인하며, 관리 대상에 포함되지 않을 경우 배치를 진행하지 않거나 일반 SqlSession을 통해 처리해야 한다.
- BatchSession AOP을 운용하지 않는 이유는 이렇게 방법론적으로 보았을때는 크게 차이가 없기 때문에 제거한 것으로 보이고, 다만 별도의 BatchManager와 Spring batch를 통한 process() 구현 등 프레임워크의 이점을 최대한 활용하기 위해 별도의 방법으로 배치를 구성한 것처럼 보였다.