Files
html-examples/doc/seo/08_Microformats.md
2025-03-11 00:21:14 +09:00

7.8 KiB

**Microformats(마이크로포맷)**은 HTML에 구조화된 데이터를 추가하기 위한 간단하고 개방적인 형식으로, 사람과 기계가 모두 읽을 수 있도록 설계되었습니다. 이는 웹 페이지의 콘텐츠(예: 연락처, 이벤트, 리뷰 등)에 의미를 부여하여 검색 엔진, 크롤러, 브라우저 확장 프로그램 등이 데이터를 쉽게 파싱하고 활용할 수 있게 합니다. Microformats는 기존 HTML을 확장하며, 별도의 파일이나 복잡한 스키마 없이도 사용할 수 있는 것이 특징입니다.


1. Microformats의 정의와 목적

  • 정의: HTML 클래스 속성(class)과 기타 속성(rel, title 등)을 사용해 콘텐츠에 의미론적 마크업을 추가하는 방식.
  • 목적:
    • 구조화된 데이터 제공: 검색 엔진(Google, Bing 등)이 콘텐츠를 더 잘 이해하도록 도움.
    • 사용자 경험 개선: 브라우저 도구나 앱이 데이터를 자동 추출(예: 캘린더에 이벤트 추가).
    • 간단함: JSON-LD나 RDFa 같은 복잡한 대안 대비 쉽게 적용 가능.

2. Microformats의 주요 특징

  • 사람 우선: HTML 자체가 사람이 읽기 쉬운 형태로 유지됨.
  • 기계 해석 가능: 클래스 이름으로 의미를 정의해 파싱 가능.
  • 재사용성: 기존 HTML에 추가 작업만으로 적용.
  • 커뮤니티 기반: 오픈 표준으로, microformats.org에서 관리.

3. 주요 Microformats 종류

Microformats는 여러 유형으로 나뉘며, 각 유형은 특정 데이터 형식을 표현합니다.

(1) hCard (연락처 정보)

  • 용도: 사람, 조직, 장소의 연락처 정보.
  • 예제:
    <div class="vcard">
        <span class="fn">홍길동</span>
        <span class="org">Example Corp</span>
        <a class="email" href="mailto:hong@example.com">hong@example.com</a>
        <div class="adr">
            <span class="street-address">123 서울로</span>
            <span class="locality">서울</span>
        </div>
    </div>
    
  • 클래스: vcard, fn(fullname), org, email, adr(address) 등.

(2) hCalendar (이벤트)

  • 용도: 이벤트, 일정 정보.
  • 예제:
    <div class="vevent">
        <h3 class="summary">컨퍼런스 2025</h3>
        <span class="dtstart">2025-03-07T09:00:00+09:00</span> -
        <span class="dtend">2025-03-07T17:00:00+09:00</span>
        <div class="location">서울 컨벤션 센터</div>
    </div>
    
  • 클래스: vevent, summary, dtstart(시작), dtend(종료), location.

(3) hEntry (블로그 게시물)

  • 용도: 블로그 포스트, 기사 등.
  • 예제:
    <article class="hentry">
        <h1 class="entry-title">오늘의 뉴스</h1>
        <time class="published" datetime="2025-03-07">2025-03-07</time>
        <div class="entry-content">최신 소식을 전합니다.</div>
        <span class="author vcard">홍길동</span>
    </article>
    
  • 클래스: hentry, entry-title, published, entry-content, author.

(4) hReview (리뷰)

  • 용도: 제품, 서비스 리뷰.
  • 예제:
    <div class="hreview">
        <h3 class="item fn">최신 스마트폰</h3>
        <span class="rating">4.5</span>
        <p class="description">성능이 뛰어납니다.</p>
        <span class="reviewer vcard">홍길동</span>
    </div>
    
  • 클래스: hreview, item, rating, description, reviewer.

(5) rel 속성 기반 Microformats

  • rel-nofollow: 링크가 신뢰하지 않음을 표시.
    <a href="https://spam.com" rel="nofollow">스팸 링크</a>
    
  • rel-tag: 태그 지정.
    <a href="/tags/java" rel="tag">Java</a>
    

