Spring 개발일지

[대규모 AI 시스템 프로젝트] 도메인 추출 및 배송 도메인 분석

김둘리 2026. 3. 26. 10:00

26.03.25 (수)

 

팀원들과 모여서 무작정 ERD 작성부터 하려고 하니 튜터님께서 방문하셔서 순서에 대해 알려주셨다.

예를 들어 게시글 도메인을 통해 테이블 명세서를 작성하고 API 명세서까지 작성하는 순서에 대해 설명해주셨다.

  • [ ] 반복적으로 등장하는 키워드 = 우리가 관심을 가지는 영역 = 관리가 필요한 영역 = 도메인
    • [ ] 게시글 = 도메인
      • [ ] 게시글 도메인 관리에 필요한 데이터 고민
        • [ ] 게시글 식별을 위한 식별자
        • [ ] 게시글 제목 표현을 위한 필드
        • [ ] 게시글 내용 표현을 위한 필드
        • [ ] 게시글 작성자 표현을 위한 필드
        • [ ] 게시글 작성/수정/삭제 주체와 일자
      • [ ] 도메인 관리에 필요한 데이터 고민 완료 → 테이블 명세서 옮김
        • [ ] 옮기는 과정에서 고민해야할 건 데이터 타입, 제약조건
        • [ ] 데이터 타입, UK 와 같은 데이터베이스 테이블 관리 및 테이블의 각 컬럼을 관리하기 위해 필요한 제약조건 고민
      • [ ] 게시글 도메인과 연계된 도메인간의 연관관계를 파악
        • [ ] 게시글 작성 시 포인트 지급
        • [ ] 게시글 삭제 시 포인트 회수 및 해당 게시글에 작성된 댓글 삭제
        • [ ] 연관관계를 파악 해볼 수 있음
          • [ ] 예를 들면
            • [ ] 게시글(1) ↔ 댓글(N)
            • [ ] 게시글(1) ↔ 포인트(1)
        • [ ] 연관관계에 따른 도메인 후보 선출 : 게시글, 포인트, 댓글
          • [ ] 데이터 생애주기에 따라 같은 도메인인지를 고민
            • [ ] 예를 들면,
              • [ ] 게시글 삭제 : 해당 게시글의 댓글을 전부 삭제 = 삭제 생애주기가 동일
              • [ ] 게시글 조회 : 게시글을 조회 시 해당 게시글에 등록된 댓글을 함께 조회 = 조회 생애주기가 동일
              • [ ] 게시글 생성/수정 : 생성과 수정 요청이 댓글과는 다르게 동작
        • [ ] 게시글 도메인 관리를 위해 필요한 데이터를 저장하고 관리하기 위한 테이블 명세서
          • [ ] 식별자 타입은 무엇으로 할것인지
          • [ ] 각 필드를 잘 관리하기 위해 필요한 데이터 타입 고민
          • [ ] 제약조건 = 게시글 제목의 중복을 허용o or 허용x → UK
        • [ ] 연관된 테이블과의 관계를 도식
          • [ ] 게시글 ↔ 댓글 = 1:N 관계이므로, 댓글 테이블에 게시글 번호를 FK 추가
        • [ ] 작성된 테이블 명세서를 도식화로 옮기면 → ERD
        • [ ] 도메인/데이터에 대한 설계 이후 기능단위로 제공하기 위한 API 명세서 작성
          • [ ] 해당 기능 혹은 데이터를 생성/수정/삭제/조회 하기 위해 필요한 요청값은 무엇이 있는지, 어떤 Http Method로 요청해야하는지, 요청 주소(Endpoint)는 어떻게 구성할지, 응답은 어떤 데이터를 내려줄지, 응답코드(Http Status Code)는 어떻게 정의할지
            • [ ] RESTful 원칙에 따라 API 설계
              • [ ] URL = 자원의 위치는 복수형의 명사로 표현, 계층형
                • [ ] PUT /board/1/comments/1
                  • [ ] board
                    • [ ] 1번 게시글
                      • [ ] 댓글
                        • [ ] 1번 댓글
              • [ ] Http Method = 행위는 동사로 표현
                • [ ] GET/PUT/POST/PATCH/DELETE

 

우리는 전날 기능 분석을 한 페이지를 보며 도메인을 추출했다.

일단 1. 사용자 2. 허브 3. 업체 4. 주문 5. 배송 이렇게 다섯가지로 나누었고 발제문을 보며 필요한 엔티티에 대해서도 추가로 작성하였다.

1. 사용자 + 슬랙메세지

2. 허브, 허브간 이동경로

3. 업체, 상품

