메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

💬 같이 떠들 사람? 노바위키 디스코드

확장자(副檔字, filename extension)는 파일 이름 뒤에 붙어 파일의 종류나 용도를 나타내는 문자열이다. 영어로는 filename extension 또는 간단히 file extension이라고 한다.

보통 파일 이름의 마지막 부분에 마침표 `.`와 함께 붙는다.

사진.jpg
음악.mp3
문서.pdf
압축파일.zip
프로그램.exe

여기서 `.jpg`, `.mp3`, `.pdf`, `.zip`, `.exe`가 확장자다.

Windows에서는 확장자가 어떤 프로그램으로 파일을 열 것인지 결정하는 데 특히 중요한 역할을 한다. 예를 들어 `.docx`는 보통 Microsoft Word, `.xlsx`는 Microsoft Excel, `.mp3`는 음악 재생 프로그램과 연결된다.[1]

다만 확장자와 실제 파일 형식은 같은 개념이 아니다. `cat.jpg`라는 파일의 이름을 `cat.png`로 바꾼다고 JPEG 파일이 PNG로 변환되는 것은 아니다. 이름표만 바뀌었을 뿐 파일 내부 데이터는 그대로다.[2]

구조

일반적인 파일 이름은 대략 다음과 같이 볼 수 있다.

파일이름.확장자

예를 들어

novawiki.png

라면

  • `novawiki` - 파일 이름
  • `.png` - 확장자

다.

확장자 앞의 마침표 자체를 포함해 `.png`라고 표현하는 경우가 많지만 확장자 문자열 자체는 `png`라고 보기도 한다.

파일 이름에는 마침표가 여러 개 들어갈 수도 있다.

novawiki.backup.2026.zip

이 경우 일반적으로 마지막 `.zip`을 확장자로 취급한다.

하지만 다음과 같이 여러 부분이 하나의 의미를 이루는 복합 확장자도 있다.

archive.tar.gz
database.sql.gz
types.d.ts

`archive.tar.gz`는 TAR 파일을 gzip으로 다시 압축했다는 뜻이므로 `.tar.gz` 전체가 하나의 관용적인 형식 표시처럼 사용된다.

Linux 데스크톱에서 사용하는 Shared MIME-info 사양 역시 `*.tar.gz`처럼 여러 확장자가 붙은 경우 더 긴 패턴을 우선해서 식별하도록 규정한다.[3]

역사

초기 컴퓨터 운영체제에서는 파일 이름 뒤의 짧은 문자열을 이용해 파일 종류를 구분하는 방식이 널리 사용됐다.

DOS에서는 8.3 파일명 규칙이 유명했다.

XXXXXXXX.YYY

파일 이름 8자, 확장자 3자까지 사용할 수 있었기 때문에 지금도 유명한 확장자 상당수가 3글자다.

  • `.txt`
  • `.exe`
  • `.com`
  • `.bat`
  • `.bmp`
  • `.wav`
  • `.zip`
  • `.gif`
  • `.jpg`

JPEG의 원래 약어가 JPEG인데 확장자로 `.jpg`가 널리 퍼진 것도 3글자 제한의 영향이 컸다.

현대의 Windows, Linux, macOS 등에서는 확장자가 반드시 3글자일 필요가 없다.

그래서

  • `.jpeg`
  • `.html`
  • `.docx`
  • `.xlsx`
  • `.webp`
  • `.webm`
  • `.heic`
  • `.torrent`
  • `.blend`
  • `.sqlite`

등 길이가 제각각인 확장자를 자유롭게 사용한다.

확장자와 파일 형식

확장자는 파일 형식을 표시하는 이름이지 파일 형식 그 자체가 아니다.

예를 들어 실제 PNG 파일에는 파일 시작 부분에 PNG를 나타내는 고유한 데이터가 존재한다. 확장자를 `.jpg`로 바꿔도 내부 데이터는 여전히 PNG다.

마찬가지로

music.mp3 → music.wav

로 이름을 바꾼다고 MP3가 WAV로 변환되지 않는다.

