**Schema.org**는 구조화된 데이터를 웹에 추가하기 위한 개방형 표준으로, 검색 엔진(Google, Bing, Yahoo 등)이 웹 페이지의 콘텐츠를 더 잘 이해하고 활용할 수 있도록 설계되었습니다. 2011년에 Google, Microsoft, Yahoo, Yandex가 공동으로 시작했으며, 현재는 커뮤니티 주도로 유지됩니다. Schema.org는 주로 **마크업 형식**(Microdata, RDFa, JSON-LD)을 통해 HTML에 의미론적 데이터를 삽입하며, 이를 통해 검색 결과의 풍부한 표시(Rich Snippets), 음성 검색 최적화, 기계 학습 등 다양한 용도로 활용됩니다.
---
### 1. Schema.org의 정의와 목적
- **정의**: 웹 콘텐츠에 의미를 부여하는 어휘(Vocabulary)와 이를 적용하는 가이드라인 집합.
- **목적**:
- **검색 엔진 최적화(SEO)**: 콘텐츠의 의미를 명확히 해 검색 결과 개선.
- **풍부한 검색 결과**: 리뷰 별점, 이벤트 날짜, 제품 가격 등이 검색 결과에 표시.
- **기계 이해도 향상**: AI, 크롤러가 데이터를 구조적으로 파싱 가능.
- **상호운용성**: 다양한 플랫폼 간 데이터 공유 용이.
---
### 2. Schema.org의 주요 특징
- **어휘 기반**: 계층적 타입(Type)과 속성(Property)으로 구성.
- 예: `Person` 타입은 `name`, `email`, `birthDate` 속성을 가짐.
- **확장성**: 커뮤니티 제안으로 새로운 타입과 속성 추가 가능.
- **형식 지원**:
- **Microdata**: HTML 속성 사용.
- **RDFa**: HTML 속성으로 시맨틱 웹 연결.
- **JSON-LD**: 별도 스크립트로 삽입 (가장 널리 사용).
- **오픈 소스**: 누구나 무료로 사용 가능, schema.org에서 문서 제공.
---
### 3. Schema.org의 주요 타입과 속성
Schema.org는 수백 개의 타입과 속성을 제공하며, 몇 가지 대표적인 예는 다음과 같습니다:
#### (1) `Person` (사람)
- 속성: `name`, `email`, `telephone`, `address`, `jobTitle`.
- 예: 개인 프로필.
#### (2) `Event` (이벤트)
- 속성: `name`, `startDate`, `endDate`, `location`.
- 예: 컨퍼런스, 공연.
#### (3) `Product` (제품)
- 속성: `name`, `description`, `price`, `brand`, `review`.
- 예: 전자상거래 상품.
#### (4) `Article` (기사)
- 속성: `headline`, `author`, `datePublished`, `image`.
- 예: 블로그 포스트, 뉴스.
#### (5) `Organization` (조직)
- 속성: `name`, `logo`, `contactPoint`, `url`.
- 예: 회사 정보.
---
### 4. Schema.org 마크업 형식
Schema.org는 세 가지 주요 형식으로 구현됩니다.
#### (1) Microdata
- HTML 태그에 `itemscope`, `itemtype`, `itemprop` 속성 추가.
- **예제**:
```html
```
#### (2) RDFa
- HTML 속성(`typeof`, `property`)으로 데이터 연결.
- **예제**:
```html
```
#### (3) JSON-LD (권장)
- `
```
- **왜 권장?**: HTML 구조와 분리, 유지보수 용이, 검색 엔진 선호.
---
### 5. Schema.org의 작동 방식
1. **마크업 추가**: 웹 페이지에 적절한 타입과 속성 삽입.
2. **크롤링**: 검색 엔진이 마크업을 파싱.
3. **활용**:
- **Rich Snippets**: 별점, 가격 등이 검색 결과에 표시.
- **Knowledge Graph**: Google의 지식 패널에 정보 제공.
- **음성 검색**: "가까운 이벤트는?" 같은 질문에 답변.
---
### 6. 자바로 Schema.org JSON-LD 생성 예제
Jackson 라이브러리를 사용해 Schema.org 데이터를 JSON-LD로 생성할 수 있습니다.
#### (1) 의존성 (Maven)
```xml
com.fasterxml.jackson.core
jackson-databind
2.15.2
org.projectlombok
lombok
1.18.30
provided
```
#### (2) 모델링 및 생성
```java
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
@Data
public class PersonSchema {
@JsonProperty("@context")
private String context = "http://schema.org";
@JsonProperty("@type")
private String type = "Person";
private String name;
private String email;
}
public class SchemaOrgExample {
public static void main(String[] args) throws Exception {
PersonSchema person = new PersonSchema();
person.setName("홍길동");
person.setEmail("hong@example.com");
ObjectMapper mapper = new ObjectMapper();
String jsonLd = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(person);
System.out.println("");
}
}
```
#### 출력 결과:
```html
```
---
### 7. Schema.org의 장점과 단점
- **장점**:
- 검색 엔진의 강력한 지원 (Rich Snippets, SEO 향상).
- 다양한 타입과 속성으로 유연성 제공.
- JSON-LD로 쉬운 구현.
- **단점**:
- 초기 학습 곡선 존재.
- 잘못된 마크업 시 검색 엔진 패널티 가능.
- 모든 데이터가 풍부한 결과로 반영되지 않을 수 있음.
---
### 8. Schema.org와 Microformats 비교
| **특성** | **Schema.org** | **Microformats** |
|---------------------|------------------------|------------------------|
| **형식** | JSON-LD, Microdata 등 | HTML 클래스 |
| **복잡도** | 중간 | 낮음 |
| **SEO 지원** | 강력 | 제한적 |
| **어휘 범위** | 광범위 | 제한적 |
| **현재 사용** | 주류 | 소규모/레거시 |
- **Schema.org**: 현대 웹에서 SEO와 데이터 활용에 최적화.
- **Microformats**: 간단한 구조화 데이터에 유용.
---
### 9. 현대적 맥락
- **사용 사례**: 전자상거래, 블로그, 이벤트 사이트, 지역 비즈니스 등.
- **도구**:
- Google Structured Data Testing Tool: 마크업 검증.
- Rich Results Test: 풍부한 결과 확인.
- **확장**: `pending.schema.org`로 새로운 타입 제안 가능.
---
### 10. 결론
Schema.org는 웹 콘텐츠에 구조화된 데이터를 추가하는 강력한 도구로, SEO와 사용자 경험을 동시에 개선합니다. JSON-LD 형식이 가장 널리 사용되며, 자바로 쉽게 생성 가능합니다. 검색 엔진의 풍부한 결과를 노리거나 데이터를 기계 친화적으로 만들고 싶다면 필수적인 선택입니다.
추가로 특정 타입(예: `Event`, `Product`)에 대한 예제나 질문이 있다면 말씀해주세요!