Top

스프링 배치 완벽 가이드 2/e [클라우드 환경에서 활용하는 모던 배치 처리]

  • 원서명Definitive Guide to Spring Batch: Modern Finite Batch Processing in the Cloud, Second Edition (ISBN 9781484237236)
  • 지은이마이클 미넬라(Michael T. Minella)
  • 옮긴이서경석, 김성윤, 이승룡
  • ISBN : 9791161755168
  • 40,000원
  • 2021년 04월 30일 펴냄
  • 페이퍼백 | 692쪽 | 188*235mm
  • 시리즈 : 오픈소스 프로그래밍

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/definitive-spring-batch

요약

스프링 배치의 "Hello, World!"부터 최근 플랫폼의 발전에 따른 클라우드 네이티브 기술을 활용한 배치까지 폭넓은 스프링 배치 활용 방법과 이와 관련된 유용한 내용을 다룬다. 또한 스프링 프레임워크 5와 스프링 부트 2를 기반으로 제공되는 배치 예제는 책의 내용을 쉽게 이해할 수 있도록 돕고, 미션 크리티컬한 기업용 배치 처리 개발에 활용할 수 있도록 다양한 시나리오 기반으로 작성돼 있어서 실제 프로젝트에 적용하기에도 매우 유용할 것이다. 배치 처리에 스프링 배치를 사용하는 것을 고려한다면 이 책을 통해서 더욱 쉽고 효율적으로 사용할 수 있을 것이다.

추천의 글

스프링 배치(Spring Batch)는 제가 간접적으로 관여했던 최초의 오픈소스 프로젝트였습니다. 첫 번째 자녀는 어떤 의미에서 항상 특별하다고 생각하는데, 스프링 배치도 제게 비슷한 존재였습니다. 스프링 배치를 뱃속에 품고 있던 기간은 생각했던 것보다 조금 더 길었습니다. 결국에는 쥐보다 코끼리에 가까웠지만, 항상 잘 동작했고 부모에게 자랑거리였습니다. 우리는 스프링 배치에 대한 책임이 있었으며, 결국 출산을 해서 양육을 해야 했습니다. 기억하기로는 1.0의 출시가 계속 미뤄졌던 데는 두 가지 이유가 있었습니다. 하나는 서비스 기능의 품질이 실제로 현장에서 동작하는지 확인해야 한다는 것이었고 다른 이유는 API 설계에 대한 관리 수준이었습니다. 어차피 실수는 피할 수 없었지만, 적어도 인생의 좋은 출발은 끊었다고 말할 수 있을 것 같습니다.
스프링 배치의 계보를 살펴보면, 당연히 전 세계의 많은 비즈니스 기능의 길고 반복적인 발명과 재발명에서 비롯됐음을 알 수 있을 것입니다. 2006년에 처음 봤던 코드는 롭 하롭(Rob Harrop)이 영국 런던의 한 은행에서 컨설팅을 할 때 만들었던 작은 프로토타입이었습니다. 이 유용한 부분은 스프링 배치의 일부분에서 분리돼 다른 프로젝트에 공유된 이후에 최종적으로 스프링 리트라이(Spring Retry)에 도달했습니다. 스프링 배치의 나머지 부분과 상태 머신 지향 세계관은 액센츄어(Accenture)와의 협력에서 비롯됐습니다.
또한 2010년 스프링 배치 2.0을 출시할 때 “청크(chunk)” 개념 도입, 분산 처리, 병렬 처리, 자바 5의 새로운 언어 기능을 지원하는 기능을 도입하는 데 중요한 역할을 했습니다. 저는 여전히 루카스가 웨인의 세계를 선행 기술로 인용하면서 "우리는 그것을 ‘청크’라고 부를 수 없다"고 말하는 것을 들을 수 있지만, 더 나은 이름을 생각해내지 못해 그 용어가 고착됐습니다. 청크는 함께 처리할 아이템(item)의 그룹으로, 효율성과 확장성을 높일 수 있는 훌륭한 기회를 제공합니다. 스프링 배치 2.0은 꽤 오랫동안 최신 기술이었으며 JSR-352 사양과 관련된 일이 시작되면서 JSR-352 사양에 반영됐습니다. 액센추어의 웨인 룬드(Wayne Lund)는 초기부터 스프링 배치 프로젝트에 참여했고, JSR-352 전문가 그룹에도 참여했으며, 현재 피보탈에서 플랫폼 아키텍트로 일하고 있습니다.
마이클 미넬라(Michael Minella)는 당시 젊은 터키인이었습니다. 그는 전문가 그룹에서는 물론 실생활에서도 스프링 배치를 많이 사용했으며 실제로 관련된 책을 집필했습니다. 그가 2012년 스프링 팀에 합류했을 때는 마침 스프링 배치 3.0 릴리스 작업을 시작할 때였습니다. 그래서 "@EnableBatchProcessing" 애너테이션 및 XML 구성을 자바 구성으로의 전환하는 작업을 함께할 수 있었습니다. 그는 신속하게 프로젝트 리더를 맡아 3.x 버전을 거쳐 자바 8 기반인 4.0 버전까지 프로젝트를 이끌었고, 일부 새로운 플루언트 스타일(fluent-style)의 구성 빌더가 추가됐습니다. 스프링 클라우드 데이터 플로우(Spring Cloud Data Flow)와의 연계와 분산 처리의 산업화도 이 기간에 발생했습니다. 2018년 초, 마무드 벤 하신(Mahmoud Ben Hassine)이 새로운 프로젝트의 공동 리더로 합류했으며, 마이클이 프로젝트를 주도하고 많은 사용자의 피드백을 주의 깊게 경청하도록 돕고 있습니다.
이 글을 쓰는 시점에 스프링 배치는 막 10살이 됐고 자랑스러운 새로운 부모를 뒀습니다. 아니면 부모가 아닌 다른 관계일까요? 잘 모르겠습니다. 어쨌든 노부모이거나 조부모이거나 그들은 스프링 배치의 모습과 새로운 보호자를 동일하게 자랑스러워합니다. 배치 처리가 사라지지는 않을 듯하기에 스프링 배치는 앞으로 몇 년 동안 더 많은 것을 제공할 것입니다. 이 모든 움직임이 앞으로 기대됩니다.
— 데이브 시어(Dave Syer)/ 스프링 배치 창시자

