🤔 이런 경험 있으신가요?

“아, 비행기 티켓 메일 받았네”

손가락으로 메일을 읽다가… 어? 캘린더를 열어보니까 일정이 자동으로 추가되어 있다.

호텔 예약 확인 메일도 마찬가지. 아무것도 안 했는데 Google Calendar에 “🏨 토요코인 고쿠라 (4월 8일-9일)” 이렇게 떠있다.

“뭐지? 누가 등록했지?”

아무도 아닙니다. Google이 자동으로 한 거예요. 🤖

그리고 이 마법 같은 일을 가능하게 하는 게 바로 JSON-LD입니다.


📮 비행기 메일의 비밀

항공사에서 보낸 메일을 자세히 보면, 메일 본문 어딘가에 이런 게 숨어있어요:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FlightReservation",
  "reservationNumber": "LJ349-ABC123",
  "underName": {
    "@type": "Person",
    "name": "Chloe 클로이"
  },
  "reservationFor": {
    "@type": "Flight",
    "flightNumber": "LJ349",
    "airline": {
      "@type": "Airline",
      "name": "Jin Air"
    },
    "departureAirport": {
      "@type": "Airport",
      "iataCode": "ICN",
      "name": "Incheon"
    },
    "arrivalAirport": {
      "@type": "Airport",
      "iataCode": "KKJ",
      "name": "Kitakyushu"
    },
    "departureTime": "2026-04-08T15:45:00+09:00",
    "arrivalTime": "2026-04-08T17:15:00+09:00"
  }
}
</script>

눈에는 안 보이지만, 컴퓨터는 척 봤어.

Google은 이 정보를 읽고:

  • ✈️ “아, 이건 비행기 예약이군”
  • 🕐 “출발시간이 2026-04-08 15:45시네”
  • 📍 “인천에서 기타큐슈로 가는군”
  • Calendar에 자동 등록!

🏗️ JSON-LD가 뭐예요?

요약: “컴퓨터가 이해할 수 있도록 정보를 정리한 것”

비유하자면:

상황인간컴퓨터
메일 본문 텍스트“출발시간 15시 45분”??? (그냥 텍스트)
JSON-LD(똑같은 정보)✅ “15:45 = 출발시간”

JSON = 컴퓨터가 좋아하는 데이터 형식 (메모장처럼 간단)

1
2
3
4
{
  "이름": "Chloe 클로이",
  "출발시간": "15:45"
}

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "@context": "https://schema.org",
  "@type": "LodgingReservation",
  "reservationNumber": "TOYOKO-456789",
  "underName": {
    "@type": "Person",
    "name": "Chloe"
  },
  "reservationFor": {
    "@type": "Hotel",
    "name": "Toyoko Inn Kokura",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "1-1-5 Kokurakita",
      "addressLocality": "Kokura",
      "addressRegion": "Fukuoka",
      "postalCode": "803-0812",
      "addressCountry": "JP"
    }
  },
  "checkinDate": "2026-04-08",
  "checkoutDate": "2026-04-09"
}

Google Calendar:

  • ✅ “🏨 Toyoko Inn Kokura” 자동 등록
  • ✅ 4월 8일 14:00 ~ 4월 9일 11:00 자동 설정

예시 2: 음식점 리뷰 (Google 검색에 표시)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "@context": "https://schema.org",
  "@type": "Restaurant",
  "name": "최고의 라면",
  "image": "https://...",
  "address": "서울시 강남구",
  "telephone": "+82-2-XXXX-XXXX",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.8",
    "ratingCount": "150"
  }
}

Google 검색 결과에 별점과 리뷰 수가 바로 표시됨.

예시 3: 온라인 쇼핑 상품

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Wireless Headphones",
  "image": "https://...",
  "description": "High-quality wireless headphones",
  "offers": {
    "@type": "Offer",
    "price": "99.99",
    "priceCurrency": "USD"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "bestRating": "5",
    "ratingCount": "89"
  }
}

온라인 쇼핑 검색에 별점, 가격, 이미지가 한눈에 보임.


🔧 어디에 쓰이나요?

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가 있으면:

1
2
3
4
5
{
  "departureTime": "2026-04-08T15:45:00+09:00",
  "departureAirport.iataCode": "ICN",
  "arrivalAirport.iataCode": "KKJ"
}

Google:

  • ✅ “15:45가 출발시간이네”
  • ✅ “ICN = 인천, KKJ = 기타큐슈”
  • 자동 등록!

💡 개발자 관점

웹사이트 제작자가 할 일

  1. HTML 페이지를 만들고

    1
    2
    
    <h1>라면 맛집</h1>
    <p>별점: 4.8점</p>
    
  2. JSON-LD를 추가

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <script type="application/ld+json">
    {
      "@type": "Restaurant",
      "name": "라면 맛집",
      "aggregateRating": {
        "ratingValue": "4.8"
      }
    }
    </script>
    
  3. Google Search Console에서 확인

    • “Rich Result 테스트” → JSON-LD 검증
    • 검색 결과에 별점 표시 시작!

코드 예시 (Python)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import json

