TIL

7장 호텔 예약 시스템

1단계: 문제 이해 및 설계 범위 확정

API 설계

{
	"startDate": "2021-04-28",
	"endDate": "2021-04-30",
	"hotelID": "245",
	"roomID": "U1234546",
	"reservationID": "13422445"
}

데이터 모델

flowchart LR
    %% 호텔 서비스
    subgraph 호텔_서비스["호텔 서비스"]
        direction TB
        HOTEL[[HOTEL]]
        ROOM[[ROOM]]
        ROOM -->|참조| HOTEL
    end

    %% 요금 서비스
    subgraph 요금_서비스["요금 서비스"]
        ROOM_TYPE_RATE[[ROOM_TYPE_RATE]]
    end

    %% 투숙객 서비스
    subgraph 투숙객_서비스["투숙객 서비스"]
        GUEST[[GUEST]]
    end

    %% 예약 서비스
    subgraph 예약_서비스["예약 서비스"]
        RESERVATION[[RESERVATION]]
    end

    %% 관계 정의
    요금_서비스 -->|참조| 호텔_서비스
    예약_서비스 -->|참조| 호텔_서비스
    예약_서비스 -->|참조| 투숙객_서비스

계략적 설계안

flowchart TB
    %% 사용자 및 게이트웨이
    사용자["👤 사용자"] --> 공개_API_게이트웨이["🌐 공개 API 게이트웨이"]
    사용자 --> CDN["📦 CDN"]
    관리자["👤 관리자"] --> 내부_API["🔒 내부 API 게이트웨이"]

    %% 서비스 그룹
    subgraph 서비스_그룹[" "]
        direction TB
        호텔_서비스["🏨 호텔 서비스"]
        요금_서비스["💵 요금 서비스"]
        예약_서비스["📅 예약 서비스"]
        결제_서비스["💳 결제 서비스"]
        내부_API --> 호텔_관리_서비스["🛠️ 호텔 관리 서비스"]
                
        호텔_DB["🗄️ 호텔 DB"]
		    호텔_캐시["⚡ 호텔 캐시"]
		    요금_DB["🗄️ 요금 DB"]
		    예약_DB["🗄️ 예약 DB"]
		    결제_DB["🗄️ 결제 DB"]
		    
		    호텔_서비스 --> 호텔_DB
		    호텔_서비스 --> 호텔_캐시
		    요금_서비스 --> 요금_DB
		    예약_서비스 --> 예약_DB
		    결제_서비스 --> 결제_DB
    end
    

    공개_API_게이트웨이 --> 호텔_서비스
    공개_API_게이트웨이 --> 요금_서비스
    공개_API_게이트웨이 --> 예약_서비스
    공개_API_게이트웨이 --> 결제_서비스

3단계: 상세 설계

동시성 문제

데이터베이스 샤딩

캐시

캐시와 데이터베이스 사이의 데이터 일관성

서비스 간 데이터 일관성