
JDK는 자바 개발자용 도구 모음이다. 자바 소스 코드를 작성하고, 컴파일하고, 디버깅하며, 실행할 수 있는 모든 필수 도구가 포함되어 있다. 즉, 자바 프로그래밍을 시작하려면 반드시 JDK가 필요하다. 단순히 자바 프로그램을 실행하는 것과 개발하는 것은 다르다. 개발을 위해서는 소스 코드를 컴파일하는 과정이 필요하고, 이 모든 기능을 JDK가 담당한다. JDK에는 자바 개발에 필요한 다양한 도구가 포함되어 있다. 그중 핵심적인 구성 요소는 아래와 같다.
JRE (Java Runtime Environment) : 자바 애플리케이션을 실행할 수 있는 환경을 제공한다. JRE에는 자바 가상 머신(JVM)과 표준 자바 라이브러리가 포함되어 있어, 이미 컴파일된 자바 프로그램을 실행할 수 있다. 다만, JRE는 개발에 필요한 컴파일러나 기타 도구가 포함되어 있지 않기 때문에 직접 자바 소스 코드를 작성하거나 컴파일하는 데는 사용할 수 없다.
컴파일러 (javac) : 자바 소스 코드 파일(.java)을 JVM이 이해할 수 있는 바이트코드(.class)로 변환해주는 핵심 도구이다. 자바 개발에서 소스 코드를 컴파일하는 과정은 필수적이며, 이 역할을 담당하는 컴파일러가 바로 javac이다.
디버거 (jdb) : 자바 프로그램을 실행하면서 발생하는 오류를 추적하고 수정하는 데 사용하는 도구이다. 코드의 문제를 분석하고 문제 지점을 찾아내는 데 유용하며, 안정적인 자바 애플리케이션 개발에 필수적인 역할을 한다.
문서 생성기 (javadoc) : 자바 소스 코드 내 주석을 기반으로 API 문서를 자동으로 생성하는 도구다. 특히 팀 프로젝트나 라이브러리 개발 시 문서 작성 시간을 대폭 절감해주어, 효율적인 협업과 유지보수를 가능하게 한다.
jar : 여러 자바 클래스 파일과 리소스 파일을 하나의 압축 파일로 묶어 배포할 때 사용한다. 이를 통해 라이브러리나 애플리케이션 배포가 용이해진다.
keytool : 보안 관련 키와 인증서를 생성·관리하는 도구다. SSL 인증서 관리나 보안 설정에 필수적으로 쓰인다.
JDK, JRE, JVM의 차이점
자바를 배우다 보면 JDK, JRE, JVM 세 용어가 혼동될 수 있다. 각각의 역할을 명확히 이해하는 것이 중요하다. JVM은 자바 바이트코드를 실행하는 가상 머신으로, 자바 실행 환경의 핵심 엔진 역할을 한다. JRE는 자바 프로그램을 실행하기 위한 환경을 제공하는데, JVM과 자바 클래스 라이브러리를 포함하고 있다. 마지막으로 JDK는 자바 개발 도구의 모음으로, JRE에 컴파일러, 디버거, 문서 생성기 등 개발에 필요한 다양한 도구가 추가된 형태다. 즉, JDK는 개발자용이며, JRE는 사용자용 실행 환경, 그리고 JVM은 자바 프로그램 실행의 핵심 엔진이라고 할 수 있다.
Oracle JDK와 OpenJDK
Oracle JDK와 OpenJDK는 기본 코드베이스를 공유하고 있어 성능 면에서는 거의 차이가 없다. 두 JDK 모두 동일한 HotSpot JVM을 사용하며, 같은 최적화 기술이 적용되기 때문에 실제 벤치마크 결과에서도 큰 성능 차이가 나타나지 않는다. 다만, Oracle JDK는 일부 상업용 기능을 포함하고 있는데, 이들은 주로 성능 향상보다는 모니터링과 진단을 위한 도구들이다. 따라서 성능 자체는 두 JDK 간에 큰 차이가 없으며, 선택 시에는 라이선스 정책과 지원 주기, 상업적 사용 여부 등 실질적인 운영 환경에 맞는 조건들을 더 중요하게 고려하는 것이 바람직하다. OpenJDK는 무료 오픈소스 프로젝트로 자유롭게 사용할 수 있지만, Oracle JDK는 상업적 용도로 사용할 경우 별도의 라이선스 비용이 발생할 수 있다. 이런 점들을 종합하여 개발 목적과 환경에 맞는 JDK를 선택하는 것이 좋다.
더 읽어보기
2023.12.13
자바에서의 함수형 프로그래밍
자바스크립트로 프로그래밍을 처음 배웠을 때, 함수는 단순한 실행 단위가 아니라 변수에 담고, 다른 함수에 인자로 넘기고, 반환할 수도 있는 1급 객체였다. 이러한 개념은 자연스럽게 받아들여졌고, 다양한 고차 함수를 조합해 로직을 구성하는 방식에 익숙해졌다.반면 자바는 객체지향 언어로서…
2023.10.17
컬렉션 프레임워크
자바 컬렉션 프레임워크(Collection Framework)는 자바 프로그래밍에서 데이터를 효율적으로 저장하고 관리하기 위한 표준화된 자료구조와 알고리즘의 집합이다. 배열과 달리 크기 제한 없이 동적으로 데이터를 다룰 수 있고, 검색, 정렬, 삽입, 삭제와 같은 다양한 기능을 내장하고…
2023.09.24
클래스와 인터페이스
타입스크립트를 오랫동안 사용해오면서 클래스 기반 프로그래밍에 익숙해졌다고 생각했지만, 최근 Java를 배우기 시작하면서 기존에 알던 개념들을 더 깊이 있게 돌아보게 되었다. Java는 타입스크립트와 비교했을 때 문법적으로는 유사한 부분이 많지만, 객체지향 프로그래밍 언어로서의 철학과 제…
2026.04.11
Trie 자료구조
문자열 데이터를 다룰 때 단순히 “이 단어가 있나?”만으로는 부족한 순간이 있다. 자동 완성처럼 특정 접두사로 시작하는 후보를 모아야 할 때도 있고, 어떤 키에 값을 두고 빠르게 찾고 싶을 때도 있다. 이럴 때 가장 자연스럽게 떠올릴 수 있는 자료구조가 바로 Trie이다.Trie는 무엇…
2026.03.19
Streams API 부록 2. 왜 이미지는 위에서 아래로 나타날까
웹 페이지에서 이미지를 로드할 때 흥미로운 장면을 종종 볼 수 있다. 이미지가 한 번에 완전히 나타나는 것이 아니라, 위에서 아래로 조금씩 채워지면서 나타나는 경우가 있기 때문이다. 특히 네트워크가 느리거나 이미지가 큰 경우 이런 현상이 더 분명하게 보인다. 마치 이미지가 위쪽부터 스캔…
2026.03.19
Streams API 부록 1. HTTP 다운로드 진행률은 어떻게 계산될까
파일을 다운로드할 때 가끔 몇 퍼센트 진행되었는지 혹은 진행 막대(progress bar)가 조금씩 채워지는 모습을 볼 수 있다. 그런데 모든 다운로드가 이런 식으로 진행률을 보여 주는 것은 아니다. 어떤 다운로드는 퍼센트가 표시되지만, 어떤 경우에는 진행 막대 없이 로딩 스피너만 계속…
2026.03.13
Streams API 4. 왜 모든 언어에는 Stream API가 존재할까
Streams API를 공부하다 보면 묘한 기시감을 느끼게 된다. JavaScript에서 ReadableStream, WritableStream, TransformStream을 살펴보고 있는데, 어딘가 낯설지 않다. Java를 써 본 사람이라면 InputStream, OutputStre…
댓글
댓글을 불러오는 중...