# JSON-LD 생성
schema = {
    "@context": "https://schema.org",
    "@type": "FlightReservation",
    "reservationNumber": "LJ349-ABC123",
    "reservationFor": {
        "@type": "Flight",
        "flightNumber": "LJ349",
        "departureTime": "2026-04-08T15:45:00+09:00",
        "arrivalTime": "2026-04-08T17:15:00+09:00"
    }
}

# 메일에 포함할 HTML
html = f"""
<html>
  <body>
    <p>항공편 LJ349 탑승권입니다.</p>
    
    <script type="application/ld+json">
    {json.dumps(schema, indent=2)}
    </script>
  </body>
</html>
"""

🔍 JSON-LD 검증하기

Schema.org의 “Structured Data Testing Tool” 사용:

  1. https://schema.org/docs/sd-quickstart.html 방문
  2. HTML/JSON-LD 붙여넣기
  3. ✅ “유효함” 또는 ❌ “에러” 표시

🌍 실제 통계

  • 450억 개 Schema.org 객체 (2024년)
  • 45백만 개 웹사이트가 사용 중
  • Google, Bing, Yandex, Pinterest 모두 지원

📌 핵심 정리

개념의미
JSON컴퓨터가 좋아하는 깔끔한 데이터 형식
Linked Data데이터끼리 연결되어 의미를 가짐
JSON-LDJSON 형식으로 연결된 데이터를 표현
Schema.org“어떤 데이터를 어떻게 표현할지” 정하는 규칙
@context“나는 Schema.org 규칙을 따를 거야” 선언
@type“이건 FlightReservation (비행기 예약)이야”

🎯 다음 단계

일반인

  • ✅ Google Calendar가 자동으로 일정을 넣는 이유 이해 ✓
  • ✅ 왜 온라인 쇼핑에 별점이 떴는지 이해 ✓

웹사이트 운영자

    1. Schema.org에서 자신의 사업 타입 찾기 (Restaurant, Product, LocalBusiness 등)
    1. JSON-LD로 정보 추가하기
    1. Google Search Console에서 검증하기
    1. 검색 결과에 별점, 리뷰, 가격 표시 시작!

개발자

  • gog API를 JSON-LD로 자동화하기
  • Gmail → JSON-LD 파싱 → Calendar 자동 등록 구현
  • 이메일 마이크로포맷으로 자동 워크플로우 구축

🤔 “그런데 왜 이렇게까지?”

한 문장:

“인간은 “출발 15시 45분"을 읽고 이해하지만, 컴퓨터는 그 텍스트의 의미를 모른다. 그래서 컴퓨터가 이해할 수 있도록 ‘이건 시간이야’라고 꼬리표를 달아주는 거다.”

결과:

  • 🧑 사용자 입장: “아, 편하네!” (자동 등록)
  • 🤖 컴퓨터 입장: “오, 명확하네!” (의미 파악)
  • 🏢 기업 입장: “좋아, 더 높은 검색 순위!” (SEO)

📚 더 알아보기


🧪 실제 테스트 결과 (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에 추가하지 않는 경우:

  1. 발신자 신뢰도

    • 테스트: chloe@chloe.ai.kr에서 발송
    • 실제 항공사: @jinair.com, @lufthansa.com 등 공식 도메인
    • ⚠️ Google은 신뢰도 높은 도메인만 자동 추가
  2. Gmail 설정

    • “Auto-add to Calendar” 옵션 비활성화 가능
    • Settings → Auto-add events to calendar
  3. 보안/스팸 방지

    • 낯선 발신자의 자동 추가 차단
    • 사용자가 직접 확인하고 추가하는 방식이 더 안전

📊 테스트 요약

항목식당 예약비행기 예약
JSON-LD 파싱✅ 완벽✅ 완벽
정보 추출✅ 완벽✅ 완벽
미리알림✅ 자동✅ 자동
상세정보 표시✅ 전부 표시✅ 전부 표시
자동 추가❓ 물어봄❓ 물어봄

💡 결론

JSON-LD는 완벽하게 작동합니다!

  • ✅ Google이 메일에서 JSON-LD를 읽음
  • ✅ 정보를 정확하게 추출함
  • ✅ 구조화된 데이터로 표시함
  • ✅ 사용자가 쉽게 Calendar에 추가 가능

자동 추가가 안 되는 건:

  • 보안 때문 (좋은 이유!)
  • 발신자 신뢰도 때문 (실제 항공사면 자동 추가 가능성 높음)
  • 사용자 설정 때문

마지막으로

비행기 메일이 자동으로 캘린더에 등록되는 마법은 마법이 아니라,

항공사가 메일에 JSON-LD를 숨겨놨고, Google이 그걸 읽어서 Calendar에 제시하는 거였어요.

깊게 생각해보면:

  • 📬 메일 = 정보 전달 수단
  • 🏷️ JSON-LD = “이 정보가 뭔지” 설명하는 라벨
  • 📅 Calendar = 라벨을 읽고 정리하는 어시스턴트

다음 번에 예약 확인 메일을 받으면, “아, 이 안에 JSON-LD가 들어있겠네” 생각하며 웃음 지으면서 보기! 😊


📌 업데이트 (2026-03-29)

이 글을 쓴 후 실제로 JSON-LD를 적용한 메일을 보내서 테스트했습니다. 테스트 결과를 위 “🧪 실제 테스트 결과” 섹션에 추가했으니 참고하세요!