STUDY/TIL

[TIL] 241205 - 대규모 AI 시스템 설계 프로젝트 1일차

7alswn 2024. 12. 5. 17:43

Do - List

  • 코드카타
  • 2차 프로젝트(대규모 AI 시스템 설계 프로젝트) 발제
  • 요구사항 숙지
  • 와이어프레임 구성
  • DB 설계 - 테이블 명세서, ERD 작성

* 가중치 기반 로드 밸런싱 관련 유광열 튜터님 블로그

https://velog.io/@jaybon/gateway-loadbalance-custom-with-eureka

 

스프링부트 gateway 서버 로드밸런싱 커스텀 (with eureka)

스프링부트 MSA 구성 중 gateway 서버에서 서비스 중 일부 서비스의 로드밸런싱을 커스텀하려고 한다.기본 로드밸런싱은 RoundRobin 방식으로 분배하게 되어 있고,eureka에 등록된 서비스는 user서비스

velog.io


대규모 AI 시스템 설계 프로젝트

  • 주제: MSA 기반 국내 B2B 물류 관리 및 배송 시스템 개발 (스파르타 물류)
  • 개요
    • 스파르타 물류는 각 지역에 허브 센터를 가짐
    • 각 허브 센터는 여러 업체의 상품을 보관함
    • 업체 상품은 허브 → 허브 전달
    • 상품 배송 요청이 들어오면 목적지 허브로 물품을 이동시켜 목적지에 배송
  • 프로세스
    1. 시스템은 허브를 갖고 있으며, 이 허브는 해당 도 내의 모든 주문, 재고 관리, 물류 운영을 담당
    2. 일산의 플라스틱 가공 업체(예시): 일산에 위치한 생산 업체
    3. 부산의 바구니 제작 업체(예시)가 플라스틱 업체에 연락해 1000개의 플라스틱 가공품을 주문함 → 플라스틱 업체는 스파르타 물류에 배송을 요청 (가공품이 허브에 저장되어있음)
    4. 시스템은 배송 요청 처리를 위해 경기도 허브 → 부산시 허브 가공품 이동 계획을 세움 → 허브 간 이동 경로에 따라 가공품이 안전하게 전달됨
    5. 부산시 허브에 가공품 도착 → 부산 허브 소속 배송 담당자가 가공품을 바구니 업체로 전달
  • 요구사항
    • 허브는 총 17개, 허브 간 이동 경로는 이미 모델링을 통해 매핑 되어 있음
    • 배송 담당자: 허브 배송 담당자(허브 간 이동, 총 10명) / 업체 배송 담당자(목적지 허브→업체 이동, 각 10명)
    • 모든 업체는 특정 허브에 소속됨. 생산 업체 / 수령 업체로 구분됨
    • 모든 상품은 특정 업체와 특정 허브에 소속됨
    • 주문 생성 시 관련 재고 감소, 주문 취소 시 해당 수량 복원, 주문 삭제는 is_delete 필드로 관리
    • 배송+배송 경로 기록은 주문 생성 시 자동 생성, 관련 데이터는 is_delete 필드로 관리
    • 모든 sns 메시지는 sns 엔티티에 저장, 로그인 한 모든 사용자 및 내부 시스템에서 메시지 발송 가능
    • 사용자 엔티티가 모든 사용자 정보를 관리, 사용자 비활성화는 is_delete 필드로 관리
    • 사용자 권한: 마스터, 허브 관리자, 배송 담당자, 업체 담당자
    • is_delete 필드가 false인 데이터만 조회 및 검색에서 사용되도록 로직 구현

ERD

테이블 명세서

공통 사항

  • 테이블 명명 규칙: 모든 테이블에 p_ 접두사 사용
  • 논리적 삭제 관리: is_delete 필드를 추가
  • (논의) PK bigint autoincrement 와 Unique UUID를 함께 선언하여 관리 (확장성)
  • 분산 DB 고려
  • 모든 테이블에 created_at, created_by, updated_at, updated_by, deleted_at, deleted_by 필드를 추가

공통 컬럼

