02장. 아키텍처 개요

ajufresh·2020년 7월 3일
0

DDD START!

목록 보기
2/9
post-thumbnail

블로그에 게시하는 위 글은 전체적인 내용 정리가 아닌
책을 읽으면서 새로 알게된 내용이나 제가 중요하다고 생각하는 내용을 정리한 글입니다.

1. 네 개의 영역

1) 표현영역

  • 사용자의 요청을 받아 응용 영역에 전달, 처리 결과를 사용자에게 표시
  • HTTP 요청을 응용 영역이 필요로 하는 형식으로 변환해서 전달

2) 응용 영역

  • 사용자에게 제공해야하는 기능 구현
  • 로직을 직접 수행하기보다는 도메인 모델에 로직 수행 위임하는 역할

3) 도메인 영역

  • 도메인 모델 구현
  • 도메인 모델의 로직을 구현

4) 인프라 스트럭처 영역

  • 구현 기술(ex. RDBMS 연동 처리, 메세징 큐 ...)을 다룸
  • 논리적인 개념보다는 실제 구현을 중심으로 다룸

2. DIP

책 내용을 기반으로 따로 정리해서 포스팅


3. 도메인 영역의 주요 구성요소

1) 엔티티

  • 고유의 식별자와 자신만의 라이프 사이클을 가짐

    고유한 개념을 표현하는데 사용

2) 밸류

  • 식별자를 가지고 있지 않음

    개념적으로 하나인 도메인 객체의 속성을 표현

  • 엔티티 속성, 다른 밸류 타입의 속성으로도 사용 가능

3) 애그리거트

  • 엔티티 + 밸류

4) 리포지터리

  • 도메인 모델의 영속성 처리를 할 때 사용

5) 도메인 서비스

  • 특정 엔티티에 속하지 않은 도메인 로직 제공

엔티티와 밸류

Q. DB의 Entity == 도메인 모델의 Entity ??

A. 아니다!

도메인 모델의 엔티티 = 데이터 + 도메인 기능을 함께 제공한다.

애그리거트

상위 수준에서 모델을 볼 수 있으며, 관련 객체를 하나로 묶은것

→ 관련 객체들을 객체 군집 단위로 묶어 모델을 바라보면 큰 틀에서 도메인 모델 관리 O

애그리거트에 속해있는 엔티티, 밸류를 이용해서 구현해야하는 기능을 제공하는 것은 루트 엔티티이다.

리포지터리

도메인 객체를 물리적인 저장소에 보관해야하는데, 이를 보관하기 위해 구현하는 도메인 모델

리포지터리를 통해 찾거나 저장하는 단위는 엔티티 루트이다.

레포지토리 자체 → 고수준 모듈

레포지토리를 구현한 클래스 → 저수준 모듈

리포지터리의 사용 주체 → 응용 서비스


4. 요청 처리 흐름

표현영역에서

  1. 요청의 데이터 형식이 올바른지 검사
  2. 응용 서비스에 기능 실행 위임
  3. 응용 서비스가 요구하는 형식으로 변환해서 전달

응용서비스

  1. 도메인 모델을 이용해서 기능 구현
  2. 기능 구현에 필요한 도메인 객체를 리포지터리에서 가져와 실행하거 생성해서 리포지터리에 저장

5. 인프라스트럭처 개요

인프라 스트럭처는 표현, 응용, 도메인 영역을 지원한다.

DIP를 적용하면 좋지만, 무조건적인 것은 X

가장 좋은 방법은 DIP가 주는 장점을 해치지 않는 범위에서 응용, 도메인 영역에서 구현 기술에 대한 의존을 가지는 것


6. 모듈 구성

모듈 구성은 취향(이라고 생각한다.)

하지만 한 패키지에 너무 많은 타입이 몰려서 코드를 찾기 어렵게할 수 있다.

profile
공블로그

0개의 댓글