개발자

자바 개발의 시작과 끝, JDK의 이해

Matthew Tyson | InfoWorld 2023.12.08
자바 개발 키트(JDK)는 JVM(자바 가상 머신), JRE(자바 런타임 환경)와 함께 자바 프로그래밍에 사용되는 3가지 핵심 기술 중 하나다. 이 3가지 기술의 차이를 이해하고 어떻게 연결되는지 이해하는 것이야 말로 자바 개발의 핵심이다.
 
  • JVM은 실행 중인 프로그램을 호스팅하는 런타임이다. 
  • JRE는 자바의 온디스크 부분으로, JVM을 만들어 프로그램을 로드한다. 
  • JDK는 JVM과 JRE에서 실행 가능한 자바 프로그램을 작성하는 데 필요한 툴을 제공한다. 

자바를 처음 접하는 개발자는 자바 개발 키트와 자바 런타임 환경을 혼동하는 경우가 많다. 둘의 차이는 JDK는 자바 기반 소프트웨어를 개발하기 위한 툴 패키지, JRE는 자바 코드를 실행하기 위한 툴 패키지란 점이다. JRE는 간단히 자바 프로그램을 실행하기 위한 독립적인 구성요소로 사용할 수 있지만 JDK의 일부이기도 하다. 자바 프로그램 실행은 자바 프로그램 개발의 일부이므로 JDK에는 JRE가 필요하다. 
 
JDK의 전반적인 구성 ⓒ IDG

먼저 JDK의 기술적인 정의와 일상적인 정의를 생각해 보자. 
 
  • 기술적 정의 : JDK는 컴파일러와 표준 클래스 라이브러리를 포함하는 자바 플랫폼 사양의 구현이다. 
  • 일상적인 정의 : JDK는 자바 기반 애플리케이션을 만들기 위해 다운로드하는 소프트웨어 패키지다. 
 

JDK 버전과 패키지 

개발 환경에서 자바를 설정하는 과정은 간단하다. JDK를 다운로드해서 운영체제의 시스템 경로에 추가하기만 하면 된다. 윈도우와 맥OS의 경우 이 과정을 실행하는 설치 프로그램이 자바에 포함돼 있다. 이제 JDK를 다운로드할 때 사용할 자바 버전을 선택해야 한다. 자바 11은 자바 8을 앞질러 현재 가장 일반적으로 사용되는 버전이다. 앞으로는 자바 17이 주로 사용되는 버전이 될 것으로 보인다. 자바는 하위 호환성을 유지하므로 이번 글은 최신 릴리스를 기준으로 진행한다.

과거에는 자바 패키지도 선택해야 했다. 자바 엔터프라이즈 에디션(자바 EE), 자바 스탠다드 에디션(자바 SE), 자바 모바일 에디션(자바 ME) 등 각기 다른 유형의 개발을 위한 JDK가 있었다. 그러나 엔터프라이즈 자바 라이브러리가 자카르타(Jakarta) EE로 마이그레이션된 지금은 프로세스가 바뀌었다. 오라클 또는 오픈JDK와 같은 업체의 자바 SE JDK는 여전히 다운로드해야 한다. 엔터프라이즈 및 클라우드 네이티브 애플리케이션 개발을 위한 부가 툴이 필요하다면 자카르타 EE를 다운로드해 설치하는 것이 좋다. 모든 경우에 자카르타 EE 플랫폼 전체가 필요한 것은 아니다. 예를 들어 JDK와 서블릿만 필요하다면 표준 JDK와 서블릿 API가 포함된 톰캣을 사용하면 된다. 
 

자바 SE용 JDK 다운로드 

여기서는 핵심 JDK 클래스와 기술에 집중하기 위해 자바 SE를 사용한다. 자바 SE 개발 키트는 오라클 공식 다운로드 페이지에서 다양한 JDK 패키지를 내려받을 수 있다. 자바 SE 다운로드를 선택하기 전에 다른 옵션을 잠시 살펴보는 것도 좋다. 자바에서 일어나는 많은 변화를 확인할 수 있다.
 
오라클 공식 다운로드 페이지에서 다양한 JDK 패키지를 내려받을 수 있다. ⓒ IDG
 

JDK 설치 방법 

