📌 들어가기 앞서
본 글은 향로 선생님의 1. Spring Batch 가이드 - 배치 어플리케이션이란? 의 내용을 바탕으로 작성되었습니다.
내용을 효과적으로 읽기 위해서는 위 글을 우선적으로 읽어보시는 것을 권장드립니다.
본 글은 아래의 내용을 포함하고 있습니다.
• 배치 애플리케이션의 정의 및 Spring Batch 등장 배경
• Batch vs Scheduler(Quartz) 개념 비교
• 배치 애플리케이션 사례
원본 글에 대한 인용 및 요약은 음영 처리된 형태로 표시됩니다.
글의 작성 방향은 이 글을 참고해주시면 감사하겠습니다.
관련 시리즈
1. Spring Batch 5 가이드 - 배치 어플리케이션이란?
2. Spring Batch 5 가이드 - Batch Job 실행해보기
3. Spring Batch 5 가이드 - 메타테이블엿보기
4. Spring Batch 5 가이드 - Spring Batch Job Flow
5. Spring Batch 5 가이드 - Spring Batch Scope & Job Parameter
6. Spring Batch 5 가이드 - Chunk 지향 처리
7. Spring Batch 5 가이드 - ItemReader
8. Spring Batch 5 가이드 - ItemWriter
9. Spring Batch 5 가이드 - ItemProcessor
1. 배치 애플리케이션이란?
배치(Batch)는 일괄처리 란 뜻을 갖고 있습니다.
일반적인 웹 애플리케이션(Tomcat + Spring MVC)의 경우 큰 데이터를 읽고, 가공하고, 저장한다면 서버는 CPU 및 I/O 등의 자원을 소모하기 때문에 다른 요청을 처리하지 못 하게 됩니다.
또한 하루에 1번 또는 단발적으로 수행되는 이러한 요청을 API로 구성하는 것은 리소스적으로 낭비입니다.
이렇게 단발적으로 대용량 데이터를 처리하는 애플리케이션을 배치 애플리케이션이라고 합니다.
배치 애플리케이션의 경우 데이터가 너무 많아서 처리 중 실패가 나는 경우 실패한 지점부터 작업을 처리하거나, 같은 파라미티로 같은 함수를 실행할 경우 실행 여부에 따라 작업을 제어해야할 수도 있습니다.
즉, 비즈니스 로직 외에 부가적으로 신경써야 할 부분들이 많다는 것을 알 수 있습니다.
여기서 한가지 생각해볼것이, 웹 애플리케이션을 개발할 때 저희는 비지니스 로직에 최대한 집중할 수 있습니다.
그건 왜일까요? 바로 Spring MVC를 사용하기 때문입니다.
Spring MVC를 사용함으로 비지니스 로직에 최대한 집중할 수 있었습니다.
그럼 Spring에서 이런 배치 어플리케이션을 지원하는 모듈이 없을까요?
Spring 진영에선 Spring Batch가 있습니다.
배치 애플리케이션
- 사용자의 개입 없이 일괄적으로 작업을 처리하는 애플리케이션 (대체로 대용량 데이터를 처리)
- 서비스를 운영하는 관점에서 주기적으로 작업을 처리하기 위해 배치 애플리케이션 사용
배치 애플리케이션이 필요한 경우
- 필요한 데이터를 모아서 처리해야할 때 (e.g. 월별 거래 명세서 생성)
- 일부러 지연시켜 처리할 때 (e.g. 주문한 상품을 바로 배송 처리하지 않고, 일정 시간 뒤 처리)
- 자원을 효율적으로 활용해야할 때 (e.g. 트래픽이 적은 시간 대에 서버 리소스를 활용)
1.1. Spring Batch?
Spring Batch 프로젝트는 Accenture와 Spring Source의 공동 작업으로 2007년에 탄생했습니다.
Spring Batch는 Spring의 특성을 그대로 가져왔습니다.
그래서 DI, AOP, 서비스 추상화 등 Spring 프레임워크의 3대 요소를 모두 사용할 수 있으면서, Accenture의 Batch 노하우가 담긴 아키텍처를 사용할 수 있습니다.
Spring Batch 5 에서 지원하는 Reader & Writer는 아래와 같습니다.
- ItemReader: 데이터를 조회하는 모듈
- ItemWriter: 데이터를 저장하는 모듈
DataSource | 구분 | 설명 |
Database | JDBC | 페이징, 커서, 일괄 업데이트 등 사용 가능 |
Hibernate | 페이징, 커서 사용 가능 | |
JPA | 페이징 사용 가능 | |
File | Flat file | 지정한 구분자를 통해 파싱 지원 |
XML | XML 파싱 지원 | |
JSON | JSON 파싱 지원 |
- Flat file
- 플랫 파일은 한 개 또는 그 이상의 레코드가 포함된 특정 파일을 의미합니다.
- 일반 텍스트 형태로 저장되는 데이터로, 데이터 포맷이나 의미를 정의하는 메타데이터가 존재하지 않습니다.
세부적인 설명은 이후 ItemReader, ItemWriter 편에서 진행합니다.
1.2. Batch vs Quartz?
Quartz는 스케줄러의 역할이지, Batch 와 같이 대용량 데이터 배치 처리에 대한 기능을 지원하지 않습니다.
반대로 Batch 역시 Quartz의 다양한 스케줄 기능을 지원하지 않아서 보통은 Quartz + Batch를 조합해서 사용합니다.
정해진 스케줄마다 Quartz가 Spring Batch를 실행하는 구조라고 보시면 됩니다.
Batch와 Scheduler(Quartz)는 다른 개념입니다.
1.3. Batch 사례
1. 일매출 집계
2. ERP 연동
- 각 서비스의 데이터를 데이터 웨어하우스에 저장할 때 = ETL(Extract Transform Load)
- 아마존에서 연관 상품을 추천하는 데이터 모델을 만들 때
- 유저 리텐션, 엑티브 상태 등 마케팅에 참고할 데이터 지표를 집계할 때
- 메세지, 이메일, 푸시 등을 발송할 때
- 데이터를 마이그레이션할 때
- 실패한 트랜잭션을 재처리할 때
- 쿠폰, 포인트 등이 만료되었을 때 소진시키는 처리를 할 때
- 월말 또는 월초에 특징 데이터를 생성할 때 (e.g. 월별 거래 명세서)
'Spring Batch > Spring Batch 가이드' 카테고리의 다른 글
[Kotlin] 4. Spring Batch 5 가이드 - Spring Batch Job Flow (0) | 2024.06.23 |
---|---|
[Kotlin] 3. Spring Batch 5 가이드 - 메타테이블 엿보기 (0) | 2024.06.16 |
[Kotlin] 2. Spring Batch 5 가이드 - Batch Job 실행해보기 (0) | 2024.06.10 |
[Kotlin] 0. Spring Batch 5 가이드에 들어가기 앞서 (0) | 2024.06.06 |