데이터를 Parquet로 저장하다 보면 compression 옵션에 snappy, gzip, zstd 같은 낯선 이름이 등장합니다.
아무거나 골라도 열리기는 하니 대충 넘기기 쉽지만,
이 한 줄이 파일 크기와 저장 속도를 꽤 크게 바꿔 놓습니다.
그래서 같은 데이터를 코덱만 바꿔 가며 실제로 저장해 크기와 시간을 재 봤습니다.
결론부터 말하면 무조건 가장 작은 코덱이 정답은 아니었습니다.

30만 행을 코덱 네 가지로 저장해 봤습니다
회원 명단 형태의 표 데이터 30만 행(컬럼 9개: id, name, age, city, category, status, amount, score, joined)을 만들고,
같은 데이터를 코덱만 바꿔 저장했습니다.
측정 환경은 윈도우 11, 파이썬 3.14.3, pandas와 pyarrow입니다.
| compression | 용량 | 비압축 대비 | 저장 시간(대략) |
|---|---|---|---|
| none (비압축) | 6.47 MB | 1.00배 | 약 0.4초 |
| snappy | 4.70 MB | 0.73배 | 약 0.3초 |
| gzip | 3.44 MB | 0.53배 | 약 7초 이상 |
| zstd | 3.64 MB | 0.56배 | 약 0.7초 |
용량 값은 seed를 고정한 결과라 같은 환경이면 거의 똑같이 재현됩니다.
저장 시간은 CPU 상태에 따라 편차가 있어 정확한 초가 아니라 서로의 배율로 보시는 편이 안전합니다.
가장 작은 코덱이 항상 좋은 선택은 아닙니다
표에서 눈에 띄는 지점이 두 가지입니다. 우선 어떤 코덱을 써도 비압축보다는 작아집니다.
Parquet는 같은 열의 비슷한 값을 모아 저장하는 열 지향 구조라, 압축이 잘 먹는 편입니다.
문제는 gzip입니다. 용량은 3.44MB로 가장 작지만, 저장에 걸린 시간이 다른 코덱의 스무 배가 넘었습니다.
반면 zstd는 3.64MB로 gzip과 크기 차이가 0.2MB 남짓인데, 저장 시간은 gzip의 10분의 1 수준이었습니다.
즉 조금 더 작게 만들려고 gzip을 고르면, 얻는 용량은 근소한데 저장 시간을 크게 손해 볼 수 있습니다.
그래서 언제 무엇을 고르면 될까
코덱마다 성격이 뚜렷해서, 파일을 어떻게 쓸지에 따라 답이 갈립니다.
| 이럴 때 | 추천 코덱 |
|---|---|
| 자주 읽고 쓰는 작업 파일, 속도가 중요할 때 | snappy |
| 용량과 속도를 균형 있게 잡고 싶을 때 | zstd |
| 한 번 저장하고 오래 보관, 전송 용량을 최대한 줄일 때 | gzip |
특별한 이유가 없다면 zstd가 용량과 속도 사이에서 가장 무난한 선택입니다.
pandas 기본값은 snappy라, 저장 속도가 최우선이면 기본값을 그대로 두어도 됩니다.
직접 확인하고 싶다면
아래 코드는 같은 데이터를 코덱별로 저장하고 파일 크기를 출력합니다.
pandas와 pyarrow가 설치돼 있어야 하며, zstd와 gzip은 pyarrow에 기본 포함돼 별도 설치가 필요 없습니다.
import pandas as pd
# 예시 데이터 (여기서는 임의 생성, 실제로는 본인 DataFrame 사용)
df = pd.DataFrame({
"id": range(300000),
"city": ["서울", "부산", "대구"] * 100000,
"amount": [1234.5] * 300000,
})
for codec in ["snappy", "gzip", "zstd", None]:
name = codec or "none"
df.to_parquet(f"data_{name}.parquet", compression=codec)
import os
for name in ["snappy", "gzip", "zstd", "none"]:
size = os.path.getsize(f"data_{name}.parquet")
print(name, round(size / 1024 / 1024, 2), "MB")
compression 인자에 코덱 이름을 문자열로 넣기만 하면 됩니다.
비압축으로 저장하려면 None을 넘깁니다. 실제 용량 절감폭은 데이터 성격에 따라 달라지지만,
반복이 많은 표 데이터일수록 압축 효과가 커지는 방향은 대체로 같습니다.
자주 묻는 질문
Q. 코덱을 바꿔 저장한 파일도 그냥 열리나요?
네. 읽을 때는 코덱을 따로 지정하지 않아도 됩니다. pandas가 파일 안의 정보를 보고 알아서 풀어 읽습니다.
Q. snappy가 기본값이면 그냥 써도 되나요?
자주 읽고 쓰는 파일이면 괜찮습니다. 다만 보관이나 전송이 목적이라면 zstd로 바꾸는 것만으로 용량을 더 줄일 수 있습니다.
Q. gzip은 쓸 일이 없나요?
저장 시간보다 최종 크기가 훨씬 중요한 경우, 예를 들어 한 번 만들어 오래 내려받게 할 파일이라면 gzip이 유리할 수 있습니다.
compression은 무심코 지나치기 쉬운 옵션이지만, 파일의 쓰임새를 떠올리며 한 번만 정해 두면 저장 속도와 용량을 함께 챙길 수 있습니다. 지금 다루는 Parquet가 오래 보관할 파일인지 자주 여닫을 파일인지부터 생각해 보시면 선택이 쉬워집니다.
'파일 형식 백과사전' 카테고리의 다른 글
| 투명 배경 PNG를 JPG로 저장했더니 배경이 새까맣게, 원인과 깔끔한 해결법 (0) | 2026.07.23 |
|---|---|
| 중첩된 JSON을 엑셀에서 열리는 CSV로, 배열까지 한 줄씩 펼쳐 변환하기 (0) | 2026.07.22 |
| CSV를 열었더니 주소 뒷부분이 옆 칸으로, 값 속 쉼표 때문에 열이 밀리는 문제 (0) | 2026.07.20 |
| 수백만 행 CSV를 pandas로 읽는 게 느릴 때, 읽기 속도를 끌어올리는 방법 (0) | 2026.07.19 |
| 사진 용량 줄일 때 해상도를 줄일까 화질을 낮출까, 무엇이 더 효율적인지 실측 (0) | 2026.07.18 |