당근마켓, Redux 경험을 서버로! 이벤트 소싱 라이브러리 Ventyd 공개
당근마켓은 복잡한 요구사항 관리를 위해 이벤트 소싱(Event Sourcing) 패턴을 도입하고, 이를 위한 Ventyd 라이브러리를 자체 개발
Ventyd는 Redux와 유사한 방식으로, TypeScript 기반으로 타입 안정성을 확보하고, 다양한 DB 및 검증 라이브러리 지원
Ventyd는 프론트엔드 배포 플랫폼, 게임 상태 관리 등 실제 서비스에 적용되어 개발 생산성 향상 및 유지보수 용이성을 입증
이벤트 소싱(Event Sourcing) 패턴의 핵심 원리
이벤트 소싱(Event Sourcing)은 데이터의 현재 상태 대신 상태를 변경하는 모든 이벤트(Event)를 저장하는 아키텍처 패턴이다. 기존 CRUD 방식의 한계점인 변경 이력 추적의 어려움을 해결하고, 완벽한 감사 로그(Audit Log)를 제공한다.
감사 로그(Audit Log): 누가, 언제, 무엇을, 왜 변경했는지 정확하게 기록
타임머신 기능(Time Machine): 과거 시점의 상태를 재구성 가능
롤백 용이성(Easy Rollback): 특정 이벤트 이후의 이벤트 무시
이벤트 소싱은 비즈니스 로직(Business Logic) 분석 및 디버깅(Debugging)을 용이하게 하며, CQRS(CQRS) 패턴과 함께 사용되어 성능 최적화를 이룰 수 있다.
Ventyd: Redux와 유사한 API 설계
Ventyd는 Redux의 개념을 차용하여 프론트엔드 개발자들이 쉽게 접근할 수 있도록 설계되었다. Redux의 dispatch, reducer, state 개념을 이벤트 소싱에 맞춰 재해석하여, 학습 곡선(Learning Curve)을 최소화했다.
Schema: TypeScript interface 정의
Event: Redux action
Reducer: Redux reducer
Entity: 비즈니스 로직을 가진 React Hook (useReducer)
Repository: API 클라이언트
이러한 유사성을 통해 프론트엔드와 백엔드 개발자 간의 원활한 소통(Communication)을 지원하고, 코드 재사용성(Code Reusability)을 높인다.
Ventyd의 주요 특징: TypeScript 지원 및 유연성
Ventyd는 TypeScript를 기반으로 개발되어 타입 안정성(Type Safety)을 최우선으로 고려했다. 또한, 다양한 DB, ORM, 검증 라이브러리를 지원하여 유연성(Flexibility)을 확보했다.
Valibot, Zod, TypeBox, ArkType 등 다양한 검증 라이브러리 지원
어댑터(Adapter) 패턴을 통해 DB 연동 용이
플러그인(Plugin) 시스템을 통한 기능 확장
Ventyd는 개발 환경(Development Environment)의 제약 없이 이벤트 소싱 패턴을 적용할 수 있도록 설계되었으며, 코드 품질(Code Quality) 향상에 기여한다.
Ventyd의 실제 활용 사례: 배포 플랫폼 및 게임 상태 관리
당근마켓은 Ventyd를 프론트엔드 배포 플랫폼과 게임 상태 관리에 활용하여 실질적인 이점(Practical Benefits)을 얻었다. 배포 플랫폼에서는 배포 프로세스 추적, 롤백 기능 구현에 활용되었으며, 게임에서는 즉각적인 반응성(Responsiveness), 오프라인 지원, 부정행위 방지, 재현 가능한 게임 플레이 구현에 기여했다.
배포 플랫폼: 배포 단계 추적, 롤백 기능 구현
게임 상태 관리: 즉각적인 반응성, 오프라인 지원, 부정행위 방지, 재현 가능
이러한 사례들을 통해 Ventyd는 다양한 도메인(Domain)에서 활용 가능하며, 개발 생산성(Development Productivity) 향상에 기여함을 알 수 있다.
백엔드 개발자를 위한 Ventyd의 장점
Ventyd는 백엔드 개발자에게 도메인 주도 설계(Domain-Driven Design, DDD)를 용이하게 하고, 테스트 용이성, 버그 추적, 성능 최적화 등의 장점을 제공한다. 특히, 이벤트 소싱 패턴을 통해 비즈니스 로직(Business Logic)을 명확하게 모델링하고, 유지보수성(Maintainability)을 향상시킬 수 있다.
도메인 주도 설계(DDD): Entity를 도메인 객체로 자연스럽게 모델링
테스트 용이성(Testability): 순수 함수인 Reducer는 테스트가 매우 쉬움
버그 추적(Bug Tracking): 이벤트 로그를 통해 문제 발생 원인 파악
성능 최적화(Performance Optimization): CQRS 패턴 적용 가능
Ventyd는 백엔드 개발자가 더욱 효율적(Efficiently)으로 시스템을 구축하고 관리할 수 있도록 돕는다.