4. 주문, 주문 목록

5. 배송, 배송 경로, 배송담당자

다섯가지로 나누어 하나씩 맡아 도메인을 분석하고 테이블명세서와 ERD를 작성하기로 했다.

모두 끝나면 취합을 해서 수정할 부분을 수정하고 API 명세서로 넘어가기로 했다!

나는 배송 도메인을 맡았고 튜터님이 하시는 방식으로 나도 분석을 했다.

  • 담당 도메인 : 배송
    • [ ] 배송 도메인에 필요한 데이터
    • 배송 식별자
    • 어떤 주문에 대한 배송인지를 위한 필드
    • 출발 허브
    • 도착 허브
    • 배송지 주소
    • 현재 상태
    • 현재 상태 Enum
      HUB_WAITING
      HUB_MOVING
      HUB_ARRIVED
      OUT_FOR_DELIVERY
      DELIVERED
    • 수령인
    • 수령인 슬랙 id
    • 업체 배송 담당자 id
    • created_at / created_by
    • updated_at / updated_by
    • deleted_at / deleted_by
    • [ ] 배송 도메인 → 배송경로 도메인
    • 배송(1) 이 생성되면 배송 경로가 생성
    • 배송 경로는 주문 생성 시점에 모든 경로를 미리 생성 ( 변하지 않음 )
    • 배송 조회 시 배송 + 배송 경로 함께 조회
    • 배송 방법이 P2P인 경우
      배송(1) ↔ 배송 경로 (1)
    • 배송 방법이 Hub and Spoke / P2P + Hub and Hub Relay / Hub to Hub Relay 인 경우
      배송(1) ↔ 배송 경로 (N)
    ☆ 배송 방법 정해야함 !
    • [ ] 배송 경로 도메인에 필요한 데이터
    • 배송 ID
    • 시퀀스(배송 경로 상 허브의 순번)
    • 출발 허브 ID
    • 도착 허브 ID
    • 예상거리
    • 예상 소요시간
    • 실제 거리
    • 실제 소요 시간 → nullable 가능 (배송 완료 후 채움)
    • 현재상태
    • 현재상태 Enum ( 상의 및 수정 필요 )
      허브 이동 대기중, 허브 이동중, 목적지 허브 도착, 배송중
    • 배송 담당자 ID
    • created_at / created_by
    • updated_at / updated_by
    • deleted_at / deleted_by
    • [ ] 배송 담당자 도메인에 필요한 데이터
    • 배송 담당자 id ( 사용자 id와 동일 )
    • 소속 허브 id → nullable 가능 ( 허브 배송 담당자인 경우 Null? )
    • slack id
    • 배송 담당자 type (허브 배송담당자인지 업체 배송담당자 인지)
    • 배송 순번 → 라운드 로빈 방식 배
    • created_at / created_by
    • updated_at / updated_by
    • deleted_at / deleted_by

 

이렇게 각 엔터티에 필요한 데이터를 정리하고 테이블 명세서를 작성하면서 튜터님께 질문할 사항과 팀원들과 상의하여 정해야할 부분에 대해서도 정리했다.

 

테이블 명세서

- p_delivery 배송 테이블

 

p_delivery_path 배송 경로 테이블


p_delivery_manager 배송 담당자 테이블

 

튜터님께 질문 사항 및 해결 방법

Q. 배송담당자의 PK를 user 테이블에서 사용하는 ID로 해도 되는지

A. 회원에서 마스터, 허브 관리자, 배송담당자, 업체 별로 나누는건데 각자가 필요한 정보가 다르기때문에 배송담당자라는 테이블을 분리한 것

→ 배송 담당자에서 회원 테이블의 user_id 를 PK로 사용하게 되면 배송담당자 테이블에서 어떠한 역할을 가지고 있는지 식별 불가능
→ p_user의 user_id를 FK로 가져오고, 배송 담당자 테이블의 고유 PK를 만들어야함.

Q. 동일하게 주문테이블이 하나 생기면 배송 테이블도 하나가 생기는데 주문 id도 동일하게 배송 테이블의 pk로 지정해도 되는지

A. 발제문에서 주문이 생성되면 동시에 배송도 같이 생성되어야함 !

→ 그러면 주문테이블의 PK를 FK로 가져오고 배송 고유의 PK를 만들어야하는것?

  • 내일 의논해봐야할 사항
  1. 배송 경로 방법 (P2P, Hub and Spoke, ...)
  2. 소요시간과 거리의 타입
  3. 배송담당자 타입 (업체/허브) → Enum으로 할지 Varchar로 할지
  4. ERD FK는 내일 완성되면 할 예정