Hardwood Promises High-Speed JVM Apache Parquet Processing with Zero Mandatory Dependencies

Hardwood Promises High-Speed JVM Apache Parquet Processing with Zero Mandatory Dependencies

Apache Parquet와 JVM, 그 복잡한 관계

Apache Parquet는 컬럼형 저장 포맷으로, 빅데이터 파이프라인에서 사실상 표준처럼 쓰인다. 그러나 Java 생태계에서 Parquet 파일을 다루려면 기존 apache-parquet-java 구현이 끌고 오는 방대한 의존성 트리가 발목을 잡는 경우가 많다. Hadoop 관련 모듈, Avro, Thrift 등 직접 쓰지 않아도 의존성 충돌이나 클래스패스 오염 문제로 고생해본 경험이 있다면, 이 고통이 낯설지 않을 것이다. 백엔드 서비스에서 Parquet를 가볍게 읽어야 하는 상황인데도 불필요하게 무거운 라이브러리를 붙여야 하는 상황은 특히 마이크로서비스 환경에서 더욱 부담스럽다.

Hardwood가 제시하는 접근 방식

Gunnar Morling이 주도한 Hardwood 프로젝트가 v1.0에 도달했다. 핵심 설계 철학은 두 가지다.

  • Zero mandatory dependencies: 외부 의존성이 전혀 없다. 라이브러리 자체만으로 동작하므로 의존성 충돌 걱정 없이 기존 프로젝트에 추가할 수 있다.
  • 멀티스레드 기반 처리: 단순한 순차 읽기 대신 멀티스레드 방식을 채택해 대용량 Parquet 파일도 빠르게 처리할 수 있도록 설계되었다.

현재 v1.0에서 제공하는 기능은 API 기반 읽기CLI 시각화다. Parquet 파일 내용을 API로 조회하거나 CLI로 빠르게 확인하는 용도로 즉시 활용 가능하다. 쓰기(write) 지원은 향후 버전에서 추가될 예정이다.

// Hardwood API 기반 읽기 예시 (개념적 사용 패턴)
try (ParquetReader reader = Hardwood.read(Path.of("data.parquet"))) {
    reader.records().forEach(record -> {
        System.out.println(record);
    });
}

의존성 없이 위와 같은 형태로 Parquet 파일을 읽을 수 있다는 점은, 특히 배치 처리나 데이터 검증 용도의 내부 툴링을 만들 때 매력적인 선택지가 된다.

실무에서 어떤 상황에 유용한가

Hardwood가 빛을 발하는 시나리오는 명확하다.

  • 마이크로서비스에서 Parquet 파일 읽기: Spark나 Hadoop 없이 서비스 레이어에서 직접 Parquet 데이터를 소비해야 할 때, 기존 구현의 무거운 의존성 없이 가볍게 통합할 수 있다.
  • 내부 데이터 검증 도구: CI/CD 파이프라인이나 운영 스크립트에서 Parquet 파일 내용을 CLI로 빠르게 확인하거나 검증하는 용도로 유용하다.
  • 의존성 충돌이 민감한 레거시 프로젝트: 클래스패스가 복잡한 레거시 환경에서 외부 의존성 없이 Parquet를 읽어야 할 때 안전하게 추가할 수 있다.

다만 현시점에서 쓰기 지원이 없다는 점은 분명한 제약이다. 데이터 파이프라인에서 Parquet 파일을 생성해야 하는 요구사항이 있다면 아직은 기존 구현과 병행 사용을 고려해야 한다. 쓰기 기능이 추가되는 시점에 실질적인 대안으로서의 완성도가 높아질 것으로 보인다.

정리

  • Hardwood는 외부 의존성 없이 JVM에서 Apache Parquet 파일을 멀티스레드로 읽을 수 있는 경량 라이브러리다.
  • 현재 v1.0은 API 읽기와 CLI 시각화를 제공하며, 쓰기 지원은 향후 추가 예정이다.
  • 의존성 충돌이 잦은 마이크로서비스나 레거시 환경에서 Parquet 파일을 가볍게 다뤄야 할 때 실용적인 선택지가 된다.
Source
InfoQ
원문 보기 →
← 목록으로 돌아가기