JDK Development Kit 로고
JDK를 준비해보자

자바(Java)나 코틀린(Kotlin)으로 프로그램을 개발하거나 스프링(Spring) 또는 스프링 부트(Spring Boot)와 같은 웹 프레임워크(framework)를 이용하여 프로그램을 만들려면 먼저 개발 환경을 구축해야 합니다. 자바 기반 프로그램 개발 시 기본적으로 필요한 준비물은 다음과 같습니다.

  • (1) 자바 개발 키트(Java Development Kit, JDK)
  • (2) 통합 개발 환경(Integrated Development Environment, IDE): 이클립스(Eclipse), STS, 인텔리제이(IntelliJ) 등

이번 시간에는 JDK를 준비하는 법을 알아보겠습니다.

IDE
코드를 작성하는데 필요한 텍스트 편집기(text editor), 컴파일(compiling) 및 배포(deployment) 시 사용하는 명령 프롬프트(cmd), 디버깅(debugging) 도구 등 개발할 때 필요한 여러 작업 환경을 하나로 통합한 소프트웨어

JDK 개요

정의

JDK란 무엇일까요? JDK는 자바 기반[1]의 소프트웨어를 개발하고 실행하는 데 필요한 도구들로 이루어진 소프트웨어 패키지입니다. 프로그램을 개발할 때는 라이브러리(library)와 컴파일러(compiler), 그리고 런타임(runtime environment)과 같은 도구들이 필요합니다. JDK는 이러한 도구들을 한 곳에 모아놓은 종합 개발 키트입니다.

라이브러리
자주 사용하는 코드를 모듈(modules)과 패키지(packages)로 만들어 놓은 도구 모음
컴파일러
사람이 작성한 코드를 컴퓨터가 이해할 수 있는 언어에 가까운 코드로 번역해 주는 도구
런타임
컴파일된 작업물을 실제로 구동해 주는 실행 환경

구성 요소

JDK는 다음과 같은 요소로 이루어져 있습니다.

  • 자바 컴파일러(compiler): javac.exe
  • 자바 런타임 환경(Java Runtime Environment, JRE): 자바 가상 머신(Java Virtual Machine, JVM), JIT 컴파일러(JIT compiler), 가비지 콜렉터(garbage collector), 로더(loader), 보안 도구 등
  • 자바 라이브러리
  • 디버거(debugger)

자바 컴파일러

컴파일러는 사람이 작성한 고수준(high-level language)의 언어를 컴퓨터가 이해할 수 있는 저수준(low-level language)에 가까운 언어로 번역해 주는 프로그램입니다. 자바에서는 javac.exe라는 컴파일러가 자바 소스 코드 파일(.java)을 읽어 바이트코드(Bytecode) 파일(.class)로 변환해 줍니다. 여기서 고수준/저수준 언어, 기계어 등 용어에 대한 자세한 설명은 프로그래밍 언어 종류와 언어별 특징을 참조해 주세요.

바이트코드는 JVM이 읽을 수 있는 중간 언어입니다. 자바 컴파일러가 자바 소스 코드를 변환할 때 생성하는 각 명령어(바이트코드)의 크기가 1바이트여서 바이트코드라는 이름이 붙여졌습니다. 바이트코드는 아직 컴퓨터가 읽을 수 없습니다. 바이트코드는 이진 코드(binary code)로 되어있지만, 컴퓨터의 하드웨어가 해석할 수 있는 기계어(machine language)는 아닙니다.

왜 자바 파일을 컴퓨터가 이해할 수 있는 이진 코드로 바로 변환하지 않고, 중간 언어로 번역하는 과정을 거치는 것일까요? 자바 애플리케이션을 컴퓨터의 기종이나 운영체제 상관없이 사용하게 하기 위해서입니다. 일반 애플리케이션은 운영체제 바로 위에서 실행됩니다. 그래서 운영체제에 종속적입니다. 그 프로그램을 다른 운영체제에서 실행하려면 실행하려는 운영체제에 맞게 새로 변경해야 합니다.