이 책에서 다루는 내용

■ 스프링 배치 4의 새로운 기능
■ 스프링 배치 프로젝트를 사용해 클라우드에서 시작과 종료가 존재하는 배치 처리 수행
■ 실제 예제를 통한 자바 구성과 스프링 부트 기반의 최신 구성 기법 이해
■ 클라우드를 비롯한 복잡한 시나리오에서의 배치 처리
■ 최신 플랫폼에서의 배치 애플리케이션 개발
■ 스프링 부트 이외의 스프링 포트폴리오 분야로 미션 크리티컬한 배치 처리 개발

저자/역자 소개

지은이 소개

마이클 미넬라(Michael T. Minella)

18년 이상의 전문적인 지식과 경험이 있는 소프트웨어 엔지니어이자 저자이며 강사이다. 피보탈(Pivotal)의 스프링 배치(Spring Batch)와 스프링 클라우드 태스크(Spring Cloud Task) 프로젝트를 총괄하는 소프트웨어 엔지니어링 디렉터이기도 하다. 또한 JSR-352(Java Batch) 전문가 그룹에도 참여했다. 자바 챔피언(Java Champion), 자바원 락스타(JavaOne Rockstart)이며 다양한 자바 콘퍼런스에서 국제적으로 강연을 하고 있다. 평상시 업무 외에 정규 팟캐스트 OffHeap(www.javaoffheap.com)에서 활동하고 있다. 또한 정보보안 주제도 열심히 공부하고 있다. 사진(https://500px.com/michael160)과 목공이 취미이며, 삶에서 가장 중요한 일은 에리카의 남편이자 에디슨의 아버지로서의 일이다.

옮긴이의 말

지금도 보이지 않는 어딘가에서 열심히 동작하는 배치 처리는 일반 사용자가 직접 접하기 어려운 까닭에 낯설 수도 있습니다. 하지만 배치 처리는 현대 IT 시스템에서 필수적이고 어디에나 존재하며 누구나 간접적으로 경험합니다. 예를 들어 우리는 주기적으로 이메일을 받기도 하며 매일 특정 시간에 수행되는 은행 정산 배치 처리 등으로 인해 온라인 은행 서비스를 이용할 수 없다는 메시지를 볼 수도 있습니다. 이러한 배치 처리는 목적에 따라 다르기는 하지만 지정된 시각에 수행돼야 하고, 엄청난 양의 데이터를 제한된 시간 내에 완료해야 하며, 처리에 실패했다면 별도의 후속 처리를 해야 하기도 합니다. 대량 데이터를 처리하는 까닭에 성능도 최적화해야 합니다. 스프링 배치를 사용하는 이유는 바로 이러한 다양한 사항을 고려한 배치 처리를 매우 효율적으로 만들 수 있기 때문입니다.
스프링 배치는 배치 처리를 개발할 때 고려해야 하는 많은 개념과 기능을 제공합니다. 단순한 시나리오부터 미션 크리티컬한 시나리오까지 수많은 상황에 대응할 수 있습니다. 그러나 배치라는 분야의 특성상 개념이 생소하기도 하고 참고할 수 있는 자료가 스프링 프레임워크에 비해 많지는 않습니다. 이러한 상황에서 스프링 배치 개발팀의 리더가 직접 저술한 이 책은 매우 유용합니다. 기초 개념의 이해부터 클라우드 네이티브를 활용하는 수준까지 폭넓은 내용을 접할 수 있습니다. 또한 시나리오 기반의 다양한 예제는 책의 내용을 이해하는 데 도움을 주는 것은 물론이고 기업에서 필요한 수준의 배치 처리를 개발하는 데 실제로 활용할 수도 있을 것입니다. 배치 처리에 스프링 배치를 사용하는 것을 고려하고 있다면 이 책을 통해서 더욱 쉽고 효율적으로 사용할 수 있게 될 것이라고 확신합니다.

옮긴이 소개

서경석

IT 기업에서 오픈 소스 기반의 미들웨어 솔루션 개발 및 컨설팅 업무를 하고 있는 개발자이자 컨설턴트이다. 자바를 기반으로 하는 다양한 프로젝트에 참여했으며, 오픈 소스 기반의 기업용 프레임워크 개발과 모니터링 솔루션 개발에 관심이 많아 관련 업무를 수행했다.

김성윤

21세기 직전부터 애플리케이션 개발자, 소프트웨어 아키텍트로 활동하다가 현재는 시민의 일상을 뒷받침하는 대형 시스템을 운영하고 있다. 무엇이든 손으로 직접 해봐야 직성이 풀리며, 운영 중인 업무에서 매일같이 발생하는 거대 데이터를 적절히 활용하는 방법에 관심이 많다.

이승룡

오픈플랫폼 개발자 커뮤니티(OPDC)에서 에반젤리스트로 활동하고 있다. 책을 좋아한다.

목차

목차

  • 1장. 배치와 스프링
    • 배치 처리의 역사
    • 배치가 직면한 과제
    • 왜 자바로 배치를 처리하는가?
    • 스프링 배치의 기타 사용 사례
    • 스프링 배치 프레임워크
      • 스프링으로 잡 정의하기
      • 잡 관리하기
      • 로컬 및 리모트 병렬화
      • I/O 표준화하기
      • 나머지 스프링 배치 에코 시스템
      • 그리고 스프링의 모든 기능
    • 이 책의 진행 방식
    • 요약

  • 2장. 스프링 배치
    • 배치 아키텍처
      • 잡과 스텝
      • 잡 실행
      • 병렬화
      • 문서
    • 프로젝트 초기 설정
      • 스프링 배치 내려받기
    • Hello, World! 법칙
    • 잡 실행하기
    • 요약

  • 3장. 예제 잡 애플리케이션
    • 애자일 개발 이해하기
      • 사용자 스토리로 요구 사항 포착하기
      • 테스트 주도 개발로 설계하기
      • 버전 관리 시스템 사용하기
      • 좋은 개발 환경에서 작업하기
    • 은행 거래명세서 잡의 요구 사항 이해하기
    • 배치 잡 설계하기
      • 잡의 처리 흐름
      • 데이터 모델 이해하기
    • 요약

  • 4장. 잡과 스텝 이해하기
    • 잡 소개하기
      • 잡의 생명주기 따라 가보기
    • 잡 구성하기
      • 잡의 기본 구성
      • 잡 파라미터
      • 잡 리스너 적용하기
      • ExecutionContext
      • ExecutionContext 조작하기
    • 스텝 알아보기
      • 태스크릿 처리와 청크 처리 비교
      • 스텝 구성
      • 그 밖의 여러 다른 유형의 태스크릿 이해하기
      • 스텝 플로우
    • 요약

  • 5장. JobRepository와 메타데이터
    • JobRepository란?
      • 관계형 데이터베이스 사용하기
      • 인메모리 JobRepository
    • 배치 인프라스트럭처 구성하기
      • BatchConfigurer 인터페이스
      • JobRepository 커스터마이징하기
      • TransactionManager 커스터마이징하기
      • JobExplorer 커스터마이징하기
      • JobLauncher 커스터마이징하기
      • 데이터베이스 구성하기
    • 잡 메타데이터 사용하기
      • JobExplorer
    • 요약

  • 6장. 잡 실행하기
    • 스프링 부트로 배치 잡 시작시키기
    • REST 방식으로 잡 실행하기
      • 쿼츠를 사용해 스케줄링하기
    • 잡 중지하기
      • 자연스러운 완료
      • 프로그래밍적으로 중지하기
      • 오류 처리
    • 재시작 제어하기
      • 잡의 재시작 방지하기
      • 재시작 횟수를 제한하도록 구성하기
      • 완료된 스텝을 재실행하기
    • 요약

  • 7장. ItemReader
    • ItemReader 인터페이스
    • 파일 입력
      • 플랫 파일
      • XML
    • JSON
    • 데이터베이스 입력
      • JDBC
      • 하이버네이트
      • JPA
      • 저장 프로시저
      • 스프링 데이터
    • 기존 서비스
    • 커스텀 입력
    • 에러 처리
      • 레코드 건너뛰기
      • 잘못된 레코드 로그 남기기
      • 입력이 없을 때의 처리
    • 요약

  • 8장. ItemProcessor
    • ItemProcessor 소개
    • 스프링 배치의 ItemProcessor 사용하기
      • ValidatingItemProcessor
      • ItemProcessorAdapter
      • ScriptItemProcessor
      • CompositeItemProcessor
    • ItemProcessor 직접 만들기
      • 아이템 필터링하기
    • 요약

  • 9장. ItemWriter
    • ItemWriter 소개
    • 파일 기반 ItemWriter
      • FlatFileItemWriter
      • StaxEventItemWriter
    • 데이터베이스 기반 ItemWriter
      • JdbcBatchItemWrite
      • HibernateItemWriter
      • JpaItemWriter
    • 스프링 데이터의 ItemWriter
      • 몽고DB
      • 네오4j
      • 피보탈 젬파이어와 아파치 지오드
      • 리포지터리
    • 그밖의 출력 방식을 위한 ItemWriter
      • ItemWriterAdapter
      • PropertyExtractingDelegatingItemWriter
      • JmsItemWriter
      • SimpleMailMessageItemWriter
    • 여러 자원을 사용하는 ItemWriter
      • MultiResourceItemWriter
      • CompositeItemWriter
      • ClassifierCompositeItemWriter
    • 요약

  • 10장. 예제 애플리케이션
    • 거래명세서 잡 검토하기
    • 새 프로젝트 초기 구성하기
    • 갱신할 고객 정보 가져오기
      • _고객 ID 유효성 검사하기
      • 고객 정보 갱신
    • 거래 정보 가져오기
      • 거래 정보 읽어오기
      • 거래 정보 기록하기
    • 잔액에 거래 내역 적용하기
      • 거래 데이터 읽어오기
      • 계좌 잔액 갱신하기
    • 월별 거래명세서 생성하기
      • 거래명세서 데이터 가져오기
      • Statement 객체에 계좌 정보 추가하기
      • 거래명세서 생성하기
    • 요약

  • 11장. 확장과 튜닝
    • 배치 처리 프로파일링하기
      • VisualVM 알아보기
      • 스프링 배치 애플리케이션 프로파일링하기
    • 잡 확장하기
      • 다중 스레드 스텝
      • 병렬 스텝
      • 병렬 스텝 구성하기
      • AsyncItemProcessor와 AsyncItemWriter
      • 파티셔닝
      • 원격 청킹
    • 요약

  • 12장. 클라우드 네이티브 배치
    • 12요소 애플리케이션
      • 코드베이스
      • 의존성
      • 구성
      • 백엔드 서비스
      • 빌드, 릴리스, 실행
      • 프로세스
      • 포트 바인딩
      • 동시성
      • 폐기 가능
      • 개발/운영 환경 일치
      • 로그
      • 관리자 프로세스
    • 간단한 배치 잡
    • 서킷 브레이커
    • 구성 외부화
      • 스프링 클라우드 컨피그
      • 유레카를 사용한 서비스 바인딩
    • 배치 처리 오케스트레이션
      • 유레카를 사용한 서비스 바인딩
    • 요약

  • 13장. 배치 처리 테스트하기
    • JUnit과 Mockito를 사용한 단위 테스트
      • JUnit
      • 목(Mock) 객체
      • Mockito
    • 스프링 클래스를 사용해 통합 테스트하기
      • 스프링을 사용해 통합 테스트하기
      • 스프링 배치 테스트하기
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.105 : 아래에서 5행]
public TasklethelloWorldTasklet(
->
public Tasklet helloWorldTasklet(

[p.110 : 17행]
public TasklethelloWorldTasklet(
->
public Tasklet helloWorldTasklet(

[p.378 : 1행]
CompositeIemProcessor
->
CompositeItemProcessor

[p.655 : 아래에서 2행]
동작을 모킹(moking)하도록
->
동작을 모킹(mocking)하도록