1. DDD (Domain Driven Design)
(1) DDD란?
먼저 도메인이란 소프트웨어로 해결하고자 하는 문제 영역이다.
예를 들면 온라인 쇼핑몰의 도메인은 전자상거래이다.
하위 도메인으로 상품 판매의 이커머스 도메인이 있고 그 하위 도메인으로 상품이라는 도메인이 있다.
이러한 도메인을 중심으로 설계해 나가는 방법을 DDD(도메인 주도 설계)라고 한다.
(2) DDD가 왜 필요한가?
DDD는 기존 어플리케이션 설계가 도메인에 대한 이해가 부족한 상태로 설계 및 개발 되었다는 반성에서 출발했다.
DDD에서는 현실 -> 서비스 로의 일방향 소통구조를 탈피하여 현실 <-> 서비스 의 쌍방향 커뮤니케이션을 위해 필요하다.
예를 들면 상품판매의 도메인을 놓고 기획자와 개발자는 다른 생각을 가지고 있을 수 있다.
그래서 기획 -> 개발의 과정에서 서로 다른 생각을 가지고 일을 할 수가 있다.
DDD는 이러한 과정을 없애기 위해 도메인을 기반으로 설계하고 개발을 할 수 있다.
서로 다른 생각을 같은 생각으로 합치기 위해선 해당 도메인에 대한 공통된 정의가 필요하다.
공통된 정의를 통해 탄생한 단어를 유비쿼터스 언어라고 한다.
(3) 유비쿼터스 언어
회원 추가, 회원 등록, 회원 가입
회원 가입이라는 단어를 누구는 추가, 또 다른 누구는 등록이라고 말할 수 있다.
만약 팀에서 3용어를 쓰고 있는데 새로운 개발자가 들어온다면 개발자는 혼동을 겪을 수 있다.
개발자들 사이에서도 변수명을 가지고 이러한 혼동이 올 수 있다.
어느 때는 register, 어느 때는 add 라고 한다면 상황에 따라 다르게 해석될수도 있다.
이러한 단어들을 공통적으로 하나의 단어로 팀에서 정의한 단어를 유비쿼터스 언어라고 한다.
(4) 바운디드 컨텍스트
도메인 중심으로 설계를 위해서는 도메인들이 서로 독립적이어야 하는데 이는 바운디드 컨텍스트로 된다.
바운디드 컨텍스트는 위와 같이 관련 도메인을 하나의 컨텍스트로 경계를 정한다.
바운디드 컨텍스트 안에서는 유비쿼터스 언어를 사용해야 한다.
관련 도메인 영역의 경계 기준은 유비쿼터스 언어를 사용했을때 개념이 달라지는 곳을 기준으로 한다.
만약 1팀과 2팀이 있다면 1팀은 결제 컨텍스트 2팀은 배송 컨텍스트를 개발하며 효율적인 시간을 사용할 수 있다.
(5) 다시 DDD
DDD는 현실의 문제를 소프트웨어적으로 해결하려고 하는 과정에서
상황에 따라 달라질수 있는 단어들을 정의된 단어로 통합하고
관련 도메인끼리 묶어 독립된 컨텍스트를 만들어 내는 디자인 패턴이다.
2. SQL 중심 설계
(1) SQL 중심 설계란?
데이터베이스 구조와 데이터의 흐름을 중심으로 시스템을 개발하는 것이다.
(2) SQL 중심 설계 특징
- 데이터베이스 구조와 데이터의 흐름을 중심으로 시스템 설계
- 데이터베이스 설계를 중심으로 개발 프로세스를 진행
- 데이터베이스 쿼리를 통해 데이터를 처리
이처럼 SQL 중심 설계란 데이터를 중심으로 설계를 진행한다.
3. DDD 설계 vs SQL 중심 설계
DDD 설계 | SQL 중심 설계 |
도메인 중심 설계 | 데이터베이스 중심 설계 |
도메인의 문제 영역을 중심으로 설계 | 데이터베이스 구조와 데이터의 흐름을 중심으로 설계 |
도메인 모델을 통해 도메인 일관성 유지 | 데이터베이스 정규화를 통해 데이터 일관성 유지 |
도메인 모델을 통해 비즈니스 로직 처리 | 데이터베이스 쿼리를 통해 데이터 처리 |
도메인 모델이 변경되더라도 시스템의 일부분만 변경 | 데이터베이스 구조가 변경되면 시스템 전체에 영향 |
참고
https://loopstudy.tistory.com/334
https://mandykr.tistory.com/76
https://yoonbing9.tistory.com/121
https://engineering-skcc.github.io/microservice%20modeling/ddd-Srategic-design/
https://happycloud-lee.tistory.com/94
https://velog.io/@ggamang/DDD-%EC%84%A4%EA%B3%84-VS-SQL-%EC%A4%91%EC%8B%AC-%EC%84%A4%EA%B3%84
'개발 > 정리' 카테고리의 다른 글
[정리] REST API (0) | 2023.05.21 |
---|---|
[정리] Http Method 정리 (0) | 2023.05.19 |
[정리] Youtube가 가진 기능 도메인으로 정리해보기 (0) | 2023.05.10 |
[정리] 객체지향의 4가지 특징 (0) | 2023.05.03 |
[정리] 라이선스(저작권) (0) | 2023.05.03 |