반응형
JDK (Java Development Kit)
JDK는 자바 개발 키트의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트이다.
📌 SDK 란
Software Development Kit의 약자로, 소프트웨어 개발을 위해 도구와 라이브러리, 문서, 샘플 코드 등을 포함하는 패키지
JDK 안에는 자바 개발 시 필요한 라이브러리와 javac, javadoc 등의 개발 도구들을 포함되어 있습니다.
자바 프로그램 실행을 위한 JRE도 함께 포함되어 있습니다.
JDK 버전 표기
- Java SE (Standard Edition)
- 표준 에디션의 자바 플랫폼으로 자바 언어의 핵심 기능을 제공
- Java EE (Enterprise Edition)
- 대규모 기업용 에디션, 기업 환경을 위한 대규모 솔루션 개발
- Java ME (Mirco Edition)
- 작은 임베디드 기기들 같은 작은 기기를 다루는데 이용하는 에디션
- Java FX
- 가볍고 예쁜 그래픽 사용자 인터페이스(GUI)를 제공하는 에디션
JRE (Java Runtime Environment)
JRE는 자바 실행 환경의 약자로, JVM과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지입니다.
JRE는 기본적으로 JDK에 포함되어 있기 때문에 JDK를 설치하면 함께 설치됩니다.
Java로 프로그램을 개발하기 위해서는 JDK가 필요하다.
컴파일된 Java 프로그램을 실행시키기 위해서는 JRE가 필요하다.
JVM (Java Virtual Machine)
JVM은 자바 가상머신의 약자로, 자바를 실행하는 머신이라 할 수 있다.
자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있으므로, 자바 프로그램 실행을 위해서는 JVM이 반드시 설치되어 있어야 합니다.
JVM은 JRE에 포함되어 있습니다.
JVM의 장점
- JVM을 사용함으로써 자바 프로그램을 어느 플랫폼에서든 제약 없이 동작하게 할 수 있다.
- OS에 종속적이지 않다.
- OS에 JVM만 설치되어 있으면 어느 환경에서든지 자바 프로그램을 실행시킬 수 있다.
자바 컴파일 과정
- Java Compiler가 Java로 작성된 소스 코드 .java 파일을. class파일 Byte Code로 컴파일합니다.
- 해당 Byte Code를 기계어로 변환시키기 위해 가상 CPU가 필요한데, 이것이 JVM의 역할입니다.
- JVM이 Byte Codefmf Binary Code(기계어)로 변환합니다.
=> 위 과정을 보면 JVM을 통해 운영체제와 소통하므로, OS에 종속적이지 않다고 할 수 있습니다.
Byte Code란 가상 머신에서 사용되는 코드 개념으로, 가상 머신이 이해할 수 있는 중간 레벨로 컴파일한 것입니다.
즉, 일반 컴퓨터 CPU가 읽을 수 있는 코드가 아님, Binary Code로 한 번 더 파싱 되어야 함
Docker 이미지 생성 시 JDK 대신 JRE를 사용했을 때의 장점
1. 이미지 경량화
- JDK는 개발 도구와 실행 라이브러리가 모두 포함되어 있어, 전체 설치 크기가 커집니다. 반면, JRE는 애플리케이션 실행에 필요한 최소한의 라이브러리만 포함되어 있어 이미지 크기가 줄어듭니다.
- 작은 이미지 크기는 저장소 사용량을 줄이고, 네트워크 전송 속도를 개선하며 도커 이미지를 빌드하는 데 걸리는 시간을 단축합니다. 2.
2. 보안 향상
- JRE는 JDK의 여러 개발 도구를 포함하지 않기 때문에 공격 표면이 줄어듭니다. 즉, 보안 취약점이 있는 개발 도구나 관련 라이브러리의 포함 가능성이 낮아져 보안성을 높일 수 있습니다.
3. 효율성 및 성능
- JRE는 애플리케이션을 실행하는 데 필요한 최소한의 런타임 환경만 제공하므로, 리소스 소비가 적다.
- 개발 및 디버깅 도구가 필요 없는 실행 환경에서 컨테이너 목적에 맞게 환경을 유지할 수 있다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Java 일급 컬렉션 사용법 및 이해하기 (1) | 2024.09.08 |
---|---|
[JAVA] Java Stream groupingBy 통해 그룹핑하기 (0) | 2024.08.17 |
[JAVA] Java Optional.ofNullable() : Null 안전성과 간결한 코드 작성 방법 (0) | 2024.01.24 |
[JAVA] Java Stream 활용법: Filter, Map, FlatMap 예제와 함께 (0) | 2024.01.24 |
[JAVA] 자바 JUnit5 & AssertJ 테스트 코드 사용법 (0) | 2023.11.01 |