본문으로 건너뛰기

안동민 개발노트

본문 시작

Java와 JDK 설치

Java 프로그램을 만들 때 필요한 JDK를 설치하고 터미널에서 java와 javac가 동작하는지 확인합니다.

Java를 처음 배운다면 프로그램을 쓰기 전에 두 가지가 필요합니다.

사람이 소스 코드를 작성할 편집기와 그 소스를 실행 가능한 형태로 바꿀 JDK입니다.

이 장은 프로그래밍 경험을 전제로 하지 않습니다.

JDK를 설치하고, 짧은 프로그램을 직접 컴파일하고, 오류를 읽고, 실행 인자를 받는 데까지 한 단계씩 진행합니다.

이번 장에서 자주 보는 용어는 다음과 같습니다.

소스 코드는 사람이 작성한 .java 파일, 컴파일은 소스를 JVM이 실행할 .class 파일로 바꾸는 과정, 터미널은 명령을 문자로 입력하는 프로그램입니다.

각 용어는 실제 명령을 실행하면서 다시 설명합니다.


Java와 JDK

Java는 프로그램을 작성하는 언어이면서 그 프로그램을 실행하는 환경의 이름입니다.

지금은 다음 구분만 기억하면 충분합니다.

  • .java 파일에는 사람이 읽고 수정할 소스 코드가 들어갑니다.
  • javac.java 파일을 컴파일하는 프로그램입니다.
  • java는 컴파일된 프로그램을 JVM에서 실행하는 프로그램입니다.
  • JDK(Java Development Kit)는 javac, java, 표준 라이브러리를 한데 묶은 개발 도구입니다.

JVM의 내부 구조와 JDK 배포판의 차이는 뒤에서 다룹니다.

첫 목표는 javajavac 두 명령이 같은 기능 버전 25를 출력하게 만드는 것입니다.


JDK 25 설치

JDK 25를 제공하는 배포판 하나를 선택해 설치합니다.

Eclipse Temurin, Azul Zulu, Amazon Corretto처럼 이름이 달라도 Java 25 규격을 구현한 JDK라면 이 교재의 기본 예제를 실행할 수 있습니다.

압축 파일을 직접 관리하는 방식보다 운영체제용 설치 프로그램을 이용하면 처음 설정하기 쉽습니다.

Windows 설치 프로그램에서는 다음 항목을 활성화합니다.

  1. JDK 25를 설치합니다.
  2. JAVA_HOME을 설정하는 항목이 있다면 활성화합니다.
  3. JDK의 bin 폴더를 PATH에 추가하는 항목을 활성화합니다.
  4. 설치가 끝나면 열려 있던 터미널을 닫고 새로 엽니다.

macOS나 Linux에서도 설치 뒤 새 터미널을 열어 아래 버전 명령을 확인합니다.

이 교재는 Windows PowerShell 명령을 먼저 제시하고, 명령이 다른 경우에만 Unix 계열 명령을 함께 적습니다.


터미널 열기와 버전 확인

터미널은 파일을 만들고 프로그램을 실행하는 명령을 입력하는 창입니다.

Windows에서는 시작 메뉴에서 PowerShell을 검색해 엽니다.

명령을 한 줄 입력하고 Enter를 누릅니다.

java -version
javac -version

설치 경로와 패치 번호는 컴퓨터마다 다르지만 두 출력 모두 기능 버전이 25여야 합니다.

출력 예
openjdk version "25.0.x" ...
javac 25.0.x

java -version은 실행 환경을, javac -version은 컴파일러를 확인합니다.

두 명령 중 하나를 찾지 못한다면 Java 코드의 문제가 아니라 설치나 PATH 설정의 문제입니다.

PowerShell에서 실제 선택된 파일은 다음처럼 확인합니다.

Get-Command java, javac | Select-Object Name, Source
where.exe java
where.exe javac

PATH는 명령 이름을 입력했을 때 실행 파일을 찾을 폴더 목록입니다.

위에서부터 탐색하므로 여러 JDK가 보이면 첫 번째 경로가 현재 선택입니다.

JAVA_HOME은 JDK 설치 위치를 가리키는 별도 환경 변수이며, java 명령이 언제나 이 값을 자동 선택하는 것은 아닙니다.

macOS·Linux에서는 다음 명령으로 같은 내용을 확인합니다.

command -v java
command -v javac
java -version
javac -version
JDK 25 명령 선택과 버전 판정 흐름

FLOWCHART · COMMAND RESOLUTION

설치보다 중요한 두 명령의 선택과 검증

설치 파일이 있다는 사실만으로는 충분하지 않다. 새 터미널이 java와 javac를 모두 찾고, 두 명령이 기능 버전 25를 보고해야 준비가 끝난다.

