Published on

[ JAVA ] Java 개발, 실행 환경(JDK, JRE, JVM) 및 배포 형식(JAR, EAR)

Authors
  • avatar
    Name
    유사공대생
    Twitter

자바 JVM

자바 JVM(Java Virtual Machine)은 자바로 작성된 프로그램을 실행하는 데 사용되는 가상 머신이다. JVM은 자바 어플리케이션을 바이트 코드로 변환하고, 이 바이트코드를 OS(운영체제) 상관 없이 실행할 수 있게 한다. 이렇게 함으로써 자바는 플랫폼 독립적인 특성을 가진다.

image

장점

  • 플랫폼 독립적: 자바 어플리케이션은 한 번 작성하면 어떤 플랫폼에서든 실행될 수 있다. 이건 JVM이 여러 OS에서 구현될 수 있기 때문이다. 타 언어의 경우 언어에 맞는 환경에 따라 빌드를 다르게 해야 하지만 자바는 jar, war 파일을 OS에 상관없이 JVM 위에서 동작할 수 있다.
  • 메모리 관리: JVM은 가비지 컬렉션(GC)를 통헤 메모리 관리를 수행하기에 개발자가 메모리를 직접 관리할 필요가 없다.
  • 보안: JVM은 클래스 로더와 바이트코드 검증을 통해 안전한 실행 환경을 제공한다. 이를 통해 악성코드로부터 시스템을 보호할 수 있다.

단점

  • 느린 실행 속도: JVM을 사용하면 추가적인 오버헤드가 발생하여 네이티브 코드에 비해 상대적으로 느린 실행 속도를 보인다.
  • 더 많은 메모리 소비: JVM이 가비지 컬렉션과 같은 메모리 관리 기능을 수행하면서 더 많은 메모리를 사용할 수 있다.
  • 추가적인 시간 소요: JVM을 시작하고 클래스를 로드하는 과정에서 추가적인 시간이 소요된다.

자바 컴파일러(javac)

javac는 자바 컴파일러로, 자바 소스 코드를 컴파일하여 바이트 코드로 변환하는 역할을 한다. 이러한 변환 작업은 JDK(Java Development Kit)에 포함되어 있으며, 자바 개발자들은 javac 컴파일러를 사용하여 소스코드를 컴파일한다.

javac 컴파일러는 명령어 형태로 사용되며, 다음과 같은 형식을 가진다.

javac [options] [source files]
  • [options]: 컴파일러 옵션을 지정한다. 예를 들어, -d 옵션은 클래스 파일을 저장할 디렉토리를 지정한다.
  • [source files]: 컴파일할 자바 소스 코드 파일의 경로를 지정한다.

예를 들어, 다음과 같은 명령어는 HelloWorld.java 파일을 컴파일하여 HelloWorld.class 파일을 생성한다.

javac HelloWorld.java

또한, javac 컴파일러는 여러 파일을 동시에 컴파일하는 것도 가능하다. 다음과 같은 명령어는 현재 디렉토리에 있는 모든 자바 소스 코드 파일을 컴파일한다.

javac *.java

컴파일된 클래스 파일은 JVM에서 실행된다. 실행 파일 이름 뒤에는 클래스의 이름을 적어준다. 이 때, 클래스 이름은 public static void main(String[] args) 메소드가 있는 클래스의 이름과 동일해야 한다.

JIT 컴파일러

JIT(Just-In-Time) 컴파일러는 자바 가상 머신(JVM)에서 실행되는 프로그램의 성능을 향상시키기 위해 사용되는 컴파일러이다. JIT 컴파일러는 바이트 코드를 실행 시점에 기계어로 컴파일하며, 이를 캐싱하여 다음 번 실행 시 더 빠르게 실행할 수 있도록 한다.

JIT 컴파일러는 런타임 시점에 실행되는 코드를 분석하여 가장 자주 실행되는 코드를 식별한다. 이후, 해당 코드를 컴파일하여 기계어로 변환하고 캐시에 저장한다. 이렇게 변환된 코드는 이후에 같은 입력이 들어왔을 때 바로 실행할 수 있도록 한다.

