매니페스트 파일(Manifest File)은 컴퓨터 과학 및 소프트웨어 개발 분야에서 다른 파일들의 집합이나 애플리케이션에 대한 메타데이터, 구성 정보, 종속성 등을 기술하는 데 사용되는 파일이다. 주로 소프트웨어 패키지, 웹 애플리케이션, 운영체제 구성 요소 등에서 해당 요소들이 어떻게 구성되어 있고, 어떻게 작동해야 하는지에 대한 정보를 명시적으로 정의하는 역할을 한다. 이 파일은 일반적으로 사람이 읽을 수 있는(human-readable) 텍스트 형식으로 작성되며, XML, JSON, 또는 특정 애플리케이션에 특화된 텍스트 형식 등을 사용한다.
역할 및 목적
매니페스트 파일은 다음과 같은 다양한 목적을 위해 활용된다:
- 메타데이터 제공: 소프트웨어의 이름, 버전, 개발자, 라이선스 정보 등을 포함하여 기본적인 정보를 제공한다.
- 구성 정보: 애플리케이션의 시작 지점(예: 메인 클래스), 필요한 자원 경로, 실행 환경 설정 등을 정의한다.
- 종속성 관리: 해당 소프트웨어가 올바르게 작동하기 위해 필요한 다른 라이브러리, 컴포넌트 또는 파일들의 목록을 명시한다. 이는 특히 배포 및 설치 과정에서 필수적인 요소가 된다.
- 권한 및 보안: 운영체제나 런타임 환경에서 애플리케이션이 요구하는 시스템 권한(예: 파일 접근, 네트워크 사용)을 선언하여 보안을 강화한다.
- 호환성 및 플랫폼 정보: 소프트웨어가 특정 운영체제 버전이나 하드웨어 아키텍처에서만 작동하도록 제한하거나, 호환성 모드를 지정하는 데 사용될 수 있다.
- 리소스 관리: 애플리케이션이 사용하는 아이콘, 테마, 이미지 등 리소스의 경로와 특성을 명시한다.
활용 사례
매니페스트 파일은 다양한 기술 스택과 플랫폼에서 광범위하게 사용된다:
- 자바 아카이브(JAR/WAR/EAR):
.jar,.war,.ear파일 내부에 포함되는META-INF/MANIFEST.MF파일은 해당 아카이브에 대한 버전 정보, 메인 클래스, 클래스패스 의존성 등을 정의한다. - 웹 애플리케이션(HTML5/PWA): 웹 표준으로 정의된
manifest.json파일은 웹 애플리케이션의 이름, 아이콘, 시작 URL, 표시 방식(독립형, 전체 화면 등) 등을 정의하여 프로그레시브 웹 앱(PWA)이 네이티브 앱처럼 동작할 수 있도록 돕는다. - 안드로이드 애플리케이션:
AndroidManifest.xml파일은 안드로이드 앱의 핵심 구성 요소(액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더), 필요한 권한, 하드웨어 기능 요구사항 등을 선언한다. - 윈도우 애플리케이션: 윈도우 운영체제는 사이드-바이-사이드(Side-by-Side) 어셈블리 및 ClickOnce 배포에서 XML 기반의 매니페스트 파일을 사용하여 애플리케이션의 종속성, 보안 설정, 버전 관리 등을 처리한다.
- 컨테이너 오케스트레이션(Kubernetes): 쿠버네티스(Kubernetes)에서는 YAML 형식의 파일을 사용하여 파드(Pod), 디플로이먼트(Deployment), 서비스(Service) 등 클러스터 내의 리소스들을 정의하며, 이러한 파일들을 흔히 "매니페스트"라고 부른다.
- 패키지 관리자: Node.js의
package.json, Python의requirements.txt또는pyproject.toml, Maven의pom.xml등도 넓은 의미에서 해당 프로젝트의 메타데이터와 종속성을 정의하는 매니페스트 파일의 일종으로 볼 수 있다.
결론
매니페스트 파일은 소프트웨어 시스템의 안정적인 작동, 효율적인 배포, 그리고 명확한 구조화를 위해 필수적인 요소이다. 이 파일들은 단순한 데이터 기록을 넘어, 소프트웨어 생명 주기 전반에 걸쳐 중요한 정보를 제공함으로써 개발자와 시스템이 복잡한 애플리케이션을 효과적으로 관리하고 실행할 수 있도록 지원한다.