hyeonga_code

JVM_01_JVM이 무엇인가? 본문

JVM

JVM_01_JVM이 무엇인가?

hyeonga 2024. 5. 8. 05:59
반응형

좋은 기회가 생겨 멘토링을 진행하게 되었다.
그동안 벨로그에 중구난방으로 공부하기 위한 목적으로 작성했던 내용을 멘토링을 통해 수정된 내용과 함께 기록으로 남기려고 한다.

 

JVM_Java Virtual Machine

자바 프로그램이 실행되는 환경을 제공하는 소프트웨어입니다.
자바 애플리케이션을 클래스 로더를 통해 읽어들이는 역할입니다.
자바 API와 함께 읽어온 코드를 실행합니다.


한 번 작성하면 어디서든 실행된다는 자바의 이념을 실현하는 것

 

JVM이 다양한 운영체제에서 동일한 자바 바이트코드를 실행할 수 있게 합니다.

 

Jar 파일

여러 java 클래스 파일과 메타데이터를 압축한 형태입니다.
애플리케이션의 배포와 실행을 쉽게 합니다.

  • JAR 파일을 엑세스하여 클래스패스를 통해 JAR 파일의 위치를 지정할 수 있습니다.
  • JVM 실행 시 -classpath 혹은 -cp 명령어를 통해 지정할 수 있습니다.

이후 JAR 파일을 로딩하여 클래스 로더가 JAR 파일의 메타데이터를 담고 있는 META-INF/MANIFEST.MF 파일을 읽어옵니다.

 

META-INF/MANIFEST.MF

주로 자바 애플리케이션과 관련된 JAR 파일 내부에 포함되어 있는 텍스트 파일입니다.이 파일은 해당 JAR 파일의 메타데이터를 포함합니다.자바 런타임 환경이나 애플리케이션 서버가 애플리케이션을 어떻게 처리해야 할지에 대한 정보를 제공합니다.

담고 있는 정보
- Main-Class: 애플리케이션에서 사용하는 메인 클래스의 이름을 명시하고 있으며 JAR 파일이 실행될 때 초기에 호출되는 클래스입니다.

- Class-Path:
JAR 파일이 참조하는 다른 JAR 파일들의 목록을 지정하며 이를 통해 클래스 로더가 필요한 클래스들을 찾을 수 있도록 합니다.

- Version:
JAR 파일의 버전 정보를 명시합니다.

- Sealed:
패키지가 봉인되었는지의 여부를 명시하며 봉인된 패키지는 모든 클래스가 같은 JAR 파일 내부에서 로드되어야 함을 의미합니다.

- Permissions:
애플리케이션에 필요한 보안 권한을 명시합니다.

- Codebase:
애플리케이션 코드가 호스팅되는 위치(URL)를 지정합니다.

- Application-Name: 애플리케이션의 이름을 명시합니다.

- Specification-Title, Specification-Version, Specification-Vendor: 애플리케이션의 사양에 관한 정보를 제공합니다.

- Implementation-Title, Implementation-Version, Implementation-Vendor: 구현에 대한 세부 정보를 제공합니다.

- Build-By: 빌드를 수행한 사람의 이름을 명시합니다.

- Created-By: JAR 파일을 생성한 도구와 버전 정보를 명시합니다.

Main-Class: com.example.MyApp
Class-Path: lib/example.jar lib/another_example.jar
키-값 쌍의 형태로 정보를 저장합니다.각 항목은 개행 문자로 구분됩니다.

 

JAR 파일을 생성할 때 'jar' 명령어를 사용하여 직접 수정하거나 자동으로 생성할 수 있습니다. 
개발 도구나 빌드 시스템(Maven, Gradle)을 사용하여 이 파일을 관리하고 구성할 수 있습니다.

사용자 정의 키를 추가하여 특정 용도로 활용할 수 있습니다.
애플리케이션의 특정 환경이나 설정이나 동작 방식을 제어하기 위한 맞춤 설정을 추가할 수 있습니다.

 

반응형