
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.05.26
차트는 멈췄는데 윈도우가 움직인다
상황 어느날 서비스를 살펴보시던 팀장님께서 이런 말씀을 slack에 남기셨다. 진호님, 예측 차트에서 zoom을 계속하면 어느 순간 라인 차트가 아니라 단일 스캐터 차트처럼 보이는 데, 이거 수정하면 좋을 거 같아요. 어느정도 zoom을 하면 그 이후로는 zoom이 안 되도록 할 수 없…
2026.05.21
피자가게로 이해하는 디자인 패턴
에이든 피자는 처음부터 복잡한 시스템을 만들 생각이 없었다. 처음에는 메뉴 몇 개만 만들면 됐다. 그런데 손님은 커스텀 주문을 넣기 시작했고, 주방은 상태를 나눠야 했고, 결제와 배달앱과 알림이 하나씩 붙었다. 코드도 가게를 닮는다. 장사가 잘될수록 이상하게 더 쉽게 망가진다. 디자인…
2026.05.21
7. Decorator — 토핑 추가할 때마다 클래스를 새로 만들 수 없다
에이든 피자에서 주문서를 객체로 만들자 취소와 재주문은 한결 편해졌다. 그런데 주문이 편해지자 손님들도 한결 편해졌다. 편해진 손님은 더 많은 요구를 한다. "치즈 추가요", "올리브도 추가요", "소스 많이요", "조금 더 바삭하게 구워주세요" 같은 요청이 주문대 위로 쌓이기 시작했다…
2026.05.21
6. Command — 주문서를 객체로 만들면 취소도 재주문도 쉬워진다
에이든 피자의 시범 운영이 어느덧 일주일을 향해 가고 있다. 주방은 이제 제법 능숙하게 피자를 구워내고, 포스기(POS) 시스템도 팩토리 메서드 덕분에 다양한 지점 메뉴를 무리 없이 받아낸다. 하지만 시스템이 안정될수록 요구사항은 더 정교해지기 마련이다. 오늘은 주문 그 자체가 문제가…
댓글
댓글을 불러오는 중...