Microsoft도 Windows의 확장자 변경은 파일 형식 자체를 변환하지 않고 파일 이름만 변경한다고 명시하고 있다.[4]

진짜 변환을 하려면 해당 데이터를 디코딩하고 다른 포맷으로 다시 저장해야 한다.

예를 들어

PNG → JPEG

변환이라면 PNG 데이터를 읽은 뒤 JPEG 방식으로 다시 인코딩해야 한다.

WAV → MP3

역시 PCM 등의 오디오 데이터를 MP3 코덱으로 새로 인코딩해야 한다.

그냥 이름만 바꾸는 것은 변환이 아니다.

파일 시그니처

파일 내부에 들어 있는 형식 식별용 데이터를 파일 시그니처(file signature)라고 한다.

흔히 매직 넘버(magic number)라고도 한다.

대표적으로 다음과 같은 파일은 시작 부분에 특징적인 값이 들어 있다.

형식 대표적인 시작 데이터
PNG `89 50 4E 47 0D 0A 1A 0A`
JPEG `FF D8 FF`
GIF `GIF87a` 또는 `GIF89a`
PDF `%PDF-`
ZIP `PK`
WAV `RIFF....WAVE`

따라서 프로그램은 확장자만 보지 않고 파일 내부를 확인해 실제 형식을 판별할 수도 있다.

Unix 계열 시스템의 `file` 명령어가 대표적이다.

file image.jpg

`file`은 파일시스템 정보, 매직 데이터, 텍스트 구조 등을 검사해 파일 형식을 판단한다.[5]

그래서 PNG 파일 이름을 억지로 `image.jpg`로 바꿔도 `file` 명령어를 실행하면 실제로는 PNG라는 것을 찾아낼 수 있다.

MIME 타입

인터넷에서는 파일 확장자와 별도로 MIME 타입 또는 미디어 타입을 사용해 데이터 형식을 표현한다.

대표적으로

파일 MIME 타입
HTML `text/html`
CSS `text/css`
JSON `application/json`
PDF `application/pdf`
JPEG `image/jpeg`
PNG `image/png`
GIF `image/gif`
MP3 `audio/mpeg`
MP4 `video/mp4`

와 같이 쓴다.

IANA는 현재 MIME 타입을 `application`, `audio`, `font`, `image`, `message`, `model`, `multipart`, `text`, `video` 등의 최상위 유형으로 분류해 등록하고 있다.[6]

확장자와 MIME 타입은 서로 관련이 있지만 1:1 대응하는 것은 아니다.

예를 들어 같은 MIME 타입에 여러 확장자가 대응될 수도 있고 같은 컨테이너가 내부 데이터에 따라 서로 다른 용도로 사용될 수도 있다.

Linux 데스크톱 환경의 Shared MIME-info 역시 파일명의 확장자 패턴과 파일 내부의 매직 데이터를 함께 사용해 MIME 타입을 판별한다.[7]

Windows

Windows는 파일 확장자를 적극적으로 사용하는 대표적인 운영체제다.

확장자를 이용해

  • 파일 아이콘
  • 기본 프로그램
  • 더블클릭 시 실행할 프로그램
  • 파일 종류 설명

등을 연결한다.

예를 들어 `.xlsx`를 Microsoft Excel에 연결하면 파일 탐색기에서 Excel 아이콘이 표시되고 더블클릭했을 때 Excel이 실행된다.

Microsoft가 제공하는 Windows 확장자 목록만 봐도 수많은 형식이 등록되어 있다.[8]

확장자 표시

Windows에서는 설정에 따라 알려진 파일 형식의 확장자를 숨길 수 있다.

Windows 11 기준 파일 탐색기에서

보기 → 표시 → 파일 확장명

을 활성화하면 확장자를 볼 수 있다.[9]

컴퓨터를 어느 정도 다룬다면 그냥 항상 켜놓는 것이 편하다.

특히 실행파일과 일반 문서를 구별할 때 상당히 중요하다.

Linux

Linux와 전통적인 Unix 계열에서는 확장자가 Windows보다 덜 절대적이다.

