-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from sipe-team/sangwon
add week1 study
- Loading branch information
Showing
2 changed files
with
87 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
### Spring Batch란? | ||
|
||
Spring Batch는 대규모 데이터 처리를 위한 **배치 처리 프레임워크**입니다. 데이터 읽기, 처리, 쓰기 같은 반복적인 배치 작업을 효율적으로 설계하고 실행할 수 있도록 다양한 기능과 유연한 API를 제공합니다. 대표적인 특징은 다음과 같습니다. | ||
|
||
- **대규모 데이터 처리**: 페이징, 청크 기반 처리 지원 | ||
- **트랜잭션 관리**: 데이터 무결성 보장 | ||
- **리트라이, 재시작, 실패 처리**: 배치 작업 중 오류 발생 시 복구 가능 | ||
- **다양한 데이터 소스 연동**: 데이터베이스, 파일, API 등과의 통합 가능 | ||
|
||
### Chunk 방식과 Tasklet 방식 | ||
|
||
### 1. **Chunk 방식** | ||
|
||
- **개념**: 데이터를 일정 크기(청크)로 나눠 읽고, 처리하고, 쓴다. | ||
- **구조**: `ItemReader`, `ItemProcessor`, `ItemWriter`로 구성 | ||
- `ItemReader`: 데이터를 읽는 역할 | ||
- `ItemProcessor`: 데이터를 가공하는 역할 (선택 사항) | ||
- `ItemWriter`: 데이터를 저장하거나 출력하는 역할 | ||
- **작동 방식**: | ||
1. 지정된 청크 크기만큼 데이터를 읽는다. | ||
2. 데이터를 한 번에 처리한다. | ||
3. 청크 단위로 데이터 저장(쓰기) 작업을 수행한다. | ||
4. 성공적으로 완료된 청크는 커밋되고, 오류 발생 시 롤백된다. | ||
- **트랜잭션 처리**: | ||
- 청크 단위로 트랜잭션이 관리된다. | ||
- 예를 들어, 청크 크기가 10일 경우, 한 번에 10개의 데이터 처리 후 커밋한다. | ||
- 처리 중 오류 발생 시 해당 청크는 롤백되고 다시 처리된다. | ||
- 데이터 무결성을 보장하면서도 효율적인 처리를 가능하게 한다. | ||
- **장점**: | ||
- 대량 데이터 처리에 적합 | ||
- 트랜잭션 처리와 오류 복구가 간단 | ||
- 비즈니스 로직이 분리되어 있어 유지보수 용이 | ||
- **단점**: | ||
- 작은 작업이나 간단한 논리에 과도한 구조를 요구할 수 있음 | ||
|
||
### 2. **Tasklet 방식** | ||
|
||
- **개념**: 단일 작업을 명령형으로 정의하여 실행 | ||
- **구조**: `Tasklet` 인터페이스 구현체를 통해 처리 로직을 정의 | ||
- `Tasklet`의 `execute()` 메서드를 구현하여 원하는 작업 수행 | ||
- 작업이 성공적으로 완료되면 `RepeatStatus.FINISHED` 반환 | ||
- **작동 방식**: | ||
- 명령형으로 필요한 로직을 한 번에 작성 및 실행 | ||
- 반복 처리가 필요하면 반복 조건을 명시적으로 설정 | ||
- **트랜잭션 처리**: | ||
- 작업 단위 전체가 하나의 트랜잭션으로 처리된다. | ||
- 트랜잭션 경계를 개발자가 명시적으로 정의할 수 있다. | ||
- 작업 중 오류가 발생하면 전체 작업이 롤백된다. | ||
- **장점**: | ||
- 간단한 작업(예: 파일 삭제, 로그 초기화 등)에 적합 | ||
- 사용자 정의 로직 구현이 유연 | ||
- **단점**: | ||
- 복잡한 작업에서는 로직 관리가 어려워질 수 있음 | ||
- 청크 방식 대비 구조적으로 단순하나 대량 데이터 처리에 적합하지 않음 |