JDK 설치는 수동으로 하거나 설치 프로그램을 사용하는 2가지 방법이 있다. 수동 설치의 경우 바이너리를 다운로드해 압축을 풀고 경로에 추가한다. 이 과정은 모든 운영체제에서 같다. 개발자라면 이 설치 유형에 익숙할 것이다. 설치 프로그램은 맥OS와 윈도우용으로 제공된다. JDK 설치 프로그램을 실행하면 개발 툴, 소스 코드, 퍼블릭 JRE 등 3가지 구성요소 선택 화면이 표시된다. 이 중에 하나를 설치할 수도, 모두 설치할 수도 있다. 여기서는 기본값 그대로 선택한다. 

개발 툴 설치 옵션을 선택하면 적절한 JDK가 제공된다. 소스 코드에는 핵심 자바 API의 공용 클래스 소스가 포함된다. 이 옵션을 포함하면 애플리케이션을 빌드할 때 소스 코드를 참조할 수 있다. 세 번째 옵션인 퍼블릭 JRE는 JDK와 JRE가 별개임을 보여준다. 퍼블릭 JRE는 다른 프로그램에서 자바 프로그램을 실행하기 위해 사용할 수 있으며 JDK와 별개로 설치가 가능하다. 

3가지 구성요소를 모두 설치하고 각각에 대해 기본값을 그대로 사용하면 JDK와 JRE가 운영체제의 기본 위치에 설치된다. 윈도우의 경우 기본 위치는 C:\Program Files\Java\jdk-*다. 이전 자바 버전에서는 JDK와 JRE가 서로 다른 디렉터리에 설치됐는데, 최근 버전에서는 JDK 디렉터리 안에 함께 설치된다.
 
JDK를 설치하는 기본 위치는 C:\Program Files\Java\jdk-*다. ⓒ IDG
 

자바의 2가지 핵심 명령, java와 javac 

JDK 내부의 JRE는 명령줄에 java 명령을 더한다. 명령셸로 들어가 java – version을 입력하면 방금 설치한 자바 버전이 반환된다. 경우에 따라 이 시스템 경로 변경이 완전히 반영되려면 시스템을 다시 시작해야 할 수도 있다. java도 좋지만 자바 파일을 컴파일하려면 javac라는 JDK 구성요소도 필요하다. javac 명령은 /jdk 디렉터리에 위치하며 설치 프로그램의 최근 버전이 이 경로에 자동으로 추가된다. 일부 IDE에는 기본적으로 자바 컴파일러가 포함된다. 원하는 설치된 버전을 사용하도록 IDE를 구성할 수 있다. 
 

자바 프로그램 컴파일 및 실행 

먼저 텍스트 파일과 콘솔 명령을 사용해 예전 방식으로 자바 프로그램을 컴파일하고 실행해 보자. 이렇게 하면 작동 방식에 대해 감을 잡을 수 있다. 

1단계 : 간단한 자바 프로그램 쓰기 
Intro.java라는 새 텍스트 파일을 만들어서 문서 폴더 등 적당한 위치에 둔다. 그 다음 아주 간단한 자바 프로그램인 <예시 1>의 코드를 추가한다. 

예시 1. Intro.java
public class Intro {

    public static void main(String[] args) {
        System.out.println("Welcome to the JDK!");
    }

}

2단계 : JDK를 사용해 컴파일 
그 다음 JDK 컴파일러를 사용해 텍스트 파일을 실행 프로그램으로 변환한다. 자바로 컴파일된 코드를 바이트코드라고 하며, 확장자는 .class다. Intro.java 파일을 명령 인수로 전달해 javac 명령을 사용한다. <예시 1>에서 만든 자바 파일을 javac 명령에 넣는다. 필자의 시스템을 기준으로, <예시 2>와 같이 된다. 이전 자바 버전에서는 명령줄에서 하듯이 명령의 전체 경로를 명령셸에 입력해야 했지만 지금은 아니다.

예시 2. JDK를 사용해 컴파일하기 
javac Intro.java
//"C:\Program Files\Java\jdk-10.0.1\bin\javac.exe" Intro.java

이렇게 하면 성공적으로 컴파일될 것이다. javac는 성공했다는 메시지를 따로 표시하지 않고 새 파일만 출력한다. 오류가 발생하면 콘솔에 출력된다.