실행파일도 반드시 `.exe`를 붙이지 않는다.

예를 들어

bash
python
ssh
ls
grep
nginx

같은 프로그램에는 확장자가 없다.

Unix 계열에서는 파일이 실행 가능한지는 파일 이름의 확장자보다 실행 권한과 파일 내부 형식이 중요하다.

ELF 실행파일에 굳이 `.elf`라는 확장자를 붙일 필요도 없다.

하지만 사용자 편의와 데스크톱 프로그램 연결 등을 위해 Linux에서도 `.txt`, `.png`, `.mp4`, `.pdf` 같은 확장자를 매우 흔하게 사용한다.

freedesktop.org의 Shared MIME-info 시스템은

  • 파일명 패턴
  • 확장자
  • MIME 타입
  • 매직 데이터

를 함께 사용해 파일 종류를 판별한다.[10]

macOS

macOS에서도 확장자를 사용한다.

대표적으로

  • `.app`
  • `.dmg`
  • `.pkg`
  • `.plist`
  • `.heic`
  • `.mov`

등이 흔하다.

macOS의 애플리케이션은 Finder에서 하나의 파일처럼 보이는 `.app` 형태가 많지만 실제로는 내부에 여러 파일과 디렉터리가 들어 있는 애플리케이션 번들이다.

또 역사적으로 Macintosh는 단순한 확장자 이외에도 파일 타입 코드나 Creator Code 같은 별도의 메타데이터 체계를 사용했다.

현대 macOS에서는 확장자와 함께 UTI/UTType 계열의 파일 형식 식별 체계를 사용한다.

주요 확장자

문서

확장자 형식 설명
.txt 텍스트 파일 일반 텍스트
.pdf PDF Adobe가 개발한 전자문서
.doc Microsoft Word Document 구형 Microsoft Word 문서
.docx Office Open XML Document 현대 Word 문서
.hwp 한글과컴퓨터 한글 문서 대한민국에서 많이 사용
.hwpx HWPX XML 기반 한글 문서
.odt OpenDocument Text LibreOffice 등에서 사용
.rtf Rich Text Format 서식 포함 텍스트
.md Markdown 마크다운 문서
.epub EPUB 전자책
.mobi Mobipocket 전자책

스프레드시트

확장자 형식
.xls 구형 Microsoft Excel 문서
.xlsx Office Open XML Spreadsheet
.xlsm 매크로 포함 Excel 문서
.csv CSV
.tsv Tab-separated values
.ods OpenDocument Spreadsheet

특히 CSV는 Excel 전용 형식이 아니다. 그냥 구분자로 데이터를 나열한 텍스트 파일이다.

프레젠테이션

확장자 형식
.ppt 구형 Microsoft PowerPoint 문서
.pptx Office Open XML Presentation
.pptm 매크로 포함 PowerPoint
.odp OpenDocument Presentation

이미지

확장자 형식 특징
.jpg / .jpeg JPEG 사진에 널리 사용되는 손실압축
.png PNG 무손실압축·투명도 지원
.gif GIF 애니메이션 지원
.webp WebP Google이 개발
.avif AVIF AV1 기반 이미지
.heif HEIF 고효율 이미지 컨테이너
.heic HEIC Apple 기기에서 흔함
.bmp BMP Windows 비트맵
.tif / .tiff TIFF 출판·스캔·전문 이미지
.svg SVG XML 기반 벡터 이미지
.ico Windows Icon 아이콘
.raw Raw image 일반적인 RAW 데이터 표현
.dng Digital Negative Adobe RAW 규격
.cr2 Canon RAW Canon 카메라
.cr3 Canon RAW 최신 Canon 카메라
.nef Nikon RAW Nikon 카메라
.arw Sony RAW Sony 카메라

3D·CAD

오디오

