본문 바로가기
IT || 개발공부/Spring

[Spring] DDD설계와 SQL 중심 설계

by saesong 2023. 11. 9.

🔶DDD설계와 SQL 중심 설계

 

🔷DDD (Domain Driven Design)

🔹domain 과 DDD의 개념

DDD는 직역하면 '도메인 기반 디자인'인데, 여기서 domain은 어떠한 세부 분류(범주)의 상위분류(대분류)가 되는 것이다.

쉽게말해, 세부 카테고리를 묶어 한단어로 표현한 집합이라고 볼 수 있다.

즉, 유사한 카테고리의 집합이라고 할 수 있다.

ex) '학교'(Domain) ◀️ 학생, 교사, 책상, 의자, 교과서,...(세부범주)

따라서, DDD는 '비즈니스 domain 별로 나누어 설계 하는 방식'을 의미한다.

 

🔹특징과 장점

1. 데이터 중심이 아닌 도메인이 모델과 로직에 집중

  • DDD에서는 도메인 모델링을 통해 도메인의 핵심 개념과 규칙을 표현한다. 도메인 모델은 도메인의 핵심 개념을 객체로 표현한 것으로, 도메인 전문가와 개발자가 함께 도메인 모델을 설계하고 구현한다. 이를 통해 개발자에게 도메인 지식을 명확하게 전달하고, 소프트웨어 시스템을 도메인에 맞게 설계할 수 있어 오류를 예방하고 일관성을 유지할 수 있다.(비즈니스 요구사항을 정확히 반영할 수 있게 한다.)

2. 동일한 표현과 단어로 구성된 단일화된 언어체계 사용(업무용어 통일)

  • 분석 작업과 설계, 구현까지 통일된 방식으로 커뮤니케이션하는 것을 말함
  • 기획-개발-사업까지 팀 내부에서 단일화된 커뮤니케이션 방식으로 팀 협업 강화
    => 유지보수와 확장이 용이

3. Software Entity와 Domain간 개념의 일치

  • 도메인 모델부터 코드까지 항상 함께 움직이는 구조 지향(도메인 모델의 일관성과 유연성 보장 위함)

🔹단점

1. 복잡한 도메인을 다루는 대규모 프로젝트에 적합한 기법으로서, 개발 및 유지보수 비용이 증가할 수 있다.
2. 도메인 모델의 설계와 구현에 시간과 노력이 필요하기 때문에 초기에는 개발 속도가 상대적으로 느릴 수 있다.


 

🔷SQL 중심 설계

🔹개념

 데이터베이스의 구조(테이블, 컬럼, 제약조건 등)와 쿼리를 중심으로 소프트웨어 시스템을 설계하는 방법론이다.

데이터베이스와 관련된 요구사항을 먼저 정의하고, 데이터베이스 스키마를 설계한 후, 이를 기반으로 소프트웨어의 기능을 구현하는 방식이다. 데이터베이스와 관련된 요구사항이 중요한 경우에 적합하다. 데이터의 정합성과 성능을 중요시하는 프로젝트에 적합하며, 데이터베이스의 구조와 쿼리를 효율적으로 설계할 수 있다.

 

(SQL 중심 설계 - 예시 코드)

/* 1. 스키마 설계 */
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(100),
  email VARCHAR(100)
);


/* 2. 데이터 조작 및 조회 */
INSERT INTO users (id, name, email) VALUES (1, 'PJY', 'pjy@naver.com');

 

🔹특징

1. 데이터베이스 중심 설계

  • SQL 중심 설계는 데이터베이스의 구조와 쿼리를 중심으로 설계된다. 데이터베이스 스키마를 먼저 설계하고, 이를 기반으로 소프트웨어의 기능을 개발한다.

2. 정형화된 데이터 구조

  • 데이터베이스의 테이블과 컬럼 등과 같은 정형화된 데이터 구조를 중심으로 설계한다. 이를 통해 데이터의 일관성과 정확성을 유지할 수 있다.

3. 성능 최적화

  • 데이터베이스의 성능을 고려하여 설계할 수 있다. 쿼리의 튜닝이나 인덱스의 사용 등을 통해 데이터베이스의 성능을 최적화할 수 있다.

 

🔹장점

1. 데이터 일관성 유지

  • SQL 중심 설계는 데이터베이스의 구조를 중심으로 설계하기 때문에, 데이터의 일관성을 유지하기 쉽다. 데이터베이스의 제약조건을 이용하여 데이터의 정합성을 보장할 수 있다.

2. 쿼리의 재사용성

  • 쿼리를 중심으로 설계하기 때문에, 쿼리의 재사용성이 높아진다. 동일한 쿼리를 여러 곳에서 사용할 수 있으며, 이를 통해 개발 생산성을 향상시킬 수 있다.

3. 성능 최적화 가능

  • 데이터베이스의 성능을 고려하여 설계할 수 있다. 인덱스, 쿼리 튜닝 등을 통해 데이터베이스의 성능을 최적화할 수 있다.

 

🔹단점

1. 유연성 제한

  • 데이터베이스의 구조를 중심으로 설계하기 때문에, 변경이 발생할 경우 데이터베이스 스키마를 변경해야 합니다. 이는 유연성을 제한할 수 있으며, 변경에 따른 유지보수 비용이 증가할 수 있다.

2. 도메인 모델의 표현력 제한

  • 주로 데이터베이스의 구조를 표현하는데 초점을 맞추기 때문에, 도메인 모델의 복잡성을 정확하게 표현하기 어려울 수 있다.

 

⏹️DDD 설계와 SQL 중심 설계의 차이

  DDD 설계 SQL 중심 설계
관점의 차이 도메인 모델과 비즈니스 로직에 집중하여 설계 데이터베이스 구조와 쿼리 중심 설계
설계 순서와 방식 <설계순서>
1) 도메인의 핵심 개념과 규칙파악
2) 도메인 모델 설계
3) 도메인 서비스와 repository 구현
<설계순서>
1) 스키마 설계
2) 쿼리 작성
목적 ① 도메인이 중심이므로 도메인의 복잡성을 이해하고,도메인 모델을 통해 복잡성을 다룸
② 도메인 전문가와 개발자 간의 협업을 강조하며, 도메인 지식을 중심으로 설계하고 개발
① 데이터베이스의 구조와 쿼리를 중심으로 데이터를 조작하고 조회하는 것
② 데이터베이스의 성능과 일관성을 고려하여 설계하며, 데이터의 조작과 조회를 효율적으로 수행
유연성•
변경 관리
도메인 모델을 중심으로 설계하므로 도메인 모델의 변경이 곧 소프트웨어의 변경이기에 유연하게 대응 가능하다. 스키마를 중심으로 설계하기 때문에, 데이터베이스 스키마의 변경이 소프트웨어의 변경으로 이어진다.

 

정리하자면, 

DDD는 도메인에 초점을 맞추어 복잡한 도메인을 다루는데 적합하며, 
SQL 중심 설계는 데이터베이스의 구조와 쿼리를 중심으로 데이터 조작과 조회를 수행하는데 적합하다.

 

 


 

 

 

참고: https://happycloud-lee.tistory.com/94, 뤼튼,https://www.youtube.com/watch?v=4QHvTeeTsj0

 

댓글