4. Microformats의 작동 방식

  • 구성 요소:
    • 루트 클래스: 데이터 유형 정의(예: vcard, vevent).
    • 속성 클래스: 세부 데이터 정의(예: fn, dtstart).
  • 파싱:
    • 크롤러나 도구가 클래스 이름으로 데이터 추출.
    • 예: class="fn" → 이름 데이터로 인식.

5. 자바로 Microformats 파싱 예제

HTML에서 Microformats를 파싱하려면, Jsoup 같은 라이브러리를 사용해 클래스 기반 데이터를 추출할 수 있습니다.

(1) 의존성 (Maven)

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.3</version>
</dependency>

(2) hCard 파싱

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class MicroformatsParser {
    public static void main(String[] args) throws Exception {
        String html = "<div class=\"vcard\">" +
                      "<span class=\"fn\">홍길동</span>" +
                      "<a class=\"email\" href=\"mailto:hong@example.com\">hong@example.com</a>" +
                      "</div>";
        
        Document doc = Jsoup.parse(html);
        Element vcard = doc.selectFirst(".vcard");

        if (vcard != null) {
            String name = vcard.selectFirst(".fn").text();
            String email = vcard.selectFirst(".email").text();
            System.out.println("Name: " + name);
            System.out.println("Email: " + email);
        }
    }
}

출력 결과:

Name: 홍길동
Email: hong@example.com

6. Microformats와 다른 기술 비교

특성 Microformats JSON-LD RDFa
형식 HTML 클래스 JSON 스크립트 HTML 속성
복잡도 낮음 중간 높음
SEO 지원 제한적 강력 (Schema.org) 강력
적용 용이성 쉬움 중간 어려움
사용 사례 간단한 데이터 복잡한 구조화 데이터 Semantic Web
  • Microformats: 간단한 블로그, 연락처 등에 적합.
  • JSON-LD: 현대 SEO, Schema.org 기반 구조화 데이터에 주로 사용.
  • RDFa: 복잡한 온톨로지와 시맨틱 웹에 활용.

7. Microformats의 장점과 단점

  • 장점:
    • 적용이 쉬움 (기존 HTML 재사용).
    • 사람과 기계 모두 이해 가능.
    • 경량화된 구조.
  • 단점:
    • 복잡한 데이터 표현 어려움.
    • 최신 SEO에서 JSON-LD에 비해 지원 감소.
    • 제한된 표준화 (Microformats 2로 개선 중).

8. Microformats 2 (h-*)

  • 개선판: Microformats의 한계를 보완한 버전.
  • 특징:
    • 클래스 이름 단순화 (예: h-card, p-name).
    • 중첩된 구조 지원 강화.
  • 예제:
    <div class="h-card">
        <span class="p-name">홍길동</span>
        <a class="u-email" href="mailto:hong@example.com">hong@example.com</a>
    </div>
    
  • 클래스 접두사: h-(루트), p-(속성), u-(URL), dt-(날짜).

9. 현대적 맥락

  • 사용: IndieWeb 커뮤니티, 블로그, 소규모 사이트에서 여전히 활용.
  • 대안: JSON-LD와 Schema.org이 SEO 주류로 자리잡음.
  • 도구: Operator(파이어폭스 확장), Microformat Shiv(JavaScript 파서).

10. 결론

Microformats는 HTML에 구조화된 데이터를 추가하는 간단한 방법으로, 초기 웹에서 널리 사용되었습니다. 현재는 JSON-LD와 같은 대안에 밀려 사용이 줄었지만, 경량화와 직관성 덕분에 소규모 프로젝트나 IndieWeb에서 여전히 유효합니다. 자바로 파싱하려면 Jsoup 같은 도구를 활용하면 됩니다.

추가 질문이나 특정 Microformat(예: hCard, hCalendar)에 대한 예제가 필요하면 말씀해주세요!