ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

JDK (Java Development Kit)

도입

단순히 “자바 설치 파일”이 아니라 훨씬 더 넓은 개념입니다.

Java 프로그램을 만들고, 테스트하고, 실행하고, 문서화하고, 패키징하는 데 필요한 도구를 묶어 제공하는 Java 개발 환경입니다.

Java 프로그램을 작성한 뒤 컴파일하고, 실행하고, 문서화하고, 패키징하고, 의존성을 분석하고, 필요하면 커스텀 런타임 이미지까지 만들 수 있는 도구 모음을 포함한 개발 환경입니다.

또한 OpenJDK의 JDK Project는 Java SE 플랫폼의 오픈소스 기준 구현을 계속 만들어 내는 장기 프로젝트이며, 이 프로젝트는 기능 릴리스를 6개월 주기의 시간 기반 모델로 내보냅니다.

그래서 JDK를 이해한다는 것은 단순히 컴파일러 하나를 아는 것이 아니라, Java 플랫폼 전체의 개발, 실행 도구 체계를 이해하는 것에 가깝습니다.

필요성

Java 소스 코드가 클래스 파일이 되고 JVM 위에서 실행되며 배포 가능한 형태로 패키징되기까지의 흐름이 하나로 연결된다

Java를 공부하다 보면 javac, java, jar, javadoc, jshell 같은 명령을 따로따로 배우게 됩니다.

하지만 이 도구들은 각각 흩어진 것이 아니라 모두 JDK 안에서 유기적으로 연결됩니다.

JDK를 이해하면 “소스 코드 작성 → 컴파일 → 실행 → 문서화 → 패키징 → 배포”의 전체 흐름이 선명해집니다.

JDK 이해가 특히 중요한 이유
  • Java 프로그램이 실제로 어떻게 빌드되는지 이해할 수 있다.
  • 컴파일 단계와 실행 단계를 구분할 수 있다.
  • JVM, JRE, JDK 관계를 정확히 정리할 수 있다.
  • 도구별 역할을 나눠 디버깅하기 쉬워진다.
  • 모듈, 배포, 런타임 이미지 같은 현대 Java 흐름을 이해할 수 있다.

정의

JDK는 Java 프로그래밍 언어로 애플리케이션을 만들기 위한 개발 환경이며, 개발·테스트·실행에 유용한 도구를 함께 제공한다

Oracle의 공식 JDK 설명은 일관되게 JDK를 “Java 프로그래밍 언어를 사용해 애플리케이션을 구축하기 위한 개발 환경”으로 설명합니다. 또한 JDK는 Java 프로그램을 개발하고 테스트하고 실행하는 데 유용한 도구들을 포함한다고 안내합니다.

:contentReference[oaicite:5]{index=5}

한편 Java SE API 문서에서는 Java SE 핵심 API와 JDK 전용 API를 구분하며, Java SE 핵심 모듈은 이름이 java로 시작하고, JDK에 특화된 API는 이름이 jdk로 시작한다고 설명합니다. 즉, JDK는 단순 런타임이 아니라 플랫폼 + 개발용 도구 + JDK 전용 기능을 함께 다루는 층위입니다.

:contentReference[oaicite:6]{index=6}

JDK · JVM · JRE 관계

JDK를 제대로 이해하려면 JDK, JVM, JRE를 구분해야 하며, 특히 JDK 11 이후에는 옛날식 설명을 그대로 쓰면 부정확해질 수 있다
개념 핵심 의미 어떻게 이해하면 좋은가
JVM Java 바이트코드를 실행하는 가상 머신 java 명령은 JVM을 시작해 클래스를 로드하고 main()을 호출한다
JRE 역사적으로 Java 실행 환경을 가리키던 개념 하지만 JDK 11 이상에서는 별도 JRE 이미지가 없다
JDK 개발 환경 + 실행 관련 도구 모음 컴파일, 실행, 문서화, 패키징, 분석, 런타임 이미지 제작까지 포함한다

:contentReference[oaicite:7]{index=7}

예전 설명에서는 흔히 “JDK = JRE + 개발 도구”라고 정리했지만, Oracle의 마이그레이션 문서는 JDK 11 and later does not have the JRE image라고 분명히 적고 있습니다. 따라서 현대 Java 기준에서는 JDK를 그냥 “개발과 실행을 위한 전체 도구 환경”로 이해하는 편이 더 정확합니다.

:contentReference[oaicite:8]{index=8}

JDK가 포함하는 것

JDK는 단일 실행기 하나가 아니라, 빌드·실행·문서화·보안·분석·모니터링·문제 해결을 위한 도구들을 묶은 개발 도구 모음이다

