회사에서 Event Driven Architecture를 우리 팀의 서비스에 적용하는 것을 목표로 이 책을 스터디하게 되었다.
Building Event-Driven Microservices
Organizations today often struggle to balance business requirements with ever-increasing volumes of data. Additionally, the demand for leveraging large-scale, real-time data is... - Selection from Building Event-Driven Microservices [Book]
www.oreilly.com
이 책의 1~5장을 읽으며 한 번에 이해되지 않거나 헷갈리는 개념과 핵심 키워드을 정리해보았다.
- 1장: 왜 이벤트 기반 마이크로서비스인가?
- 2장: 이벤트 기반 마이크로서비스 기초
- 3장: 통신 및 데이터 규약
- 4장: 기존 시스템에 이벤트 기반 아키텍처 통합
- 5장: 이벤트 처리 기본
도메인과 모델
- 도메인: 비즈니스가 다루는 실제 세계의 영역
- 모델: 도메인을 특저안 목적에 맞게 추상화한 결과물
예: 공고라는 도메인을 경계 콘텍스트에 따라 아래의 다양한 모델로 설계할 수 있다.
- 정보제공 콘텍스트: 세부정보(채용인원, 근무지, 연봉정보 등)
- 관리자 콘텍스트: 심사(현재상태, 승인/반려 이력, 반려 사유 등)
- 광고 콘텍스트: 광고상품 (지면, 단가, 성과 등)
- 인터렉션 콘텍스트: 유저활동(스크랩, 조회, 공유 등)
각 모델은 DB레벨에서 외래키로 관리하기보다는 ID로 연결하는 것이 권장된다.
경계콘텍스트
특정한 용어와 규칙이 일관되게 유지되는 논리적 경계, 위의 예시에서 정보제공, 관리자, 광고, 인터렉션에 해당한다.
통신구조
레벨에 따라
- 비즈니스 통신 예
- 지원팀 > 운영팀 > 기술팀 간 통신
- 조직이나 서비스 간의 의사결정과 협업
- 구현 통신
- 웹 서버 > 앱서버 > DB
- 시스템 간 물리적/논리적 연결 방식과 기술적 아키텍처
- 데이터 통신
- 프로토콜, 파일 형식 등
- 데이터의 구조와 규격
중앙 통제 / P2P 에 따라
- 애드혹 통신 (P2P) : 서로에 특화된 방법, 초기구축이 빠르고 단순
- 정규 통신 (중앙통제): 정규화된 방법, 유지보수/확장성에 유리
| 애드혹 | 정규 | |
| 비즈니스 | 단발적, 즉흥적 | 표준 워크플로우 |
| 구현 | api 호출, 웹훅 | 이벤트브로커, 버스, 펍-섭 |
| 데이터 | 가변적 스키마 사용 | 고정적 스키마 |
토폴로지
위상수학에서 시작된 개념으로, 구성요소들이 서로 연결되어 있는 물리적/논리적 배치 형태
- 단일 마이크로서비스의 토폴로지
- 예: 이벤트스트림을 받아서 필터링/변환한 뒤 DB에 저장하고 새 이벤트 스트림으로 내보내는 구조
- 비즈니스 토폴로지
- 복잡한 비즈니스 로직을 처리하는 마이크로서비스, 이벤트스트림, API 로 이루어짐
- 마이크로서비스: 비즈니스 경계콘텍스트를 구현
- 이벤트 스트림: 전체 콘텍스트의 도메인 데이터를 공유하기 위한 수단
- 복잡한 비즈니스 로직을 처리하는 마이크로서비스, 이벤트스트림, API 로 이루어짐
- 이벤트 브로커와 메시지 브로커
- 이벤트 브로커는 메시지 브로커를 대체할수 있지만, 반대는 그렇지 않다.
- 메시지 브로커는 메시지를 큐 단위로만 처리하므로 여러 컨슈머가 큐에서 같은 이벤트데이터를 소비하거나 메시지로부터 전체 데이터를 얻을 수 없음
- 이벤트 브로커는 거대한 장부에 순서대로 적힌 레코드에 인덱스를 통한 개별 액세스를 관리함 (+ 컨슈머는 각자 오프셋을 관리하여 독립적으로 소비함)
그 외
- 테이블 - 스트림 이원화: (로그)스트림을 테이블로, 테이블을 스트림으로 구체화 가능하다는 개념
- 이벤트브로커가 스트림을 컴팩션하여 크기를 줄이기도 함
- 스키마화: 컨슈머가 프로듀서에 묻지 않고도 이벤트 콘텐츠의 의미를 해석
- 진화 프레임워크
- 정형 클래스 생성
- 마이크로서비스 단일 작성자 원칙: 이벤트 스트림은 정확히 하나의 생산 마이크로서비스를 가진다는 원칙
- 이벤트 브로커
- 이벤트를 받아 큐 또는 파티션된 이벤트 스트림에 저장하여 다른 프로세스가 사용할 수 있도록 제공
- 대규모 이벤트 기반 체계를 운영하는 데 장점 제공, 마이크로서비스를 강화
- 확장성, 보존성, 고가용성, 고성능
- 브로커가 사용하는 기반(underlying) 데이터스토리지의 요건
- 파티셔닝, 순서보장, 불변성, 인덱싱, 무기한 보존, 재연성
'배운 것들 > 프로그래밍' 카테고리의 다른 글
| Event Driven Architecture 고찰 - (1) 왜 필요한가? (2) | 2026.03.13 |
|---|---|
| Express.js 에서 Nest.js로의 마이그레이션 작업 - Strangler 패턴 (2) | 2025.12.18 |