Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 패스트캠퍼스
- 업스테이지패스트캠퍼스
- 패스트캠퍼스업스테이지에이아이랩
- UpstageAILab#국비지원
- 패스트캠퍼스AI부트캠프
- 티스토리챌린지
- 국비지원
- 패스트캠퍼스업스테이지부트캠프
- UpstageAILab
- 오블완
Archives
- Today
- Total
김민주
[TIL] 241205 - 대규모 AI 시스템 설계 프로젝트 1일차 본문
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 물류 관리 및 배송 시스템 개발 (스파르타 물류)
- 개요
- 스파르타 물류는 각 지역에 허브 센터를 가짐
- 각 허브 센터는 여러 업체의 상품을 보관함
- 업체 상품은 허브 → 허브 전달
- 상품 배송 요청이 들어오면 목적지 허브로 물품을 이동시켜 목적지에 배송
- 프로세스
- 시스템은 허브를 갖고 있으며, 이 허브는 해당 도 내의 모든 주문, 재고 관리, 물류 운영을 담당함
- 일산의 플라스틱 가공 업체(예시): 일산에 위치한 생산 업체
- 부산의 바구니 제작 업체(예시)가 플라스틱 업체에 연락해 1000개의 플라스틱 가공품을 주문함 → 플라스틱 업체는 스파르타 물류에 배송을 요청 (가공품이 허브에 저장되어있음)
- 시스템은 배송 요청 처리를 위해 경기도 허브 → 부산시 허브 가공품 이동 계획을 세움 → 허브 간 이동 경로에 따라 가공품이 안전하게 전달됨
- 부산시 허브에 가공품 도착 → 부산 허브 소속 배송 담당자가 가공품을 바구니 업체로 전달
- 요구사항
- 허브는 총 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
'STUDY > TIL' 카테고리의 다른 글
[TIL] 241207 - 대규모 AI 시스템 설계 프로젝트 3일차 (0) | 2024.12.07 |
---|---|
[TIL] 241206 - 대규모 AI 시스템 설계 프로젝트 2일차 (0) | 2024.12.06 |
[TIL] 241204 (0) | 2024.12.04 |
[TIL] 241203 (0) | 2024.12.03 |
[TIL] 241202 (2) | 2024.12.02 |