매직 넘버 (프로그래밍)

매직 넘버(magic number)는 전통적(traditional)으로 유닉스(Unix) 및 리눅스(Linux)처럼 이러한 계통적 관련에서 파일 유형 메타데이터를 통합하는 한 가지 방법으로 파일 자체 내부의 최초 2바이트(2 bytes) 구간에 '마법의 숫자'(매직 넘버,magic number)를 할당하고 저장하는 것이 관례로 행해져온 것에서 유래한다. 원래 이 용어는 파일의 시작 부분에 있는 특정 2바이트 식별자 집합에 사용되었지만 사실상 컴퓨터 데이터의 최종적 형태인 모든 이진 시퀀스는 숫자로 간주될 수 있으므로 고유하게 구별하는 파일 형식(file format)의 기능을 위한 식별에 사용할 수 있다.

예
예를 들어 GIF 이미지는 준수하는 표준 권고사양에 따라 항상 GIF87a 또는 GIF89a의 ASCII 표현으로 시작한다. 많은 파일 형식, 특히 일반 텍스트 파일은 이 방법으로 찾기가 더 어려울 수 있다. 그러나 예를 들어 HTML 파일은 <html> 문자열(대소문자 구분 안 함)로 시작하거나 <!DOCTYPE HTML>로 시작하는 적절한 문서 형식 정의(document type definition, DTD) 또는 XHTML의 경우에서는 <?xml로 시작하는 XML 식별자처럼 이러한 매직넘버의 기능을 구현하는 형태의 표현은 여전히 광범위하게 유효하다. 이러한 아크업랭귀지를 지원하는 파일의 경우 HTML등의 식별자는 주석, 임의의 텍스트 또는 여러 빈 줄로 시작하는 경우에서도 여전히 이후에 파일 시작줄시작위치에서 사용할 수 있도록 잘 정의되어있는 HTML 식별자를 표기할 수 있다.

매직 넘버 방식은 형식이 올바르게 식별되도록 더 잘 보장하고 종종 파일에 대한 보다 정확한 정보를 결정할 수 있다. 합리적으로 신뢰할 수 있는 매직 넘버 테스트(magic number test)는 상당히 복잡할 수 있고 각 파일은 매직 데이터베이스의 모든 가능성에 대해 효과적으로 테스트되어야 하므로 이 접근 방식은 특히 큰 파일 목록(대조적으로 파일 이름 및 메타데이터- 기반 메서드는 데이터의 한 부분만 확인하고 정렬된 인덱스와 일치시키면 가능하다.)에서처럼 파일 자체에서 데이터를 읽어내야 하므로 디렉터리에 저장된 메타데이터와 달리 지연 시간이 늘어날수있다는 점은 충분히 고려되어야 한다. 파일 형식이 이러한 방식으로 인식되지 않는 경우 시스템은 메타데이터로 대체해야할 필요성이 있다. 그러나 프로그램이 처리하도록 지시받은 파일이 올바른 형식인지 확인하는 가장 좋은 방법이다. 파일 확장자의 정보나 메타데이터가 내용과는 별개로 독립적으로 변경될 수 있기 때문에 파일이 손상되었거나 잘못된 유형이라는 확실한 신호를 결정해야하는 잘 설계된 매직 넘버 테스트에서의 절대적인 기준이 되지 못한다. 이것은 유효한 매직 넘버가 파일이 손상되지 않았거나 올바른 파일정보의 유형임을 보장하지 않음을 의미한다.

또한 스크립트 파일의 소위 셔뱅(shebang) 라인은 매직 넘버의 특별한 경우로 잘 알려져있다. 여기서 매직 넘버는 특정 명령 인터프리터와 명령 인터프리터에 전달할 옵션을 식별하는 사람이 읽을 수 있는 텍스트이다.

같이 보기 
 제어 문자
 문서 형식 선언

각주 

[참고](curlie-Data Formats)https://curlie.org//Computers/Data_Formats/

안티패턴
디버깅