컬럼명 타입 기타
is_deleted boolean default (false)
created_at TIMESTAMP  
created_by TIMESTAMP  
updated_at TIMESTAMP  
updated_by TIMESTAMP  
deleted_at TIMESTAMP  
deleted_by TIMESTAMP  

허브 (p_hub)

💡위도 경도 함께 저장하고 최단 거리 경로 파악시 해당 데이터를 통해 계산할 것

컬럼명 타입 제약사항 기타
hub_id BIGINT PK  
hub_uuid VARCHAR(45) unique  
name VARCHAR(45)   허브 이름
address VARCHAR(255)   허브 주소
latitude DOUBLE(10, 6)   위도
longitude DOUBLE(10, 6)   경도
  • 권한
      생성 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 X X X O
    배송 담당자 X X X O
    업체 담당자 X X X O
  • 허브 리스트
    • 서울특별시 센터 : 서울특별시 송파구 송파대로 55
    • 경기 북부 센터 : 경기도 고양시 덕양구 권율대로 570
    • 경기 남부 센터 : 경기도 이천시 덕평로 257-21
    • 부산광역시 센터 : 부산 동구 중앙대로 206
    • 대구광역시 센터 : 대구 북구 태평로 161
    • 인천광역시 센터 : 인천 남동구 정각로 29
    • 광주광역시 센터 : 광주 서구 내방로 111
    • 대전광역시 센터 : 대전 서구 둔산로 100
    • 울산광역시 센터 : 울산 남구 중앙로 201
    • 세종특별자치시 센터 : 세종특별자치시 한누리대로 2130
    • 강원특별자치도 센터 : 강원특별자치도 춘천시 중앙로 1
    • 충청북도 센터 : 충북 청주시 상당구 상당로 82
    • 충청남도 센터 : 충남 홍성군 홍북읍 충남대로 21
    • 전북특별자치도 센터 : 전북특별자치도 전주시 완산구 효자로 225
    • 전라남도 센터 : 전남 무안군 삼향읍 오룡길 1
    • 경상북도 센터 : 경북 안동시 풍천면 도청대로 455
    • 경상남도 센터 : 경남 창원시 의창구 중앙대로 300

상품 (p_product)

컬럼명 타입 제약사항 기타
product_id BIGINT PK  
product_uuid VARCHAR(45) unique  
hub_id BIGINT FK (논리적) 소속 허브
company_id BIGINT FK (논리적) 소속 업체
name VARCHAR(45)   상품 명
quantity INTEGER   상품 재고
  • 권한
      생성 수정 삭제 조회 및 검색 
    마스터 관리자 O O O O
    허브 관리자 O (담당 허브) O (담당 허브) O (담당 허브) O (담당 허브)
    배송 담당자 X X X O
    업체 담당자 O (본인 업체) O (본인 업체) X O

주문 (p_order)

컬럼명 타입 제약사항 기타
order_id BIGINT PK  
order_uuid VARCHAR(45) unique  
supply_company_id BIGINT FK (논리적) 생산 업체
consume_company_id BIGINT FK (논리적) 수령 업체
product_id BIGINT FK (논리적) 주문 상품
quantity INTEGER   주문 상품 수량
request VARCHAR(100)   요청 사항
status VARCHAR(45)   created, fail, success
  • 권한
      생성 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 O O (담당 허브) O (담당 허브) O (담당 허브)
    배송 담당자 O X X O (본인 주문)
    업체 담당자 O X X O (본인 주문)

업체 (p_company)

컬럼명 타입 제약사항 기타
company_id BIGINT PK  
company_uuid VARCHAR(45) unique  
hub_id BIGINT FK (논리적) 소속 허브
name VARCHAR(45)   업체 명
type VARCHER(45)   supplier, consumer
address VARCHAR(255)   업체 주소
  • 권한
      생성 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 O (담당 허브) O (담당 허브) O (담당 허브) O (담당 허브)
    배송 담당자 X X X O
    업체 담당자 X O (본인 업체) X O

사용자 (p_user)