JIT 컴파일러는 프로그램이 시작될 때 모든 코드를 한 번에 컴파일하지 않는다. 대신, 해당 코드가 처음으로 실행될 때 JIT 컴파일러가 컴파일하고 캐시에 저장한다. 이는 처음 실행될 때는 컴파일에 소요되는 시간이 추가되지만, 이후에는 캐시에서 기계어 코드를 직접 실행하여 더 빠른 실행 속도를 보장한다.

JIT 컴파일러는 자바 프로그램의 실행 속도를 향상시키는 데 큰 역할을 한다. 특히, 반복적으로 수행되는 코드의 성능을 향상시켜 프로그램 전반적으로 빠른 실행 속도를 보장한다.

JDK, JRE, JVM

image

JDK(Java Development Kit)

JDK는 자바 언어를 사용하여 프로그램을 개발하기 위한 도구 모음이다. JDK는 JRE와 JVM을 포함하며, 컴파일러(javac), 디버거, 자바 라이브러리, 문서 생성 도구(javadoc)등을 포함한다. 개발자는 JDK를 사용하여 자바 프로그램 작성, 컴파일, 테스트 및 디버깅할 수 있다.

JRE(Java Runtime Environment)

JRE는 자바 프로그램을 실행하기 위한 환경을 제공한다. JRE는 JVM과 자바 클래스 라이브러리로 구성되어 있으며, 사용자는 JRE를 통해 자바 애플리케이션을 실행할 수 있다. JRE는 개발 과정이 아닌 자바 프로그램 실행을 위한 환경을 제공하기 때문에 개발 도구는 포함하지 않는다.

JVM(Java Virtual Machine)

JVM은 자바 프로그램의 실행을 담당하는 가상 머신이다. 가상 머신은 자바 코드 컴파일 후 생성된 바이트 코드를 기계어로 변환하여 실행하고 이 자바코드가 여러 플랫폼에서 동일하게 작동할 수 있는 중립적인 환경을 제공한다. 즉, 자바로 작성된 프로그램은 JVM이 설치된 모든 운영체제에서 실행 가능하다.

JAR, WAR, EAR

image

JAR(Java Application Resource or Java Application Archive)

JAR 파일은 자바 어플리케이션과 관련된 클래스 파일, 메타데이터, 리소스 파일 등을 하나의 압축 파일로 묶은 것이다. 이 파일은 자바 애플리케이션을 쉽게 배포하고 설치할 수 있도록 하는 데 도움이 된다. 또한, JAR 파일은 자바 라이브러리를 포함할 수 있어, 재사용 가능한 코드 모듈을 효율적으로 관리할 수 있다.

즉 개발자가 개발하기 위해 필요한 기능을 압축한 것을 JAR이라고 한다.


WAR(Web Application Resource or Web Application Archive)

WAR 파일은 웹 애플리케이션과 관련된 파일을 하나의 압축 파일로 묶은 것이다. JSP, 서블릿(Servlet), 클래스 파일, XML 설정 파일, 웹 리소스(HTML, CSS, 자바스크립트, 이미지 등)등 웹 어플리케이션 구성 요소를 포함한다. WAR 파일은 웹이나 애플리케이션 서버에 배포할 수 있으며, 이를 통해 웹 어플리케이션을 쉽게 설치하고 관리할 수 있다. JAR은 웹으로 실행이 불가능하지만, WAR로 묶었을 때는 사용이 가능하다.


EAR(Enterprise Application or Enterprise Application Archive)

EAR 파일은 자바 기반의 엔터프라이즈 애플리케이션을 패키징 하는데 사용되는 파일 형식이다. EAR 파일은 웹 어플리케이션(WAR 파일), EJB(Enterprise Java Bean) 모듈, 자바 어플리케이션(JAR 파일) 및 관련 리소스를 포함하여, 이들은 각각 서로 다른 계층의 구성 요소를 나타낸다. EAR 파일을 사용하면 여러 모율과 리소스가 포함된 대규모 엔터프라이즈 애플리케이션을 하나의 파일로 통합하여 배포하고 관리할 수 있다. 주로 자바 EE 애플리케이션 서버에서 사용되며, 서버 관리자는 EAR 파일을 통해 애플리케이션의 배포와 관리를 손쉽게 수행할 수 있다.

출처