Web System Architecture, MSA, DDD,

2022. 10. 16. 23:57카테고리 없음

Web System Architechture

 

현업에서 MSA (마이크로 소프트 아키텍쳐)를 굉장히 많이 쓰고 있음.

서비스를 굉장히 쪼개서 만듬.

 

Monolithic은 한 레포지토리에 모든 데이터와 코드가 다 들어가 있는 형태.

단점 : 다른 프로젝트 등에 활용할 경우 잦은 수정과 사이드 이펙트를 고려해야함.

 

SOA 패턴은 공통부분을 공유하되 다른 부분은 분리.

단점 : 공통이 있는 부분이 문제가 생기면 공통을 가지는 모듈이 전부 문제가 생긴다.

 

사이드 이펙트와 의존성을 최소화하기 위해 MSA가 등장.

단점: 설계와 개발이 오래 걸림. 현업에서 생각보다 많이 쓰이진 않음. (레거시 코드를 버리기 힘들어서.)

 

MSA

어떻게 독립성을 유지할까.

서비스를 분리하고 개별적인 DB를 가짐.

클라이언트의 요청에 따라 API router가 개별적인 요청을 보냄.

각자 개발을 했을 경우 합칠 때 많은 충돌을 겪게 됨.

그래서 DDD가 등장.

의존성 최소화, 응집성 최대화.

 

domain은 역할과 책임이 있는 사건의 주체 영역.

Action (장바구니 저장, 삭제 등), Data (저장 기능), Event (전파)

 

User Story Mapping

- 아이디어를 덩어리로 나눠서 토론 및 모델링하는 기법 (이 도메인을 매우 잘아는 도메인 마스터가 필요)

Event Storming

- 이벤트를 사용해서 시스템을 모델링하기 위한 워크샵 및 브레인스토밍 기법 (도메인에 대한 이해가 부족할 경우 다 같이 동기화해서 시작. 현업에서 주로 사용)

Event Modeloing

- 시간과 이벤트의 개념 중심으로 마인드맵 모델링 기법 (도메인에 대해 잘 아는 사람이 필요.)

 

domain event은 도메인이 발생시키는 사건들.

create, update, delete (operation)

생성과 수정 삭제에서 변화를 일어남.

위 이벤트가 언제 일어나는지 사고하는 것이 이벤트 스토밍.

이벤트 스토밍의 예

 

6개의 시스템. 서로 통신을 고민해야 함.

이벤트 스토밍 진행 -> 각각 그룹으로 묶음(Aggregate) -> 서로 통신을 정의(Boris Diagram) -> 정리 (Snap-E, API와 data, stories, ui 등을 정의)

예시

도서관 관리 시스템 설계

반응형