컬럼명 타입 제약사항 기타
user_id BIGINT PK  
user_uuid VARCHAR(45) unique  
username VARCHAR(255)    
password VARCHAR(255)    
role VARCHAR(45)   master, hub, deliver, company
  • 권한
      생성, 수정, 삭제 회원가입, 로그인 조회 및 검색
    마스터 관리자 O O O
    허브 관리자 X O O (본인)
    배송 담당자 X O O (본인)
    업체 담당자 X O O (본인)

배송 담당자 (p_delivery_person)

컬럼명 타입 제약사항 기타
delivery_person_id BIGINT PK  
delivery_person_uuid VARCHAR(45) unique  
user_id BIGINT FK (논리적)  
hub_id BIGINT FK (논리적) 소속 허브 ID
허브 배송 담당자 → 0      
sns_id VARCHAR(45)    
type VARCHAR(45)   허브 배송 / 업체 배송
sequence INTEGER   배송 순번
  • 권한
      생성 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 O (담당 허브) O (담당 허브) O (담당 허브) O (담당 허브)
    배송 담당자 X X X O (본인 정보)
    업체 담당자 X X X X
  • 타입이 허브 배송 담당자일 경우, 소속 허브 ID를 어떻게 해야할지?

배송 (p_delivery)

컬럼명 타입 제약사항 기타
delivery_id BIGINT PK  
delivery_uuid VARCHAR(45) unique  
order_id BIGINT FK (논리적) 주문 ID
delivery_log_id BIGINT FK (논리적) 배송 로그 ID
origin_hub_id     출발 허브 ID
destination_hub_id     목적지 허브 ID
status VARCHAR(45)   현재 상태 (허브 대기 중, 허브 이동 중, 목적지 허브 도착, 배송 중 등)
delivery_address VARCHAR(255)   배송지 주소
recipient_name VARCHAR(45)   수령인
recipient_sns_id VARCHAR(45)   수령인 SNS ID
  • 권한
      생성 (주문 시 자동 생성) 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 X O (담당 허브) O (담당 허브) O (담당 허브)
    배송 담당자 X O (본인 배송) X O (본인 배송)
    업체 담당자 X X X O

배송 경로 기록 (p_delivery_log)

컬럼명 타입 제약사항 기타
delivery_log_id BIGINT PK  
delivery_log_uuid VARCHAR(45) unique  
delivery_id BIGINT FK (논리적) 배송 ID
origin_hub_id BIGINT FK (논리적) 출발 허브 ID
destination_hub_id BIGINT FK (논리적) 목적지 허브 ID
status VARCHAR(45)   현재 상태 (허브 이동 대기 중, 허브 이동 중, 목적지 허브 도착, 배송 중 등)
estimated_duration INTEGER   예상 소요시간 (단위: 분)
actual_duration INTEGER   실제 소요시간 (단위: 분)
actual_distance INTEGER   실제 거리 (단위: km)

허브 간 이동정보 (p_hub_route)

컬럼명 타입 제약사항 기타
hub_route_id BIGINT PK  
hub_route_uuid VARCHAR(45) unique  
origin_hub_id BIGINT FK (논리적) 출발 허브 ID
destination_hub_id BIGINT FK (논리적) 도착 허브 ID
actual_duration INTEGER   소요시간
actual_distance DOUBLE(8,2)   거리
  • 권한
      생성 (주문 시 자동 생성) 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 X X X O
    배송 담당자 X X X O
    업체 담당자 X X X O

AI (p_ai)

컬럼명 타입 제약사항 기타
ai_id BIGINT PK  
ai_uuid VARCHAR(45) unique  
question VARCHAR(255)   질문
answer VARCHAR(255)   답변

SNS (Slack) (p_sns)

컬럼명 타입 제약사항 기타
sns_id BIGINT PK  
sns_uuid VARCHAR(45) unique  
user_id BIGINT FK (논리적) 수신자 ID
message VARCHAR(255)   내용
sent_at TIMESTAMP   발송 시간
  • 권한
      생성(주문 시 자동 생성) 수정 삭제 조회 및 검색
    마스터 관리자 O O O O
    허브 관리자 O X X X
    배송 담당자 O X X X
    업체 담당자 O X X X