2차 프로젝트 23조 이삼해꽃 S.A.


개요

  • 프로젝트 명: 내일배움캠프 스파르타로직
  • 개발 기간: 2025.03.11 ~ 2025.03.26
  • 개발 인원: 강민, 김형찬, 박주희, 이동하

인프라 아키텍쳐 & 기술 스택

인프라

  • 기술 스택
    • 개발 언어: Java 17
    • 백엔드: Spring Boot 3.x
    • 데이터베이스: PostgreSQL, Redis
    • 빌드 툴: Gradle
    • API 문서화: Swagger
    • API 게이트웨이: Spring Cloud Gateway
    • 서비스 디스커버리: Spring Cloud Eureka
    • 버전 관리: Git GitHub
    • 메세징 큐: Kafka
    • 서킷 브레이커: Resilience4j
    • 설정: Spring Config
    • 분산 추적: zipkin
    • 실행 컨테이너: Docker
    • 외부 API: gemini AI, 네이버 Map API

ERD

ERD ERD1 ERD2 ERD3 ERD4 ERD5

DB 테이블

테이블 노션 페이지 : https://www.notion.so/teamsparta/1b32dc3ef5148090bef4d2a9e98d3343?pvs=4

p_user: 사용자 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값제약조건
id사용자 고유 값UUIDYYY  
username사용자 아이디 이름VARCHAR(10)Y Y  
password사용자 비밀번호VARCHAR(15)Y    
slack_id슬랙 아이디VARCHAR(255)Y Y  
role사용자 역할role_typeY    
created_at레코드 생성 시간TIMESTAMPY  NOW() 
created_by레코드 생성자VARCHAR(100)Y Yusername 
updated_at레코드 수정 시간TIMESTAMPY  NOW() 
updated_by레코드 수정자VARCHAR(100)Y  username 
is_deleted레코드 삭제 여부BOOLEANY  false 
deleted_at레코드 삭제 시간TIMESTAMP     
deleted_by레코드 삭제자VARCHAR(100)     
  • username: 최소 4자 이상, 10자 이하 알파벳 소문자(a~z), 숫자(0~9)
  • password: 최소 8자 이상, 15자 이하
    알파벳 대소문자(a~z, A~Z), 숫자(0~9), 특수문자
  • role: (CUSTOMER, HUB, DELIVERY, COMPANY, MASTER)

p_company: 업체 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id업체 IDUUIDYY  
hub_id업체 허브 IDUUIDY   
manager_id업체 담당자UUIDY   
name업체 이름VARCHAR(255)Y   
type업체 종류ENUMY   
phone업체 번호VARCHAR(20)Y   
road_address도로명 주소VARCHAR(500)Y   
jibun_address지번 주소VARCHAR(500)Y   
cityVARCHAR(255)Y   
district구/군VARCHAR(255)Y   
town읍/면/동VARCHAR(255)Y   
postal_code우편 번호VARCHAR(255)Y   
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_hub: 허브 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id허브 IDUUIDYY  
name허브 이름VARCHAR(255)Y Y 
manager_id허브 관리자 IDINTEGER    
road_address도로명 주소VARCHAR(500)Y   
jibun_address지번 주소VARCHAR(500)Y   
cityVARCHAR(255)Y   
district구/군VARCHAR(255)Y   
town읍/면/동VARCHAR(255)Y   
postal_code우편 번호VARCHAR(255)Y   
latitude위도NUMERIC(9,6)Y   
longitude경도NUMERIC(9,6)Y   
created_at레코드 생성 시간TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y   
updated_at레코드 수정 시간TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y   
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_hub_transit_info: 허브 이동 경로 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
departure_hub_id출발 허브 IDUUIDYY  
arrival_hub_id도착 허브 IDUUIDYY  
transit_time소요 시간(분)INTEGERY   
transit_distance이동 거리(미터)INTEGERY   
created_at레코드 생성일자TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y   
updated_at레코드 수정일자TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y   
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제일자TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_hub_stock: 허브 상품 재고 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
hub_id소속 허브 IDUUIDYY  
item_id상품 IDUUIDYY  
quantity재고 수량INTEGERY   
created_at레코드 생성일자TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y   
updated_at레코드 수정일자TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y   
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제일자TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_product: 상품 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id메뉴 IDUUIDYY  
company_id업체 IDUUIDY   
hub_id상품 관리 허브 IDUUIDY   
name상품 이름VARCHAR(100)Y   
price상품 가격DECIMAL(10,2)Y   
decription상품 설명TEXT    
created_at레코드 생성 시간TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정 시간TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  false
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_order: 주문 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id주문 아이디UUIDYYY 
provide_
company_id
공급 업체 아이디UUIDY Y 
recieve_
company_id
수령 업체 아이디UUIDY Y 
created_at레코드 생성 시간TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(100)Y Yusername
updated_at레코드 수정 시간TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(100)Y  username
is_deleted레코드 삭제 여부BOOLEANY  false
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(100)    