반면, 바이트코드는 운영체제가 아니라 JVM 위에서 실행됩니다. JVM은 자바 애플리케이션과 운영체제 사이에서 인터페이스로 존재하면서, 자바 컴파일러가 컴파일한 바이트코드를 각 컴퓨터 및 운영체제에 특화된 언어로 번역해 줍니다. JVM이 바이트코드라는 일종의 플랫폼 공용어를 각 플랫폼 세상이 이해할 수 있는 언어로 바꿔주는 것입니다.

따라서, JVM이 설치되어 있기만 하다면 어떤 컴퓨터나 운영체제에서든 자바 애플리케이션을 실행할 수 있게 됩니다. 운영체제와 맞붙어 있는 JVM은 플랫폼에 의존적이지만, 자바 애플리케이션은 JVM이라는 인터페이스 덕분에 플랫폼에 독립적으로 된 것입니다. "Write Once, Run Anywhere"라는 자바의 핵심 슬로건이 바로 여기에서 나왔습니다. 그럼 JVM은 어떻게 바이트코드를 각 플랫폼에 적합한 언어로 변환할 수 있는 것일까요? JRE가 이러한 작업을 돕습니다.

자바 런타임 환경(JRE)

JRE는 자바 애플리케이션을 실행하는 데 필요한 전반적인 환경을 제공합니다. JRE는 컴파일된 바이트코드가 다시 플랫폼에 특화된 언어로 번역 및 실행되는 작업이 진행되는 곳입니다. 바이트코드는 다음 변환 과정을 거칩니다.

먼저, 자바 런처(java.exe)는 JVM을 구동시킵니다. 이 작업은 cmd에 java [.class 파일명]을 입력하는 것과 같습니다. JVM은 자바 바이트코드(.class 파일)를 로드하고, 필요한 경우 보안 확인 과정을 거칩니다. 그리고 JRE의 JIT(Just-In-Time) 컴파일러는 로드된 바이트코드를 기계어로 변환합니다. 이 변환 과정은 실시간으로 이루어지며, 변환된 코드는 캐시에 저장되어 재사용될 수 있습니다.

개발 과정

JDK는 Java Community Process(JCP) 프로그램의 전 세계 구성원들이 국제적으로 표준화하고 승인한 자바 기술 명세서(technology specifications)를 기반으로 개발됩니다. JCP는 자바 기술에 관한 의견을 공유하고 더 나은 기술을 개발하기 위해 만들어진 자바 커뮤니티입니다. 전 세계의 JDK 공급자들은 JCP가 정의한 명세서에 따라 각 회사에 적합한 JDK를 개발하고 사용자에게 제공합니다. 특정 회사가 개발한 JDK에는 그 회사의 이름을 붙입니다. 예를 들면, 오라클사가 만든 JDK는 오라클 JDK(Oracle JDK)입니다.

JDK 공급자들이 JDK를 개발할 때는 어떤 샘플 JDK를 참조해서 만듭니다. 자바 기술 명세서를 실제로 구현한 예시 JDK를 바탕으로 각 회사에 적합한 JDK를 만드는 것입니다. 이 프로토타입(prototype)의 JDK가 바로 OpenJDK(Open Java Development Kit) 입니다.

OpenJDK는 자바 스탠다드 에디션(Java Standard Edtion, Java SE)의 공식 참조 구현(reference implementation)입니다. 오라클을 포함해 OpenJDK 커뮤니티 구성원들과 Red Hat, Azul Systems, IBM, Apple 등의 국제적인 IT 기업은 OpenJDK 개발에 참여합니다. 자바 10부터는 OpenJDK 대신 JDK Project라는 이름으로 OpenJDK 버전의 흐름을 이어가고 있습니다.

참조 구현(reference implementation)
다른 사람들이 특정 하드웨어 또는 소프트웨어를 구현하는 것을 돕기 위해 제공하는 샘플 프로그램

