이 글에서는 Java 애플리케이션 개발의 필수 요소인 JDK(Java Development Kit)의 정의와 구성, 그리고 JDK를 중심으로 한 개발 지식까지 함께 다룹니다.
- JDK란 무엇인가?
- JDK를 사용하는 이유
- JDK의 자동 빌드 시스템
- 기타 관련 지식
- 마치며
1. JDK란 무엇인가?
JDK(Java Development Kit)는 자바 애플리케이션을 개발하고 실행하는 데 필요한 모든 것을 담은 개발 도구 모음입니다.
JDK는 크게 두 가지 요소로 구성됩니다.
JRE(Java Runtime Environment)
JRE는 자바 애플리케이션이 실행될 수 있는 환경입니다.
실행에 필요한 가상 머신(Java Virtual Machine)과 표준 API를 제공하는 핵심 라이브러리(Java Class Library)로 구성되어 있습니다. 일반적으로 Java 설치라고 하는 것은 JRE 설치를 의미합니다.
Development tool
개발자가 코드를 작성, 컴파일, 디버깅, 배포하는 데 사용하는 도구들입니다.
JRE와 달리 다음과 같이 개발자에게 필요한 기능을 제공합니다.
- javac(컴파일러): 자바 소스 코드를 바이트 코드로 변환합니다.
- java: 컴파일된 프로그램을 실행하는 명령어
- javadoc: 주석을 기반으로 API문서를 생성하는 도구
- jar: Java Archive, 자바 프로그램을 하나의 파일로 압축
- jdb: 런타임 중 단계별 디버깅 도구
- javap, jdeps: 클래프 파일 구조 분석 및 의존성 확인 도구
2. JDK를 사용하는 이유
JDK는 Java 개발 간 통합성과 이식성이라는 장점을 제공하는 집합체 입니다.
- 통합성 : 개발에 필요한 모든 도구를 하나의 JDK로 제공하므로, 별도 구성 및 관리 필요없이 일관된 환경 속에서 개발이 가능합니다.
- 이식성 : JRE에 포함된 JVM 덕분에 다양한 플랫폼에서 “Write Once, Run Anywhere"라는 자바의 핵심 철학을 가능하게 합니다.
3. JDK의 자동 빌드 시스템
자동화된 빌드 시스템이 없다면 개발자는 JDK 도구를 직접 사용해야 합니다.
인텔리제이에는 자체 내장 빌드/프로젝트 관리 기능이 있지만, 표준화된 빌드 파일이 없어 공유가 어렵고, IDE 의존성이 높아 학습용으로만 사용됩니다.
JDK의 빌드 시스템에 대해 알아보겠습니다.
- Maven: XML기반의 표준 빌드 도구입니다. 정형화된 구조와 프로젝트의 일관성 확보에 용이합니다.
- Gradle: 현재 널리 쓰이는 차세대 빌드도구입니다. Maven보다 유연하며, 스크립트 언어로 원하는 빌드 로직을 쉽게 확장할 수 있어 대규모, 멀티 모듈 환경에서 유용합니다.
Gradle DSL(Domain Specific Language)
- Gradle DSL: 기본적으로 사용되는 초기 공식 Gradle 스크립트 언어입니다. 자바와 호환성이 높고 코드가 간결합니다. 동적 타입 언어라 자동완성, 타입 체크가 제한적입니다.
- Kotlin DSL: 정적 타입 언어 Kotlin 기반의 Gradle 스크립트로 IDE 지원이 뛰어나 자동완성, 리팩터링, 타입 안정성이 보장됩니다. 실무에서 안정적이지만 초반 러닝커브는 Gradle DSL보다 상대적으로 조금 높으며, 일부 오래된 플러그인은 지원되지 않습니다.
기타 관련 지식
Java와 JS의 차이
Java 기반의 특정 상황을 JS와 비교합니다.
- JS는 JDK와 같은 개발 키트없이, 런타임만으로 개발과 실행이 가능합니다.
- JS는 Node.js의 런타임을 통해 JRE처럼 애플리케이션을 실행합니다.
- JCL에 표준 기능이 있는 것과 달리, Node.js는 주요 시스템 기능을 내장 모듈로 제공합니다.
- Node.js는 V8엔진으로 JS를 실행합니다.
- 명령어 기반 개발 도구로 Java는 javac, jar, javadoc 등을 제공하며, Node.js는 npm을 제공합니다.
마치며.
이번 JDK에 대한 학습 통해 JRE, Gradle처럼 파편적으로 알고 있던 지식들이 '자바 개발'이라는 큰 그림 안에서 어떻게 연결되는지 명확히 이해할 수 있었습니다.
배포 환경에는 JRE를 사용하는 것이 효율적이다.
JRE의 역할과 목적을 다시 생각해보며, 소스 코드를 빌드할 필요가 없는 배포 서버에는 JDK 전체가 아닌 JRE만 설치하는 것이 경량화와 보안 측면에서 최선의 선택임을 깨달았습니다.
Gradle은 단순한 의존성 관리 도구가 아니다.
Gradle은 빌드 로직 자체를 프로그래밍하는 도구입니다. 자동화된 빌드 도구는 개발의 편리함을 가져다 주지만, 필요에 따라서 그 내부를 탐구하여 문제를 해결하는 정답이 될 수 있음을 느꼈습니다.
이와 같은 깨달음을 통해 가볍게 넘겼던 새로운 기술의 오프닝은 여러 기능 중 가장 핵심 기능만 우선적으로 보여주기 위해 정제된 기술들이며, 동작 원리를 명확히 파악하는 것이 장기적인 학습 곡선을 완만하게 만든는 방법임을 다시 한번 확인하는 경험이 되었습니다.
'Programming Language > Java' 카테고리의 다른 글
| [Java] JVM(Java Virtual Machine)에 대하여 (1) | 2025.09.16 |
|---|---|
| [Java] 자바 실행 환경, JRE에 대하여 (0) | 2025.09.14 |
| [Java] Java에서의 Heap과 Priority Queue(for Algorithm Guide) (0) | 2025.03.28 |
| [Java] Java의 다양한 정렬 방법 1 : Primitive / Object (0) | 2025.02.17 |
| [Java] Primitive Array에 내림차순 정렬이 없는 이유 (1) | 2025.02.16 |