Credit: Nic McPhee (CC BY-SA 2.0)
JDK는 자바 가상 머신(Java Virtual Machine, JVM), 그리고 자바 런타임 환경(Java Runtime Environment, JRE)과 함께 자바 프로그래밍에 사용되는 3대 핵심 기술 패키지 가운데 하나다. 이 3가지 기술이 어떻게 연결되어 있는지, 또한 어떻게 다른지 구별하는 것이 중요하다.
- JVM은 프로그램을 실행하는 자바 플랫폼 구성요소다.
- JRE는 JVM을 생성하는 디스크 상의 부분이다.
- JDK는 개발자들이 JVM과 JRE에 의해 실행되고 구동될 수 있는 자바 프로그램을 생성할 수 있게 해준다.
자바를 처음 접하는 개발자는 JDK와 JRE를 혼동하는 경우가 종종 있다. 다른 점은 JDK가 자바 기반 소프트웨어를 개발하기 위한 도구들로 이뤄진 패키지인 반면, JRE는 자바 코드를 실행하기 위한 도구들로 구성된 패키지라는 점이다.
JRE는 단지 자바 프로그램을 구동하기 위한 독립형 구성요소로써 사용될 수도 있지만, 동시에 JDK의 일부이기도 하다. 자바 프로그램을 구동하는 것이 자바 프로그램 개발의 일환이기 때문에 JDK는 JRE를 필요로 한다. 다음 그림은 JDK가 자바 애플리케이션 개발 라이프사이클에서 어디에 속하는 지를 보여준다.
Credit: Matthew Tyson
DK에 대한 기술적 정의와 일반적 정의는 다음과 같다.
- 기술적 정의: JDK는 컴파일러와 클래스 라이브러리(Class Library)를 포함하는, 자바 플랫폼 사양서의 구현이다.
- 일반적인 정의: JDK는 개발자가 자바 기반 애플리케이션 개발을 위해 다운로드하는 소프트웨어 패키지다.
JDK와 자바 컴파일러
모든 JDK는 자바 애플리케이션 구동에 이용되는 환경이 JRE뿐만 아니라, 자바 컴파일러도 포함하고 있다. 컴파일러는 평범한 텍스트인 원시(Raw) .java 파일을 받아서 실행 가능한 .class 파일로 만드는 기능이 있는 소프트웨어다. 곧 컴파일러 사용을 볼 수 있을 것이다. 우선, 개발 환경으로 JDK를 다운로드해 설정하는 방법을 알려 줄 것이다.
JDK 시작하기
개발 환경에서 자바를 설정하는 것은 JDK를 다운로드하고 그것을 클래스경로(classpath)에 추가하는 정도로 매우 쉽다. 사용할 JDK를 다운로드 할 때, 사용할 자바 버전을 선택해야 한다. 자바 8이 가장 널리 사용되고 있지만, 기사 작성 시점에서는 자바 10이 최신 릴리즈다. 자바는 하위 호환성(Backward Compatibility)을 유지하고 있으므로, 최신 릴리즈를 다운로드 하기만 하면 된다.
JDK 패키지
자바 버전 선택과 함께, 자바 패키지도 선택해야 한다. 패키지(Package)란 서로 다른 유형의 개발을 표적으로 하는 자바 개발 키트다. 가용 패키지로는 자바 EE(Enterprise Edition), 자바 SE(Standard Edition), 그리고 자바 ME(Mobile Edition)이 있다.
초보 개발자라면 때로 어느 패키지가 자신의 프로젝트에 맞는지 확신이 서지 않을 수 있다. 일반적으로, 개별 JDK 버전은 자바 SE를 포함하고 있다. 자바 EE나 자바 ME를 다운로드하면, 표준 에디션(Standard Edition, SE)도 얻는 것이다. 예를 들면, 자바 EE는 엔터프라이즈 자바 빈(JavaBeans)이나 객체 관계 매핑(Object Relational Mapping, ORM) 지원 같은 엔터프라이즈 애플리케이션 개발에 유용한 추가적인 도구를 가지고 있는 표준 플랫폼이다.
필요한 경우, 나중에 다른 JDK로 전환하는 것도 어렵지 않다. 이제 막 시작한 경우, 맞는 자바 버전과 JDK 패키지 선정에 대해 너무 걱정하지 마라.
JDK 버전 호환성
JDK가 개발자의 자바 프로그램에 대한 컴파일러를 제공하기 때문에, 사용하는 JDK가 코드를 작성할 수 있는 자바 버전을 결정한다. 예를 들어, 화살표 람다 연산자(Lambda Operator)처럼 자바 8에 있는 좀 더 새로운 기능 지원을 사용하고 싶다면, 컴파일을 위해 최소한 자바 8 JDK가 필요할 것이다. 그렇지 않은 경우, javac 명령이 구문 오류를 표시하면서 해당 코드를 거부할 것이다.
JDK 다운로드
핵심 JDK 클래스와 기술에 초점을 맞추기 위해, 이번 튜토리얼에서는 자바 SE만을 사용할 것이다. 자바 SE JDK를 다운로드 하려면, 오라클의 공식 다운로드 페이지를 방문하라. 다음 그림에서처럼, 사용할 수 있는 다양한 JDK 패키지를 볼 수 있을 것이다.
Credit: Matthew Tyson
자바 SE 다운로드를 선택하기에 앞서, 다른 옵션들을 살펴보자. 여러 가지 자바 JDK들이 있다.
자바 표준 에디션 JDK를 다운로드 하라. 해당 옵션들은 다음 그림에 나와있다.
Credit: Matthew Tyson
자바 EE에 대해
주로 자바 기반 웹 애플리케이션에 관심이 있다면, 자바 EE JDK를 다운로드할 것이다. 자바 EE JDK에는 HTTP 요청 처리를 지원하는 자바 서버렛(Serverlet) 사양이 포함되어 있다. 모든 자바 EE JDK 구현은 자바 EE 애플리케이션을 구동하는 서버인 컨테이너(Container)도 필요로 한다. 글래스피시(Glassfish)는 오라클용 자바 EE 서버 참조 구현이다. 다른 인기있는 구현으로는 톰캣(Tomcat)과 제티(Jetty)가 있다.
JDK 설치
JDK 인스톨러(Installer, 설치 마법사)를 실행하면, 3가지 구성요소에 대한 선택사항이 주어진다. 개발 도구, 소스코드, 그리고 퍼블릭 JRE. 이 가운데 한 가지 또는 전체를 설치할 수 있다. 여기서는 기본(Default)을 선택한다.
"개발 도구" 옵션을 설치는 적절한 JDK를 제공한다. "소스코드" 설치에는 핵심(Core) 자바 API에 있는 퍼블릭 클래스들에 대한 소스가 포함된다. 이 옵션을 포함시키면 개발자는 앱을 구축할 때 소스코드를 참조할 수 있다. 세 번째 옵션인 "퍼블릭 JRE"는 JDK와 JRE가 별개의 객체임을 충분히 납득시킨다. 퍼블릭 JRE는 자바 프로그램을 실행하기 위해 다른 프로그램들이 사용할 수 있으며, JDK와는 별개로 설치될 수 있다.
여기서는 2가지 구성요소 모두를 설치하고 각각에 대해 기본 값을 사용한다. 이렇게 한다는 것은 JDK와 JRE가 사용 중인 운영체제의 기본 위치에 설치된다는 것을 의미한다. 윈도우에서는 다음 그림에서처럼 C:\Program Files\Java 이다.
Credit: Matthew Tyson
명령 줄에서 JDK 사용
JDK와 JRE 설치는 명령 줄에 java 명령어를 추가한다. 명령 셸을 실행하고 설치된 자바 버전을 알려주는 java –version을 입력함으로써 이를 확인할 수 있다(어떤 경우에는 시스템 경로에 변경사항을 반영하기 위해 시스템을 재 시작해야 할 수도 있다).
java 명령어가 있는 것은 좋다, 그런데 javac는 어떤가? 자바 파일을 컴파일하기 위해서는 이 JDK 요소가 필요하다.
javac 명령어
javac 명령어는 /jdk 디렉토리 안에 들어 있지만, 설치 중에 시스템 경로에 자동으로 추가되지는 않는다. javac를 설치할 수 있는 옵션을 행사하거나, 이 명령어를 포함하고 있는 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 컴파일러를 사용하라. 자바로 컴파일 된 코드를 바이트코드(Bytecode)라 부르며, .class 확장자가 붙는다.
자바 컴파일러의 약자인 javac 명령을 사용하게 될 것이다. 명령 셸에 명령어의 전체 경로를 입력하고, Intro.java 파일을 넘겨라. 필자의 시스템에서는 목록 2처럼 보인다.
목록 2. JDK를 사용해 컴파일하기
"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 파일은 패키지 된 자바 클래스 세트다. 일단 컴파일러가 .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
jar 실행
이제 해당 디렉토리에서 Intro.jar 파일을 볼 수 있을 것이다. 이를 클래스경로에 추가하고 다음과 같이 안에 있는 프로그램을 실행함으로써 .jar를 활용할 수 있다:
java -cp intro.jar Intro
-cp 스위치는 자바에게 해당 jar를 클래스경로에 추가하라고 지시한다. 이렇게 작은 프로그램에 대해서는 .jar 파일이 과한 것이지만, 프로그램의 크기가 늘어나고 써드파티 패키지에 의존해감에 따라 필수적이 된다.
사용 중인 IDE에서의 JDK
JDK 다운로드 페이지를 떠올려보면, 넷빈즈(Netbeans) IDE가 포함된 다운로드 옵션이 기억날 것이다. IDE 또는 통합 개발 환경(Integrated Development Environment)는 애플리케이션 개발을 위한 종합적인 도구 세트를 제공해주는 소프트웨어다. IDE를 코드 자동 완성과 포매팅 같은 개발 고유의 추가 기능과 함께, 파일 탐색기나 텍스트 편집기 같은 도구 세트를 가지고 있는 시각적 운영체제라고 생각하라.
자바 개발에서, IDE가 하고 있는 핵심 사항 가운데 하나는 개발자 대신 컴파일 작업을 관리하는 것이다. 즉, IDE가 백그라운드에서 자동으로 컴파일 과정을 실행하므로, 개발자가 이 작업을 계속해서 할 필요가 없다. IDE는 작업 과정에 따라 실시간 피드백을 제공해, 즉각적으로 코딩 오류를 잡아낸다.
자바용으로 강력한 IDE다 몇 가지 있다. 지금까지 명령 줄에서 JDK의 동작 원리를 보았으니, 이제는 이클립스 IDE에서 어떻게 동작하는지 짧게 살펴보자.
이클립스(Eclipse)와 JDK
이클립스 설치는 본 가이드의 범위 밖이지만, 간단한 프로세스다. 이클립스에는 다른 프로그램들과 마찬가지로 인스톨러가 포함되어 있으며, 여기에서 사용 중인 운영체제에 맞는 인스톨러를 찾을 수 있다.
이클립스가 설치되면, 메뉴 바에서 윈도우 메뉴 항목을 누르고 환경설정(preferences)을 선택하라.
환경설정 창 안에서, 자바 항목이 보일 것이다. 그것을 열면, 그 안에서 컴파일러 항목이 보인다. 이것을 클릭하면, JDK용 몇 가지 옵션이 나타난다. 다음 그림은 이클립스의 JDK 옵션 스냅샷을 보여준다.
Credit: Matthew Tyson
앞서 언급한 것처럼, 프로젝트에 맞는 JDK 버전을 선택해야 한다. 자세히 살펴보면, 개발자가 명령 줄에서 실행했던 것처럼 IDE가 JDK 컴파일러를 실행한다. 이클립스 IDE는 자체 JDK 인스턴스도 가지고 있다. IDE가 개발자 대신 JDK와 JRE를 관리해 일을 훨씬 수월하게 만들어준다.
이번 기사는 3가지 핵심 자바 플랫폼 구성요소를 소개하는 시리즈 중 두 번째다. JVM, JDK, 그리고 JRE. 이 시리즈의 다음 기사를 기대하라. editor@itworld.co.kr