본문 바로가기
카테고리 없음

[한빛미디어] <데이터 엔지니어링 디자인 패턴> 리뷰 - 데이터를 다루는 모범사례가 궁금한 그대에게..

by james_janghun 2026. 2. 23.

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

 

 

총평

- 책의 난이도  : ★★★★★
- 추천 별점     : ★★★★
- 추천 독자     : 데이터 엔지니어링을 고민하고 있는 엔지니어에게
- 지은이         : 바르토시 코니에치니 지음 / 김인범 번역
- 출판사         : 한빛미디어
 


이 책도 난이도 5개 짜리이다... 데이터 엔지니어링을 하는 사람이 아니면 다소 어려울 것 같고,

실질적으로 Best Practice의 패턴을 공부하는 것이기 때문에 현업에서 종사하거나 이쪽 분야로 이직할 생각이 있는 사람에게 추천한다.

 

그게 아니라면 솔직히 이 책을 가지고 입문을 하기에는 어렵지 않나 싶다. (나같은 사람)

 

나는 이 책을 데이터 엔지니어링을 공부해보려고 신청했다. 아무래도 대 AI 시대에서 신규로 생성되는 직군에 데이터 엔지니어링도 반드시 중요한 부분을 차지한다고 생각한다. 기존에 데이터 라벨링만 중심으로 하다가 최근에는 데이터의 수집이나 품질, 관리 등 다양한 부분이 전문적으로 발전되고 있다고 느끼고 있다.

 

대부분 자동화 되고 있기 때문에 이것을 잘 기획하고 설계해야 양질의 값을 얻을 수 있다는 건 이제 당연한 사실이다.

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B9262361709

 

이 책은 한빛미디어 책의 상세페이지에 보는 것과 같이 문제 -> 해결책 -> 결과 -> 예제  이렇게 패턴을 알려주고 있다. 그래서 읽기가 상당히 편하고 백과사전식처럼 내가 원하는 부분만 보기도 편하게 되어있다. 실질적으로도 굉장히 만족한 부분이다.

 

그리고 목차를 보면 알 수 있듯 데이터 엔지니어링의 대부분 범위(데이터  수집, 흐름, 정렬, 보안 등)를 다루고 있다. 그래서 범용적으로 학습하기도 좋은 책으로 보인다.

 

이 책을 리뷰하기 위해서 열심히 읽었지만 약 3주 간의 시간 동안에는 다 읽기가 역부족이였기 때문에 3장의 오류 관리 디자인 패턴을 여러번 읽어 보았다. (오류 관리가 상당히 중요하다고 생각하기 때문에)

 

오류는 피할 수 없다

이 책에서는 오류는 피할 수 없으며, 이걸 어떻게 해결할지가 더 중요하다고 여러 패턴을 소개하고 있다. 특히 데이터 품질 문제(처리 불가능한 레코드, 중복), 지연 데이터, 그리고 하드웨어 실패 등을 다루는 디자인 패턴을 소개한다. 그 중 2개만 가져와 봤다.

 

① 패턴 #09: 데드 레터 (Dead Letter)

처리할 수 없는 레코드(Unprocessable Records)로 인해 전체 파이프라인이 중단되는 것을 방지하는 패턴이다.

  • 문제: 특정 레코드가 스키마 위반이나 비정상적인 값을 가져 잡(Job)을 중단시킴.
  • 해결책: 실패 지점에 try-catch 등을 사용하여 오류를 포착하고, 해당 레코드를 별도의 '데드 레터 스토리지'에 저장한 뒤 나머지 정상 레코드는 계속 처리함.
  • 구성 요소: 
    • 오류 처리 로직: 실패를 식별하고 메타데이터(실패 이유 등)를 추가.
    • 데드 레터 스토리지: 가용성이 높고 쓰기 성능이 좋은 객체 스토리지나 브로커 사용.
    • 모니터링 계층 : 오류 있는 레코드를 잡이 언제 처리하는지, 얼마나 오류율이 증가하는지 등 파악.
    • 리플레이 파이프라인: 수정된 레코드를 다시 메인 데이터셋으로 통합.
  • 주의할 점 : 리플레이 시 데이터 순서가 뒤바뀔 수 있으며, 다운스트림에 '스노우볼 백필링 효과'를 일으켜 중복 처리를 유발할 수 있음.

② 패턴 #10: 윈도 중복 제거 (Windowed Deduplicator)

데이터가 적어도 한 번 이상(at-least-once) 전달되는 시스템에서 발생하는 중복 문제를 해결한다.

  • 문제: 업스트림의 재시도나 네트워크 장애로 인해 동일한 데이터가 반복적으로 유입됨.
  • 해결책: '상태 스토어(State Store)'를 활용하여 특정 시간 범위(윈도) 내에 이미 처리된 레코드인지 확인.
  • 상태 스토어 유형:
    • 로컬: 빠르지만 실패 시 상태 손실 가능성 있음. (메모리에 상태 존재)
    • 내결함성 로컬: 원격 스토리지에 백업하여 안정성 확보.
    • 원격: 가장 안정적이지만 네트워크 지연 등으로 성능에 영향 있을 수 있음.
  • 결과: 완벽한 중복 제거는 불가능할 수 있음(공간 vs 시간 트레이드오프). 짧은 윈도는 자원을 아끼지만 중복을 놓칠 수 있고, 긴 윈도는 자원을 많이 소모함.

 

데이터 엔지니어링은 단순히 코드를 짜는 게 아니라, '실패를 어떻게 관리하느냐'의 싸움이다.

 

이 책은 단순히 기술 스택(Spark, Flink 등)의 문법을 설명하는 데 그치지 않고, 어떤 상황에서 어떤 구조(Pattern)를 가져가야 시스템이 견고해지는지를 알려준 책이다. 이 패턴들이 여러 분의 고민거리에 큰 도움(해결책)이 되리라 확신한다.