[정리] DDD 설계 vs SQL중심 설계

2023. 5. 12. 23:30·개발/정리
728x90
반응형

1. DDD (Domain Driven Design)

(1) DDD란?

먼저 도메인이란 소프트웨어로 해결하고자 하는 문제 영역이다.

예를 들면 온라인 쇼핑몰의 도메인은 전자상거래이다.

하위 도메인으로 상품 판매의 이커머스 도메인이 있고 그 하위 도메인으로 상품이라는 도메인이 있다.

이러한 도메인을 중심으로 설계해 나가는 방법을 DDD(도메인 주도 설계)라고 한다.

 

(2) DDD가 왜 필요한가?

DDD는 기존 어플리케이션 설계가 도메인에 대한 이해가 부족한 상태로 설계 및 개발 되었다는 반성에서 출발했다.

DDD에서는 현실 -> 서비스 로의 일방향 소통구조를 탈피하여 현실 <-> 서비스 의 쌍방향 커뮤니케이션을 위해 필요하다.

 

예를 들면 상품판매의 도메인을 놓고 기획자와 개발자는 다른 생각을 가지고 있을 수 있다.

그래서 기획 -> 개발의 과정에서 서로 다른 생각을 가지고 일을 할 수가 있다.

DDD는 이러한 과정을 없애기 위해 도메인을 기반으로 설계하고 개발을 할 수 있다.

 

서로 다른 생각을 같은 생각으로 합치기 위해선 해당 도메인에 대한 공통된 정의가 필요하다.

공통된 정의를 통해 탄생한 단어를 유비쿼터스 언어라고 한다.

 

(3) 유비쿼터스 언어

출처 :https://yoonbing9.tistory.com/121

회원 추가, 회원 등록, 회원 가입

회원 가입이라는 단어를 누구는 추가, 또 다른 누구는 등록이라고 말할 수 있다.

만약 팀에서 3용어를 쓰고 있는데 새로운 개발자가 들어온다면 개발자는 혼동을 겪을 수 있다.

 

 

개발자들 사이에서도 변수명을 가지고 이러한 혼동이 올 수 있다.

어느 때는 register, 어느 때는 add 라고 한다면 상황에 따라 다르게 해석될수도 있다.

 

이러한 단어들을 공통적으로 하나의 단어로 팀에서 정의한 단어를 유비쿼터스 언어라고 한다.

 

(4) 바운디드 컨텍스트

 

도메인 중심으로 설계를 위해서는 도메인들이 서로 독립적이어야 하는데 이는 바운디드 컨텍스트로 된다.

출처 :https://yoonbing9.tistory.com/121

 

바운디드 컨텍스트는 위와 같이 관련 도메인을 하나의 컨텍스트로 경계를 정한다.

바운디드 컨텍스트 안에서는 유비쿼터스 언어를 사용해야 한다.

관련 도메인 영역의 경계 기준은 유비쿼터스 언어를 사용했을때 개념이 달라지는 곳을 기준으로 한다.

 

만약 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://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice

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

 

728x90
반응형

'개발 > 정리' 카테고리의 다른 글

[정리] 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
'개발/정리' 카테고리의 다른 글
  • [정리] REST API
  • [정리] Http Method 정리
  • [정리] Youtube가 가진 기능 도메인으로 정리해보기
  • [정리] 객체지향의 4가지 특징
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    30일 챌린지
    nodejs
    node
    CSS
    go
    html
    ERC721
    React
    node.js
    컨테이너
    하이퍼레저
    프로그래머스
    도커
    블록체인
    명령어
    mysql
    30일챌린지
    erc20
    js
    go언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
[정리] DDD 설계 vs SQL중심 설계
상단으로

티스토리툴바