-
[SpringBatch] 적용 예시, 구성 방안 간단 정리Back-end/TIL 2022. 4. 26. 09:31
스타트업 백엔드 인턴 업무 중 필요했던 스프링 배치에 대해 알게된 내용을 정리하는 글 입니다.
📌 배치 작업 적용 예시
예시1) 회원 탈퇴
- 상황 - 회원 탈퇴를 클릭했는데, 해당 회원과 관련된 데이터를 모두 삭제하려면 시간이 오래 걸리고, 삭제하면 안되는 데이터가 존재할 수 있기 때문에 회원 탈퇴 요청을 했을 때 주로 flag로 처리만 해두고 실제 데이터를 삭제하지는 않는다.
- 처리 - 정해진 날짜 이후에 배치로 자동 삭제되도록 한다.
예시2) 회원가입용 주민등록증 사본, 사업자등록증 사본 삭제
- 상황 - 회원가입 시 사용자가 등록한 위의 2가지 사진은 승인 후 바로 삭제하지 않고(사용자가 데이터 변경 요청을 할 수 있으니까) AWS S3에 저장해둔다.
- 처리 - 정해진 날짜 이후에 배치로 자동 삭제되도록 한다.
📌 배치를 위한 인프라 구성 방안
방안1. 배치 서버 별도 구성 with Clustering
방안2. 배치 서비스 별도 구성 (서버는 1개, gradle 멀티 모듈로 연결 포트를 다르게 함)
방안3. 하나의 서비스 내에 배치가 포함된 구조
- 현재 회사에서 사용하고 있는 방식이기는 하지만, 사용자와 데이터가 많아질 경우 가장 좋지 않은 구조이므로, 변화가 필요하다!
구성 방안 조언.
- 서비스 초반 → 서비스 내에 배치가 포함된 구조 + spring batch(스케쥴러가 포함되어 있음)
- 데이터 많아짐 → 배치 서버 별도 구성 + clustering + spring batch + quartz
(현재 회사에서는 방안3으로 구성되어 있어 해당 방안으로 배치를 추가하였다.)
📌 Spring Batch & Spring Quartz 간단 개념
- Quartz
- 스케쥴러 역할 (배치 처리 기능 X)
- Clustering, DB 값을 기준으로 동작 제어 기능 제공
- Spring Batch
- 대용량 데이터 배치 처리 기능 제공
- 높은 Spring 버전은 @Scheduled 어노테이션으로 Crontrigger와 같은 기능을 제공하기는 하지만, Quartz에서 제공하는 기능을 사용하기 위해 보통은 Spring Batch + Quartz의 조합을 사용함
'Back-end > TIL' 카테고리의 다른 글
Spring 개방 폐쇄의 원칙을 반영한 코드 리팩토링 (0) 2022.04.25 JPA의 Cross Join 개선하기 (0) 2022.04.20 API & Response Body 형태 구성 (0) 2022.04.13 [SpringBoot] JPA Entity와 데이터베이스 간 Enum 매핑 (0) 2022.04.12 [번외] 서비스 이용약관 처리 방식 (0) 2022.04.12