확장자 형식 특징
.wav WAV PCM 등에 널리 사용되는 오디오 컨테이너
.mp3 MP3 대표적인 손실압축 오디오
.aac AAC 손실압축 오디오
.flac FLAC 무손실압축
.m4a ALAC Apple 무손실 코덱
.ogg Ogg 컨테이너
.opus Opus 현대적인 오디오 코덱
.aiff / .aif AIFF Apple 계열 무압축 오디오
.mid / .midi MIDI 실제 음성 대신 연주 정보 저장
.m4a MPEG-4 Audio AAC·ALAC 등에 사용
.wma Windows Media Audio Microsoft 오디오

`.m4a`처럼 확장자 하나만으로 내부 코덱을 완전히 특정할 수 없는 경우도 있다. M4A 안에 AAC가 들어갈 수도 있고 ALAC가 들어갈 수도 있다.

영상

확장자 형식 특징
.mp4 MP4 가장 널리 사용되는 영상 컨테이너 중 하나
.mkv Matroska 다양한 코덱과 자막을 담을 수 있음
.avi AVI Microsoft의 오래된 컨테이너
.mov QuickTime Apple 계열 영상 컨테이너
.webm WebM 웹 영상
.mpeg / .mpg MPEG Program Stream 등 오래된 MPEG 영상
.m2ts MPEG-2 Transport Stream Blu-ray 등에 사용
.ts MPEG Transport Stream 방송·스트리밍
.3gp 3GPP 과거 휴대전화에서 많이 사용
.wmv Windows Media Video Microsoft 계열
.flv Flash Video 과거 웹 동영상

영상 파일에서는 특히 컨테이너와 코덱을 구분해야 한다.

예를 들어 `.mp4`라고 해서 무조건 H.264 영상인 것은 아니다.

MP4 컨테이너 안에는

등 다양한 영상·음성 데이터를 넣을 수 있다.

MKV 역시 영상 코덱 이름이 아니라 컨테이너다.

압축 및 아카이브

확장자 형식
.zip ZIP
.rar RAR
.7z 7-Zip
.tar TAR
.gz gzip
.bz2 bzip2
.xz XZ
.zst Zstandard
`.tar.gz` TAR + gzip
`.tar.bz2` TAR + bzip2
`.tar.xz` TAR + XZ
`.tgz` `.tar.gz`의 축약형

TAR 자체는 원래 여러 파일을 하나로 묶는 아카이브 형식이지 압축 알고리즘이 아니다.

그래서 Unix 계열에서는

archive.tar.gz

처럼 TAR로 묶은 뒤 gzip으로 압축하는 방식이 매우 흔하다.

실행파일 및 시스템 파일

확장자 설명
.exe Windows 실행파일
.com DOS 계열 실행파일
.msi Windows Installer 패키지
.dll Dynamic-Link Library
.sys Windows 시스템·드라이버 파일
.bat Windows 배치 파일
.cmd Windows 명령 스크립트
.ps1 PowerShell 스크립트
.vbs VBScript
.lnk Windows 바로가기
.scr Windows 화면보호기 실행파일
.app macOS 애플리케이션 번들
.dmg Apple Disk Image
.pkg macOS 설치 패키지
.apk Android 애플리케이션 패키지
.aab Android App Bundle
.ipa iOS 애플리케이션 패키지

Windows에서는 `.scr`도 화면보호기 영상 같은 파일이 아니라 실행 가능한 프로그램이라는 점에 주의해야 한다.

`.lnk` 역시 단순 문서가 아니라 다른 파일이나 명령을 실행하도록 설정할 수 있는 바로가기 파일이다.

프로그래밍 및 소스 코드

확장자 언어·형식
.c C
.cpp / .cc / .cxx C++
`.h` C/C++ 헤더
`.hpp` C++ 헤더
.cs C Sharp
.java Java
.py Python
.rb Ruby
.php PHP
.js JavaScript
.ts TypeScript
`.jsx` JSX
`.tsx` TypeScript + JSX
.rs Rust
.go Go
.swift Swift
.kt Kotlin
.R / .r R
`.m` Objective-C 또는 MATLAB 등
`.sh` 셸 스크립트
`.sql` SQL
`.lua` Lua
`.pl` Perl

하나의 확장자가 여러 언어에서 겹치는 경우도 있다.

