1. DDD란?
DDD(Domain Driven Design : 도메인 주도 설계)란?
도메인 패턴을 중심에 놓고 설계하는 패턴이다. 즉, 도메인 간의 상호작용이 설계의 중심이 된다.
도메인이란, 소프트웨어로 해결하고자 하는 문제의 영역, 실세계에서 사건이 발생하는 집합과 같은 말들로 정의할 수 있다. DDD에서의 도메인이란 비즈니스 도메인을 의미하며, 비즈니스 도메인은 유사한 업무의 집합이다.
DDD의 특징
- 핵심 도메인과 도메인 로직에 초점을 맞춘다.
- Entity와 도메인 개념의 일치를 지향한다.
- 각 도메인은 서로 협력하지만 책임과 역할이 명확하여 높은 응집도와 낮은 결합도를 갖는 상태를 지향한다.
- 이를 통해 변경과 확장에 대해 유연한 코드를 작성할 수 있다.
DDD의 Layered Architecture
Layered Architecture란, 계층으로 나뉜 형태의 아키텍쳐를 의미한다.
Layered Architecture는 각 layer는 하나의 관심사에만 집중할 수 있도록 하는 것을 목표로 한다.
DDD에서의 Layered Architecture는 다음과 같은 4계층 구조를 따른다.
1. Presentation Layer(표현 계층) - Controller
- 사용자의 요청을 처리하는 Layer이다.
- 사용자에게 UI나 클라이언트에게 Response를 보내는 역할을 하는 모든 클래스를 포함한다.
- Client로부터 request를 받고 response를 하는 모든 API를 담는다.
2. Application Layer(응용 계층) - Service
- 비즈니스 로직을 정의하는 Layer이다.
- Domain Layer와 Infrastructure 계층을 연결한다.
- 많은 정보를 갖고 있지 않도록 유지하는 것이 좋다.
- 실질적인 데이터의 상태 변화 등의 처리는 Domain Layer에게 그 책임을 미루는 것이 좋다.
- 트랜잭션의 단위, DTO 변환, 엔티티 조회 및 저장이 포함된다.
- 파라미터 검증(validation)
- logical error를 검증한다.
- 요청 방식에 따라 달라지는 형식(Type)에 대한 검증은 Presentation Layer에서 담당한다.
3. Domain Layer(도메인 계층) - Model
- 비즈니스 규칙, 정보에 대한 실질적인 도메인의 정보를 가지고 있다.
- Entity를 활용하여 도메인 로직이 실행된다.
- 주로 상태 제어 역할을 한다.
4. Infrastructure Layer(인프라 계층) - Repository
- 외부와의 통신(DB, 메세징 시스템)을 담당한다.
- 해당 계층에서 얻어온 정보를 Application Layer이나 Domain Layer에 전달하는 역할을 한다.
2. SQL 중심 설계란?
SQL-Driven-Design이란, 데이터베이스의 구조와 데이터의 흐름을 중심에 놓고 설계하는 패턴이다.
SQL-DD의 특징
- 데이터베이스의 설계를 중심으로 개발을 진행한다.
- 하지만 이러한 이유로, DB의 변경사항이 개발 프로세스에 영향을 주기 쉽다는 것이 큰 단점으로 뽑힌다.
Java의 객체지향, DB와의 패러다임 불일치
객체지향 프로그래밍에서는 주로 추상화, 캡슐화, 다형성 등을 통해 복잡한 현실 세계에 맞추어
현실 세계 그대로를 표현하는 것이 주 목표이다. 하지만, RDBMS는 데이터를 중심으로 잘 정규화하여 저장하는 것에 의미를 두므로, 두 패러다임은 지향하는 바가 너무나도 다르다.
SQL-DD와 DDD의 차이점을 비교해보자.
/ | DDD | SQL-DD |
설계의 중심 | Domain 중심 | DB 및 데이터 중심 |
데이터의 처리 방식 | 도메인 모델 | DB의 쿼리 |
결합도(Coupling) | 낮다 | 높다 |
그래서 지금은..?
하지만, 현시대에서는 대부분 객체를 RDB에 저장하고 있는 것이 현실이다. 그렇다면 이 문제를 어떻게 해결할 수 있을까?
객체지향과 관계형 데이터베이스 간의 패러다임 불일치를 해결하고, SQL-DD에서 벗어나 Object 중심으로 개발하기 위해 ORM (Object Relational Mapping) 이라는 기술이 등장하였다.
그리고 자바 진영에서는 JPA라는 ORM 기술 표준이 존재한다.
출처
'CS > OOP' 카테고리의 다른 글
[객체지향] 응집도와 결합도의 차이 (0) | 2023.08.19 |
---|