[JDBC] Spring Data JDBC 2

최우형·2023년 4월 19일
1

JDBC

목록 보기
3/3

📢 Spring Data JDBC 기반의 도메인 엔티티 및 테이블 설계

📌DDD(Domain Driven Design)란?

우리말로 도메인 주도 설계라고 해설할 수 있는데, 용어의 의미 그대로 도메인 위주의 설계 기법을 의미한다.

도메인(Domain)이란?

비즈니스적인 어떤 업무 영역과 관련이 있다

ex) 새로운 배달 주문 앱을 만들어야 한다면 고객과 음식점, 배달원, 그리고 카드사 또는 은행 등 배달 주문 앱을 구현하기 위해 필요한 업무들을 자세히 알면 알수록 퀄리티가 높은 애플리케이션을 만들 가능성이 높다.

고객이 음식을 주문하는 과정, 주문받은 음식을 처리하는 과정, 조리된 음식을 배달하는 과정 등의 도메인 지식(Domain Knowledge)들을 서비스 계층에서 비즈니스 로직을 구현해야 하는 것이다.

결론적으로, 도메인이란 용어 자체는 한 마디로 우리가 실제로 현실 세계에서 접하는 업무의 한 영역이다.


애그리거트(Aggregate)란?


이걸 세분화 하면

이렇게 나타낼 수 있다.

애그리거트란 세분화한 그림과 같이 비슷한 업무 도메인들의 묶음을 말한다.
위 그림에서 애그리거트는 총 네 개가 된다.

편의상 회원 애그리거트, 주문 애그리거트, 음식 애그리거트, 결제 애그리거트라고 부를 수 있다.


애그리거트 루트(Aggregate Root)란?

세분화한 위 그림에서 애그리거트 안에는 1개 이상의 도메인들이 있는데, 각각 애그리거트에는 해당 애그리거트를 대표하는 도메인이 존재한다.

이처럼 하나의 애그리거트를 대표하는 도메인을 DDD에서는 애그리거트 루트(Aggregate Root)라고 한다.

어떤 특정 집단이나 그룹의 대표라고 생각하면 이해가 조금 더 수월하다.

애그리거트 루트 선정 기준

  • 회원 애그리거트의 경우, '회원 포인트'가 얼마인지 알려면 해당 포인트를 가지는 '회원 정보'를 알아야한다. 즉, '회원 정보' 도메인이 애그리거트 루트가 된다.

  • 주문 애그리거트의 경우, '주문 정보'가 다른 도메인과 직접적으로 관련이 있다. 즉, '주문 정보' 도메인이 애그리거트 루트가 된다.

데이터 베이스의 테이블 간 관계로 보면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블이 되는 셈이다.

애그리거트 루트의 기본키 정보를 다른 도메인들이 외래키 형태로 가지고 있다고 볼 수 있다.


📌샘플 애플리케이션 도메인 엔티티 및 테이블 설계

도메인에서 애그리거트 루트 찾기

애그리거트 간의 관계

  • 회원 정보(Member)와 주문 정보(Orders)의 관계 (1대 N)
    • 한 명의 회원은 여러 번 주문을 할 수 있다.
  • 주문 정보(Orders)와 커피 정보의 관계 (N대 N)
    • 하나의 주문은 여러 종류의 커피를 가질 수 있다.
    • 하나의 커피는 여러 건의 주문에 속할 수 있다.
  • N 대 N의 관계는 일반적으로 1 대 N, N대 1의 관계로 재 설계 되기 때문에 아래와 같이 변경된다.
    • 주문 정보(Orders)와 주문 커피 정보 (Order_Coffee): 1대 N
    • 주문 커피 정보 (Order_Coffee)와 커피 정보 (Coffee) : N대 1

엔티티 클래스 간의 관계

  • 회원(Member) 엔티티 클래스
    • Member 클래스와 Order의 관계는 1대 N의 관계이기 때문에 Member 클래스에 List<Order>가 추가되었다.
  • 커피(Coffee) 엔티티 클래스
    • Coffee 클래스와 Order 클래스는 N 대 N의 관계를 가지기 때문에 N 대 N의 관계를 1대 N의 관계로 만들어주는 List<OrderCoffee>를 멤버 변수로 추가했다.
  • 주문_커피(OrderCoffee) 테이블
    • Order 클래스와 Coffee 클래스가 N 대 N 관계이므로 두 클래스의 관계를 각각 1대 N의 관계로 만들어주기 위한 OrderCoffee 클래스가 추가되었다.
    • 주문하는 커피가 한 잔 이상일 수 있기 때문에 quantity(주문 수량) 멤버 변수를 추가했다.

데이터베이스 테이블 설계


⭐핵심 포인트

  • DDD(Domain Driven Design, 도메인 주도 설계)는 도메인 위주의 설계 기법이다.

  • **도메인(Domain)이란?

    • 애플리케이션 개발에서 사용하는 도메인이란 용어는 주로 비즈니스적인 어떤 업무 영역과 관련이 있다.
    • 애플리케이션을 구현하기 위해 필요한 업무들을 자세히 알면 알수록 퀄리티가 높은 애플리케이션을 만들 가능성이 높다.
    • 비즈니스 업무 영역을 의미하는 도메인 지식(Domain Knowledge)들을 서비스 계층에서 비즈니스 로직으로 구현해야 한다.
  • 애그리거트(Aggregate)와 애그리거트 루트 (Aggregate Root)는 DDD에서 사용되는 용어이다.

    • 애그리거트(Aggregate)란 비슷한 업무의 하위 수준 도메인들의 묶음을 의미한다.
    • 애그리거트 내의 대표 도메인을 DDD에서는 애그리거트 루트(Aggregate Root)라고 한다.
    • 애그리거트 루트의 선정 기준
      • 각 애그리거트 내의 도메인들 중에서 다른 모든 도메인들과 직간접적으로 연관이 되어 있는 도메인이 애그리거트 루트가 된다.
  • 데이터베이스 테이블 간의 관계는 외래키를 통해 맺어지지만 클래스끼리 관계는 객체의 참조를 통해 관계가 맺어진다.

profile
프로젝트, 오류, CS 공부, 코테 등을 꾸준히 기록하는 저만의 기술 블로그입니다!

0개의 댓글