Oracle의 Tools and Commands Reference는 JDK 도구들을 기능별로 분류해 설명합니다. 여기에는 메인 개발 도구뿐 아니라 언어 셸, 보안 도구, 모니터링 도구, 트러블슈팅 도구까지 포함됩니다. 즉, JDK는 단순히 javac 하나만 뜻하지 않습니다.

:contentReference[oaicite:9]{index=9}

도구 분류 대표 도구 무엇을 하나
메인 개발 도구 javac, java, jar, javadoc, jlink, jdeps 빌드, 실행, 문서화, 패키징, 의존성 분석
언어 셸 jshell 대화형으로 Java 코드 실험
보안 도구 keytool, jarsigner 키 저장소 관리, JAR 서명·검증
모니터링 / 문제 해결 jcmd, jdb, jhsdb, jconsole JVM 상태 점검, 디버깅, 크래시 분석

:contentReference[oaicite:10]{index=10}

대표 도구

JDK를 이해하는 가장 좋은 출발점은 자주 쓰는 대표 도구들의 역할을 분명히 구분하는 것이다
도구 핵심 역할 실무 감각으로 이해하면
javac Java 소스를 바이트코드 클래스 파일로 컴파일 소스 → .class 변환기
java JVM을 시작해 클래스를 로드하고 main() 실행 실행 런처
javadoc Java 소스의 선언과 문서 주석을 읽어 HTML 문서 생성 API 문서 생성기
jar 클래스와 리소스를 아카이브로 묶고 다룸 배포용 묶음 도구
jshell Java 선언, 문장, 표현식을 대화형으로 실행하는 REPL 빠른 실험실
jdeps 클래스 / JAR의 패키지·클래스 수준 의존성 분석 의존성 분석기
jlink 모듈과 의존성으로 커스텀 런타임 이미지 생성 맞춤 런타임 제작기
jpackage 필요한 런타임까지 포함한 앱 이미지 / 플랫폼별 패키지 생성 설치형 배포 도구

:contentReference[oaicite:11]{index=11}

실전 팁
입문 단계에서는 보통 javac + java만 써도 충분하지만, 프로젝트가 커지면 jar, javadoc, jdeps, jlink, jpackage의 역할을 구분할 줄 알아야 빌드와 배포 흐름이 덜 헷갈립니다.

:contentReference[oaicite:12]{index=12}

컴파일부터 실행까지

JDK를 실제 흐름으로 이해하려면 소스 코드가 바이트코드로 바뀌고, 다시 JVM 위에서 실행되는 과정을 한 줄로 볼 수 있어야 한다
Java 소스 코드(.java) ↓ javac ↓ 바이트코드 클래스 파일(.class) ↓ java ↓ JVM 시작 ↓ 클래스 로드 + main() 호출 ↓ 프로그램 실행

:contentReference[oaicite:13]{index=13}

Oracle 문서는 javac가 Java 클래스와 인터페이스 정의를 읽어 바이트코드와 클래스 파일로 컴파일한다고 설명하고, java 명령은 JVM을 시작하고 지정한 클래스를 로드해 그 클래스의 main() 메서드를 호출한다고 설명합니다. 즉, JDK 안에서도 컴파일 단계실행 단계는 분명히 분리되어 있습니다.

:contentReference[oaicite:14]{index=14}

또한 현대 JDK의 java 명령은 source-file mode를 통해 단일 .java 파일을 직접 실행할 수도 있습니다. 공식 문서는 이 모드에서 소스 파일이 메모리상에서 컴파일된 뒤 실행되는 것처럼 동작한다고 설명합니다.

:contentReference[oaicite:15]{index=15}

Java SE와 JDK의 차이

JDK를 이해할 때 자주 놓치는 포인트는 Java SE 핵심 API와 JDK 전용 API가 문서상에서 분리되어 있다는 점이다

Oracle의 Java API 문서는 Java SE와 JDK를 분명히 나눕니다. 핵심 Java SE API는 모듈 이름이 java.*로 시작하고, JDK에 특화된 API는 jdk.*로 시작합니다. 또한 Oracle 문서는 JDK API가 모든 Java SE 구현에 반드시 존재한다고 보장하지 않는다고 명시합니다.

:contentReference[oaicite:16]{index=16}

구분 문서상 특징 대표 감각
Java SE API java.* 모듈 중심 플랫폼 핵심 표준 API
JDK API jdk.* 모듈 중심 개발 키트에 특화된 API와 도구 관련 기능

:contentReference[oaicite:17]{index=17}

릴리스 모델과 LTS

현대 JDK는 시간 기반 릴리스 모델을 따르며, 실무에서는 기능 릴리스와 LTS 릴리스를 구분해서 보는 습관이 중요하다

