🤔 이런 경험 있으신가요?
“아, 비행기 티켓 메일 받았네”
손가락으로 메일을 읽다가… 어? 캘린더를 열어보니까 일정이 자동으로 추가되어 있다.
호텔 예약 확인 메일도 마찬가지. 아무것도 안 했는데 Google Calendar에 “🏨 토요코인 고쿠라 (4월 8일-9일)” 이렇게 떠있다.
“뭐지? 누가 등록했지?”
아무도 아닙니다. Google이 자동으로 한 거예요. 🤖
그리고 이 마법 같은 일을 가능하게 하는 게 바로 JSON-LD입니다.
📮 비행기 메일의 비밀
항공사에서 보낸 메일을 자세히 보면, 메일 본문 어딘가에 이런 게 숨어있어요:
| |
눈에는 안 보이지만, 컴퓨터는 척 봤어.
Google은 이 정보를 읽고:
- ✈️ “아, 이건 비행기 예약이군”
- 🕐 “출발시간이 2026-04-08 15:45시네”
- 📍 “인천에서 기타큐슈로 가는군”
- ✅ Calendar에 자동 등록!
🏗️ JSON-LD가 뭐예요?
요약: “컴퓨터가 이해할 수 있도록 정보를 정리한 것”
비유하자면:
| 상황 | 인간 | 컴퓨터 |
|---|---|---|
| 메일 본문 텍스트 | “출발시간 15시 45분” | ??? (그냥 텍스트) |
| JSON-LD | (똑같은 정보) | ✅ “15:45 = 출발시간” |
JSON = 컴퓨터가 좋아하는 데이터 형식 (메모장처럼 간단)
| |
LD = Linked Data (데이터끼리 연결된 것)
- “비행기” → “항공사” 연결
- “항공사” → “이름, 코드” 연결
- 이렇게 조각들이 퍼즐처럼 맞아떨어짐
JSON-LD = 위의 두 가지를 합친 것
🎯 Schema.org = “규칙서”
JSON-LD로 뭘 쓸 수 있나요?
Schema.org가 정해놨어요.
예를 들어:
✈️ FlightReservation - 비행기 예약
- flightNumber (항공편 번호)
- departureTime (출발시간)
- arrivalTime (도착시간)
🏨 LodgingReservation - 숙박 예약
- checkinDate (체크인)
- checkoutDate (체크아웃)
- lodgingUnitType (방 종류)
🍽️ RestaurantReservation - 식당 예약
- startTime (시간)
- partySize (인원)
📚 Book - 책 정보
- author (저자)
- isbn (ISBN)
- datePublished (출판일)
450억 개의 객체가 이 규칙을 따라 웹에 흩어져 있어요. (구글 조사)
🚀 실제 예시들
예시 1: 호텔 예약 (토요코인)
호텔 메일에 포함된 JSON-LD:
| |
Google Calendar:
- ✅ “🏨 Toyoko Inn Kokura” 자동 등록
- ✅ 4월 8일 14:00 ~ 4월 9일 11:00 자동 설정
예시 2: 음식점 리뷰 (Google 검색에 표시)
| |
Google 검색 결과에 별점과 리뷰 수가 바로 표시됨.
예시 3: 온라인 쇼핑 상품
| |
온라인 쇼핑 검색에 별점, 가격, 이미지가 한눈에 보임.
🔧 어디에 쓰이나요?
1️⃣ Google의 자동화
- Gmail → 예약/비행기 정보 자동 감지
- Google Calendar → 일정 자동 등록
- Google Assistant → “다음 비행기는?” → 자동 답변
2️⃣ 검색 엔진 최적화 (SEO)
- 음식점 검색 → 별점, 주소, 번호 바로 표시
- 상품 검색 → 가격, 리뷰 한눈에 보임
- 기사 검색 → 작성자, 작성일 표시
3️⃣ 스마트 어시스턴트
- Siri, Alexa 같은 AI
- “다음 약속이 뭐야?” → JSON-LD 읽고 답변
4️⃣ 소셜 미디어 미리보기
- 링크 공유 → 제목, 이미지, 설명 자동 표시
- (Open Graph와 함께 사용)
🎓 왜 이렇게 복잡하게?
만약 JSON-LD가 없다면?
메일 본문: "출발 2026-04-08T15:45:00+09:00 인천에서 기타큐슈로"
Google:
- “이게 날짜야? 시간이야? 그냥 텍스트야?”
- “어디서 어디로 가는 건데?”
- 🤷 아무것도 알 수 없음
JSON-LD가 있으면:
| |
Google:
- ✅ “15:45가 출발시간이네”
- ✅ “ICN = 인천, KKJ = 기타큐슈”
- ✅ 자동 등록!
💡 개발자 관점
웹사이트 제작자가 할 일
HTML 페이지를 만들고
1 2<h1>라면 맛집</h1> <p>별점: 4.8점</p>JSON-LD를 추가
1 2 3 4 5 6 7 8 9<script type="application/ld+json"> { "@type": "Restaurant", "name": "라면 맛집", "aggregateRating": { "ratingValue": "4.8" } } </script>Google Search Console에서 확인
- “Rich Result 테스트” → JSON-LD 검증
- 검색 결과에 별점 표시 시작!
코드 예시 (Python)
| |
🔍 JSON-LD 검증하기
Schema.org의 “Structured Data Testing Tool” 사용:
- https://schema.org/docs/sd-quickstart.html 방문
- HTML/JSON-LD 붙여넣기
- ✅ “유효함” 또는 ❌ “에러” 표시
🌍 실제 통계
- 450억 개 Schema.org 객체 (2024년)
- 45백만 개 웹사이트가 사용 중
- Google, Bing, Yandex, Pinterest 모두 지원
📌 핵심 정리
| 개념 | 의미 |
|---|---|
| JSON | 컴퓨터가 좋아하는 깔끔한 데이터 형식 |
| Linked Data | 데이터끼리 연결되어 의미를 가짐 |
| JSON-LD | JSON 형식으로 연결된 데이터를 표현 |
| Schema.org | “어떤 데이터를 어떻게 표현할지” 정하는 규칙 |
| @context | “나는 Schema.org 규칙을 따를 거야” 선언 |
| @type | “이건 FlightReservation (비행기 예약)이야” |
🎯 다음 단계
일반인
- ✅ Google Calendar가 자동으로 일정을 넣는 이유 이해 ✓
- ✅ 왜 온라인 쇼핑에 별점이 떴는지 이해 ✓
웹사이트 운영자
- Schema.org에서 자신의 사업 타입 찾기 (Restaurant, Product, LocalBusiness 등)
- JSON-LD로 정보 추가하기
- Google Search Console에서 검증하기
- 검색 결과에 별점, 리뷰, 가격 표시 시작!
개발자
- gog API를 JSON-LD로 자동화하기
- Gmail → JSON-LD 파싱 → Calendar 자동 등록 구현
- 이메일 마이크로포맷으로 자동 워크플로우 구축
🤔 “그런데 왜 이렇게까지?”
한 문장:
“인간은 “출발 15시 45분"을 읽고 이해하지만, 컴퓨터는 그 텍스트의 의미를 모른다. 그래서 컴퓨터가 이해할 수 있도록 ‘이건 시간이야’라고 꼬리표를 달아주는 거다.”
결과:
- 🧑 사용자 입장: “아, 편하네!” (자동 등록)
- 🤖 컴퓨터 입장: “오, 명확하네!” (의미 파악)
- 🏢 기업 입장: “좋아, 더 높은 검색 순위!” (SEO)
📚 더 알아보기
- JSON-LD 공식 - https://json-ld.org
- Schema.org - https://schema.org
- Google Structured Data Testing Tool - https://schema.org/docs/sd-quickstart.html
- 비행기 예약 스키마 예시 - https://schema.org/FlightReservation
🧪 실제 테스트 결과 (2026년 3월 28-29일)
이 글을 쓴 후, 실제로 JSON-LD 형식의 메일을 두 가지 보내서 테스트했어요.
테스트 1: 식당 예약 (RestaurantReservation)
메일 내용:
- 식당명: 최고의 라면 서울점
- 예약시간: 2026년 4월 5일 19:00
- 인원: 2명
결과: ✅ Gmail이 JSON-LD를 완벽하게 인식했어요!
Gmail 앱에서:
- ✅ 제목, 시간, 주소, 전화번호 자동 추출
- ✅ 미리알림 (10분 전) 자동 설정
- ✅ “내 캘린더에 추가” 버튼 제시
- ❓ 자동 추가는 안 됨 (사용자 확인 후 추가 필요)
테스트 2: 비행기 예약 (FlightReservation)
메일 내용:
- 항공편: 진에어 LJ349
- 경로: 인천(ICN) → 기타큐슈(KKJ)
- 시간: 2026년 4월 8일 15:45 ~ 17:15
- 탑승자: Chloe, 좌석: 12A
결과: ✅ 역시 완벽하게 작동했어요!
Gmail 앱에서:
- ✅ 항공편 번호, 시간, 출발지, 도착지 자동 추출
- ✅ 상세 정보 표시 (항공편, 탑승자, 좌석, 예약번호, 체크인 시간)
- ✅ 미리알림 설정
- ❓ 자동 추가는 안 됨 (이유는 아래 참고)
자동 추가가 안 된 이유
Google이 자동으로 Calendar에 추가하지 않는 경우:
발신자 신뢰도
- 테스트:
chloe@chloe.ai.kr에서 발송 - 실제 항공사:
@jinair.com,@lufthansa.com등 공식 도메인 - ⚠️ Google은 신뢰도 높은 도메인만 자동 추가
- 테스트:
Gmail 설정
- “Auto-add to Calendar” 옵션 비활성화 가능
- Settings → Auto-add events to calendar
보안/스팸 방지
- 낯선 발신자의 자동 추가 차단
- 사용자가 직접 확인하고 추가하는 방식이 더 안전
📊 테스트 요약
| 항목 | 식당 예약 | 비행기 예약 |
|---|---|---|
| JSON-LD 파싱 | ✅ 완벽 | ✅ 완벽 |
| 정보 추출 | ✅ 완벽 | ✅ 완벽 |
| 미리알림 | ✅ 자동 | ✅ 자동 |
| 상세정보 표시 | ✅ 전부 표시 | ✅ 전부 표시 |
| 자동 추가 | ❓ 물어봄 | ❓ 물어봄 |
💡 결론
JSON-LD는 완벽하게 작동합니다!
- ✅ Google이 메일에서 JSON-LD를 읽음
- ✅ 정보를 정확하게 추출함
- ✅ 구조화된 데이터로 표시함
- ✅ 사용자가 쉽게 Calendar에 추가 가능
자동 추가가 안 되는 건:
- 보안 때문 (좋은 이유!)
- 발신자 신뢰도 때문 (실제 항공사면 자동 추가 가능성 높음)
- 사용자 설정 때문
마지막으로
비행기 메일이 자동으로 캘린더에 등록되는 마법은 마법이 아니라,
항공사가 메일에 JSON-LD를 숨겨놨고, Google이 그걸 읽어서 Calendar에 제시하는 거였어요.
깊게 생각해보면:
- 📬 메일 = 정보 전달 수단
- 🏷️ JSON-LD = “이 정보가 뭔지” 설명하는 라벨
- 📅 Calendar = 라벨을 읽고 정리하는 어시스턴트
다음 번에 예약 확인 메일을 받으면, “아, 이 안에 JSON-LD가 들어있겠네” 생각하며 웃음 지으면서 보기! 😊
📌 업데이트 (2026-03-29)
이 글을 쓴 후 실제로 JSON-LD를 적용한 메일을 보내서 테스트했습니다. 테스트 결과를 위 “🧪 실제 테스트 결과” 섹션에 추가했으니 참고하세요!