종류

JDK에는 유료 버전과 무료 버전이 있습니다. 유료 JDK를 사용하려면 JDK 라이브러리에 대한 라이선스 사용료를 JDK 공급자에게 지급해야 합니다. 오라클의 장기 지원 서비스(Long Term Support, LTS) 버전의 JDK가 대표적인 유료 JDK입니다. LTS가 붙은 OracleJDK는 OpenJDK에 비해 호환성과 안정성이 중요한 기업 고객에게 더 나은 선택지를 제공합니다.

무료 JDK는 오픈 소스 기반의 JDK입니다. 누구든 가져가서 자유롭게 사용할 수 있습니다. 무료 JDK에는 이클립스 어댑티움(Eclipse Adoptium), 아마존 코레토(Amazon Corretto) 등이 있습니다. 뉴렐릭(New Relic)이 발표한 '2023년 자바 생태계 현황' 보고서에 따르면, 2023년을 기준으로 시장 점유율이 가장 높은 JDK는 아마존의 코레토였습니다. 코레토는 전체 JDK 중 약 31%를 차지했습니다. 이어 오라클JDK가 29%, 이클립스 어답티움이 12%, 레드햇(Red Hat) 10.5%, 아줄 시스템(Azul Systems) 줄루(Zulu)가 5.6%로 나타났습니다. 더 많은 JDK의 종류와 각 JDK를 제공하는 JDK 공급자의 리스트는 위키피디아 OpenJDK 리스트를 참조해 주세요.

지금까지 JDK의 정의와 JDK의 구성 요소, JDK의 개발 과정 및 JDK의 종류를 알아보았습니다. 그러면 JDK를 다운로드하고 환경 설정하는 방법을 알아보겠습니다.

다운로드 및 설치하기

'2023년 자바 생태계 현황' 보고서에 따르면 2023년을 기준으로 가장 많이 쓰이는 자바 LTS 버전은 Java 11입니다. Java 11(JDK 11)은 현시점에서 사용되고 있는 전체 버전 중 약 56%를 차지했습니다. 이어 Java 8(JDK 8)이 33%, Java 17(JDK 17)이 9% 순으로 높았습니다. 이 글에서는 Java 11과 Java8 버전의 JDK를 설치해 보겠습니다. 설치할 JDK의 종류는 아래와 같습니다.

  • 오라클(Oracle) JDK: Java 11/JDK 11 버전
  • 이클립스(Eclipse) 어답티움(Adoptium) JDK: Java 11/JDK 11 버전
  • 아줄 시스템(Azul Systems) 줄루(Zulu) JDK: Java 8/JDK 1.8 버전
  • OpenJDK
Java8, Java11 등 자바 다음에 나오는 숫자는 자바 언어의 스펙입니다. 숫자가 높아질수록 최근에 나온 버전입니다. 버전 정보로 1.3, 1.5 등 소수점으로 표기했지만, 자바 5부터는 마케팅 목적으로 정수를 사용하기 시작했습니다. 자바 8, 자바 8.0, 자바 1.8은 모두 같은 버전을 의미합니다. 예를 들어, JDK 11은 자바 SE 11 또는 줄여서 자바 11이라고 부르기도 합니다.

오라클 JDK

먼저 오라클의 JDK11을 다운로드해 보겠습니다. 오라클JDK의 다운로드 주소는 다음과 같습니다.

https://www.oracle.com/java/technologies/downloads/

화면에서 스크롤을 내리면 아래와 같이 Java 11이라고 표시된 부분이 나오는데, 여기서 Java 11을 클릭하시면 됩니다. 사용하고 있는 운영체제에 맞는 JDK 버전을 다운로드합니다. 여기서는 윈도우(Windows) 버전을 다운로드해 보겠습니다.

오라클 JDK 설치 공식 홈페이지
오라클 JDK 설치 공식 홈페이지  - Snug Archive