대표적으로 `.m`은 Objective-C 소스 코드로도 쓰이고 MATLAB 파일로도 사용된다.

따라서 확장자만으로 파일의 정확한 의미를 항상 판단할 수 있는 것은 아니다.

웹

확장자 형식
.html / .htm HTML
.css CSS
.js JavaScript
.ts TypeScript
.json JSON
.xml XML
.yaml / .yml YAML
`.php` PHP
`.asp` Active Server Pages
`.aspx` ASP.NET
`.jsp` JavaServer Pages
`.wasm` WebAssembly

웹 서버에서는 실제 디스크 파일의 확장자가 URL에 아예 노출되지 않는 경우도 많다.

예를 들어

https://example.com/article/123

같은 주소가 내부적으로 PHP, Python, JavaScript 또는 다른 서버 프로그램에서 생성되는 페이지일 수도 있다.

데이터 및 설정 파일

확장자 설명
.json 구조화 데이터
.xml 마크업 기반 데이터
.yaml / .yml 설정·데이터
.csv 구분자 기반 표 데이터
.tsv 탭 구분 데이터
.ini 설정파일
`.cfg` Configuration
`.conf` Configuration
`.properties` Java 등의 설정파일
`.env` 환경변수 설정파일
.sqlite / .db SQLite 데이터베이스
`.sql` SQL 명령 및 데이터 덤프
`.log` 로그 파일

`.db`처럼 매우 일반적인 확장자는 특정 하나의 파일 형식을 의미하지 않는다.

프로그램마다 전혀 다른 데이터베이스를 `.db`라는 이름으로 저장할 수 있다.

디스크 이미지

확장자 형식
.iso ISO 9660 등의 광디스크 이미지
.dmg Apple Disk Image
.img 일반 디스크 이미지
`.vhd` Virtual Hard Disk
`.vhdx` Hyper-V Virtual Hard Disk
`.vmdk` VMware Virtual Disk
`.qcow2` QEMU Copy-On-Write

글꼴

확장자 형식
.ttf TrueType Font
.otf OpenType Font
.woff Web Open Font Format
.woff2 WOFF2

IANA에도 `font/ttf`, `font/otf`, `font/woff`, `font/woff2` 등의 공식 미디어 타입이 등록되어 있다.[11]

자막

확장자 형식
.srt SubRip Subtitle
.ass Advanced SubStation Alpha
.ssa SubStation Alpha
.vtt WebVTT
`.smi` SAMI

한국에서는 과거 `.smi` 자막이 존나 흔했지만 국제적으로는 `.srt`와 `.vtt` 등이 훨씬 널리 쓰인다.

토렌트

`.torrent` 파일은 BitTorrent에서 파일 배포에 필요한 메타데이터를 저장한다.

실제 영화나 게임이 `.torrent` 안에 들어있는 게 아니다.

토렌트 클라이언트가

  • 파일 목록
  • 조각 정보
  • 해시
  • 트래커 등의 정보

를 읽어 다른 사용자에게 실제 데이터를 요청한다.

자세한 내용은 토렌트 및 BitTorrent 문서 참고.

복합 확장자

파일 이름에 확장자가 하나만 붙어야 한다는 법은 없다.

대표적으로 Unix 계열에서

  • `.tar.gz`
  • `.tar.bz2`
  • `.tar.xz`
  • `.sql.gz`

같은 복합 확장자가 널리 사용된다.

프로그래밍에서도

  • `.d.ts`
  • `.test.js`
  • `.spec.ts`
  • `.min.js`
  • `.bundle.js`

같이 여러 마침표를 이용해 파일의 역할을 표현한다.

이 중 어디까지를 엄밀한 확장자로 볼 것인지는 프로그램과 문맥에 따라 달라질 수 있다.

예를 들어 `archive.tar.gz`에서 파일시스템 관점으로 단순히 마지막 점 이후만 보면 `.gz`지만 사용자 입장에서는 `.tar.gz` 전체가 파일 형식을 훨씬 정확하게 설명한다.

확장자가 없는 파일

파일에는 반드시 확장자가 있어야 하는 것은 아니다.

