Spring Batch (10.21) - 내부클래스, Chunk

yesang·2024년 10월 21일

Spring Batch

목록 보기
2/2

내부클래스

내부 클래스는 한 클래스 내부에 정의된 클래스, 이 클래스는 외부 클래스와 강한 연관성을 가지며, 논리적으로 그룹화된 기능을 제공할 수 있다.

  • 패키지 구조를 간소화
  • 외부 클래스의 멤버에 쉽게 접근
  • 특정 기능이 다른 클래스와 긴밀히 연결된 경우, 코드의 가독성과 유지보수성이 높아짐

1_000_000_000과 같은 언더스코어(_)를 사용한 숫자 표현은 큰 숫자를 더 읽기 쉽게 만듦

long 타입일 때 1_000_000_000 와 같이 사용하여도 정수 타입으로 사용가능


Spring Batch의 Job과 Step 구성

Spring Batch는 배치 작업을 Job과 Step으로 나누어 관리

  • Job : 전체 배치 작업을 정의하며 여러 Step으로 구성
  • Step : 각 Step은 하나의 단위 작업을 의미, Tasklet 또는 Item 처리기로 구성

Step의 구성 요소

  1. ItemReader: 데이터를 읽어오는 역할 (DB, 파일, API 등에서 데이터 읽기)
  2. ItemProcessor: 데이터를 변환하거나 가공
  3. ItemWriter: 처리된 데이터를 저장 (DB, 파일 등에 저장)

Chunk 기반 처리

  • chunk는 데이터를 여러 개의 작은 단위로 나누어 처리하는 방식 / 예를 들어, 1만 개의 데이터를 처리해야 한다면 한 번에 100개씩 (chunk size) 나누어 처리

chunk(청크) 동작 흐름
1. 리더 : 한 번에 100개 데이터를 읽음
2. 프로세서 : 100개 데이터를 변환 또는 가공
3. 라이터 : 처리된 100개 데이터를 DB에 저장

장점

  • 메모리 효율적 : 한 번에 모든 데이터를 메모리에 로딩하지 않는다.
  • 중간에 실패할 경우, 이전 처리된 청크까지는 저장되어 작업을 재개할 수 있다.

page size와 Chunk size

page size와 chunk size를 동일하게 설정하는 것이 좋다.

  • page size : 한 번에 읽어오는 데이터 수
  • chunk size : 한 번에 처리하는 데이터의 단위

page size와 chunk size가 다르면 메모리와 성능의 최적화가 어려워지기에 chunk size만큼 데이터를 처리하려고 할 때 추가적인 메모리 로드가 발생할 수 있기 때문

Foreign key 제약 조건과 문제

FK는 두 테이블 간의 참조 관계를 설정 (Order 테이블의 주문 항목(OrderItem)은 주문(Order)의 ID를 Foreign Key로 참조

Foreign Key 제약 조건
-> FK로 연결된 데이터가 있는 경우, 참조된 데이터가 삭제되지 않는다. (주문 항목이 존재할 때 주문을 삭제할 수 없다.)

제약 조건 제거의 필요성
정산 작업에서는 제약 조건을 제거하는 것이 좋다.

  • 대량 데이터 처리 시 FK가 있으면 성능 저하가 발생할 수 있다.
  • 정산 테이블은 클라이언트가 수정할 수 있어야 하므로 FK 제약이 불필요

format (..., 0) 금액은 천단위(1,000)로 표시 / 1,000,000 같은 형식

0개의 댓글