p_order_product: 주문 상세조회 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id주문 상세 IDUUIDYY  
order_id주문 IDUUIDY   
hub_id허브 IDUUIDY Y 
product_id상품 IDUUIDY Y 
product_name상품명UUIDY   
quantity수량INTY   
price가격DECIMAL(10,2)Y   
created_at레코드 생성 시간TIMESTAMPY  now()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정 시간TIMESTAMPY  now()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  false
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_delivery: 배송 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id배송 IDUUIDYYY 
order_id주문 IDUUIDY   
start_hub_id출발 허브 IDUUIDY   
end_hub_id도착 허브 IDUUIDY   
deliver_
manager_id
업체 배송 담당자 IDUUIDY   
status상태ENUMY   
receiver_
company_id
수령 업체 IDUUIDY   
receiver_company_
slack_id
수령 업체 슬랙 IDUUID    
created_at레코드 생성 시간TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정 시간TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_delivery_path: 배송 경로 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id배송 경로 IDUUIDYY  
delivery_id배송 IDUUIDY   
hub_transit_info_id허브 간 이동 정보 IDUUIDY   
start_hub_id출발 허브 IDUUIDY   
end_hub_id도착 허브 IDUUIDY   
delivery_manager_id허브 배송 담당자 IDUUIDY   
status상태ENUMY   
sequence허브의 순번NUMERICY   
estimated_distance예상 거리NUMERIC    
estimated_duration예상 소요 시간INTERVAL    
actual_distance실제 거리NUMERIC    
actual_duration실제 소요 시간INTERVAL    
created_at레코드 생성 시간TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정 시간TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제 시간TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_delivery_manager: 배송 담당자 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
user_id유저 IDINTEGERYY  
hub_id소속 허브 IDUUIDY   
slack_id슬랙 아이디VARCHAR(255)Y   
type배송 담당자 타입delivery_
manager_type
Y   
sequence배송 순서INTEGERY   
created_at레코드 생성일자TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정일자TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  FALSE
deleted_at레코드 삭제일자TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_slack_message: 슬랙 메세지 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
id슬랙 메세지 IDUUIDYY  
sender_id발신 ID (발신자 슬랙 ID)VARCHAR(50)Y   
receiver_id수신 ID (수신자 슬랙 ID)VARCHAR(50)Y   
message메세지 내용TEXTY   
delivery_time발송 시간TIMESTAMPY   
created_at레코드 생성일자TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정일자TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  false
deleted_at레코드 삭제일자TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

p_ai_log: AI 사용 기록 테이블

컬럼 ID컬럼 설명타입 및 길이Not nullPKUnique기본값
idAI 사용 기록 IDUUIDYY  
requestAI 요청TEXTY   
responseAI 응답TEXTY   
created_at레코드 생성일자TIMESTAMPY  NOW()
created_by레코드 생성자VARCHAR(50)Y  username
updated_at레코드 수정일자TIMESTAMPY  NOW()
updated_by레코드 수정자VARCHAR(50)Y  username
is_deleted레코드 삭제 여부BOOLEANY  false
deleted_at레코드 삭제일자TIMESTAMP    
deleted_by레코드 삭제자VARCHAR(50)    

API

노션 페이지로 대체합니다.

ERD5