특히 Linux와 Unix 환경에서는 매우 흔하다.

대표적으로

README
LICENSE
Makefile
Dockerfile
bash
python
ssh
nginx

등이 있다.

`Makefile`, `Dockerfile`처럼 오히려 확장자가 없는 특정 파일 이름 자체가 역할을 나타내기도 한다.

Unix에서는 실행 여부도 `.exe`가 아니라 파일 권한으로 제어하기 때문에 실행파일에 확장자가 없는 것이 전혀 이상하지 않다.

숨김 파일과 점

Unix 계열에서 이름 맨 앞의 점은 확장자가 아니라 숨김 파일을 의미하는 관례로 사용된다.

예를 들어

.bashrc
.gitignore
.env
.htaccess

등이 있다.

`.bashrc`를 보고 확장자가 `bashrc`라고 생각할 수도 있지만 Unix 관례에서는 전체가 파일 이름이고 맨 앞 점은 숨김 파일 표시 역할에 가깝다.

물론 `.env.local`처럼 숨김 파일 이름 뒤에 다시 점이 들어가는 경우도 있다.

확장자를 바꿔도 변환되지 않는다

파일 관련 초보자들이 존나 많이 하는 실수.

photo.png

를

photo.jpg

로 바꿔도 JPEG가 되지 않는다.

마찬가지로

