콘텐츠 연동

숙소, 객실, 패키지 정보를 연동하는 방법을 안내합니다.

콘텐츠 연동#

ONDA의 숙박 콘텐츠(숙소/객실 정보)를 효율적으로 동기화하고 최신 상태를 유지하는 전략을 안내합니다.

콘텐츠 연동 개요#

콘텐츠 연동은 다음 세 가지 레벨로 구성됩니다:

숙소 (Property)
  └─ 객실 타입 (Room Type)
      └─ 패키지/요금제 (Rate Plan)

데이터 구조#

레벨설명예시
Property호텔, 리조트, 펜션 등 숙박 시설서울 센트럴 호텔
Room Type객실 유형 및 구성디럭스 더블룸, 스위트룸
Rate Plan요금제 및 정책 (조식 포함, 환불 가능 등)조식 포함 프로모션

콘텐츠 정보(숙소/객실 설명, 이미지, 편의시설 등)는 자주 변경되지 않으므로 S3 벌크 다운로드 방식을 사용합니다. 가격/재고 정보는 실시간 API로만 조회 가능합니다.

S3 벌크 다운로드 전략#

왜 S3 벌크 다운로드인가?#

콘텐츠 데이터(Property → RoomType → RatePlan)는 다음 특징을 가집니다:

  • 변경 빈도가 낮음: 숙소 설명, 이미지, 편의시설 등은 하루에 수십 번 조회되지만 주 1-2회 정도만 변경됨
  • 데이터 크기가 큼: 전체 숙소 정보를 API로 조회하면 수천 건의 요청 필요
  • 일관성 보장: 특정 시점의 스냅샷을 받아 데이터 정합성 유지

다운로드 프로세스#

S3 다운로드 URL 발급

ONDA API를 통해 최신 콘텐츠 스냅샷의 S3 Presigned URL을 받습니다.

JSON 파일 다운로드

압축된 JSON 파일(gzip)을 다운로드하고 압축 해제합니다.

로컬 DB 동기화

전체 콘텐츠를 파싱하여 로컬 데이터베이스에 저장합니다.

증분 업데이트

웹훅을 통해 변경 사항이 발생하면 해당 항목만 API로 재조회합니다.

다운로드 주기#

시나리오권장 주기이유
초기 동기화시스템 구축 시 1회전체 데이터 로드
정기 갱신하루 1회 (새벽 시간대)변경 누락 방지
웹훅 기반 갱신실시간특정 숙소/객실만 업데이트

권장 전략: 하루 1회 S3 벌크 다운로드 + 웹훅 기반 실시간 증분 업데이트를 병행하면 최신 상태 유지와 API 호출 절감을 동시에 달성할 수 있습니다.

콘텐츠 계층 이해하기#

Property (숙소)#

  • 기본 정보: 이름, 주소, 성급, 숙박 시설 유형
  • 위치 정보: 위도/경도, 주변 랜드마크
  • 편의시설: Wi-Fi, 주차장, 수영장, 레스토랑 등
  • 정책: 체크인/체크아웃 시간, 반려동물 정책, 어린이 정책
  • 이미지: 외관, 로비, 부대시설 사진

Room Type (객실 타입)#

  • 객실 정보: 객실명, 크기(㎡), 최대 수용 인원
  • 침대 구성: 더블 베드 1개, 싱글 베드 2개 등
  • 객실 편의시설: TV, 미니바, 금고, 커피머신 등
  • 전망: 도시 전망, 바다 전망, 산 전망 등
  • 이미지: 객실 내부, 욕실, 전망 사진

Rate Plan (요금제)#

  • 패키지 정보: 패키지명, 설명
  • 포함 사항: 조식 포함 여부, 조식 인원수
  • 취소 정책: flexible, moderate, strict, non_refundable
  • 결제 정책: 선결제, 현장 결제
  • 예약 제한: 최소/최대 숙박일, 사전 예약 기간

이미지 CDN 활용#

ONDA는 모든 이미지를 CDN을 통해 제공하며, URL 쿼리 파라미터로 크기 조정이 가능합니다.

이미지 최적화 전략#

원본: https://cdn.onda.me/properties/prop_123456/main.jpg

썸네일: ?w=300&h=200&fit=crop&q=80
갤러리: ?w=1200&q=85
상세: ?w=1920&q=90
용도권장 크기품질
목록 썸네일300x200px80%
갤러리/슬라이드1200px85%
상세 페이지1920px90%

이미지 URL에 쿼리 파라미터를 추가하면 CDN이 자동으로 리사이징을 처리합니다. 원본을 다운로드하지 말고 필요한 크기만 요청하세요.

다국어 지원#

ONDA API는 5개 언어를 지원합니다:

  • 한국어 (ko): 기본 언어
  • 영어 (en)
  • 일본어 (ja)
  • 중국어 간체 (zh-CN)
  • 중국어 번체 (zh-TW)

언어 지정 방법#

Accept-Language 헤더에 원하는 언어 코드를 지정하면 해당 언어로 된 콘텐츠를 받습니다. 번역이 없는 경우 기본 언어(한국어)로 응답됩니다.

웹훅 기반 증분 업데이트#

콘텐츠 변경 시 웹훅으로 알림을 받아 해당 항목만 재조회하면 효율적입니다.

주요 이벤트#

이벤트발생 시점권장 조치
property.created새 숙소 등록해당 숙소 정보 조회 후 DB 추가
property.updated숙소 정보 변경해당 숙소 정보 재조회 후 DB 업데이트
property.deleted숙소 운영 중단DB에서 비활성화 처리
roomtype.updated객실 정보 변경해당 객실 타입 재조회
rateplan.updated패키지 정책 변경해당 패키지 재조회

웹훅 설정 방법은 웹훅 가이드를 참고하세요.

동기화 아키텍처 예시#

권장 동기화 전략#

  1. 초기 로드: S3 벌크 다운로드로 전체 콘텐츠 로드
  2. 일일 갱신: 매일 새벽 S3 다운로드로 전체 동기화 (변경 누락 방지)
  3. 실시간 갱신: 웹훅 이벤트 수신 시 해당 항목만 API 재조회
  4. 캐시 관리: 콘텐츠는 24시간 캐싱 가능 (가격/재고는 캐싱 금지)

다음 단계#