본문 바로가기
Project/다님: 여행 일기🌻

[5일차 작업일지] DDD를 도입하려 한다..

by 2D3 2022. 11. 13.
728x90
하루 일정

# 9시: 간단 아침 회의
# 오전: DDD 공부
# 오후: 사진 올리기 로직 수정 -> DDD 공부..

 


 

개념

로드밸런서
서버에 가해지는 부하를 분산시켜 주는 것

Scale-up: 서버 자체의 성능을 확장
Scale-out: 서버 분산
RESTful한 API
자원(RESOURCE) - URI
행위(Verb) - HTTP METHOD
표현(Representations)

1. URI는 정보의 자원을 표현
2. 동사 지양 (get같은 행위에 대한 동사가 들어가면 안 됨)
아이데이션(Ideation)
새로운 아이디어를 만드는 생성, 발전, 커뮤니케이션 과정

 


 

아키텍쳐(Architecture)?
소프트웨어 응용 프로그램을 설계하기 위한 모델 또는 패턴을 의미
시스템의 구조(structure), 행위(behavior), 뷰(views)를 정의하는 개념적인 모델
이벤트 드리븐 아키텍쳐
이벤트의 생산, 감지, 소비 및 반응 또는 시스템 상태의 중대한 변화를 지원하는 소프트웨어의 모델 혹은 아키텍처 패러다임

 

DDD: 도메인 주도 설계

목적: 소프트웨어의 복잡성을 최소화. 요구사항 쉽게 반영.
핵심: 도메인을 서비스 별로 분리
장점: 높은 응집력과 낮은 결합도로 변경과 확장에 용이한 구조
예시: 온라인 음식 주문 업무
주문, 주문 상황, 음식점업무, 배달대행을 최상위 도메인으로 설정. 서브도메인으로 분해

3가지 레이어
Application Layer: 도메인과 Repository를 바탕으로 실제 서비스(API)를 제공
Domain Model Layer: Entity를 활용해 도메인 로직(비즈니스 로직)이 수행되는 계층
Infrastructure Layer: 외부와 통신(RDBMS, Redis, HttpClient, ...)을 담당하는 계층

img

 

헥사고날
외부와의 통신을 인터페이스로 추상화하여 비즈니스 로직 안에 외부 코드나 로직의 주입을 막는다는 것

포트
서비스(또는 usecase)에 어댑터에 대한 명세(specification)만을 제공하는 계층

어댑터
포트를 통해 인프라와 실제로 연결하는 부분을 담당하는 구현체
단순히 인터페이스 정의만 존재하며, DI를 위해 사용

Application Service(usercase)
어댑터를 주입 받아 도메인 모델과 어댑터를 적절히 오케스트레이션하는 계층

Domain Model
비즈니스 로직
이름 설명 예시
Driving Adapter = Primary Adapter 사용자의 요청을 받아들일 때 사용되는 Adapter AWS Lambda의 Handler WebApplication의 Controller
Driven Adapter = Secondary Adapter 도메인 모델의 처리에 사용되는 Adapter MessageQueue, Persistence Adapter

 

img

클린 아키텍처

Domain
Business Rule이 존재하는 영역. 
예시) 번역앱은 번역을 하고, 결제 앱은 결제를 수행

Infrastructure
UI, Database, Web APIs, Frameworks 등이 존재하는 영역.
예시) 송금을 위한 버튼은 쉽게 바뀔 수 있지만, 송금 방법은 쉽게 바뀌지 않음

-> 의존성 규칙: 관심사를 분리하는 것


모든 소스코드 의존성은 반드시 outer(Infrastructure)에서 inner(Domain)로 가야 된다.

어댑터
domain과 interfaces 사이의 번역기 역할
GUI의 MVC 아키텍처를 완전히 내포하며, Presenter, View, Controller 가 모두 여기에 속함

Infrastructure
모든 I/O components(UI, DB, Frameworks, Devices)가 있는 영역
Use case
특정 application에 대한 Business Rule
시스템이 어떻게 자동화 될 것인지에 대해 정의하고 application의 행위를 결정

예시
[계좌 송금]

입력: 수취인 계좌번호, 수취인 은행, 송금 금액
출력: 송금 성공 여부
적용되는 Business Rule
계좌번호의 양식은 유효해야 한다
해당 계좌가 돈을 수취할 수 있는 유효한 상태여야 한다
송금 금액은 1회에 1천만원까지만 허용된다

 


 

진행 상황

맨날 습관처럼 하는 레이어드 아키텍처 대신 DDD를 도입하려고 한다. 공부할 것도 많고 설계도 다시 해야되지만, 그래도 이번에 도전해보면 유의미한 일이 될 것 같다.

자료 읽으면 머리가 아프지만.. 그래도 읽다보니까 익숙해져서 괜찮아지고 있다. 파이팅!!!!

728x90

댓글