6. 사례연구 - 마이크로서비스 도출과 아키텍처 구성

사내도서관(도서대출시스템)을 주제로 마이크로서비스를 도출하고 아키텍처를 구성해본다.

1) 요구사항 정의

도서대출시스템의 요구사항 정의

사용자 관리 및 로그인

  • 사용자를 등록한다.
  • 특정 사용자는 사서역할을 부여받는다.
  • 사용자는 로그인 / 로그아웃이 가능하다.

도서관리

  • 사서는 도서분류정보를 등록/수정/삭제한다.
  • 사서는 입고된 도서를 등록/수정/삭제한다.
  • 도서는 공급사에의해 공급된다.
  • 각 도서는 대출가능한 수량이 존재하며, 대출/반납에 의해 수량이 조정된다.

대출/반납

  • 도서 검색이 가능하다.
  • 베스트 대출목록 조회가 가능하다.
  • 재고가 있는 도서는 대출이 가능하다.
  • 대출기한이 지나면 연체된다.
  • 연체된 사용자는 대출불가상태가 된다.
  • 대출한 도서는 반납이 가능하다.
  • 대출이력이 저장된다.

배송

  • 원격지의 사용자는 배송을 요청할 수 있다.

이메일

  • 주요 업무 변화시 이메일로 사용자에게 통보한다.

2) 이벤트 스토밍을 통한 마이크로서비스 도출

요구사항을 사용자관리, 도서관리, 대출/반납, 배송, 이메일로 분류했는데 이는 비즈니스 해결을 위한 문제영역이다. 이러한 문제영역을 DDD에서는 서브도메인이라 부른다.

서브도메인을 바탕으로한 이벤트스토밍

  • 사용자 관리 서브도메인
  • 도서관리 서브도메인
  • 대출/반납 서브도메인
  • 게시판 서브도메인
  • 배송 서브도메인

바운디드컨텍스트 식별

이벤트스토밍 결과를 바탕으로 경계를 표현해 컨텍스트를 구분한다.

  • 사용자 관리 서브도메인 (회원, 포인트, 로그인)
    로그인은 회원이 되기 이전의 시점에 발생가능한 정보라는 의미에서 개념적 차별성이 있기때문에 다른 컨텍스트로 식별한다.
    이렇게 되면 두 컨텍스트간의 일관성이 유지되어야 하기때문에 회원등록과 같은 이벤트 발생시 이벤트를 비동기로 전달한다.

  • 도서관리 서브도메인
    서브도메인 그대로 바운디드 컨텍스트로 식별

  • 대출/반납 서브도메인(도서대출집계정보, 도서검색정보, 대출, 반납, 연체, 대출가능여부, 개인라이브러리)
    [도서대출집계정보],[도서검색정보] 는 모든 회원이 대출전에 접근가능한 정보라는 부분에서 [대출], [반납], [연체], [개인라이브러리] 와는 맥락이 다르다.
    또한 [도서대출집계정보],[도서검색정보]는 빈번히 일반회원들에게 노출되는 정보이기때문에 다른 컨텍스트로 분리하게되면 조회와 생성을 분리하는 CQRS패턴을 활용할 수 있다.

  • 게시판 서브도메인
    서브도메인 그대로 바운디드 컨텍스트로 식별

  • 배송 서브도메인
    서브도메인 그대로 바운디드 컨텍스트로 식별

컨텍스트 다이어그램


도출된 바운디드 컨텍스트간의 호출관계를 명확하게 인지하기 위해 컨텍스트 다이어그램을 작성한다.
컨텍스트간의 통신은 비동기(점선) / 동기(실선) 호출방식으로 표현한다.

내부 아키텍처 정의

이벤트스토밍을 통해 식별한 애그리거트는 헥사고날의 내부영역인 도메인 모델의 후보가되고, 커맨드요소는 외부영역의 인바운드 어뎁터인 API의 후보, 이벤트는 외부영역의 아웃바운드 어뎁터를 통해 전송될 메시지의 대상이 된다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN