Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
관리 메뉴

ㅇ.ㅇ

[Java] META-INF 디렉토리와 MANIFEST.MF 본문

Today I Learned

[Java] META-INF 디렉토리와 MANIFEST.MF

yun_ 2025. 3. 12. 16:45
반응형

 

 

Java 애플리케이션을 배포할 때, JAR, WAR 같은 패키징 파일 내부에는 META-INF 디렉토리와 MANIFEST.MF 파일이 포함된다. 도대체 얘네는 어디에서 나오는걸까? 궁금해서 찾아보며 간단히 정리를 해보았다. 

 

1. META-INF 디렉토리란?

META-INF 디렉토리는 JAR, WAR 파일 내부에서 해당 패키지(아카이브)와 관련된 설정 정보를 저장하는 디렉토리다.

META-INF의 주요 역할

  • 메타데이터 저장 : 패키지의 버전, 개발자 정보 등 포함
  • 보안 관련 정보 저장 : 디지털 서명, 암호화 키 등이 위치
  • 서비스 로딩 : 특정 인터페이스의 구현체를 자동으로 검색하는 기능 제공
  • MANIFEST.MF 파일 포함 : JAR, WAR의 속성을 정의하는 주요 파일

META-INF 디렉토리의 위치

JAR 또는 WAR 파일 내부에서 기본적으로 루트 디렉토리에 존재하며, 일반적으로 다음과 같은 구조를 가진다.

application.war
│── META-INF/
│   ├── MANIFEST.MF  <-- 주요 설정 파일
│   ├── application.xml
│   ├── persistence.xml
│   ├── services/  <-- 서비스 로딩 관련 디렉토리
│   ├── some-library.sig  <-- 디지털 서명 파일
│── WEB-INF/
│   ├── web.xml
│   ├── classes/
│   ├── lib/
  • JAR 파일 → META-INF는 패키징 정보, 서명, 서비스 로딩 설정을 포함
  • WAR 파일 → META-INF는 웹 애플리케이션의 메타정보를 저장하며, WEB-INF와는 별도로 존재

 

2. MANIFEST.MF 파일이란?

MANIFEST.MF는 META-INF 디렉토리 내부에 위치하며, JAR/WAR 파일의 속성을 정의하는 메타데이터 파일이다.

MANIFEST.MF의 주요 역할

  • JAR/WAR의 버전 정보 제공 (Implementation-Version)
  • 개발사 정보 (Implementation-Vendor)
  • 실행 가능한 JAR의 메인 클래스 지정 (Main-Class)
  • 특정 라이브러리와의 호환성 설정
  • 서비스 프로바이더 등록 (ServiceLoader 지원)

MANIFEST.MF의 기본 구조

Manifest-Version: 1.0
Implementation-Title: MyApplication
Implementation-Version: 1.0.0
Implementation-Vendor: TEST Corp.
Created-By: 1.8.0_281 (Oracle Corporation)
Main-Class: com.example.Main
  • Manifest-Version : MANIFEST 파일의 버전 (기본값: 1.0)
  • Implementation-Title : 프로젝트명
  • Implementation-Version : 애플리케이션 버전
  • Implementation-Vendor : 개발사
  • Created-By : JDK 버전
  • Main-Class : JAR를 실행할 때 사용할 메인 클래스

 

3. MANIFEST.MF 파일이 중요한 이유

실행 가능한 JAR 만들기

JAR 파일을 실행 가능하게 만들려면 MANIFEST.MF에 Main-Class를 지정해야 한다.

Main-Class: com.example.Main
// JAR 실행 명령어
java -jar my-application.jar

이 설정이 없으면 java -jar로 실행할 수 없다.

애플리케이션의 메타정보 제공

JAR/WAR 파일의 버전 및 개발사 정보를 확인할 수 있다.

Implementation-Title: MyApplication
Implementation-Version: 1.0.0
Implementation-Vendor: WeMB Corp.

이 정보는 배포 및 버전 관리를 할 때 유용하다.

서비스 로딩 (ServiceLoader 지원)

특정 인터페이스를 구현하는 클래스를 META-INF/services 폴더에 추가하면, ServiceLoader를 통해 자동으로 검색할 수 있다.
예를 들어, com.example.MyService 인터페이스를 구현하는 클래스를 로딩하려면

META-INF/services/com.example.MyService
// 파일 내용
com.example.impl.MyServiceImpl

이렇게 설정하면 ServiceLoader.load(com.example.MyService.class)를 호출할 때 자동으로 구현체를 찾아준다.

 

META-INF/MANIFEST.MF는 JAR/WAR 파일의 중요한 설정 파일이며, 올바르게 관리하지 않으면 원하는 메타데이터가 사라질 수 있다. 애플리케이션 버전도 해당 파일을 열어 바로 확인할 수도 있고, 관리에도 편리할 것 같다. 

 

반응형

'Today I Learned' 카테고리의 다른 글

[Tomcat] Tomcat의 war-tracker 파일  (0) 2025.03.28
[Git] Stash  (0) 2025.03.23
[Java] try-with-resources (자원 관리 최적화)  (1) 2025.03.11
[DEV] SBOM에 대하여  (0) 2025.03.09
[Oracle] Oracle에서 NULL 값 다루기  (0) 2025.03.09