"한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다."

총평
- 책의 난이도 : ★★★★★
- 추천 별점 : ★★★★★
- 추천 독자 : 데이터 엔지니어링을 고민하고 있는 엔지니어에게
- 지은이 : 바르토시 코니에치니 지음 / 김인범 번역
- 출판사 : 한빛미디어
이 책도 난이도 5개 짜리이다... 데이터 엔지니어링을 하는 사람이 아니면 다소 어려울 것 같고,
실질적으로 Best Practice의 패턴을 공부하는 것이기 때문에 현업에서 종사하거나 이쪽 분야로 이직할 생각이 있는 사람에게 추천한다.
그게 아니라면 솔직히 이 책을 가지고 입문을 하기에는 어렵지 않나 싶다. (나같은 사람)
나는 이 책을 데이터 엔지니어링을 공부해보려고 신청했다. 아무래도 대 AI 시대에서 신규로 생성되는 직군에 데이터 엔지니어링도 반드시 중요한 부분을 차지한다고 생각한다. 기존에 데이터 라벨링만 중심으로 하다가 최근에는 데이터의 수집이나 품질, 관리 등 다양한 부분이 전문적으로 발전되고 있다고 느끼고 있다.
대부분 자동화 되고 있기 때문에 이것을 잘 기획하고 설계해야 양질의 값을 얻을 수 있다는 건 이제 당연한 사실이다.

이 책은 한빛미디어 책의 상세페이지에 보는 것과 같이 문제 -> 해결책 -> 결과 -> 예제 이렇게 패턴을 알려주고 있다. 그래서 읽기가 상당히 편하고 백과사전식처럼 내가 원하는 부분만 보기도 편하게 되어있다. 실질적으로도 굉장히 만족한 부분이다.
그리고 목차를 보면 알 수 있듯 데이터 엔지니어링의 대부분 범위(데이터 수집, 흐름, 정렬, 보안 등)를 다루고 있다. 그래서 범용적으로 학습하기도 좋은 책으로 보인다.
이 책을 리뷰하기 위해서 열심히 읽었지만 약 3주 간의 시간 동안에는 다 읽기가 역부족이였기 때문에 3장의 오류 관리 디자인 패턴을 여러번 읽어 보았다. (오류 관리가 상당히 중요하다고 생각하기 때문에)
오류는 피할 수 없다
이 책에서는 오류는 피할 수 없으며, 이걸 어떻게 해결할지가 더 중요하다고 여러 패턴을 소개하고 있다. 특히 데이터 품질 문제(처리 불가능한 레코드, 중복), 지연 데이터, 그리고 하드웨어 실패 등을 다루는 디자인 패턴을 소개한다. 그 중 2개만 가져와 봤다.
① 패턴 #09: 데드 레터 (Dead Letter)
처리할 수 없는 레코드(Unprocessable Records)로 인해 전체 파이프라인이 중단되는 것을 방지하는 패턴이다.
- 문제: 특정 레코드가 스키마 위반이나 비정상적인 값을 가져 잡(Job)을 중단시킴.
- 해결책: 실패 지점에 try-catch 등을 사용하여 오류를 포착하고, 해당 레코드를 별도의 '데드 레터 스토리지'에 저장한 뒤 나머지 정상 레코드는 계속 처리함.
- 구성 요소:
- 오류 처리 로직: 실패를 식별하고 메타데이터(실패 이유 등)를 추가.
- 데드 레터 스토리지: 가용성이 높고 쓰기 성능이 좋은 객체 스토리지나 브로커 사용.
- 모니터링 계층 : 오류 있는 레코드를 잡이 언제 처리하는지, 얼마나 오류율이 증가하는지 등 파악.
- 리플레이 파이프라인: 수정된 레코드를 다시 메인 데이터셋으로 통합.
- 주의할 점 : 리플레이 시 데이터 순서가 뒤바뀔 수 있으며, 다운스트림에 '스노우볼 백필링 효과'를 일으켜 중복 처리를 유발할 수 있음.

② 패턴 #10: 윈도 중복 제거 (Windowed Deduplicator)
데이터가 적어도 한 번 이상(at-least-once) 전달되는 시스템에서 발생하는 중복 문제를 해결한다.
- 문제: 업스트림의 재시도나 네트워크 장애로 인해 동일한 데이터가 반복적으로 유입됨.
- 해결책: '상태 스토어(State Store)'를 활용하여 특정 시간 범위(윈도) 내에 이미 처리된 레코드인지 확인.
- 상태 스토어 유형:
- 로컬: 빠르지만 실패 시 상태 손실 가능성 있음. (메모리에 상태 존재)
- 내결함성 로컬: 원격 스토리지에 백업하여 안정성 확보.
- 원격: 가장 안정적이지만 네트워크 지연 등으로 성능에 영향 있을 수 있음.
- 결과: 완벽한 중복 제거는 불가능할 수 있음(공간 vs 시간 트레이드오프). 짧은 윈도는 자원을 아끼지만 중복을 놓칠 수 있고, 긴 윈도는 자원을 많이 소모함.
데이터 엔지니어링은 단순히 코드를 짜는 게 아니라, '실패를 어떻게 관리하느냐'의 싸움이다.
이 책은 단순히 기술 스택(Spark, Flink 등)의 문법을 설명하는 데 그치지 않고, 어떤 상황에서 어떤 구조(Pattern)를 가져가야 시스템이 견고해지는지를 알려준 책이다. 이 패턴들이 여러 분의 고민거리에 큰 도움(해결책)이 되리라 확신한다.