OpenJDK JDK Project는 기능 릴리스를 6개월마다 내보내는 시간 기반 모델을 따른다고 설명합니다. Oracle의 Java SE Support Roadmap은 현재 Java SE 8, 11, 17, 21, 25를 LTS 릴리스로 안내하고 있으며, 이후 LTS를 2년 주기로 계획한다고 적고 있습니다.

:contentReference[oaicite:18]{index=18}

구분 의미 실무 감각
기능 릴리스 새 언어/라이브러리/도구 기능을 담는 릴리스 새 기능을 빨리 쓰고 싶을 때 주목
LTS 릴리스 장기 지원이 제공되는 기준 릴리스 실무 서버나 조직 표준 버전 선택에 자주 사용

:contentReference[oaicite:19]{index=19}

자주 하는 오해

JDK를 처음 배울 때는 JDK를 언어 자체로 보거나, 항상 JRE를 포함한다고 생각하거나, 도구를 한 덩어리로 섞어 이해하는 오해가 생기기 쉽다
  • JDK = Java 언어 자체라고 생각함 → JDK는 언어가 아니라 개발 환경과 도구 모음입니다.
  • JDK = 항상 JRE + 도구라고 생각함 → 역사적으로는 맞았지만 JDK 11 이후에는 별도 JRE 이미지가 없습니다.
  • JDK는 javac만 알면 된다고 생각함 → 실제로는 실행, 문서화, 패키징, 분석, 디버깅 도구까지 포함합니다.
  • java 명령은 무조건 이미 컴파일된 클래스만 실행한다고 생각함 → 현대 JDK는 단일 소스 파일 실행 모드도 제공합니다.
  • 모든 Java API가 다 표준 Java SE API라고 생각함 → JDK 전용 API도 별도로 존재합니다.

:contentReference[oaicite:20]{index=20}

공부 루틴

JDK를 공부할 때는 용어만 외우기보다, 소스 코드 한 파일이 어떤 도구를 거쳐 실행되는지 흐름으로 연결해 보는 방식이 가장 효과적이다
  1. JDK / JVM / JRE 차이를 먼저 정리한다.
  2. javacjava 역할을 분리해서 이해한다.
  3. 소스 코드가 .class로 바뀌는 흐름을 직접 실행해 본다.
  4. jarjavadoc로 배포와 문서화 흐름을 경험해 본다.
  5. 프로젝트가 커지면 jdeps, jlink, jpackage까지 확장한다.
  6. 버전 선택에서는 기능 릴리스LTS를 구분해 본다.

:contentReference[oaicite:21]{index=21}

디버깅과 분석 포인트

JDK 관련 문제가 생기면 “컴파일 문제인지, 실행 문제인지, 패키징 문제인지, 의존성 문제인지”를 먼저 분리해서 보는 것이 가장 중요하다
1
소스가 안 되면 javac 단계, 실행이 안 되면 java 단계로 먼저 나눈다.
2
클래스패스 / 모듈패스 / JAR 패키징 문제를 분리해서 본다.
3
의존성이나 모듈 구성이 의심되면 jdeps를 떠올린다.
4
배포 이미지가 목표면 jar만으로 충분한지, 아니면 jlink / jpackage가 필요한지 구분한다.
5
실행 중 문제면 jcmd, jdb, jhsdb 같은 진단 도구까지 확장해서 본다.

:contentReference[oaicite:22]{index=22}

요약

JDK는 Java 프로그램을 개발하고 테스트하고 실행하고 배포하는 데 필요한 도구와 기능을 묶은 개발 환경이며, 현대 Java 플랫폼을 이해하는 가장 핵심적인 출발점이다
  • ✅ JDK는 Java 애플리케이션 개발을 위한 공식 개발 환경이다.
  • javac, java, jar, javadoc, jshell, jdeps, jlink, jpackage 같은 핵심 도구를 포함한다.
  • ✅ 현대 Java에서는 JDK 11 이후 별도 JRE 이미지가 없다는 점을 같이 알아야 한다.
  • javac는 바이트코드 클래스 파일을 만들고, java는 JVM을 시작해 프로그램을 실행한다.
  • ✅ Java SE 핵심 API와 JDK 전용 API는 문서상에서 분리되어 있다.
  • ✅ OpenJDK는 Java SE의 오픈소스 기준 구현 프로젝트이며, 기능 릴리스는 6개월 주기를 따른다.
  • ✅ 실무에서는 기능 릴리스와 LTS 릴리스를 구분해서 버전을 선택하는 습관이 중요하다.

:contentReference[oaicite:23]{index=23}

728x90