ddingurri
유원준의 개발로그
ddingurri
전체 방문자
오늘
어제
  • 전체글 (37)
    • PS (7)
      • BOJ (5)
      • Programmers (0)
      • 후기 (2)
    • CS (22)
      • Data Structure (0)
      • Java (6)
      • OOP (2)
      • Spring (7)
      • WEB (3)
      • Database (4)
    • Develop (2)
    • Books (2)
    • Daily (4)
      • moments (0)
      • 회고 (4)

블로그 메뉴

    공지사항

    인기 글

    태그

    • 객체지향의 사실과 오해 2장
    • 주사위굴리기2 파이썬
    • 스프링
    • 객체지향의 사실과 오해 1장
    • 책 스터디
    • 23288 파이썬
    • 객체지향의 사실과 오해 요약
    • 주사위 굴리기2
    • 상어 중학교 python3
    • Java
    • SWEA
    • 삼성 문제집 파이썬
    • mysql 소수점
    • 객체지향의 사실과 오해 리뷰
    • float 소수점
    • 주사위 굴리기2 파이썬
    • mysql float
    • 상어 중학교
    • 객사오 2장
    • 주사위굴리기2
    • 객체지향의 사실과 오해 후기
    • 백준 주사위 굴리기2
    • 상어 중학교 python
    • 백준 주사위 굴리기2 파이썬
    • 21609 파이썬
    • 상어 초등학교
    • 백준
    • MySQL
    • Spring
    • 객체지향의 사실과 오해

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    ddingurri

    유원준의 개발로그

    DDD 설계 vs SQL 중심 설계
    CS/OOP

    DDD 설계 vs SQL 중심 설계

    2023. 4. 7. 00:27

    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 기술 표준이 존재한다.

     

     

    출처

    • https://velog.io/@dnflekf2748/DDDDomain-Driven-Design
    • https://incheol-jung.gitbook.io/docs/q-and-a/architecture/dddhttps://huisam.tistory.com/entry/DDD
    • https://huisam.tistory.com/entry/DDD 
    • https://dev-coco.tistory.com/166
    저작자표시 (새창열림)

    'CS > OOP' 카테고리의 다른 글

    [객체지향] 응집도와 결합도의 차이  (0) 2023.08.19
      'CS/OOP' 카테고리의 다른 글
      • [객체지향] 응집도와 결합도의 차이
      ddingurri
      ddingurri

      티스토리툴바