SW/마이크로서비스

마이크로서비스 : 엔티티, 값객체, 표준 타입 식별하기 : 정의, 개요, 방법

얇은생각 2020. 5. 23. 07:30
반응형

헥사고날 아키텍처

마이크로서비스 : 엔티티, 값객체, 표준 타입 식별하기 : 정의, 개요, 방법


전술적 설계는 이전 차시에서 헥사고날 아키텍처로 설명했던 마이크로서비스의 가장 안쪽의 도메인 모델을 설계합니다. 그 다음은 도메인 모듈, 그리고 마이크로서비스를 설계를 합니다. 이 헥사고날 아키텍처는 고유한 비즈니스의 개념을 표현하는 도메인 모델과 UI, 데이터베이스 등의 기술을 분리합니다. 도메인과 기술의 분리는 빠르게 변화하는 기술의 변경과 대체를 쉽고 빠르게 수행할 수 있습니다.

그럼 모델링을 하기에 앞서 모델 패키지 구조를 Model, Repository, Service로 구성하고, 그리고 실제 도메인 모델이 그려질 다이어그램이 위치합니다. Domain 안의 Model이라는 패키지 안에는 도메인 모델을 구성하는 Entity, 값 객체, 표준 타입의 도메인 모델들이 위치합니다.

 

마이크로서비스 : 엔티티, 값객체, 표준 타입 식별하기 : 정의, 개요, 방법

 

이 Entity, 값 객체, 표준 타입 등의 객체들을 식별하는 것, 이 모델링 활동을 도메인 모델 설계라고 합니다. 또한 Repository 패키지에는 저장소 인터페이스가 위치하고, Service 패키지에는 서비스 인터페이스와 이 인터페이스의 구현체가 위치합니다. 이 활동이 도메인 모듈을 설계하는 것입니다. 도메인 모델링을 통해 도메인 모델과 도메인 모듈을 설계할 수 있습니다. 이렇게 각 패키지에 위치한 도메인 모델과 도메인 모듈의 각 요소들을 모아 하나의 클래스 다이어그램으로 표현합니다.

 

 

Account Service

마이크로서비스 : 엔티티, 값객체, 표준 타입 식별하기 : 정의, 개요, 방법

전술적 설계 단계에서 이벤트 스토밍 기법을 활용해서 회원을 관리하는 기능의 Account Service를 도출했습니다. 이 서비스는 회원의 정보를 나타내는 Aggregate으로 Account를 식별했습니다. 이 Account의 속성으로 아이디, 이름, 주소, 이메일 주소, 멤버 유형 그리고 멤버십 레벨을 식별합니다.

그럼 이 Account 서비스를 가지고 도메인 모델과 도메인 모듈의 설계를 진행합니다. 먼저 도메인 모델 설계는 Entity, 값 객체, 표준 타입을 식별하는 것부터 시작합니다. Account 서비스에서 Entity와 값 객체 그리고 표준 타입을 식별합니다.

먼저 쇼핑몰의 회원은 상품을 판매하려는 것인지, 판매자가 등록한 상품을 구매하려는 것인지 구분됩니다. 또한 회원은 판매 또는 구매에 따라 멤버십 등급을 부여받을 수 있도록 설계합니다. 또한 회원은 기본적으로 아이디, 이름 그리고 이메일 주소와 주소 정보의 입력을 통해 회원으로 등록합니다.

 

 

도메인 모델 요소

이 내용을 모델로 표현해 보면 화면과 같이 그려질 수 있습니다. Account, Address, MemberType, 그리고 MembershipLevelType의 객체가 어떤 요소로 정의되어야 합니다. 먼저 Account 객체는 Entity로 식별되어야 합니다.

왜냐하면 Entity는 다른 형태의 Entity들과의 특성을 구별할 수 있는 고유한 식별자를 갖고 있으며, 객체의 상태가 계속해서 변할 수 있다는 특징을 갖습니다. Account가 쇼핑몰 시스템을 사용하는 판매자, 구매자라는 사용자를 정의하고 있습니다. 다른 사용자와 식별되어야 하고, 또 상태가 변할 수 있어야 하기 때문입니다.

Account Entity의 속성으로 주소 정보가 있습니다. 이 주소 정보는 우편번호와 주소로 구성되므로 별도의 객체로 표현합니다. 별도 객체로 분리한 Address는 Account를 설명하는 객체로 값 객체로 정의할 수 있습니다. Address 객체의 속성인 주소나 우편번호가 변경되는 경우, 부분적 수정이 아닌 새로운 주소를 생성한 후 기존 주소 정보를 대체하는 방식으로 변경합니다.

만약 사용자가 하나가 아닌 여러 개의 주소를 가질 수 있고, 또 그 주소별로 관리해야 하는 요구가 있다면 이때는 Address를 값 객체가 아닌 Entity로 식별하게 됩니다. 또한 회원이 판매를 위해 시스템을 사용하는지, 구매를 위해 사용하는지 구분이 되도록 모델링을 해야 하므로 MemberType의 표준 타입을 이용해서 모델링을 합니다. 즉 판매를 위한 사용자, 구매를 위한 사용자를 SELLER, BUYER로 사용자 타입을 표현합니다. 마찬가지로 시스템의 사용자의 멤버십 등급을 VIP, GOLD, SILVER로 구분하기 위해 MembershipLevelType이라는 열거형을 이용해서 표준 타입을 모델링합니다.

 

 

Account 도메인 모델

마이크로서비스 : 엔티티, 값객체, 표준 타입 식별하기 : 정의, 개요, 방법

 

도메인주도설계에 대해 설명할 때 유비쿼터스 언어가 바운디드 컨텍스트와 함께 중요합니다. 이 모델을 표현하기 위해 사용한 객체의 이름이나 속성, 타입의 이름을 유비쿼터스 언어로 표현해야 합니다. Account라는 이름, 속성으로 사용한 Address, Email이라든가 회원이 상품 판매의 역할을 갖는지, 구매의 역할을 갖는지를 표현하는 SELLER, BUYER의 표현도 유비쿼터스 언어로 정의하고 사용해야 합니다.

모델에 사용된 이것들이 구현에도 그대로 활용되게 되므로 명확히 정의하고 사용해야 합니다. Account 서비스를 Account, Address, MemberType 그리고 MembershipLevelType을 식별해서 도메인 모델로 표현하였습니다. 이 도메인 모델이 헥사고날 아키텍터의 중심에 위치한 도메인 모델을 표현합니다.

반응형