데이터 필드 표준
dataware의 모든 데이터는 schema.org 국제 표준을 기반으로 정규화되어 있습니다. 별도의 필드 매핑 없이 바로 사용할 수 있는 데이터를 제공합니다.
필드 체계
dataware API가 반환하는 데이터 필드는 세 가지 계층으로 구분됩니다.
| 계층 | 설명 | 위치 |
|---|---|---|
| Tier 1 - 공통 필드 | 모든 데이터셋에서 사용하는 기본 필드 | 최상위 응답 필드 |
| Tier 2 - 준공통 필드 | 여러 데이터셋에서 공통으로 사용하는 필드 | extraAttributes 내부 |
| Tier 3 - 도메인 특화 필드 | 특정 데이터셋 유형에서만 사용하는 필드 | extraAttributes 내부 |
API 응답의 meta.schemaVersion 필드에서 현재 스키마 버전을 확인할 수 있습니다.
Tier 1: 공통 필드
모든 데이터셋의 아이템에 포함되는 기본 필드입니다.
식별/분류
| 필드 | 타입 | 설명 | schema.org |
|---|---|---|---|
name | string | 이름/상호명 | Thing.name |
description | string | 설명/소개 | Thing.description |
categoryCode | string | 분류 코드 (예: lodging/glamping) | - |
administrativeAreaCode | string | 행정동코드 10자리 | - |
연락처
| 필드 | 타입 | 설명 | schema.org |
|---|---|---|---|
telephone | string | 대표 전화번호 | LocalBusiness.telephone |
email | string | 이메일 | ContactPoint.email |
contactName | string | 담당자명 | - |
url | string | 공식 웹사이트 | Thing.url |
위치/주소
| 필드 | 타입 | 설명 | schema.org |
|---|---|---|---|
streetAddress | string | 도로명+건물번호 | PostalAddress.streetAddress |
addressRegion | string | 시/도 | PostalAddress.addressRegion |
addressLocality | string | 시/군/구 | PostalAddress.addressLocality |
postalCode | string | 우편번호 | PostalAddress.postalCode |
roadAddress | string | 전체 도로명주소 | - |
jibunAddress | string | 지번주소 | - |
latitude | number | 위도 (WGS84) | GeoCoordinates.latitude |
longitude | number | 경도 (WGS84) | GeoCoordinates.longitude |
운영
| 필드 | 타입 | 설명 | schema.org |
|---|---|---|---|
openingHours | string | 운영시간 | LocalBusiness.openingHours |
Tier 2: 준공통 필드
여러 데이터셋에서 공통으로 사용되는 필드입니다. API 응답의 extraAttributes 안에 포함됩니다.
| 필드 | 타입 | 설명 | schema.org |
|---|---|---|---|
restDay | string | 휴무일 | - |
parking | string | 주차 정보 | LocationFeatureSpecification |
amenityFeature | string[] | 편의시설/부대시설 목록 | LodgingBusiness.amenityFeature |
infoSections | object[] | 구조화된 소개 섹션 | - |
aggregateRating | number | 평균 평점 | AggregateRating.ratingValue |
reviewCount | number | 리뷰 수 | AggregateRating.reviewCount |
babyCarriage | boolean | 유모차 대여 가능 | - |
petAllowed | boolean | 반려동물 동반 가능 | LodgingBusiness.petsAllowed |
isAccessibleForFree | boolean | 무료 여부 | Place.isAccessibleForFree |
priceRange | string | 가격대 | LocalBusiness.priceRange |
keywords | string[] | 태그/키워드 | Thing.keywords |
sameAs | string[] | 외부 링크 (SNS 등) | Thing.sameAs |
infoSections 구조
[
{ "title": "대표메뉴", "content": "돼지갈비" },
{ "title": "이용안내", "content": "11:00-21:00, 매주 월요일 휴무" }
]
Tier 3: 도메인 특화 필드
특정 데이터셋 유형에서만 사용되는 필드입니다. 데이터셋마다 어떤 Tier 3 키를 사용하는지는 데이터셋 정보에서 확인할 수 있습니다.
숙박 (LodgingBusiness)
| 필드 | 타입 | 설명 |
|---|---|---|
checkinTime | string | 체크인 시간 (예: "15:00") |
checkoutTime | string | 체크아웃 시간 (예: "11:00") |
numberOfRooms | number | 객실 수 |
음식점 (FoodEstablishment)
| 필드 | 타입 | 설명 |
|---|---|---|
servesCuisine | string | 음식 종류 (예: "한식") |
menu | string | 대표 메뉴 |
acceptsReservations | boolean | 예약 가능 여부 |
축제/행사 (Event)
| 필드 | 타입 | 설명 |
|---|---|---|
startDate | string | 시작일 (예: "2026-05-01") |
endDate | string | 종료일 |
eventPlace | string | 행사 장소명 |
organizer | string | 주최/주관 |
eventStatus | string | 상태 (scheduled/cancelled/postponed) |
program | string | 프로그램 내용 |
상품 (Product)
지역 농수산품, 특산품 등 판매 가능한 상품 데이터입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
basePrice | number | 기본 가격 (원) |
currency | string | 통화 코드 (예: "KRW") |
origin | string | 원산지 |
weight | string | 중량/규격 |
storageMethod | string | 보관방법 (냉장/냉동/상온) |
shippingInfo | string | 배송 정보 |
productOptions | object[] | 상품 옵션 목록 |
productOptions 구조:
[
{ "name": "1kg", "additionalPrice": 0 },
{ "name": "3kg", "additionalPrice": 25000 },
{ "name": "선물세트 5kg", "additionalPrice": 50000, "description": "고급 포장" }
]
체험상품 (Experience)
농촌체험, 공방체험 등 예약 기반 체험 상품 데이터입니다.
| 필드 | 타입 | 설명 |
|---|---|---|
experienceTypes | string[] | 체험 종류 |
bookingUnit | string | 예약 단위 ("person" / "team") |
capacityPerSlot | number | 회차당 기본 정원 |
operatingTimeSlots | string[] | 운영 시간대 (예: ["11:00", "14:00"]) |
minParticipants | number | 최소 인원 |
maxParticipants | number | 최대 인원 |
reservationRequired | boolean | 예약 필수 여부 |
seasonalAvailability | string | 운영 계절 |
pricingTiers | object[] | 가격 유형별 단가 |
pricingTiers 구조:
[
{ "type": "adult", "label": "성인", "price": 10000 },
{ "type": "youth", "label": "청소년", "price": 8000 },
{ "type": "child", "label": "소아", "price": 3000 }
]
캠핑/글램핑 (Campground)
| 필드 | 타입 | 설명 |
|---|---|---|
siteTypes | string[] | 사이트 유형 |
siteCount | number | 사이트 수 |
facilities | string[] | 부대시설 목록 |
상품/체험 데이터 활용 가이드
dataware API는 상품/체험의 카탈로그(레퍼런스) 데이터를 제공합니다. 실시간 재고, 예약 상태, 결제 처리 등 트랜잭션 데이터는 API 소비자 서비스에서 관리합니다.
dataware가 제공하는 것
| 구분 | 예시 |
|---|---|
| 상품 정의 | 이름, 설명, 이미지, 옵션 목록 |
| 레퍼런스 가격 | 기본 가격, 옵션별 추가 금액, 가격 유형별 단가 |
| 운영 패턴 | 운영 시간대, 기본 정원, 운영 계절 |
| 위치/연락처 | 주소, 좌표, 전화번호, 이메일 |
dataware가 제공하지 않는 것
| 구분 | 이유 |
|---|---|
| 실시간 재고/잔여 수량 | 트랜잭션 데이터는 소비자 서비스의 책임 |
| 특정 날짜의 예약 가능 슬롯 | 운영 캘린더는 소비자 서비스가 관리 |
| 결제/주문 상태 | 커머스 로직은 소비자 서비스의 책임 |
연동 패턴
상품 연동 시:
basePrice와productOptions는 레퍼런스 가격입니다. 소비자 서비스는 이를 기반으로 실제 판매가를 설정할 수 있습니다.- 상품 옵션 구조가 변경될 수 있으므로, 주기적으로 API를 조회하여 동기화하는 것을 권장합니다.
체험상품 연동 시:
pricingTiers는 가격 유형(성인/청소년/소아)과 기준 단가를 정의합니다. 소비자 서비스는 이를 기반으로 실제 판매가를 설정합니다.operatingTimeSlots과capacityPerSlot은 기본 운영 패턴입니다. 소비자 서비스는 이를 참고하여 특정 날짜에 예약 가능한 슬롯을 생성합니다.- 잔여 인원 관리, 예약 차감, 매진 처리는 소비자 서비스에서 구현합니다.
레이어 분리
| 레이어 | 책임 | 데이터 특성 |
|---|---|---|
| dataware (카탈로그) | 무엇이 있는가, 기본 조건은 무엇인가 | 정적, 참조용 |
| 소비자 서비스 (커머스) | 언제/얼마에/몇 개 파는가 | 동적, 트랜잭션 |
소비자 서비스는 dataware item의 id를 외래키로 참조하여 자체 상품/재고 테이블과 연결하는 것을 권장합니다.
하위호환 정책
dataware API는 Immutable Key Rule을 따릅니다.
- 한번 발행된 필드 키는 이름이 변경되거나 삭제되지 않습니다.
- 새로운 필드는 추가될 수 있지만, 기존 필드는 항상 동일한 이름과 타입으로 유지됩니다.
- API URL은
/v1/으로 고정됩니다. 스키마 진화 시에도 엔드포인트 URL은 변경되지 않습니다. - 응답의
meta.schemaVersion으로 현재 스키마 버전을 확인할 수 있습니다.
{
"meta": {
"schemaVersion": "1.0.0"
},
"data": [...]
}