주문 API 설계와 성능 병목 분석: 실무에서 마주한 문제 해결하기


케이스 기반 문제해결 실습 첫번째, 주문 API 시스템 아키텍처 설계 및 성능 개선 실습에 대해 기술한 문서입니다. 해당 실습에 대해 아래 ISSUE를 첨부합니다.

https://github.com/sipe-team/3-1_spurt/issues/22

API 서버 설계와 중앙 데이터베이스 설계 (모놀리스 아키텍처)


해당 기능의 구체화를 위해 **배민상회의 플로우 (배송지등록→주문→주문내역조회 → 주문취소)**에 맞게 API 명세서를 우선적으로 작성하였습니다. 또한, ERD는 단일 데이터베이스로 가정하고 설계하였습니다.

API 명세서

해당 API들 중에서도, 주문 상세 정보를 조회 API를 중점으로 설명하였습니다.

데이터베이스 선택(설계 및 데이터 생성)


우선적으로 RDBMS(Mysql) 데이터베이스를 구축하고, 다음과 같이 ERD를 작성하였습니다.

diagram1.png

1. 최소한의 연관관계


PRODUCTS와 ORDERS의 다대다 관계 분리하기 위에 중간에 매핑테이블인 ORDER_PRODUCTS를 추가하였습니다. 최소한의 연관관계를 위해 ORDERS에서, delivery(배송), payments(결제), refunds(환불)과 관련된 정보는 연관관계를 매핑하지 않고, ID참조로 설정하였습니다.

실무에서는 연관관계를 최소한으로 한다라는 말을 듣고, 무분별한 연관관계의 단점에 대해 공부하였습니다.