- 이벤트 소스모델은, 애플리케이션의 상태변화를 시퀀스로 저장하고 관리하는 아키텍쳐 패턴
- 가장 좋은 예시는
useReducer
- 상태 변화를 이벤트로 표현한다.
- 모든 상태변화는 이벤트로 표현함.
- 각 이벤트는 "무슨 일이 일어났는지"를 설명하는 불변 객체
- 예:
{ type: 'ADD_TODO', payload: { text: '할 일' } }
- 이벤트 로그 유지
- 모든 이벤트는 시간 순서대로 로그에 저장됨.
- 이벤트 로그는 애플리케이션의 single source of truth
- 현재 상태는 이벤트들을 순차적으로 적용한 결과물
- 상태 재구성
- 현재 상태는 이벤트들을 처음부터 순서대로 처리하여 계산됨.
- 즉,
상태 = 이벤트들을 순차적으로 적용
장점
- 디버깅 용이성 & 타임 트레블링
- 모든 상태 변화가 명시적 이벤트로 기록되어 추적가능함.
- 버그 발생 시, 정확한 이벤트 시퀀스 재현 가능.
- 특정 시점까지의 이벤트만 재생하여 과거 상태로 돌아갈 수 있음.
- 상태 복원 및 지속성
- 이벤트 로그를 저장했다가, 나중에 다시 재생하여 상태 복원 가능.
- 서버와 클라 간 상태 동기화에 유용
- 풍부한 도메인 모델링
- 이벤트는 "무슨 일이 일어났는지"를 명확하게 표현
- 비즈니스 요구사항과 도메인 언어를 코드에 자연스럽게 반영\