[Backend] 데이터의 유형 정리
자주 쓰는 구분
- 상태(State) 지금 현재값이 핵심인 데이터. 덮어써도 됨. 예: 현재 배터리 %, 현재 온라인 여부, 현재 토큰 잔액
- 이벤트(Event) “무슨 일이 일어났다”가 핵심인 데이터. 보통 append-only. 예: 배터리 73% 수신, 충전 시작됨, 사용자 로그인함
- 명령(Command) 누군가에게 뭔가를 하라고 시키는 데이터. 처리 보장이 중 요함. 예: 이 알림 보내라, 이 작업 실행해라
- 조회 결과 / 읽기 모델(Read Model) 화면이나 API 응답용으로 가공된 데이터. 예: 기기별 최신 배터리 목록, 최근 1시간 배터리 변화
- 로그 / 감사 기록(Audit Log) 나중에 추적하기 위해 남기는 기록. 예: 누가 언제 어떤 값을 보냈는지
- 메트릭 / 시계열(Time Series) 시간에 따라 계속 쌓이는 측정값. 예: CPU 사용률, 온도, 배터리 변화 히스토리
실전 결정 트리
- 최신 값만 중요하다 그러면 상태
- 변화 하나하나가 중요하다 그러면 이벤트 또는 시계열
- 나중에 붙은 소비자도 과거를 알아야 한다 그러면 pub/sub 단독은 안 됨 DB / 파일 / Redis Streams / Kafka 쪽
- 지금 연결된 소비자에게 실시간 전달만 하면 된다 그러면 pub/sub 가능
- 반드시 처리되어야 하고 유실되면 안 된다 그러면 명령 큐 / stream / durable log
- 화면에서 보기 좋게 정리된 응답이 필요하다 그러면 read model을 따로 둠
네 배터리 예시에 적용 배터리 시스템은 사실 하나가 아니라 세 가지가 섞여 있습니 다.
- 현재 배터리 71% 이건 상태
- 18:55에 71%가 들어왔다 이건 이벤트
- 최근 20개 변화 내역 이건 시계열/히스토리
- 클라이언트에게 바로 알려주기 이건 실시간 전달
그래서 보통 구조는 이렇게 갑니다.
- 최신 상태 저장소 파일/DB/Redis key
- 이벤트 히스토리 저장소 JSONL/DB/Timeseries
- 실시간 전달 채널 메모리 큐, Redis pub/sub, SSE, WebSocket
간단한 선택 기준
- 최신 값만 보면 된다 상태 저장소만
- 실시간 알림도 필요하다 상태 저장소 + pub/sub/SSE
- 과거 이력도 필요하다 상태 저장소 + 히스토리 저장소
- 늦게 붙은 소비자도 과거부터 재생해야 한다 Streams/Kafka류 고려
네 케이스는 가장 자연스럽게 말하면:
- latest.json = 상태
- history.jsonl = 이벤트/히스토리
- SSE = 실시간 전달
즉 이미 꽤 좋은 방향으로 가고 있습니다.
댓글을 불러오는 중...