파일 형식

섬네일|wav 파일: 2.1 메가바이트.
섬네일|ogg 파일: 154 킬로바이트.

파일 형식 또는 파일 포맷(file format)은 컴퓨터 파일에 저장하기 위해 정보를 인코딩하는 방식이다. 이는 저수준의 비트 및 바이트 레이아웃부터 마크업 및 테이블 구조와 같은 고수준의 조직에 이르기까지 다양한 추상화 수준에서의 인코딩을 설명할 수 있다. 파일 형식은 표준화될 수 있으며(이 경우 독점 또는 오픈 형식이 될 수 있음), 애드혹 관습일 수도 있다.

일부 파일 형식은 매우 특정한 유형의 데이터를 위해 설계되었다. 예를 들어 PNG 파일은 비손실 데이터 압축을 사용하여 비트맵 이미지를 저장한다. 반면에 다른 파일 형식은 여러 다른 유형의 데이터를 저장하도록 설계되기도 한다. Ogg 형식은 오디오와 비디오의 조합, 텍스트(예: 자막), 메타데이터를 포함한 다양한 유형의 멀티미디어를 담는 컨테이너 역할을 할 수 있다. 텍스트 파일은 가능한 제어 문자를 포함한 모든 문자 스트림을 포함할 수 있으며, 다양한 문자 인코딩 방식 중 하나로 인코딩된다. HTML, 스케일러블 벡터 그래픽스, 컴퓨터 소프트웨어의 소스 코드와 같은 일부 파일 형식은 정의된 구문을 가진 텍스트 파일로, 특정 목적에 사용될 수 있게 한다.

 사양 
일부 파일 형식은 해당 형식과 데이터의 정확성을 검증하는 방법을 설명하는 공개된 사양을 가지고 있다. 모든 형식에 대해 이러한 문서를 사용할 수 있는 것은 아니다(때로는 형식이 영업 비밀로 간주되기 때문이며, 때로는 문서 자체가 작성되지 않았기 때문이다). 때때로 형식은 해당 파일에 액세스하는 프로그램의 동작에 의해 데 팍토로 정의되기도 한다.

사용 가능한 사양이 없는 경우, 개발자는 해당 형식의 파일을 검사하여 형식을 역공학하거나, 비용을 지불하고 기밀유지 협약에 서명하여 사양을 획득할 수 있다. 이러한 접근 방식에 드는 시간과 비용 때문에, 공개적으로 사용 가능한 사양이 있는 파일 형식이 더 많은 프로그램에서 지원되는 경향이 있다.

 지식 재산권 보호 
파일 형식 고유의 지식 재산권을 보호하기 위해 (저작권보다는) 특허법이 사용될 수 있다. 미국 법률상 파일 형식 자체에 대한 특허는 직접적으로 허용되지 않지만, 일부 형식은 특허받은 알고리즘을 사용하여 데이터를 인코딩한다. 예를 들어 2004년 이전에는 GIF 파일 형식의 압축을 사용하려면 특허받은 알고리즘을 사용해야 했으며, 특허 소유자가 처음에는 특허권을 행사하지 않았으나 나중에 로열티를 징수하기 시작했다. 이는 GIF 사용의 급격한 감소를 초래했으며, 대체 형식인 PNG 형식이 개발되는 계기 중 하나가 되었다. 그러나 GIF 특허는 미국에서 2003년 중반에, 전 세계적으로는 2004년 중반에 만료되었다.

 식별 
사용자와 응용 프로그램 모두 파일을 적절하게 사용하기 위해 파일 형식을 식별할 필요가 있다. 일반적으로 식별 방법은 운영체제마다 다르며, 각 접근 방식은 장단점을 가지고 있다.

 파일 확장자 

Windows, macOS, CP/M, MS-DOS, OpenVMS, VM/CMS를 포함한 많은 운영체제에서 사용하는 널리 알려진 방법 중 하나는 확장자라고 알려진 파일 이름의 접미사로 파일 형식을 나타내는 것이다. 예를 들어, HTML 문서는 또는 으로 끝나는 파일 이름으로 식별되고, GIF 이미지는 로 식별된다.