설치보다 중요한 두 명령의 선택과 검증 JDK 25 설치와 PATH 연결 뒤 새 터미널에서 java launcher와 javac compiler를 찾고, 두 기능 버전이 모두 25인지 판정해 누락 또는 경로 불일치를 조사하는 흐름이다. JDK 25 설치 · PATH 연결 새 터미널에서 환경 다시 읽기 java -version java · JVM launcher javac -version javac · compiler 두 명령을 모두 찾았나? Get-Command로 실제 선택 확인 명령을 찾지 못함 JDK 설치 · PATH 항목 확인 아니요 두 기능 버전이 모두 25인가? 선택 경로와 버전을 함께 기록 경로·버전이 다름 where.exe로 PATH 순서 조사 아니요 준비 완료 compiler와 runtime 명령을 함께 검증 PATH SELECTS SHELL COMMANDS · JAVA_HOME IS A SEPARATE POINTER
  1. JDK 25와 PATH 연결

    Java 25 JDK 하나를 설치하고 그 JDK의 bin 폴더를 PATH에 연결합니다. JAVA_HOME은 도구가 참고할 수 있는 별도 포인터입니다.

  2. 새 터미널 열기

    이미 열려 있던 터미널은 이전 환경을 유지할 수 있으므로 닫고 새로 엽니다.

  3. 두 명령의 실제 위치 확인

    Get-Command java, javac로 선택된 파일을 보고 where.exe로 다른 후보와 PATH 순서를 확인합니다.

  4. 서로 다른 역할 검증

    java는 JVM을 시작하는 launcher이고 javac는 소스를 class로 바꾸는 compiler입니다. 둘 다 발견되어야 합니다.

  5. 기능 버전 판정

    java -versionjavac -version이 모두 기능 버전 25를 보고하면 준비 완료입니다. 누락되면 설치·PATH를, 다르면 PATH 순서를 고칩니다.

JAVA_HOME 값만 바꿨다고 셸의 java 선택이 자동으로 바뀌는 것은 아니다.


학습 폴더 만들기

프로그램 파일을 한곳에 모을 작업 폴더를 만듭니다.

PowerShell에서 다음 명령을 차례로 실행합니다.

New-Item -ItemType Directory -Force java-board/src | Out-Null
New-Item -ItemType Directory -Force java-board/out | Out-Null
Set-Location java-board
Get-Location
Get-ChildItem
java-board/
├─ src/    # 직접 작성하는 .java 파일
└─ out/    # javac가 만드는 .class 파일

src는 편집 원본이고 out은 다시 만들 수 있는 결과물입니다.

앞으로 별도 안내가 없으면 java-board 폴더에서 명령을 실행합니다.

현재 위치가 다르면 같은 상대 경로를 입력해도 다른 파일을 찾으므로, 문제가 생기면 먼저 Get-Location을 확인합니다.

Java 학습 작업공간의 소스와 산출물 경계

ARCHITECTURE · WORKSPACE OWNERSHIP

사람이 보존하는 src와 도구가 다시 만드는 out

현재 작업 디렉터리가 상대 경로의 기준이 된다. 편집기는 src에 원본을 남기고, JDK 도구는 그 원본에서 out의 JVM bytecode를 다시 만든다.

사람이 보존하는 src와 도구가 다시 만드는 out 편집기가 java-board의 src 소스를 쓰고 터미널이 javac와 java를 호출하며, javac가 out의 class를 갱신하고 java와 JVM이 그 class를 읽는 소유 및 생성 경계다. java-board / CURRENT WORKING DIRECTORY javac -d out javac compiler READ .java · WRITE .class 터미널 · 명령 호출 경계 Get-Location = java-board/ 편집기 소스 원본 쓰기 src/*.java 사람이 편집 · 보존 out/*.class bytecode · 재생성 가능 java · JVM class 읽어 실행 EDITOR WRITES src · javac REBUILDS out · java LOADS class RELATIVE PATHS START AT THE CURRENT WORKING DIRECTORY
  1. 현재 위치가 경로의 기준

    Get-Locationjava-board를 가리킬 때 src/...out/... 상대 경로가 의도한 파일을 찾습니다.

  2. 편집기는 src에 씀

    src/*.java는 사람이 수정하고 보존하는 원본입니다.

  3. 터미널은 JDK 도구를 호출

    작업 폴더에서 javacjava 명령을 실행하되, 터미널 자체가 소스나 class를 만들지는 않습니다.

  4. javac는 out을 갱신

    javacsrc의 Java 소스를 읽어 out에 JVM bytecode인 .class를 만듭니다.

  5. java와 JVM은 class를 읽음

    java launcher가 JVM을 시작해 out의 class를 실행합니다. out은 소스와 같은 컴파일 명령으로 다시 만들 수 있습니다.

src는 정답 원본이고 out은 그 원본에서 다시 계산할 수 있는 시점별 산출물이다.


설치 문제를 구분하는 법

다음처럼 원인을 한 단계씩 좁힙니다.

증상먼저 확인할 것의미
java를 찾을 수 없음where.exe javaPATH에 실행 파일이 없음
java만 25가 아님where.exe java 순서예전 JDK가 먼저 선택됨
javac를 찾을 수 없음JDK 설치 여부실행 환경만 있고 개발 도구가 없을 수 있음
IDE와 터미널 버전이 다름IDE의 프로젝트 SDKIDE와 터미널은 설정이 별도임

설정을 바꾼 뒤에는 새 터미널을 열어 두 버전을 다시 확인합니다.

경로를 추측해 여러 항목을 한꺼번에 바꾸기보다 현재 선택 경로와 버전을 기록하고 하나씩 수정하는 편이 안전합니다.


연습 문제

새 터미널을 열고 다음 네 정보를 기록하세요.

  1. java -version의 기능 버전
  2. javac -version의 기능 버전
  3. Get-Command java가 보여 주는 경로
  4. Get-Location이 보여 주는 java-board 작업 폴더

두 기능 버전이 25이고 현재 폴더가 java-board라면 첫 프로그램을 만들 준비가 끝났습니다.

다음 문서에서 편집기로 5줄짜리 소스 파일을 저장합니다.