song.mp3 → song.wav
movie.mkv → movie.mp4
document.docx → document.pdf
```

처럼 이름만 바꾼다고 변환되지 않는다.

내부 데이터 구조가 전혀 다르기 때문이다.

오히려 프로그램이 확장자를 믿고 잘못된 방식으로 파일을 읽으려고 해서 파일이 안 열릴 수 있다.

파일 형식을 바꾸려면 이미지 편집기, 오디오 인코더, 영상 변환기, 문서 프로그램 등에서 실제 변환 또는 다시 저장해야 한다.

== 보안 ==
확장자는 보안 측면에서도 중요하다.

특히 Windows에서 확장자를 숨기는 설정은 악성 파일을 일반 문서처럼 보이게 만드는 데 악용될 수 있다.

예를 들어 실제 파일 이름이

<pre>
여행사진.jpg.exe

인데 `.exe`가 사용자에게 보이지 않는 환경이라면 얼핏

여행사진.jpg

처럼 보일 수 있다.

Microsoft는 실제 악성코드 캠페인에서도 `.png`, `.mp3`, `.mp4`, `.wav`, `.jpg` 같은 미디어 확장자로 파일을 위장하거나 `file.hta.mp4` 같은 이중 확장자를 사용하는 사례를 보고했다.[12]

따라서 출처가 불분명한

  • `.exe`
  • `.scr`
  • `.com`
  • `.bat`
  • `.cmd`
  • `.ps1`
  • `.vbs`
  • `.js`
  • `.hta`
  • `.msi`
  • `.lnk`

같은 파일은 함부로 실행하지 않는 것이 좋다.

아이콘보다 확장자를 믿어라.

실행파일이 PDF나 폴더 아이콘을 사용하는 것은 어렵지 않다.

확장자만 믿어도 안 된다

반대 방향의 문제도 있다.

악성 프로그램이 실제 실행파일이나 스크립트를 `.jpg`, `.png` 같은 무해해 보이는 확장자로 바꿔놓을 수도 있다.

Microsoft와 CISA가 분석한 실제 공격에서도 악성 파일의 확장자를 이미지나 다른 형식으로 위장한 사례가 확인됐다.[13]

따라서 보안 프로그램은 단순히 파일 이름만 보는 것이 아니라

  • 파일 시그니처
  • 실제 실행 구조
  • 코드 서명
  • 해시
  • 행위
  • 내부 스크립트

등을 함께 분석한다.

대문자와 소문자

Windows에서는 일반적으로

IMAGE.JPG
image.jpg
Image.Jpg

를 같은 확장자로 처리한다.

반면 Linux 파일시스템에서는 파일 이름의 대소문자를 구분하는 경우가 많아서

test.txt
TEST.TXT

가 서로 다른 파일로 존재할 수 있다.

다만 Linux 데스크톱의 MIME 식별 시스템은 일반적인 확장자 패턴에 대해서는 대소문자를 구분하지 않도록 설계돼 있다. 그래서 `IMAGE.GIF` 역시 GIF 이미지로 식별될 수 있다.[14]

같은 확장자, 다른 의미

확장자가 전 세계적으로 하나의 중앙기관에 의해 완전히 통제되는 것은 아니다.

그래서 같은 확장자를 서로 다른 프로그램이 사용하는 경우가 있다.

예를 들어 `.dat`는 그냥 data의 약자라 프로그램마다 내용이 완전히 다를 수 있다.

`.bin` 역시 binary라는 뜻일 뿐 특정한 단일 포맷이 아니다.

`.img`, `.raw`, `.db`, `.sav`, `.pak` 등도 마찬가지다.

따라서 이런 파일은 확장자만 보고 정확한 프로그램이나 데이터 구조를 알아내기 어렵다.

같은 형식, 여러 확장자

반대로 하나의 형식이 여러 확장자를 사용하는 경우도 있다.

대표적으로

형식 확장자
JPEG `.jpg`, `.jpeg`, `.jpe`
TIFF `.tif`, `.tiff`
HTML `.htm`, `.html`
YAML `.yaml`, `.yml`
AIFF `.aif`, `.aiff`, `.aifc`
MPEG `.mpeg`, `.mpg`

같은 경우다.

역사적인 운영체제 제한이나 프로그램 호환성 때문에 짧은 확장자와 긴 확장자가 동시에 살아남은 경우가 많다.

파일 연결

운영체제가 확장자와 특정 프로그램을 연결하는 것을 파일 연결(file association)이라고 한다.

예를 들어 Windows에서 `.pdf`를 Adobe Acrobat에 연결하면 PDF 파일을 더블클릭했을 때 Acrobat이 실행된다.

사용자는 기본 앱 설정을 바꿔 다른 프로그램으로 연결할 수도 있다.

따라서

확장자 = 프로그램

도 아니다.

같은 `.png`를

등 여러 프로그램으로 열 수 있다.

Microsoft 역시 하나의 확장자가 여러 설치 프로그램과 호환될 수 있다고 설명한다.[15]

컨테이너와 코덱

영상과 오디오 분야에서는 확장자만 보고 코덱까지 착각하기 쉽다.

예를 들어

`.mp4` = H.264

가 아니다.

MP4는 컨테이너이고 그 안에 H.264, H.265, AV1 등의 영상을 담을 수 있다.

마찬가지로

`.mkv` = 특정 영상 코덱

이 아니다.

Matroska 컨테이너 안에는 여러 종류의 영상·오디오·자막을 넣을 수 있다.

오디오에서도 `.wav`는 컨테이너이며 가장 흔하게 PCM을 담을 뿐 다른 오디오 형식을 포함할 수도 있다.

그래서 미디어 파일을 제대로 분석하려면

확장자 → 컨테이너 → 코덱

을 따로 봐야 한다.

숨겨진 내부 구조

겉보기에는 완전히 다른 확장자지만 실제로는 ZIP 컨테이너를 사용하는 형식이 상당히 많다.

대표적으로

  • `.docx`
  • `.xlsx`
  • `.pptx`
  • `.epub`
  • `.jar`
  • `.apk`

등이 있다.

예를 들어 `.docx` 파일의 내부는 여러 XML 파일과 리소스를 ZIP으로 묶은 구조다.

그래서 ZIP 프로그램으로 강제로 열어보면

[Content_Types].xml
_rels
word
docProps

같은 내부 파일을 볼 수 있다.

`.apk` 역시 ZIP 기반 패키지이므로 압축 프로그램으로 내부 파일을 볼 수 있다.

물론 ZIP으로 열 수 있다고 그냥 ZIP 파일과 같은 용도로 사용하는 것은 아니다. 각 형식마다 내부 디렉터리와 메타데이터 규칙이 따로 존재한다.

이상한 확장자

프로그램이 자기들 마음대로 확장자를 만들기도 해서 세상에는 별 확장자가 다 있다.

게임에서는

  • `.sav`
  • `.pak`
  • `.wad`
  • `.bsp`

같은 확장자가 흔하며, 3D 제작에서는

  • `.blend`
  • `.fbx`
  • `.obj`
  • `.stl`

등이 사용된다.

디자인 프로그램에서는

  • `.psd`
  • `.ai`
  • `.indd`
  • `.xcf`

같은 전용 프로젝트 파일이 존재한다.

개발 환경에서는

  • `.gitignore`
  • `.dockerignore`
  • `.lock`
  • `.toml`
  • `.gradle`
  • `.csproj`
  • `.sln`

등 일반 사용자에게는 뭔지 알 수 없는 파일이 끝도 없이 나온다.

확장자는 그냥 컴퓨터 세계의 이름표라서 새로운 프로그램과 기술이 나오면 계속 늘어난다.

주요 확장자 바로가기

문서

표·데이터

이미지

오디오

영상

압축

실행·설치

웹·개발

기타

여담

  • 한국에서는 보통 그냥 확장자라고 부르지만 영어권에서는 filename extension 또는 file extension이라고 한다.
  • DOS의 3글자 제한 때문에 `.jpg`, `.exe`, `.txt`, `.wav`처럼 3글자 확장자가 유난히 많다.
  • 현대 운영체제에서는 확장자 길이에 3글자 제한 같은 것은 없다.
  • 파일명에서 마침표 하나 보인다고 무조건 뒤가 확장자인 것도 아니다. Unix의 `.bashrc` 같은 파일은 파일명 전체가 저 형태다.
  • `README`, `LICENSE`, `Makefile`, `Dockerfile`처럼 확장자가 아예 없는 유명한 파일도 많다.
  • `.docx`, `.xlsx`, `.pptx`는 내부적으로 ZIP 기반 구조다.
  • `.apk`와 `.epub`도 ZIP 기반이다.
  • `.wav`를 `.mp3`로 이름만 바꾼다고 파일 용량이 줄어드는 일은 없다.
  • `.jpg`를 `.png`로 이름만 바꿔놓고 이미지 변환했다고 하는 인간이 가끔 있는데 그냥 이름만 바꾼 거다.
  • `.mp4`와 `.mkv`는 영상 압축방식 자체가 아니라 컨테이너다.
  • `.txt`라고 적혀 있다고 내용이 반드시 사람이 읽을 만한 정상적인 텍스트라는 보장도 없다.
  • 파일 확장자가 틀려도 프로그램이 내부 시그니처를 검사해 알아서 열어주는 경우가 있다.
  • 반대로 확장자를 엄격하게 검사하는 프로그램은 실제 파일 내용이 정상이어도 확장자가 잘못돼 있으면 열기를 거부하기도 한다.
  • Windows에서 확장자를 숨겨두면 `사진.jpg.exe` 같은 이중 확장자 공격을 알아보기 힘들 수 있다. 그냥 확장자 표시를 켜놓는 편이 속 편하다.
  • `.exe`만 위험한 것은 아니다. `.scr`, `.bat`, `.cmd`, `.ps1`, `.vbs`, `.js`, `.hta`, `.msi`, `.lnk` 등도 실행 또는 명령 수행에 악용될 수 있다.
  • 확장자를 바꾼다고 악성 프로그램이 안전해지지도 않는다.
  • Linux에서는 프로그램 실행 여부를 확장자가 아니라 실행 권한이 결정하기 때문에 실행파일 이름이 그냥 `python`, `bash`, `nginx`인 경우가 흔하다.
  • 파일 종류를 정말 확인하고 싶다면 확장자 하나만 보는 것보다 파일 시그니처, MIME 타입, 코덱 등의 정보를 함께 확인하는 것이 정확하다.
  • IANA의 미디어 타입 등록 신청 양식에도 아예 File extension(s)와 Magic number(s)가 서로 별도의 항목으로 존재한다.[16]

같이 보기

각주

```