현재는 구식이 된 FAT 파일 시스템에서 파일 이름은 기본 이름 8자 더하기 3자의 확장자로 제한되었으며, 이를 8.3 파일 이름이라고 한다. 이러한 명명 체계의 유행으로 인해 현대의 시스템이 더 긴 확장자를 지원함에도 불구하고 많은 형식이 여전히 3자 확장자를 사용한다. 표준화된 확장자 목록이 없기 때문에 두 개 이상의 형식이 동일한 확장자를 사용할 수 있으며, 특히 3자 조합의 수는 제한되어 있기 때문에 3자 확장자에서 이러한 현상이 두드러진다. 이러한 상황은 사용자와 응용 프로그램 모두에게 혼란을 줄 수 있다.

확장자로 파일 유형을 나타내는 방식의 한 가지 영향은, 사용자와 응용 프로그램이 파일 이름만 바꿈으로써 파일을 다른 형식인 것처럼 취급하도록 속일 수 있다는 점이다. 예를 들어, HTML 파일에 확장자 를 추가(또는 기존 확장자 변경)하여 플레인 텍스트로 취급하게 할 수 있다. 이 전략은 유용할 수 있지만, 실수로 파일을 사용할 수 없게 만들거나 파일을 "잃어버리는" 기술적 지식이 적은 사용자에게는 혼란을 줄 수 있다. 이러한 시나리오를 피하기 위해 Windows와 macOS는 확장자 숨기기 기능을 지원한다.

그러나 확장자를 숨기면 같은 폴더 내에 이름이 같은 여러 파일이 있는 것처럼 보일 수 있어 사람들에게 혼란을 준다. 예를 들어, 출판용 형식과 웹사이트용 형식의 이미지가 모두 필요할 때, 기본 이름을 동일하게 지정할 수 있다(예: 와 ). 확장자가 숨겨진 상태에서는 두 파일 모두 라는 동일한 이름으로 나타난다.

확장자를 숨기는 것은 보안 위험을 초래할 수도 있다. 예를 들어, 악의적인 사용자가 ""와 같이 무해해 보이는 이름의 실행 파일을 만들 수 있다. "" 부분은 숨겨지고 의심하지 않는 사용자는 ""만 보게 되며, 이는 대개 시스템에 해를 끼칠 수 없는 JPEG 이미지처럼 보일 것이다. 그러나 운영체제는 여전히 "" 확장자를 인식하고 프로그램을 실행하여 컴퓨터에 피해를 줄 수 있다. 확장자가 하나뿐인 파일도 마찬가지이다. 사용자에게 확장자가 표시되지 않으면 파일을 명시적으로 조사하지 않고는 파일에 대한 정보를 추론할 수 없다. 사용자를 더 속이기 위해 프로그램 내부에 아이콘을 저장할 수 있는데, 이 경우 일부 운영체제에서 실행 파일()에 할당하는 아이콘이 JPEG 이미지를 나타내는 데 흔히 쓰이는 아이콘으로 대체되어 프로그램이 이미지처럼 보이게 된다. 확장자는 스푸핑될 수도 있다. 일부 마이크로소프트 워드 매크로 바이러스는 템플릿 형식의 워드 파일을 만들고 이를 확장자로 저장한다. 워드는 일반적으로 확장자를 무시하고 파일 형식을 직접 확인하기 때문에, 이러한 파일들은 템플릿으로 열려 실행되고 바이러스를 퍼뜨린다. 이는 확장자 숨기기가 기본적으로 설정되어 있는 Windows 시스템에서 실질적인 문제가 된다.

 내부 메타데이터 
파일의 형식은 파일 내부에서 식별될 수 있다. 이는 해당 목적을 위해 의도된 정보이거나, 의도된 목적은 아니더라도 식별에 사용될 수 있는 형식 내의 식별 가능한 데이터일 수 있다.

