핵심 인사이트 (3줄 요약)

  1. 본질: 이벤트 소싱(Event Sourcing)은 데이터의 최종 상태만 저장하는 대신, 상태를 변화시키는 모든 사건(Event)을 발생 순서대로 저장소에 영구 기록하는 방식이다.
  2. 가치: 데이터 변경 이력을 완벽하게 보존하여 언제든 과거 특정 시점의 상태를 복원(Replay)할 수 있으며, 시스템의 추적성과 감사(Audit) 능력을 극대화한다.
  3. 판단 포인트: 데이터의 '결과'보다 '과정'이 중요하거나, 복잡한 비즈니스 트랜잭션의 이력을 기반으로 다양한 분석 뷰를 생성해야 할 때 CQRS와 결합하여 사용한다.

Ⅰ. 개요 및 필요성

일반적인 DB(CRUD)는 사용자가 주소를 바꾸면 기존 주소를 지우고 새 주소를 덮어쓴다. 어제 어디 살았는지는 알 수 없다. 이벤트 소싱은 "주소가 A에서 B로 변경됨"이라는 사실 자체를 기록한다. 즉, 상태를 직접 바꾸는 게 아니라 상태를 바꾸는 '원인'을 저장한다. 이를 통해 데이터 손실 없는 완벽한 히스토리 관리가 가능해지며, 장애 발생 시 이벤트를 처음부터 다시 실행(Replay)하여 상태를 100% 복구할 수 있다.

📢 섹션 요약 비유: 이벤트 소싱은 '은행 통장 거래 내역'이다. 잔액(최종 상태)만 적어두는 게 아니라, 입금·출금 내역을 다 적어두고 합쳐서 잔액을 구하는 것과 같다.


Ⅱ. 아키텍처 및 핵심 원리

이벤트 저장 및 재생 메커니즘

  1. 이벤트 스토어 (Event Store):
    • 이벤트를 순차적으로 저장하는 Append-only 저장소다. 한 번 저장된 이벤트는 절대 수정되거나 삭제되지 않는다(Immutability).
  2. 이벤트 재생 (Replay):
    • 저장된 이벤트를 순서대로 적용하여 현재의 상태(State)를 계산해낸다.
  3. 스냅샷 (Snapshot):
    • 이벤트가 수만 개가 되면 재생 속도가 느려지므로, 특정 시점(예: 1,000번째 이벤트마다)의 최종 상태를 저장해두어 성능을 최적화한다.
[Event Store]
1. 회원 가입 (ID:123, Name: 홍길동)
2. 주소 변경 (Seoul -> Busan)
3. 등급 상향 (Silver -> Gold)
------------------------------------
Current State: {ID:123, Name:홍길동, Addr:Busan, Grade:Gold}

📢 섹션 요약 비유: 이벤트 로그는 '영화 필름'이다. 마지막 장면만 보는 게 아니라 필름 전체를 돌려봐야 데이터의 변화 과정(이야기 전체)을 완벽하게 알 수 있다.


Ⅲ. 비교 및 연결

상태 기반 저장 (CRUD) vs 이벤트 소싱 (Sourcing)

비교 항목상태 기반 저장 (CRUD)이벤트 소싱 (Event Sourcing)
데이터 형태현재 상태의 스냅샷발생한 일의 목록 (로그)
데이터 조작Insert, Update, DeleteOnly Insert (Append-only)
히스토리 관리별도 이력 테이블 필요데이터 자체가 히스토리임
상태 복구백업본에 의존이벤트를 재생하여 언제든 복구
분석 유연성낮음 (현재 데이터만 있음)높음 (과거 모든 시점 분석 가능)

📢 섹션 요약 비유: 상태 기반은 칠판을 지우고 다시 쓰는 것이고, 이벤트 소싱은 칠판에 쓴 걸 다 사진 찍어서 보관하는 것이다.


Ⅳ. 실무 적용 및 기술사 판단

기술사 핵심 포인트:

  1. CQRS와의 필연적 결합: 이벤트만으로는 조회가 매우 느리기 때문에, 이벤트를 조회 전용 DB로 미리 변환해두는 CQRS 패턴이 반드시 병행되어야 한다.
  2. 도메인 주도 설계 (DDD): 애그리게이트(Aggregate)의 상태를 관리하는 표준적인 방법으로 제시된다.
  3. 버전 관리 (Versioning): 시간이 흘러 이벤트의 구조(Schema)가 변할 때, 과거 이벤트들을 어떻게 처리할 것인지(Upcasting)에 대한 전략이 중요하다.

📢 섹션 요약 비유: 이벤트 소싱은 시스템의 '타임머신'이다. 어떤 기록도 지우지 않기에 언제든 과거로 돌아가서 문제를 분석하고 데이터를 복원할 수 있다.


Ⅴ. 기대효과 및 결론

이벤트 소싱은 데이터 정합성 문제를 원천적으로 해결하고, 비즈니스 가치가 높은 모든 변경 이력을 자산화한다. 하지만 구현 복잡도가 높고 이벤트 저장소 관리에 비용이 든다는 단점도 있다. 기술사 시험에서는 이벤트 소싱의 불변성(Immutability)과 재생(Replay) 특성을 강조하고, 이를 통해 얻을 수 있는 분석적 이점과 신뢰성을 CQRS와 묶어 설명하는 것이 고득점 포인트다.

📢 섹션 요약 비유: 이벤트 소싱은 IT 세상의 '블랙박스'다. 무슨 일이 일어났는지 하나도 빠짐없이 기록해서 나중에 사고 원인을 정확히 알 수 있게 해준다.


📌 관련 개념 맵

개념연관 키워드관계
이벤트 스토어Kafka, EventStoreDB이벤트를 저장하는 전문 저장소
스냅샷상태 저장, 성능 최적화이벤트 재생 속도를 높이는 보완 기술
프로젝션조회 모델 생성이벤트를 읽기용 데이터로 변환하는 과정
불변성 (Immutability)변경 불가, 신뢰성한 번 기록된 이벤트는 영원히 보존됨

👶 어린이를 위한 3줄 비유 설명

  1. 숙제를 다 한 결과물만 내는 게 아니라, 문제를 푼 과정 하나하나를 다 적어서 보관하는 거예요.
  2. 실수해서 지워도 예전 기록이 다 남아있어서 금방 되살릴 수 있어요.
  3. 내가 어제 무엇을 했는지, 며칠 전에는 어땠는지 전부 다 알 수 있는 마법 주소록이에요.