개발/Java,Spring

우아한 테크세미나 - 스프링 배치

호돌맨 2019. 9. 27. 09:14

배치

사람과 상호작용이 없는 애플리케이션
시간이 얼마나 걸리든 해당 시스템에서 완결이 난다.

Web vs Batch

Web: 실시간 처리 / 상대적인 속도 / QA 용이성
Batch: 후속 처리 / 절대적인 속도 / QA 복잡성
배치는 QA분들이 테스트하기 힘들기 때문에 반드시 테스트 코드를 작성 해야한다.

Spring Batch와 Quartz

Quartz: 스케쥴링 프레임워크. ex: 매 시간 / 마지막 주 금요일에 실행
Quartz는 Spring Batch의 보안제 역할이지 대체제가 아니다.

배치 애플리케이션이 필요한 상황

  • 일정 주기로 실행되어야 할 때
  • 실시간 처리가 어려운 대량의 데이터를 처리 할 때
    대용량 데이터 처리가 절대적인 요구 사항

스프링 배치

  • 모든 데이터를 메모리에 쌓지 않는 방식이 기본
  • Paging, Cursor, pageSize, chunkSize만큼 commit

Job, Step, Tasklet

  • Job -> Step -> Tasklet, Chunk
  • Cunk방식의 사실 Tasklet의 구현체 (ChunkOrientedTasklet.java)

jobParameter

jobParameter는 Long, Date등 아주 기본적인 자바 타입만 지원하기 때문에
type검증, 타입 변환이 귀찮음

@Value("jobParameters[createDate]")
public void setCreateDate(String createDate) {
    // .. 
}

위와 같이 처리가능

@JobScope, @StepScope

애플리케이션 실행 후에도 동적으로 (reader, processor, writer) bean 생성이 가능하다.

  • JobScope: job이 실행될때 bean생성
  • StepScope: Step이 실행될때 bean생성

관리 도구들

  • Cron
  • Spring MVC + API Call
  • Spring Batch Admin
  • Quartz + Admin
  • CI Tools (Jenkins, Teamcity ..)

Jenkins와 Spring Batch

(Jenkins에서 Spring Batch 실행, 운영하는 방법 설명)

이후는 렌즈때문에 눈이 아파서 정리를 못했습니다.