콘텐츠로 건너뛰기

개발자를 위한 파일 형식 빠른 참조

카테고리: 참조

웹 애플리케이션 개발에서는 파일 검증, MIME 타입 판정, 업로드 제한 설계 등 파일 형식에 관한 지식이 자주 필요합니다. 이 글에서는 개발 현장에서 자주 다루는 파일 형식을 목록으로 정리합니다. 북마크해두면 언제든 참조할 수 있는 빠른 참고자료로 활용하세요.

주요 파일 형식 사용 매트릭스 카테고리별 파일 형식과 주요 용도 이미지 JPEG / JPG PNG (투명) WebP (웹 권장) AVIF (차세대) SVG (벡터) GIF (구형 애니) 문서 PDF (배포) DOCX (Word) XLSX (Excel) PPTX (PowerPoint) ODT (OpenDoc) RTF (호환) 아카이브 ZIP (표준) TAR.GZ (Unix) 7Z (고압축) RAR (유료) XZ (LZMA) BZIP2 (구형) 텍스트/데이터 JSON (API) CSV (스프레드시트) XML (구조) YAML (설정) TOML (설정) TXT (단순)
그림 1: 4가지 카테고리별 주요 파일 형식

이미지 형식

파일 확장자 MIME 타입 압축 투명도 주요 용도
.png image/png 무손실 지원 스크린샷, 로고, 아이콘
.jpg / .jpeg image/jpeg 손실 압축 지원하지 않음 사진, 썸네일
.gif image/gif 무손실 지원 (1bit) 애니메이션, 단순 도형
.webp image/webp 둘 다 지원 웹 전반(PNG의 후속 후보)
.avif image/avif 둘 다 지원 차세대 웹 이미지
.svg image/svg+xml 없음 (XML) 지원 벡터 이미지, 아이콘

주의: SVG는 XML 기반이므로 XSS(크로스 사이트 스크립팅) 위험이 있습니다. 사용자가 업로드한 SVG를 그대로 표시하는 것은 위험합니다. 반드시 새니타이제이션 처리를 수행하세요.

문서 형식

파일 확장자 MIME 타입 내부 구조 주요 용도
.pdf application/pdf 바이너리 인쇄용 문서, 양식
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document ZIP(XML) Word 문서
.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ZIP(XML) Excel 스프레드시트
.pptx application/vnd.openxmlformats-officedocument.presentationml.presentation ZIP(XML) PowerPoint 프레젠테이션

아카이브 형식

파일 확장자 MIME 타입 특징 주의사항
.zip application/zip 가장 널리 보급되고 OS 표준 지원 일본어 파일명 문자 깨짐 (UTF-8 vs CP932)
.tar.gz application/gzip Unix/Linux 표준 Windows에서는 압축 해제 도구가 필요할 수 있음
.7z application/x-7z-compressed 높은 압축률 전용 도구 (7-Zip) 필요
.rar application/vnd.rar 분할 아카이브 지원 독점 형식

텍스트·데이터 형식

파일 확장자 MIME 타입 용도 일반적인 문제
.csv text/csv 데이터 교환, 가져오기/내보내기 문자 인코딩, 줄 바꿈 코드, BOM
.json application/json API 통신, 설정 파일 UTF-8 필수 (RFC 8259)
.xml application/xml 설정 파일, 데이터 교환 인코딩 선언과의 불일치
.txt text/plain 로그, 메모, README 문자 인코딩의 자동 감지가 불안정합니다.

MIME 타입 유효성 검사

파일 업로드 기능을 구현할 때 확장자뿐만 아니라 MIME 타입도 검증하는 것이 중요합니다. 다만, MIME 타입은 클라이언트 측에서 위조할 수 있으므로 서버 측에서의 매직바이트(파일 헤더) 체크도 병행하세요.

// PHP でのマジックバイトによる判定
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->file($_FILES['upload']['tmp_name']);

$allowedTypes = [
    'image/png',
    'image/jpeg',
    'image/webp',
    'application/pdf',
];

if (!in_array($mimeType, $allowedTypes, true)) {
    throw new Exception('許可されていないファイル形式です');
}
// Node.js での file-type ライブラリを使った判定
import { fileTypeFromFile } from 'file-type';

const type = await fileTypeFromFile('upload.png');
console.log(type);
// { ext: 'png', mime: 'image/png' }

테스트용 파일 다운로드

각 형식의 검증 처리 및 업로드 기능 테스트를 위해 DevLab의 테스트 파일을 활용하시기 바랍니다.

요약

파일 형식에 대한 올바른 이해는 안전하고 견고한 업로드 기능을 구현하기 위한 기초입니다. 파일 확장자만이 아니라 MIME 타입과 매직 바이트 모두로 검증하여 적절한 검증을 수행하세요. 이 참고 자료를 북마크하여 개발 시 언제든지 참조할 수 있도록 하기를 권장합니다.

❓ 자주 묻는 질문

파일 업로드 시 MIME 타입을 검증해야 하는 이유는?
확장자는 쉽게 위장할 수 있어 확장자만 검사해서는 보안이 충분하지 않습니다. 서버 측에서 finfo나 mime_content_type()으로 MIME 타입을 검증하고, 매직 바이트(파일 헤더) 검사도 함께 사용하면 부정한 파일 업로드를 막을 수 있습니다.
SVG 파일 업로드를 허용할 때 주의할 점은?
SVG는 XML 기반 형식이므로 XSS(크로스 사이트 스크립팅) 위험이 있습니다. 사용자가 업로드한 SVG를 그대로 표시하는 것은 위험합니다. 반드시 새니타이즈 처리를 하여 script 태그나 이벤트 핸들러 같은 위험 요소를 제거한 뒤 사용하세요.
Office 문서(docx, xlsx, pptx)의 내부 구조는 어떻게 되어 있나요?
docx, xlsx, pptx 등의 Office 문서는 ZIP 형식 안에 XML 파일을 담은 구조입니다. MIME 타입은 각각 application/vnd.openxmlformats-officedocument 계열의 긴 문자열이며, 검증 시 이 정확한 MIME 타입을 화이트리스트에 포함해야 합니다.