파일을 누르면 다음과 같이 오라클의 정책에 동의를 요청하는 창이 나옵니다. 체크 버튼을 클릭해서 동의를 해줍니다.

오라클 JDK 사용 동의하기
오라클 JDK 사용 동의하기  - Snug Archive

검정색 다운로드 버튼을 클릭하면 오라클의 로그인 화면이 나타납니다.

오라클 로그인 웹페이지
오라클 로그인 웹페이지  - Snug Archive

오라클 JDK를 사용하려면 회원가입이 필요합니다. 계정을 생성하고 로그인하신 뒤 다운로드를 이어가면 됩니다. 다운로드 시 기본 설정은 유지하면 됩니다.

어답티움

이클립스 어답티움 공식 홈페이지에 들어가면 아래와 같이 버전을 선택할 수 있습니다. 사용하고 계시는 운영체제에 맞는 버전을 골라 다운로드합니다. 여기서는 11-LTS 윈도우 .msi버전을 다운로드해 보겠습니다.

어답티움 JDK 설치 웹페이지
어답티움 JDK 설치 웹페이지  - Snug Archive

설치를 시작하면 맞춤형 설정(Custom Setup)이 나타납니다. 여기서 다음과 같이 Location 부분의 Browse를 클릭합니다. Location 옵션은 JDK를 설치할 경로를 지정하는 것입니다. JDK를 설치할 경로를 입력하고, JDK with Hotspot 리스트의 3번째 항목 'Set JAVA_HOME variable'을 선택해 줍니다. 이 옵션은 설치하는 JDK의 폴더를 JAVA_HOME이라는 변수명으로 시스템 환경변수에 등록하겠다는 의미입니다.

어답티움 맞춤형 설정(Custom Setup)
어답티움 맞춤형 설정(Custom Setup)  - Snug Archive

JAVA_HOME은 JDK가 설치된 디렉토리의 경로를 지정하는 고정된 이름입니다. 톰캣(tomcat)과 같은 웹 애플리케이션 서버(web application server, WAS) 등 JDK를 사용하는 프로그램은 JDK 폴더의 경로가 JAVA_HOME이라는 이름으로 등록되어 있어야 실행될 수 있습니다. 환경변수를 직접 등록하거나 수정하고 싶은 분들은 아래 환경변수 설정 부분을 참조해 주세요. 이후 다음(Next)과 설치하기(Install) 버튼을 누르고 설치를 완료하면 됩니다.

Zulu

Zulu는 아줄 시스템 공식 홈페이지에서 다운로드할 수 있습니다. 이번에는 JDK 1.8 버전을 설치하겠습니다. 공식 홈페이지 들어가서 다음과 같이 사용하고 계시는 운영체제에 맞는 버전을 설치해 주세요. 다운로드한 파일을 설치 마법사로 실행할 때는 기본 설정을 그대로 유지하면 됩니다.

Zulu JDK 설치하기
Zulu JDK 설치하기  - Snug Archive

OpenJDK

OpenJDK는 OpenJDK 공식 홈페이지 또는 OpenJDK 깃허브에서 다운로드할 수 있습니다. JDK 다운로드를 완료했다면, 다음은 환경변수(environment variable)를 설정할 차례입니다.

환경변수 설정하기

목적

환경변수를 설정하는 이유는 파일을 명령 프롬프트(cmd)에서 현재 디렉토리의 위치와 관계없이 어디서든 실행하기 위해서입니다. 실행하려는 파일(.exe)이 위치한 경로를 환경변수에 미리 등록해 두면, cmd가 명령을 실행파일의 이름으로 인식할 수 있게 됩니다. 예를 들어, 다음과 같이 명령을 cmd에 입력합니다.

bash
javac

이 명령은 javac.exe 파일을 실행하라는 의미입니다. 이 명령을 javac.exe 파일이 위치한 폴더에서 실행하면 javac.exe 파일이 정상적으로 실행됩니다. 운영체제가 cmd에서 javac를 실행파일의 이름으로 인식하기 때문입니다.

