YoungSoo

왜 Spring Batch를 사용해야할까? 본문

BE/Spring

왜 Spring Batch를 사용해야할까?

YoungSooSoo 2023. 4. 10. 17:32

Spring Batch를 사용하게 된 이유

처음에 테스트를 먼저 작성하며 Spring Data JPA의 Save 메서드를 사용해 데이터를 모두 저장해주었습니다. 하지만 데이터를 저장하는 속도가 느리고, 많은 트랜잭션 비용과 데이터베이스 자원의 낭비를 초래할 수 있다는 것을 알게되었습니다. 그래서 SaveAll 메서드를 사용해 한 번의 호출로 일괄 저장할 수 있도록 변경해주었습니다. 이후에 API를 만들고 서비스에서 메서드를 작성해 운영하는 과정에서 SaveAll 메서드를 사용했을 때 오류가 발생했고, 메서드가 처음부터 다시 시작하는 것을 발견했습니다. 이러한 문제를 해결해주기 위해 Spring Batch를 도입해주었습니다.

 

Spring Batch를 적용한 과정

필요한 OpenAPI 데이터는 일정 시간마다 최신 정보로 업데이트 됩니다개발 초기에는 대기 정보와 날씨 정보를 보여주기 위해 클라이언트 서버에서 직접 OpenAPI를 호출하였으나 API 호출 오류와 반복되는 데이터 전처리로 인해 이를 개선할 필요성을 느꼈고, 서버에서 OpenAPI를 미리 호출해 전처리 후 데이터베이스에 저장하여 필요한 데이터만을 API 형태로 클라이언트에 제공하는 것이 더 낫다고 판단했습니다.

 

대량의 데이터를 단순하게 읽고, 가공하고, 저장한다면 해당 서버는 순식간에 자원의 한계에 다다라 다른 요청들을 처리하지 못하게 됩니다또한, 이 저장 기능은 앞서 말씀드린 것처럼 하루에 몇 번만 수행되면 됩니다추가적으로 데이터 저장 과정에서 중간에 실패할 경우 처음부터 다시 저장해야 할 수도 있습니다이렇듯 단발성으로 대용량의 데이터를 처리하기 위해서는 Spring Batch를 사용하는 것이 자원을 효율적으로 활용하고, 예외 처리를 하는 데 있어서 가장 적합하다고 생각했습니다그리고 일정 주기마다 업데이트 되는 점을 고려하여 Spring Shceduler를 사용하였고사진과 같이 OpenAPI 데이터가 갱신될 때만 Spring Batch를 실행하여 OpenAPI의 데이터를 읽고, 가공하고, 저장하는 단계를 구성했습니다.

결과적으로

Batch를 통해 대용량의 데이터를 처리하는 동안 실패한 경우 롤백이 가능하며, 실패한 데이터를 추적하고 이를 처리할 수 있는 방법을 제공하기 때문에 saveAll() 대신 Batch를 사용하게 되었습니다. 또한 문제가 발생하면 원인을 Logging을 통해 원인을 파악하고 트러블 슈팅을 진행하고 있습니다.

 

'BE > Spring' 카테고리의 다른 글

[Spring JPA] Merge와 Save의 차이  (0) 2023.05.11
Spring-Data-Jpa의 saveAll()과 Dirty Checking  (0) 2023.04.10
Spring Batch  (0) 2023.04.03
Spring의 DB  (0) 2023.03.23
Spring?  (0) 2023.03.22