아키텍처
이벤트 드리븐 아키텍처 도입기
두줄요약
앱스토어의 동기 호출 중심 구조를 인메모리 이벤트 버스로 분리해 결합도를 낮췄습니다. 트랜잭션 훅과 비동기 핸들러를 지원해 확장성과 유연성을 높였습니다.
문제 상황
- 앱스토어의 기능이 여러 도메인에 걸쳐 동기 호출로 이어지며 결합도와 복잡성이 증가
- 앱 삭제, 외부 Hook 발행처럼 확장 포인트가 늘수록 기존 방식의 유지보수와 확장성 한계가 드러남
원인 분석
- 생산자와 소비자를 직접 연결하는 구조로 인해 신규 처리 로직 추가 시 기존 코드 영향 확대
- 트랜잭션 경계, 비동기 처리, 멀티 캐스트 요구가 커지면서 단순 호출 방식으로는 대응이 어려움
해결 방법
- 인메모리 이벤트 버스를 직접 구현해 이벤트 발행과 구독을 분리
- 동기/비동기 핸들러, 트랜잭션 훅, 멀티 캐스트, 에러 핸들러를 지원하도록 설계
- 트랜잭션 커밋 전후 시점에 Hook을 등록해 원하는 phase에서 이벤트 처리 연결
성능/운영 포인트
- Go 루틴 풀을 사용해 비동기 처리의 자원 사용량을 제어
- 비동기 핸들러용 ErrorHandler로 백그라운드 에러 처리와 로깅 보완
- 내부 모놀리식에서 확장성을 확보한 뒤, 필요 시 외부 메시지 큐로 전환 가능한 여지 확보