종종 의도적으로 배치된 정보는 파일의 시작 부분에 위치하는데, 이는 사용자와 응용 프로그램 모두 파일에서 읽기가 상대적으로 쉽기 때문이다. 파일 시작 부분의 정보가 다른 메타데이터를 포함하는 구조인 경우, 이를 종종 파일 헤더라고 부른다. 파일이 형식만을 나타내는 상대적으로 작은 데이터로 시작하는 경우, 이를 종종 매직 넘버라고 부른다.

 파일 헤더 
파일 헤더에 포함된 메타데이터는 대개 파일 시작 부분에 저장되지만, 파일 형식이나 포함된 데이터 유형에 따라 끝부분을 포함한 다른 영역에도 존재할 수 있다. 문자 기반(텍스트) 파일은 대개 문자 기반 헤더를 갖는 반면, 이진 형식은 대개 이진 헤더를 갖지만 이것이 규칙은 아니다. 텍스트 기반 파일 헤더는 일반적으로 더 많은 공간을 차지하지만, 사람이 읽을 수 있어 텍스트 편집기나 십육진 편집기 같은 간단한 소프트웨어를 사용하여 쉽게 검사할 수 있다.

파일 형식을 나타내는 것 외에도 파일 헤더에는 파일과 그 내용에 대한 메타데이터가 포함될 수 있다. 예를 들어, 대부분의 이미지 파일은 이미지 형식, 크기, 해상도 및 색 공간에 대한 정보를 저장하며, 선택적으로 이미지를 만든 사람, 시기, 장소, 사용된 카메라 모델 및 촬영 설정(Exif) 등의 저자 정보를 저장하기도 한다. 이러한 메타데이터는 로딩 과정 중이나 그 후에 파일을 읽거나 해석하는 소프트웨어에서 사용될 수 있다.

파일 헤더는 운영체제가 파일을 메모리에 모두 로드하지 않고도 파일에 대한 정보를 빠르게 수집하는 데 사용될 수 있지만, 그렇게 하는 것은 디렉토리 정보에서 직접 읽는 것보다 더 많은 컴퓨터 자원을 소모한다. 예를 들어, 그래픽 사용자 인터페이스 기반의 파일 관리자가 폴더의 내용을 표시해야 할 때, 적절한 아이콘을 표시하기 전에 많은 파일의 헤더를 읽어야 하지만, 이들은 저장 매체의 서로 다른 위치에 있어 액세스하는 데 더 오랜 시간이 걸린다. 섬네일 정보와 같은 복잡한 메타데이터가 있는 파일이 많이 포함된 폴더는 표시되기까지 상당한 시간이 걸릴 수 있다.

헤더가 하드 코딩되어 있어 메타데이터 콘텐츠 보호 등을 위해 헤더 자체를 인식하는 데 복잡한 해석이 필요한 경우, 파일 형식을 잘못 해석할 위험이 있다. 소스에서 잘못 작성되었을 수도 있다. 이는 손상된 메타데이터로 이어질 수 있으며, 극단적인 경우 파일을 읽을 수 없게 만들 수도 있다.

파일 헤더의 더 복잡한 예는 래퍼(또는 컨테이너) 파일 형식에서 사용되는 것들이다.

 매직 넘버 

파일 유형 메타데이터를 통합하는 한 가지 방법은 파일 내부에 "매직 넘버"를 저장하는 것이다. 원래 이 용어는 파일 시작 부분의 2바이트 식별자를 가리켰지만, 모든 이진 시퀀스는 숫자로 간주될 수 있으므로 파일 형식을 고유하게 구별하는 모든 특징을 식별에 사용할 수 있다. 예를 들어 GIF 이미지는 준수하는 표준에 따라 항상 GIF87a 또는 GIF89a의 ASCII 표현으로 시작한다. 많은 파일 유형, 특히 플레인 텍스트 파일은 이 방법으로 식별하기가 더 어렵다. 예를 들어 HTML 파일은 대소문자를 구분하지 않는 
 문자열이나,