데이터관련

Parquet 파일 포맷 대용량 데이터 저장 및 분석의 비밀병기

leeveoh 2025. 6. 2. 10:14
728x90

오늘은 대용량 데이터를 다룰 때 효율적으로 저장하고 빠르게 쿼리할 수 있는 파일 포맷인 Apache Parquet에 대해 알아보겠습니다. Auth0의 사례를 통해 Parquet의 강력함을 확인해 보세요!

Parquet란 무엇인가요?

Apache Parquet은 데이터를 행(row)이 아닌 열(column) 단위로 저장하는 파일 포맷입니다. 이 포맷의 주요 특징은 파일 끝에 저장된 메타데이터를 통해 원하는 데이터만 선택적으로 읽을 수 있다는 점입니다. 즉, 데이터를 전부 읽지 않아도 필요한 부분만 읽을 수 있기 때문에 속도가 빠르고 비용 효율적입니다.

왜 Parquet를 선택해야 할까요?

Auth0의 사례를 보면, 매월 600억 건 이상의 요청 로그를 다루며 하루에 약 1TB의 데이터를 생성합니다. 기존에는 gzipped JSON 파일을 사용했지만, 쿼리 성능이 느리고 비용이 높다는 문제가 있었습니다. 이를 해결하기 위해 Parquet로 전환했으며, 다음과 같은 이점을 누릴 수 있었습니다:

  1. 빠른 데이터 읽기: 메타데이터를 활용해 필요한 열만 읽음으로써 속도를 개선.
  2. 저렴한 비용: Amazon Athena 같은 서비스에서 스캔된 데이터 용량에 따라 비용이 청구되는데, Parquet는 스캔 용량을 줄여줍니다.
  3. 효율적인 데이터 압축: 다양한 인코딩 기법을 통해 저장 공간을 줄이고 성능을 극대화.

Parquet의 주요 인코딩 기법

  1. 사전(Dictionary) 인코딩: 동일한 값이 반복될 경우, 해당 값을 사전에 저장하고 인덱스로 참조. 예를 들어 HTTP 상태 코드 같은 값에 적합.
  2. 런 렝스 인코딩(RLE): 연속적으로 반복되는 값을 압축. 예를 들어, 동일한 상태 코드가 반복되는 경우 활용.
  3. 델타(Delta) 인코딩: 연속된 값들 간의 차이(deltas)를 저장. 예를 들어, 요청 지속 시간이나 타임스탬프 데이터에 적합.

Parquet를 시작하는 방법

Parquet를 시작하는 데 복잡한 설정이나 대규모 인프라가 필요하지 않습니다. 예를 들어, DuckDB를 사용하면 간단히 JSON 데이터를 Parquet로 변환하고 쿼리할 수 있습니다. 다음은 DuckDB를 사용한 기본 명령어 예제입니다:

sql
COPY(
  SELECT * FROM read_json('https://github.com/grounded042/airports-dataset/raw/226a54bb19535ea8c5e6175a591446e67c4ab44c/airports.json')
) TO 'airports.parquet' (FORMAT PARQUET, COMPRESSION ZSTD);

이후 Parquet 파일에서 상위 20개 국가별 공항 수를 쿼리할 수 있습니다:

sql
SELECT COUNT(*) as count, iso_country FROM 'airports.parquet' GROUP BY iso_country ORDER BY count DESC LIMIT 20;

Parquet로 전환해야 하는 이유

Parquet는 단순히 데이터를 열 단위로 저장하는 포맷 그 이상입니다. 데이터 타입을 효율적으로 저장하고, 반복되는 값을 효과적으로 처리하며, 대용량 데이터를 다루는 데 최적화되어 있습니다. Auth0는 Parquet로의 전환을 통해 성능과 비용 측면에서 큰 개선을 경험했으며, 여러분도 JSON 데이터를 Parquet로 변환해 그 이점을 체감할 수 있습니다.

지금 바로 DuckDB와 같은 도구를 활용해 작은 데이터셋으로 시작해 보세요. 데이터 분석과 저장의 새로운 가능성을 열어줄 것입니다!

참고 자료