**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 (연락처 정보) - **용도**: 사람, 조직, 장소의 연락처 정보. - **예제**: ```html
홍길동 Example Corp hong@example.com
123 서울로 서울
``` - **클래스**: `vcard`, `fn`(fullname), `org`, `email`, `adr`(address) 등. #### (2) hCalendar (이벤트) - **용도**: 이벤트, 일정 정보. - **예제**: ```html

컨퍼런스 2025

2025-03-07T09:00:00+09:00 - 2025-03-07T17:00:00+09:00
서울 컨벤션 센터
``` - **클래스**: `vevent`, `summary`, `dtstart`(시작), `dtend`(종료), `location`. #### (3) hEntry (블로그 게시물) - **용도**: 블로그 포스트, 기사 등. - **예제**: ```html

오늘의 뉴스

최신 소식을 전합니다.
홍길동
``` - **클래스**: `hentry`, `entry-title`, `published`, `entry-content`, `author`. #### (4) hReview (리뷰) - **용도**: 제품, 서비스 리뷰. - **예제**: ```html

최신 스마트폰

4.5

성능이 뛰어납니다.

홍길동
``` - **클래스**: `hreview`, `item`, `rating`, `description`, `reviewer`. #### (5) rel 속성 기반 Microformats - **rel-nofollow**: 링크가 신뢰하지 않음을 표시. ```html 스팸 링크 ``` - **rel-tag**: 태그 지정. ```html ``` --- ### 4. Microformats의 작동 방식 - **구성 요소**: - **루트 클래스**: 데이터 유형 정의(예: `vcard`, `vevent`). - **속성 클래스**: 세부 데이터 정의(예: `fn`, `dtstart`). - **파싱**: - 크롤러나 도구가 클래스 이름으로 데이터 추출. - 예: `class="fn"` → 이름 데이터로 인식. --- ### 5. 자바로 Microformats 파싱 예제 HTML에서 Microformats를 파싱하려면, Jsoup 같은 라이브러리를 사용해 클래스 기반 데이터를 추출할 수 있습니다. #### (1) 의존성 (Maven) ```xml org.jsoup jsoup 1.15.3 ``` #### (2) hCard 파싱 ```java 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 = "
" + "홍길동" + "hong@example.com" + "
"; 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`). - 중첩된 구조 지원 강화. - **예제**: ```html
홍길동 hong@example.com
``` - **클래스 접두사**: `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)에 대한 예제가 필요하면 말씀해주세요!