기타

DDD 설계 VS SQL 중심 설계

whooooo 2023. 11. 11. 16:28

DDD(Domain Driven Design) 설계 

 

개념

: DDD는 도메인기반 설계로 도메인 패턴을 중심에 놓고 설계하는 방식으로 복잡한 도메인을 다룰 때 효과적이다. 

 

특징 

  • DDD는 비즈니스 도메인에 중점을 두기 때문에, 개발자와 비즈니스 전문가 간의 커뮤니케이션이 원활해 질 수 있다. 
  • 지속적인 학습과 개선을 요구하며 비즈니스 요구사항 변경에 용이하다. 
  • 비즈니스 로직이 중심이 되기때문에 코드의 유지보수와 확장성이 높아짐
  • 복잡한 도메인을 다루는 데 유용하지만, 단순한 애플리케이션에서는 과도한 복잡성을 초래할 수 있다.
  • 설계 초반에 들이는 시간, 비용이 많이 들 수 있다. 

 

도메인이란? 

: 비즈니스의 핵심과 관련된 문제의 영역 덩어리로 어떤 소프트웨어 시스템을 구축하고자 할 때, 그 시스템이 다루는 주요 주제나 영역을 가리킨다.

 

 

🧐 예시를 통하여 도메인이 무엇인지 알아보자 

  • 개발할 서비스  : 쇼핑몰 
  • 쇼핑몰 서비스 개발 하위 기능 목록 
    1. 상품관련 기능
    2. 회원관련 기능 
    3. 결제 기능
    4. 주문 기능

 

여기서 알 수 있는 도메인의 종류 

  • 쇼핑몰 서비스를 개발한다고 할 때 쇼핑몰 서비스도 하나의 도메인이라고 할 수 있다. 
  • 하위 기능 목록들을 도메인 or 서브 도메인이라고 할 수 있다. 

 

 

SQL 중심 설계

 

개념

: 데이터베이스의 구조를 중심으로 시스템을 설계하는 방식으로 DB 스키마를 먼저 정의하고 이를 기반으로 소프트웨어를 개발하는 것을 뜻한다.

데이터 중심의 관점에서 엔티티, 관계, 테이블 등을 중심으로 개발이 이루어져 데이터 중심의 안정성과 일관성을 중요시 하는 프로젝트에서 효과적이다. 

 

 

특징

  • 정규화(1NF, 2NF, 3NF) 수준을 적용하여 데이터 중복을 최소화하고 데이터를 효율적으로 관리할 수 있다.
  • 트랜잭션과 ACID를 이용하여 데이터의 일관성 유지와 시스템 안전성을 보장한다. 
  • 정교한 SQL 쿼리를 작성하여 데이터에 효율적으로 접근하고 처리할 수 있다.
  • DB의 구조가 복잡해지면 데이터 모델링, 유지 보수가 어려워져 복잡성이 증가한다. 
  • 새로운 요구사항에 대응하기 위한 구조의 변경이 쉽지 않아, 유연성이 부족하다. 
  • Join 연산이 많이 필요한 경우 성능 문제가 발생할 수 있다. 

 

 

DDD 설계와 SQL 중심 설계의 차이점

 

  1. 중점의 차이 
    • DDD : 비즈니스 도메인에 중점을 두고, 비즈니스 로직을 중심으로 시스템을 구축
    • SQL 중심 설계 : 데이터 구조에 중점을 두어 엔터티, 데이터의 관계, 테이블 등을 중심으로 시스템을 구축
  2. 모델링의 관점 
    • DDD : 모델을 여러 Bounded Context로 나누어 복잡성을 해결하고, Aggregate와 Entity를 사용하여 도메인을 모델링
      • Bounded Context : 각자가 어떤 용어를 사용하는지 정확히 알려주는 역할을 한다. 
      • Aggregate : 여러 개의 연관된 객체를 하나의 단일 단위로 취급하는 모델링 패턴
    • SQL 중심 설계 : DB 스키마를 중심으로 정규화를 통해 데이터를 모델링