Kanna (HTML/XML 파싱 라이브러리)

1. 개요

Kanna는 Swift 언어 기반의 HTML/XML 파싱 라이브러리로, iOS/macOS 애플리케이션에서 웹 크롤링 또는 데이터 추출 작업을 효율적으로 수행할 수 있도록 설계됨. Apple의 Foundation 프레임워크에 내장된 XMLParser보다 직관적이며, XPath 및 CSS Selector 기반의 파싱을 지원함.

  • 프로젝트명: Kanna
  • 지원 플랫폼: iOS, macOS
  • 주요 기능: XPath 및 CSS3 Selector 지원, HTML/XML 파싱
  • 라이선스: MIT License
  • 기반 라이브러리: libxml2 (C 기반)

2. 기술적 특징

항목내용
파서 엔진C 기반 libxml2
언어Swift (Objective-C 연동 가능)
파싱 대상HTML 4.x/5.x, XHTML, XML 1.0
선택자 지원XPath, CSS
오류 내성HTML 파싱 시 비표준 문서에 대한 내성 있음
동기/비동기동기적 처리 중심 (네트워크 요청은 별도 필요)

2.1 XPath 예시

if let doc = try? HTML(html: htmlString, encoding: .utf8) {
    for node in doc.xpath("//a[@href]") {
        print(node.text)
    }
}

2.2 CSS Selector 예시

if let doc = try? HTML(html: htmlString, encoding: .utf8) {
    for link in doc.css("a.link") {
        print(link["href"])
    }
}

3. 구조 및 내부 동작

3.1 파싱 절차

  1. HTML() 혹은 XML() 객체로 Raw 문자열 입력
  2. 내부적으로 libxml2 파서 호출
  3. 노드 트리 구조 생성
  4. XPath 혹은 CSS Selector로 탐색 가능
  5. XMLElement 객체로 결과 리턴

3.2 의존성

  • Swift Package Manager, CocoaPods, Carthage 지원
  • libxml2를 링크해야 하며, -lxml2 플래그 설정 필요

4. 장단점 분석

✅ 장점

  • 간결한 문법: XPath/CSS Selector 모두 지원
  • Swift 친화적: 타입 안정성과 Swift 스타일 API 제공
  • libxml2 기반: 빠르고 안정적인 파싱 성능

❌ 단점

  • 비동기 지원 미흡: 네트워크 연동은 별도 구현 필요
  • 메모리 사용량: 대규모 HTML 파싱 시 성능 이슈 발생 가능
  • 정규표현식 기능 없음: 파싱 이후 별도 처리 필요

5. 주요 사용 사례

사례설명
뉴스/블로그 크롤러웹 페이지에서 기사, 본문, 날짜 추출
메타데이터 수집<meta>, <title> 태그에서 정보 수집
스크래핑 앱가격 비교, 쿠폰 정보 수집 등
정적 HTML 검사템플릿 검증 자동화 테스트

6. Kanna vs 경쟁 라이브러리

라이브러리언어XPathCSS Selector주요 특징
KannaSwiftiOS/macOS에서 가장 많이 사용됨
FuziSwift경량, XPath만 지원
SwiftSoupSwiftCSS Selector 기반, JSoup 포팅
HppleObj-CKanna 이전 대표 라이브러리

7. 버전 히스토리 및 유지관리

  • 최초 릴리즈: 2015년
  • 활성화 여부: GitHub에서 활발한 유지보수 진행 (2025년 기준 최신 커밋 있음)
  • 저자: tid-kijyun
  • 레포지토리: https://github.com/tid-kijyun/Kanna

8. 보안 및 안정성 고려사항

  • 외부 HTML 파싱 시 XSS/스크립트 인젝션 가능성 고려 필요
  • 비정형 HTML 파싱 시 오류 처리 로직 필수
  • UTF-8 등 문자 인코딩 오류 대응 필요

9. 결론 및 권장사항

Kanna는 iOS/macOS 환경에서 HTML/XML 파싱이 필요한 앱 또는 크롤링 도구 개발에 매우 적합함. XPath와 CSS Selector를 모두 지원하며, 직관적인 API와 성능 면에서도 높은 수준을 보여줌. 다만 대규모 파싱과 비동기 작업이 필요할 경우 메모리 관리와 네트워크 처리 분리 구조에 대한 추가 설계가 필요함.

✅ 추천 대상:

  • Swift 기반 앱 개발자
  • iOS 웹 데이터 크롤링 기능이 필요한 프로젝트
  • 경량 HTML/XML 파서가 필요한 경우

⚠️ 비추천 대상:

  • 서버사이드 크롤러 개발 (Python의 BeautifulSoup 등 추천)
  • 매우 큰 문서를 실시간으로 처리해야 하는 경우

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다