T
TechInsights
목록으로
BackEnd•2026. 01. 23.

서버를 위한 Redux: Node.js 이벤트 소싱 라이브러리 개발기

당근 마켓
당근 마켓 Engineering Team
당근 마켓

핵심요약

원문 보기

당근은 복잡한 요구사항 관리를 위해 Node.js 환경에서 사용 가능한 이벤트 소싱 라이브러리 'Ventyd'를 개발했습니다. Redux와 유사한 패턴을 제공하며, 프론트엔드와 백엔드 개발자 간의 협업 및 비즈니스 로직 공유를 용이하게 합니다.

서버를 위한 Redux: Node.js 이벤트 소싱 라이브러리 'Ventyd' 개발기

1. 배경: 복잡한 요구사항과 CRUD의 한계

  • API 서버는 주로 DB CRUD 작업을 통해 구현되나, 승인, 수정 기록, 롤백 등 복잡한 요구사항은 추가 테이블 및 로직 필요.
  • 기존 방식은 코드 복잡성 증가, 유지보수 어려움, '왜 이렇게 되었는가'에 대한 추적 불가 문제 발생.

2. 이벤트 소싱 패턴: 모든 변경을 기록

  • 핵심 아이디어: '현재 상태' 대신 '상태 변경을 유발한 모든 이벤트'를 저장.
  • 장점:
    • 완벽한 감사 로그 제공 (누가, 언제, 무엇을, 왜 했는지)
    • 타임머신 기능: 과거 특정 시점의 상태 재구성 가능.
    • 쉬운 롤백: 특정 시점 이후 이벤트 무시.
    • 비즈니스 인사이트: 데이터 변경 과정 분석.

3. Redux와 이벤트 소싱의 유사성

  • 개념적 유사성: Redux의 상태 관리 패턴 (Action → Reducer → State)과 이벤트 소싱의 'Event → Reducer → State' 구조가 유사.
  • 차이점: Redux는 브라우저 메모리, 이벤트 소싱은 DB에 영구 저장.
  • 핵심: '이벤트를 통해 상태를 관리한다'는 원리 동일.

4. Ventyd 라이브러리 소개

  • 목표: TypeScript 환경에서 이벤트 소싱을 쉽게 사용하도록 라이브러리 개발.
  • 특징:
    • 친숙함: Redux와 유사한 패턴으로 프론트엔드/Node.js 개발자에게 익숙.
    • TypeScript First: 타입 안정성 최우선.
    • 유연성: DB, 검증 라이브러리 자유롭게 선택 가능 (미리 만들어진 어댑터 미제공).
  • 주요 구성: Schema 정의, Reducer 정의, Entity 클래스, Repository (DB 연동).

5. Ventyd 활용 사례

  • 프론트엔드 배포 플랫폼: 배포 프로세스 전 단계 추적, 롤백 및 알림 기능 자동화, 변경 사항 추적 로직 중앙화.
  • 게임 상태 관리: 클라이언트/서버 간 코어 로직 공유, 즉각적 반응성, 오프라인 지원, 부정행위 방지, 재현 가능한 플레이 기록.

6. 개발자 관점에서의 이점

  • 백엔드: DDD 모델링 용이, 테스트 용이성(순수 함수), 버그 추적 용이, CQRS 기반 성능 최적화 가능.
  • 프론트엔드: 익숙한 Redux 개념(Interface, Action, Reducer, Hook)으로 백엔드 로직 이해 용이, 프론트엔드-백엔드 간 비즈니스 로직 공유 가능.

7. 결론

Ventyd는 이벤트 소싱을 TypeScript 생태계에서 쉽게 활용할 수 있도록 돕는 라이브러리. 프론트엔드와 백엔드 개발자가 이벤트와 상태라는 공통 언어로 소통하며 협업을 증진하고 더 나은 소프트웨어를 만드는 것을 목표로 함.

#BackEnd#FrontEnd#Architecture
당근 마켓
당근 마켓

당근 마켓 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
Amazon Bedrock AgentCore Runtime을 쉽고 빠르게 시작하기

Amazon Bedrock AgentCore Runtime을 쉽고 빠르게 시작하기

Enterprise Agentic AI를 위한 Amazon Bedrock AgentCore Built-in Tools: Code Interpreter and Browser Tool

Enterprise Agentic AI를 위한 Amazon Bedrock AgentCore Built-in Tools: Code Interpreter and Browser Tool