| 전인종 | 염금성 | 김정환 | 양현진 |
|---|---|---|---|
| @jnjongjeon | @venus-y | @JeongHwan95 | @woolala |
| BE | BE | BE | BE |
- Refresh Token과 Access Token은 로그인을 통해 발급됩니다.
- Refresh token은 서버에 저장됩니다.
- Access Token은 로그아웃 시 redis에 black list token으로 저장됩니다. 그 후 로그아웃 된 토큰으로 로그인 시 로그아웃이 거부됩니다.
- AI에게 배송지, 경유지, 목적지를 주면 해당 정보들을 기반으로 발송 담당자가 물건을 발송해야 할 최소 발송 시한을 받습니다. 또한 최소 발송시한은 슬랙 채널방에 올라갑니다.
- 주문 결제가 완료, 허브 생성 실패 시 슬랙 채널로 해당 내용이 전달됩니다.
- 주문 요청이 들어오면, 업체와 재고 검증을 동기적으로 실행합니다.
- 주문이 성공적으로 처리되면, 결제 메시지를 발행해 비동기적으로 결제 처리를 진행합니다.
- 결제가 성공적으로 처리되면 슬랙에 메시지가 전송되고, 배송 메시지를 발행하고 배송 처리가 시작됩니다.
- 결제가 실패하면 재고 복원 요청을 진행하고 주문이 취소됩니다.
- 배송이 실패하면 재고 복원 요청과 결제 취소 메시지가 발행된 후 주문이 취소됩니다.
- 허브 간 거리가 200km 미만일 경우: P2P(직접 배송) 방식으로 처리
- 허브 간 거리가 200km 이상일 경우: 다익스트라 알고리즘을 이용해 중간 허브를 경유한 최적 경로를 계산
- 허브 간 거리 정보를 기반으로 그래프 구성 모든 허브 간 거리를 HubDistance 테이블에 저장해두고, 이를 기반으로 그래프를 생성한다. ex)17개 허브면 17*17개의 데이터 저장
- 다익스트라 알고리즘을 이용한 최단 경로 탐색 최단 경로가 필요한 경우, 시작 허브와 도착 허브를 기준으로 그래프를 탐색하여 최단 경로를 반환.
- Redis를 활용한 경로 캐싱 허브 생성은 자주 발생하지 않으므로, 반복적인 경로 요청에 대해 Redis를 활용한 결과 캐싱을 통해 성능을 극대화.
커서페이징, 정렬, 검색어 등에 따른 동적 쿼리 작성을 위하여 QueryDSL 도입하여 활용했습니다.
연속된 요청으로 인한 DB병목을 해소하고 RefreshToken, AccessToken 등 소멸기간이 존재하는 데이터의 TimeToLive 관리를 용이하게 할 수 있도록 Redis를 도입하였습니다.
MSA 프로젝트로 개발이므로 허브 생성 후 허브 거리 생성, 주문 프로세스, 배송 프레스를 Kafka를 이용해서 비동기 처리하였습니다.




