책 소개
책 소개
데이터를 향한 무자비한 집행,
스프링 배치 6로 완성하는 엔터프라이즈 '배치 처단'의 기술!
“어떤 버그도 시스템을 멈출 수 없다. 재시도(Retry)와 스킵(Skip)으로 완성하는 난공불락 데이터 핸들링”
이 책은 자바 엔터프라이즈 환경의 필수 관문인 '스프링 배치 6'를 단순한 프레임워크 사용법을 넘어, 데이터를 효율적으로 '처단(Processing)'하는 실전 작전 지침서로 풀어냈다. 파일 시스템부터 NoSQL까지 아우르는 강력한 읽기/쓰기 전략은 물론, 실무에서 가장 빈번하게 발생하는 '조용한 데이터 유실'과 '성능 저하' 문제를 정면으로 돌파한다.
특히 FaultTolerant 작전을 통해 예외 상황에서도 시스템을 굴복시키는 내결함성 설계 노하우를 '처형자'라는 독특한 페르소나를 빌려 강렬하게 전달한다.
독자들은 단순히 기능을 구현하는 수준을 넘어, 수백만 건의 데이터를 찰나의 순간에 처리하는 압도적인 최적화 기법을 체득하게 될 것이다.
이제 코드를 타이핑하는 수준을 벗어나, 완벽하게 통제된 배치 시스템의 지휘관으로 거듭날 시간이다.
내용 소개
1. 해부 — Job, Step, 그리고 스코프의 내장을 꺼내라
배치를 어렵게 느끼는 이유는 단 하나다. 내부에서 무슨 일이 벌어지는지 모르기 때문이다. Job과 Step의 생명 주기를 처음부터 해체하고, 개발자들이 가장 많이 틀리는 스코프(Scope)의 함정을 정조준한다. 기초를 제대로 장악하면 나머지는 그냥 따라온다.
2. 침투 — 어떤 데이터 소스도 막을 수 없다
플랫 파일(CSV/JSONL)부터 NoSQL까지, 어떤 형태의 데이터라도 막힘없이 읽고 쓰는 리더·라이터 전술을 완전히 내 것으로 만든다. 데이터가 어디 숨어있든 끄집어낸다.
3. 처단 — 에러가 시스템을 무너뜨리기 전에, 네가 먼저 에러를 처형해라
실전 배치의 진짜 공포는 기능 구현이 아니다. 아무도 모르게 조용히 사라지는 데이터, 예외 하나에 통째로 멈추는 Job이다. Retry와 Skip 전략으로 어떤 예외 상황에서도 굴복하지 않는 FaultTolerant 아키텍처를 구축한다. 트랜잭션 경계 안에서 데이터를 완벽히 통제하는 법, 이제 배운다.
4. 지배 — 단일 스레드의 한계를 돌파하고, 시스템을 완전히 장악하라
수백만 건 데이터를 빠르게 처리하고 싶다면 단일 스레드로는 어림도 없다. 멀티 스레드 Step과 파티셔닝으로 처리 속도를 극한까지 끌어올린다. 배치 메타데이터로 실행 이력을 추적하고 성능 저하의 원인을 찾아내는 디버깅 기술까지. 이 챕터를 끝내면 배치 시스템 앞에 지휘관으로 서게 된다.
추천사
스프링 배치 프로젝트의 리드로서, 저는 지난 수년간 스프링 배치에 관한 수많은 글과 튜토리얼을 봐왔고, 이 주제에 대해 쓰인 거의 모든 책을 읽어왔습니다. 그러나 "이건 더 많은 스프링 배치 사용자들이 꼭 읽었으면 하는 책이다"라고 멈춰서 생각하게 만든 기술서는 흔치 않았습니다. 이 책은 그 드문 예외 중 하나입니다.
이 책은 기본을 훨씬 뛰어넘어, 실전 배치 처리 시스템에서 가장 중요한 주제들을 깊이 있게 파고듭니다. 상태 관리, 트랜잭션 처리, 재시작 가능성, 내결함성, 확장성 등이 그것입니다.
저자는 스프링 배치 그 자체에 대한 깊은 숙련도뿐만 아니라, 안정적이고 회복력 있는 데이터 처리 아키텍처 뒤에 있는 엔지니어링 원칙에 대한 깊은 이해까지 보여줍니다.
스프링 배치를 처음 접하는 분이든, 이 프레임워크에 대한 전문성을 더 깊이 다지려는 분이든, 저는 자신 있게 말할 수 있습니다. 이 책은 더할 나위 없이 귀중한 자원입니다. 여러분의 이해를 한 차원 끌어올리고, 실용적이면서도 매력적인 방식으로 더 나은 스프링 배치 애플리케이션을 만드는 데 도움이 될 것입니다.
- 마흐무드 벤 하신(Mahmoud Ben Hassine), 스프링 배치(Spring Batch) 프로젝트 리드
대략 2017년 무렵이었던 것으로 기억합니다. 커머스 서비스를 개발하며 정산, 집계, ERP 연동, 데이터 마이그레이션 같은 일을 자주 마주했습니다. 웹 애플리케이션은 익숙했습니다. 요청을 받고, 응답을 돌려주고, 트랜잭션을 처리하는 방식은 많은 책과 강의, 블로그 글을 통해 배울 수 있었습니다. 그런데 새벽에 수십만, 수백만 건의 데이터를 읽고, 가공하고, 실패하면 다시 이어서 실행하고, 같은 작업이 중복 실행되지 않도록 막아야 하는 배치 애플리케이션에 대해서는 마땅히 참고할 만한 자료가 많지 않았습니다.
물론 자료가 아예 없었던 것은 아닙니다. 공식 문서도 있었고, 오래된 해외 서적도 있었고, 간단한 튜토리얼도 있었습니다. 하지만 실무에서 배치를 운영하며 부딪히는 문제를 해결하기에는 부족했습니다. Spring Batch In Action은 오래도록 개정판이 나오지 않았고, 한글 번역서도 없었습니다. 국내 자료의 대부분은 간단한 예제나 공식 문서 일부를 짧게 옮긴 수준에 머물러 있었습니다. 대용량 데이터를 다루다가 일부 데이터가 누락되거나 중복되고, 영속성 컨텍스트 문제로 예외가 발생하고, 실패한 지점부터 다시 실행해야 하는 상황을 만나면 결국 직접 삽질하며 배워야 했습니다.
그래서 블로그에 스프링 배치 가이드 시리즈를 정리하기 시작했습니다. 거창한 사명감이 있었다기보다, 저와 주변 동료들이 같은 문제를 반복해서 겪고 있었기 때문입니다. “스프링 배치를 시작하려는데 이걸 먼저 보면 됩니다”라고 건넬 만한 한글 자료가 필요했습니다. 웹 애플리케이션만큼이나 배치 애플리케이션을 자주 작성하는 현장에서도, 배치는 이상하게 늘 뒷전이었습니다. 그러나 배치는 뒷전의 기술이 아닙니다. 포인트가 정산되고, 매출이 집계되고, 데이터가 동기화되고, 리포트가 만들어지는 곳에는 언제나 배치가 있습니다. 사용자는 배치를 보지 못하지만, 배치가 실패하면 회사는 곧바로 그 존재를 알게 됩니다.
그로부터 시간이 흘렀습니다. 스프링 배치는 더 성숙해졌고, 스프링 부트와 함께 사용하기도 훨씬 편해졌습니다. 하지만 동시에 프레임워크의 내부도 많이 달라졌습니다. 특히 스프링 배치 6는 단순한 버전 업그레이드가 아닙니다. 청크 지향 처리 모델, 재시도와 스킵, 재시작, 멀티스레드 Step 같은 핵심 동작의 의미를 다시 살펴봐야 하는 변화입니다. 예전 지식만으로 코드는 작성할 수 있을지 모릅니다. 그러나 배치에서 정말 중요한 것은 코드가 한 번 실행되는 것이 아니라, 실패했을 때 어디서 멈추고, 무엇을 다시 처리하며, 어떤 데이터가 중복되거나 사라지지 않는지를 이해하는 일입니다.
이 책의 장점은 바로 그 지점을 정면으로 다룬다는 데 있습니다. 단순히 ItemReader, ItemProcessor, ItemWriter의 사용법을 나열하는 데 그치지 않습니다. 왜 이런 구조가 필요한지, 실패와 재시도는 내부에서 어떻게 동작하는지, 스프링 배치 6에서 무엇이 달라졌는지, 대용량 데이터를 다룰 때 어떤 선택이 운영 환경에서 문제가 되는지를 코드 레벨까지 내려가 설명합니다. 배치를 한 번도 작성해보지 않은 개발자에게는 지도를 제공하고, 이미 배치를 운영해본 개발자에게는 자신이 막연히 알고 있던 동작을 정확한 언어로 다시 정리하게 해줍니다.
물론 이 책의 문체는 처음에는 조금 낯설 수 있습니다. 저자는 평범한 기술서의 문장으로 독자를 안내하지 않습니다. 때로는 과격하고, 때로는 장난스럽고, 때로는 독자를 전장 한가운데 세워놓는 듯한 방식으로 설명합니다. 저자의 인프런 강의를 처음 봤을 때도 비슷한 걱정을 한 분들이 있었습니다. 그런데 흥미롭게도 많은 수강생들이 시간이 지나며 그 스타일에 스며들었습니다. 텍스트 강의가 오히려 자기 속도로 읽고 되짚을 수 있어 좋았다는 평가, 강한 문체 덕분에 개념이 기억에 남는다는 평가, 재미있지만 깊다는 평가가 이어졌습니다. 낯선 형식이 학습을 방해한 것이 아니라, 어려운 개념을 끝까지 붙들고 가게 만드는 힘이 된 것입니다.
스프링 개발자에게 배치는 선택 과목처럼 보일 때가 많습니다. 하지만 실무의 어느 순간, 반드시 마주치게 됩니다. 그리고 그 순간 필요한 것은 “Hello World 배치”가 아니라 실패해도 다시 살아나는 배치, 대용량 데이터를 안전하게 처리하는 배치, 운영자가 믿고 새벽을 맡길 수 있는 배치입니다. 이 책은 그런 배치를 만들기 위해 필요한 개념과 감각을 함께 다룹니다.
이제 스프링 배치 6를 제대로 다룰 수 있는 한글 책이 우리 앞에 놓였습니다. 예전에 제가 블로그에 글을 쓰며 아쉬워했던 바로 그 빈자리를, 이 책은 훨씬 더 깊고 강한 방식으로 채우고 있습니다. 배치를 두려워하는 스프링 개발자라면, 또는 이미 배치를 쓰고 있지만 그 내부 동작을 정확히 이해하고 싶은 개발자라면 이 책을 읽어보시기를 권합니다. 처음 몇 페이지를 넘길 약간의 용기만 있으면 충분합니다. 곧 알게 될 것입니다. 배치는 더 이상 새벽 3시의 공포가 아니라, 여러분이 다룰 수 있는 강력한 시스템의 도구라는 것을요.
- 향로, 인프랩 CTO이자 『스프링 부트와 AWS로 혼자 구현하는 웹 서비스』 (프리렉, 2019) 저자
서비스나 시스템을 개발하는 개발자라면 언젠가는 배치 작업을 맡게 됩니다. 대량 데이터 처리, 정산, 외부 시스템 연계처럼 서비스의 핵심 기능이 배치 시스템 위에서 동작하는 경우도 많습니다. 하지만 배치 개발은 일반적인 애플리케이션 개발과는 성격이 다릅니다. 정해진 시간에 안정적으로 실행돼야 하고, 장애 상황에서도 안전하게 복구될 수 있어야 합니다. 그러다 보면 비즈니스 로직보다 실행과 운영을 위한 구조를 만드는 데 더 많은 고민과 시간을 쓰게 됩니다. 저 역시 스프링으로 개발을 시작한 이후에도 배치 개발만큼은 늘 어렵고 까다로운 영역이라고 느껴왔습니다.
그래서 세계적인 컨설팅 회사와 스프링 개발팀이 함께 스프링 배치 프로젝트를 시작한다는 발표를 처음 봤을 때 큰 기대감을 느꼈습니다. 현업 개발자들이 오랫동안 반복해 온 고민을 프레임워크 차원에서 해결하려는 시도였기 때문입니다. 실제로 스프링 배치는 배치 애플리케이션 개발에 필요한 공통 패턴과 운영 경험을 훌륭하게 정리해 줬고, 많은 개발자들이 더 안정적이고 유지보수하기 쉬운 시스템을 만들 수 있도록 도와줬습니다.
하지만 스프링 배치를 제대로 활용하려면 여전히 배치 시스템 특유의 운영 관점과 설계 방식에 대한 이해가 필요합니다. 그래서 저는 오랫동안 한국 개발자들의 현실적인 경험과 고민을 담아낸 좋은 스프링 배치 책을 기다려왔습니다. 그런 점에서 이 책은 무척 반가운 책입니다.
이 책은 어렵게 느껴질 수 있는 스프링 배치를 실무적인 관점에서 친절하고 꼼꼼하게 설명합니다. Execute라는 단어의 여러 의미를 활용한 유쾌한 표현 덕분에 자칫 무거워질 수 있는 내용도 흥미롭게 읽힙니다. 마치 온라인 개발자 커뮤니티에서 연재되는 재미있는 기술 글을 읽는 듯한 느낌도 받았습니다.
스프링 배치를 어렵게 느껴왔던 개발자나 제한적으로만 사용해 왔던 스프링 개발자라면, 이 책이 훌륭한 길잡이가 돼줄 것입니다. 책의 내용을 따라가다 보면 개발자로 살아가며 반복해서 만나게 되는 배치 개발이라는 문제를 훨씬 자신 있게 다룰 수 있게 될 것입니다.
- 이일민, Epril 대표 컨설턴트이자 『토비의 스프링 3.1』(에이콘출판, 2012) 저자
중요성에 비해 잘 다루어지지 않는 주제 중 하나가 바로 배치인 것 같습니다. 국내는 물론 해외에서도 현대적인 배치 프레임워크를 설명하는 도서는 손에 꼽을 정도입니다. 그런 측면에서 스프링 프레임워크 기반의 배치를 다루는 저서가 나온 것은, 가뭄에 단비와 같다고 할 수 있습니다.
배치 시스템은 저자가 얘기하는 것처럼 화려하지 않고, 조용히 실행됩니다. 조용하지만 정해진 시간에 정산, 집계, 이관, 동기화 등 서비스의 보이지 않는 핵심을 떠받칩니다. 그리고 이 조용한 시스템이 한 번 실패하는 순간, 문제는 결코 조용하게 끝나지 않습니다. 특히 금융 시스템이나 국세, 결제, 대량 데이터 이관처럼 돈과 신뢰를 다루는 영역에서는 배치의 실패는 단순한 오류를 넘어 심각한 비즈니스 리스크로 이어집니다. 그래서 스프링 배치를 제대로 이해한다는 것은 단순히 Job과 Step을 작성하는 법을 아는 것이 아닙니다. 데이터를 안전하게 처리하고, 실패를 복구하며, 재시작 가능한 구조를 설계하고, 실제 운영 환경에서 견딜 수 있는 시스템을 만드는 힘을 갖추는 일입니다.
이 책이 반가운 이유는 바로 그 지점을 다루기 때문입니다. 많은 기술서가 "어떻게 사용하는가"에 머무른다면, 이 책은 "왜 그렇게 동작하는가"까지 파고듭니다. 배치의 기본 개념에서 시작해 Tasklet과 Chunk 지향 Step, Job 파라미터, 리스너, 파일 처리, 데이터베이스 처리, 내결함성(Fault Tolerance)까지 실무에서 반드시 마주치는 주제를 코드와 내부 동작 중심으로 풀어냅니다.
또 다른 인상적인 점은 설명 방식입니다. 배치를 얌전한 개념 설명으로만 다루지 않습니다. 때로는 과격하고, 때로는 유머스럽게, 때로는 개발자를 새벽 장애 호출 현장으로 끌고 가듯 설명합니다. 하지만 그 문체 뒤에는 분명한 목적이 있습니다. 독자가 배치를 단순한 기능 목록이 아니라, 실패와 복구, 트랜잭션과 재시작, 대용량 처리와 운영 안정성의 관점에서 이해하게 만드는 것입니다.
스프링 배치를 처음 배우는 개발자에게 이 책은 배치의 세계로 들어가는 강렬한 입문서가 될 것입니다. 이미 스프링 배치를 사용해 본 개발자에게는 익숙하다고 생각했던 개념을 다시 해부하게 만드는 책이 될 것입니다. 그리고 스프링 배치의 구조와 철학을 이해하기 위한 든든한 안내서가 될 것입니다.
배치는 보이지 않을 때 가장 잘 작동하는 시스템입니다. 그러나 그 보이지 않는 시스템을 제대로 만들기 위해서는 누구보다 깊이 이해해야 합니다. 이 책은 그 이해를 시작하게 만드는 책입니다. 스프링 배치를 배우려는 개발자라면, 그리고 엔터프라이즈급 환경에서 운영 가능한 배치 시스템을 설계하고 싶은 개발자라면, 이 책을 반드시 읽어 보길 권합니다.
- 한성곤, 삼성SDS 프로


