개발자를 위한 파일 형식 빠른 참조
카테고리: 참조
이 기사는 현재 일본어로만 제공됩니다. 번역본은 순차적으로 공개될 예정입니다.
웹 애플리케이션 개발에서는 파일 검증, MIME 타입 판정, 업로드 제한 설계 등 파일 형식에 관한 지식이 자주 필요합니다. 이 글에서는 개발 현장에서 자주 다루는 파일 형식을 목록으로 정리합니다. 북마크해두면 언제든 참조할 수 있는 빠른 참고자료로 활용하세요.
이미지 형식
| 파일 확장자 | MIME 타입 | 압축 | 투명도 | 주요 용도 |
|---|---|---|---|---|
.png |
image/png |
무손실 | 지원 | 스크린샷, 로고, 아이콘 |
.jpg / .jpeg |
image/jpeg |
손실 압축 | 지원하지 않음 | 사진, 썸네일 |
.gif |
image/gif |
무손실 | 지원 (1bit) | 애니메이션, 단순 도형 |
.webp |
image/webp |
둘 다 | 지원 | 웹 전반(PNG의 후속 후보) |
.avif |
image/avif |
둘 다 | 지원 | 차세대 웹 이미지 |
.svg |
image/svg+xml |
없음 (XML) | 지원 | 벡터 이미지, 아이콘 |
<strong>주의:</strong> 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의 테스트 파일을 활용하시기 바랍니다.
- <a href="/ja/files/images/">이미지 파일</a> — PNG, JPG, WebP, GIF 다양한 크기
- <a href="/ja/files/pdf/">PDF 파일</a> — 다양한 크기의 PDF 테스트 파일
- <a href="/ja/files/zip/">ZIP 파일</a> — 아카이브 처리 테스트용
- <a href="/ja/files/csv/">CSV 파일</a> — 데이터 임포트 테스트
- <a href="/ja/files/json/">JSON 파일</a> — API 테스트용
- <a href="/ja/files/txt/">텍스트 파일</a> — 텍스트 처리 테스트용
- <a href="/ja/files/broken/">손상된 파일</a> — 에러 핸들링 테스트
요약
파일 형식에 대한 올바른 이해는 안전하고 견고한 업로드 기능을 구현하기 위한 기초입니다. 파일 확장자만이 아니라 MIME 타입과 매직 바이트 모두로 검증하여 적절한 검증을 수행하세요. 이 참고 자료를 북마크하여 개발 시 언제든지 참조할 수 있도록 하기를 권장합니다.
이 기사에서 사용할 수 있는 테스트 파일
- → <a href="/ja/files/images/" class="text-primary-600 dark:text-primary-400 hover:underline">이미지 테스트 파일 목록 (PNG / JPG / WebP / GIF)</a>
- → <a href="/ja/files/pdf/" class="text-primary-600 dark:text-primary-400 hover:underline">PDF 테스트 파일 목록</a>
- → <a href="/ja/files/zip/" class="text-primary-600 dark:text-primary-400 hover:underline">ZIP 테스트 파일 목록</a>
- → <a href="/ja/files/csv/" class="text-primary-600 dark:text-primary-400 hover:underline">CSV 테스트 파일 목록</a>
- → <a href="/ja/files/json/" class="text-primary-600 dark:text-primary-400 hover:underline">JSON 테스트 파일 목록</a>
관련 기사
- → <a href="/ja/blog/file-validation-checklist/" class="text-primary-600 dark:text-primary-400 hover:underline">웹 폼 파일 검증 구현 체크리스트</a>
- → <a href="/ja/reference/magic-bytes/" class="text-primary-600 dark:text-primary-400 hover:underline">매직 바이트 (파일 시그니처) 참고</a>