3단계 : .class 파일 실행 
Intro.java와 같은 디렉터리에서 이제 Intro.class 파일을 볼 수 있다. java Intro를 입력해 이 파일을 실행하면 <예시 3>과 같이 출력된다. 참고로 이 명령을 입력할 때 .class는 포함하지 않는다. 

예시 3. Intro.class 실행 
C:\Users\mtyson\Documents>java Intro
Welcome to the JDK!
 

JAR 파일을 만들어 클래스패스에 추가하기 

javac는 JDK의 간판이지만 /bin 디렉터리에는 다른 필요한 툴도 있다. javac를 제외하고 가장 중요한 툴은 jar이다. JAR(.jar) 파일은 여러 자바 클래스를 패키지화한 것이다. 컴파일러가 .class 파일을 만들면 개발자는 이러한 파일을 예측 가능한 방식으로 압축하고 구조화하는 .jar 파일에 넣을 수 있다. 이제 Intro.class.jar 파일로 변환해 보자. Intro.java가 위치한 디렉터리로 돌아가서 <예시 4>의 명령을 입력한다. 

예시 4. JAR 파일 생성 
C:\Users\mtyson\Documents>"c:\Program Files\Java\jdk-10.0.1\bin\jar.exe" --create --file intro.jar Intro.class

이 디렉터리에 intro.jar 파일이 생성된다. 다음과 같이 클래스패스에 이 파일을 추가하고 프로그램 내에서 실행하면 .jar 파일을 사용할 수 있다. 

 예시 5. 클래스패스에 JAR 추가하기 
java -cp intro.jar Intro

-cp 스위치는 클래스패스에 jar를 추가하도록 자바에 지시한다. 이 작은 프로그램에서 jar 파일은 과도하지만 프로그램의 크기가 커지고 서드파티 패키지에 의존하게 되면 반드시 필요하게 된다.
 

IDE 속 JDK 

통합 개발 환경(IDE)은 애플리케이션 개발을 위한 일체의 툴 모음을 제공하는 소프트웨어다. 파일 탐색기와 텍스트 편집기, 그리고 코드 완성 및 서식 지정과 같은 개발 관련 기능을 포함한 시각적 운영체제라고 생각하면 된다. 이클립스, 인텔리J, 넷빈즈 등이 대표적이다. 모두 충분히 검증된 강력한 자바 IDE다. 그 외에 보편적으로 사용되는 마이크로소프트의 비주얼 스튜디오 코드(VS 코드)도 자바 애플리케이션 개발에 부족함이 없다.

자바 개발에서 IDE의 핵심적인 기능 중 하나는 컴파일 관리다. 즉, IDE는 백그라운드에서 컴파일 프로세스를 자동으로 실행하므로 수동으로 계속 컴파일을 할 필요가 없다. 또한 IDE는 코딩 오류를 즉석에서 포착하는 등 작업 중에 실시간으로 피드백을 제공한다. 여기까지가 명령줄에서 JDK가 어떻게 작동하는 방법이다. 이제 이클립스에서는 어떻게 작동하는지 살펴보자. 

이클립스와 JDK 
이클립스 설치는 이 가이드에서 다룰 내용은 아니지만 간단하다. 이클립스에는 다른 프로그램과 마찬가지로 설치 프로그램이 포함돼 있으며 여기서 각자의 운영체제에 맞는 설치 프로그램을 찾을 수 있다. 이클립스를 설치했으면 메뉴 표시줄에서 창(Windows) 항목을 열고 환경 설정(Preferences)을 선택한다. 환경 설정 창에서 자바(Java) 항목을 열면 그 안에서 컴파일러(Compiler) 항목을 볼 수 있다. 클릭하면 JDK 옵션이 표시된다. 
 
이클립스의 JDK 옵션 스크린샷 ⓒ IDG

앞서 언급했듯이, 프로젝트에 맞는 JDK 버전을 선택해야 한다. 명령줄에서 JDK 컴파일러를 실행하는 것과 같은 방식으로 이클립스는 내부적으로 JDK 컴파일러를 실행한다. 이클립스 IDE에는 자체 JDK 인스턴스도 있다. 이클립스가 JDK와 JRE를 알아서 관리해주므로 작업이 훨씬 더 간편해진다.
editor@itworld.co.kr
 Tags JDK
Sponsored

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.