그러나 환경변수에 파일 경로를 등록하지 않은 채로, 해당 파일이 위치하지 않은 디렉토리에서 위와 같은 명령을 실행하면 다음과 같은 오류가 발생합니다.

bash
'javac'() 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

이 오류는 운영체제가 javac를 실행파일의 이름으로 인식하지 못하기 때문에 발생합니다. 운영체제가 cmd에서 파일을 실행하려고 할 때는 PATH 환경변수에 등록된 경로를 순차적으로 검색하여 실행파일을 찾습니다. 그런데 PATH 환경변수에 해당 파일이 위치한 폴더의 경로를 등록하지 않아 해당 파일을 읽을 수 없는 것입니다.

환경변수를 등록하지 않으면 자바 파일을 컴파일하고 실행할 때마다 매번 bin 폴더로 이동해야 합니다. cmd를 매번 켤 때마다 자바 프로그램을 개발하는 데 필요한 실행파일이 들어있는 디렉토리로 경로를 변경해야 하는 것입니다. 반면, PATH 환경변수에 실행하려는 파일의 경로를 등록해 놓으면, JDK를 사용하는 IDE가 JDK를 올바로 인식할 수 있게 됩니다. 따라서, 환경변수에 JDK의 경로를 등록하는 것이 좋습니다. 그러면 환경변수는 어떻게 등록할까요?

등록 방법

환경변수를 등록하는 방법에는 GUI를 이용하는 법과 cmd를 이용하는 법이 있습니다. 여기서는 윈도우를 기준으로, path 환경변수에 javac.exe 파일이 위치한 폴더의 경로를 등록하는 법을 알아보겠습니다.

GUI

GUI에서 환경변수 설정으로 이동하는 경로는 다음과 같습니다(윈도우 11 기준).

  • [시스템] - [정보] - [고급 시스템 설정] - [시스템 속성의 환경변수] - [새로 만들기]
  • 윈도우 탐색기의 내 PC에서 오른쪽 버튼 클릭 - [속성] - [고급 시스템 설정] - [시스템 속성의 환경변수] - [새로 만들기]
시스템 환경변수 설정하기
시스템 환경변수 설정하기  - Snug Archive

환경변수에는 사용자 변수와 시스템 변수가 있습니다. 사용자 변수는 현재 로그인한 사용자에게만 적용됩니다. 설정한 환경변수가 모든 사용자에게 적용되도록 하고 싶으면 시스템 변수를 사용합니다. 여기서는 시스템 변수에 등록하겠습니다.

예를 들어, 다운로드한 JDK 폴더의 이름이 jdk-11이고 해당 폴더가 C드라이브의 \Program Files\Java에 있다면, 자바로 프로그램을 개발하는 데 필요한 주요 실행파일이 위치한 C:\Program Files\Java\jdk-11\bin 경로를 PATH 환경변수에 등록해 줍니다. 만일, JAVA_HOME이라는 변수에 C:\Program Files\Java\jdk-11와 같이 JDK의 폴더 경로가 등록되어 있다면, PATH 환경변수에는 %JAVA_HOME%\bin으로 입력하면 됩니다.

컴퓨터에 여러 개의 JDK가 있다면, 우선순위로 사용할 JDK의 경로를 PATH 환경변수의 위쪽에 배치하는 것이 좋습니다. cmd에서 실행파일명을 입력하면, cmd에서는 PATH 환경변수 목록의 가장 상단부터 해당 파일을 찾습니다. 사용하려는 버전의 파일 경로가 이전 버전의 파일 경로보다 위에 있어야 원하는 파일을 실행할 수 있습니다.

cmd

cmd에서 직접 환경변수를 등록할 수도 있습니다. 명령어는 다음과 같습니다.

  • set: 현재 명령 프롬프트에서만 사용할 환경변수 등록
  • setx -m: 영구적으로 사용할 환경변수 등록
  • UserPath: 사용자 변수 등록
  • SystemPath: 시스템 변수 등록

예를 들어, cmd에서 영구적으로 사용할 시스템 변수를 등록하고 싶다면 아래 코드를 이용하면 됩니다.

shell
setx SystemPath "C:\Users\JDK-19\bin" -m

확인하기

환경변수 저장 여부

PATH 환경변수에 등록을 완료했다면 실제로 잘 반영되었는지 확인해 보겠습니다. 아래와 같이 PATH 환경변수 목록을 클릭하고, 입력한 경로가 잘 나타난다면 환경변수에 잘 등록된 것입니다.

PATH 환경변수에 JDK 폴더 경로 등록 완료
PATH 환경변수에 JDK 폴더 경로 등록 완료  - Snug Archive

cmd에서도 확인할 수 있습니다. cmd에서 path 명령을 입력했을 때 등록한 경로가 출력되면 환경변수의 값이 잘 저장된 것입니다. cmd에 path를 입력하면 PATH 환경변수에 등록된 모든 경로를 확인할 수 있습니다. 만일 등록한 경로가 보이지 않는다면 명령 프롬프트를 다시 실행하면 됩니다. set 명령어를 입력하면 모든 환경변수의 목록을 출력할 수 있습니다.

JDK 버전

다운로드한 JDK의 버전을 알고 싶다면 cmd에서 java -version을 입력하면 됩니다.

bash
java -version

다음과 같이 JDK의 버전이 출력되면 JDK가 잘 설치된 것입니다.

명령 프롬프트에서 설치한 JDK 버전 확인하기
명령 프롬프트에서 설치한 JDK 버전 확인하기  - Snug Archive

자바 컴파일러 버전

javac -version을 입력하면 설치한 javac 컴파일러 버전을 확인할 수 있습니다.

bash
javac -version

지금까지 JDK란 무엇인지 JDK의 정의와 개발 과정 및 JDK의 종류를 살펴보고, JDK의 경로를 환경변수에 등록하는 법을 알아보았습니다. JDK 다음으로 필요한 두 번째 도구는 IDE입니다. IDE 없이 텍스트 에디터(text editor)만으로도 개발할 수 있지만, 자바와 같이 컴파일이 필요한 언어는 IDE를 사용하면 훨씬 편리합니다. IDE를 사용하지 않고 cmd에서 자바 파일을 컴파일하는 자세한 방법은 cmd에서 자바 파일 컴파일하고 실행하기를 참조해 주세요.

자바/코틀린 프로그램을 개발할 때 사용할 수 있는 IDE에는 대표적으로 이클립스(Eclipse), STS, 인텔리제이(IntelliJ)가 있습니다. 각 IDE는 장단점이 있습니다. 스프링을 이용한 웹 프로젝트를 할 때는 STS3를 사용하면 편리합니다. STS3는 기본 이클립스에 스프링 플러그인이 결합한 IDE입니다. 기본 이클립스에 스프링 플러그인을 다운로드하여 사용할 수도 있지만 설치 시 오류가 발생할 수 있습니다. 스프링 부트를 이용한 웹 프로젝트는 STS4 또는 인텔리제이 커뮤니티(Community) 버전, 인텔리제이 Ultimate 버전을 사용할 수 있습니다. 인텔리제이 커뮤니티 버전은 무료이고, Ultimate 버전은 유료입니다. 각 IDE의 설정 방법은 다음과 같습니다.

전 세계 개발자들이 사용하는 다양한 종류의 IDE를 알고 싶다면 통합 개발 환경(IDE), 텍스트 에디터 인기 순위 (2022년)를 참조해 주세요.

참고 문헌


  1. 여기서 자바 기반의 소프트웨어란 자바 언어로 작성된 소프트웨어와 코틀린으로 작성된 소프트웨어 모두를 포함합니다. 코틀린은 자바와 100% 호환됩니다.
...

©2023 Snug Archive. All rights reserved.

Contact me at snugarchive@gmail.com.