본문 바로가기

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 배포판의 차이는 뒤에서 다룹니다.

첫 목표는 java와 javac 두 명령이 같은 기능 버전 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

설치 뒤 java와 javac를 함께 확인한다

설치·새 터미널·두 명령 탐색·버전 판정과 각각의 실패 분기가 실제 준비 절차입니다. 본문의 PATH 선택 확인을 같은 판정 영역에서 순서대로 따라가며 판정 과정을 확인할 수 있습니다.

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 두 명령을 모두 찾았나? 명령 경로를 함께 확인 명령을 찾지 못함 JDK 설치 · PATH 항목 확인 아니요 예 둘 다 기능 버전 25인가? 선택 경로와 버전을 함께 기록 경로·버전이 다름 where.exe로 PATH 순서 조사 아니요 준비 완료 컴파일러와 실행기를 함께 검증 예 PATH는 명령 경로, JAVA_HOME은 별도 환경 변수입니다.
설치 뒤 java와 javac를 함께 확인한다 두 명령의 탐색·버전 판정, 두 실패 결과와 준비 완료, 명시 예·아니요 방향. 상세 문구와 명령은 바로 아래 원래 설명에서 확인합니다. 아니요 예 아니요 예 JDK 25 설치 PATH 연결 새 터미널 열기 java -version JVM 실행기 javac -version 컴파일러 두 명령을 모두 찾았나? 명령을 찾지 못함 JDK 설치와 PATH 확인 고친 뒤 두 명령 다시 확인 둘 다 기능 버전 25인가? 경로·버전이 다름 where.exe 확인 PATH 순서·버전 조사 준비 완료 실행기·컴파일러 검증
  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 -version과 javac -version이 모두 기능 버전 25를 보고하면 준비 완료입니다. 누락되면 설치·PATH를, 다르면 PATH 순서를 고칩니다.

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

이 예의 조건

  • 설치 후 새 터미널에서 확인하는 절차이며 이 조사에서 설치/명령 실행을 수행한 결과가 아니다.
관계도의 보충 설명
원 도표의 설명과 주석
구분내용
전체 읽기 정보설치 뒤 java와 javac를 함께 확인한다 JDK 25 명령 선택과 버전 판정 흐름 FLOWCHART · COMMAND RESOLUTION 설치보다 중요한 두 명령의 선택과 검증 설치 파일이 있다는 사실만으로는 충분하지 않다. 새 터미널이 java와 javac를 모두 찾고, 두 명령이 기능 버전 25를 보고해야 준비가 끝난다. JDK 25와 PATH 연결 Java 25 JDK 하나를 설치하고 그 JDK의 bin 폴더를 PATH 에 연결합니다. JAVA_HOME 은 도구가 참고할 수 있는 별도 포인터입니다. 새 터미널 열기 이미 열려 있던 터미널은 이전 환경을 유지할 수 있으므로 닫고 새로 엽니다. 두 명령의 실제 위치 확인 Get-Command java, javac 로 선택된 파일을 보고 where.exe 로 다른 후보와 PATH 순서를 확인합니다. 서로 다른 역할 검증 java 는 JVM을 시작하는 launcher이고 javac 는 소스를 class로 바꾸는 compiler입니다. 둘 다 발견되어야 합니다. 기능 버전 판정 java -version 과 javac -version 이 모두 기능 버전 25를 보고하면 준비 완료입니다. 누락되면 설치·PATH를, 다르면 PATH 순서를 고칩니다. JAVA_HOME 값만 바꿨다고 셸의 java 선택이 자동으로 바뀌는 것은 아니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
환경 읽기

JDK 설치와 PATH 연결 뒤 새 터미널을 엽니다.

  • 목표 버전: 25
  • 환경: 새 터미널의 PATH
  • 기존 터미널에 남은 환경 대신 갱신한 명령 탐색 경로를 사용한다.
두 도구 탐색

java와 javac를 각각 찾고 기능 버전을 읽습니다.

  • java: java -version
  • javac: javac -version
  • 실행기만 있어도 컴파일러 준비까지 확인된 것은 아니다.
준비 판정

두 명령과 버전을 함께 판정합니다.

  • 정상 조건: 두 기능 버전 모두 25
  • 실패 조사: 누락은 설치/PATH, 불일치는 where.exe
  • 두 도구가 같은 기준을 만족할 때 학습 실행 준비를 완료한다.

설치 뒤 java와 javac를 함께 확인한다

설치·새 터미널·두 명령 탐색·버전 판정과 각각의 실패 분기가 실제 준비 절차입니다. 본문의 PATH 선택 확인을 같은 판정 영역에서 순서대로 따라가며 판정 과정을 확인할 수 있습니다.

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 두 명령을 모두 찾았나? 명령 경로를 함께 확인 명령을 찾지 못함 JDK 설치 · PATH 항목 확인 아니요 예 둘 다 기능 버전 25인가? 선택 경로와 버전을 함께 기록 경로·버전이 다름 where.exe로 PATH 순서 조사 아니요 준비 완료 컴파일러와 실행기를 함께 검증 예 PATH는 명령 경로, JAVA_HOME은 별도 환경 변수입니다.
설치 뒤 java와 javac를 함께 확인한다 두 명령의 탐색·버전 판정, 두 실패 결과와 준비 완료, 명시 예·아니요 방향. 상세 문구와 명령은 바로 아래 원래 설명에서 확인합니다. 아니요 예 아니요 예 JDK 25 설치 PATH 연결 새 터미널 열기 java -version JVM 실행기 javac -version 컴파일러 두 명령을 모두 찾았나? 명령을 찾지 못함 JDK 설치와 PATH 확인 고친 뒤 두 명령 다시 확인 둘 다 기능 버전 25인가? 경로·버전이 다름 where.exe 확인 PATH 순서·버전 조사 준비 완료 실행기·컴파일러 검증
  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 -version과 javac -version이 모두 기능 버전 25를 보고하면 준비 완료입니다. 누락되면 설치·PATH를, 다르면 PATH 순서를 고칩니다.

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

이 예의 조건

  • 설치 후 새 터미널에서 확인하는 절차이며 이 조사에서 설치/명령 실행을 수행한 결과가 아니다.

관계도의 보충 설명

원 도표의 설명과 주석
구분내용
전체 읽기 정보설치 뒤 java와 javac를 함께 확인한다 JDK 25 명령 선택과 버전 판정 흐름 FLOWCHART · COMMAND RESOLUTION 설치보다 중요한 두 명령의 선택과 검증 설치 파일이 있다는 사실만으로는 충분하지 않다. 새 터미널이 java와 javac를 모두 찾고, 두 명령이 기능 버전 25를 보고해야 준비가 끝난다. JDK 25와 PATH 연결 Java 25 JDK 하나를 설치하고 그 JDK의 bin 폴더를 PATH 에 연결합니다. JAVA_HOME 은 도구가 참고할 수 있는 별도 포인터입니다. 새 터미널 열기 이미 열려 있던 터미널은 이전 환경을 유지할 수 있으므로 닫고 새로 엽니다. 두 명령의 실제 위치 확인 Get-Command java, javac 로 선택된 파일을 보고 where.exe 로 다른 후보와 PATH 순서를 확인합니다. 서로 다른 역할 검증 java 는 JVM을 시작하는 launcher이고 javac 는 소스를 class로 바꾸는 compiler입니다. 둘 다 발견되어야 합니다. 기능 버전 판정 java -version 과 javac -version 이 모두 기능 버전 25를 보고하면 준비 완료입니다. 누락되면 설치·PATH를, 다르면 PATH 순서를 고칩니다. JAVA_HOME 값만 바꿨다고 셸의 java 선택이 자동으로 바뀌는 것은 아니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
환경 읽기

JDK 설치와 PATH 연결 뒤 새 터미널을 엽니다.

  • 목표 버전: 25
  • 환경: 새 터미널의 PATH
  • 기존 터미널에 남은 환경 대신 갱신한 명령 탐색 경로를 사용한다.
두 도구 탐색

java와 javac를 각각 찾고 기능 버전을 읽습니다.

  • java: java -version
  • javac: javac -version
  • 실행기만 있어도 컴파일러 준비까지 확인된 것은 아니다.
준비 판정

두 명령과 버전을 함께 판정합니다.

  • 정상 조건: 두 기능 버전 모두 25
  • 실패 조사: 누락은 설치/PATH, 불일치는 where.exe
  • 두 도구가 같은 기준을 만족할 때 학습 실행 준비를 완료한다.

학습 폴더 만들기

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

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은 다시 만들 수 있는 결과물입니다.

macOS·Linux에서는 같은 두 폴더를 다음처럼 만듭니다.

mkdir -p java-board/src java-board/out
cd java-board
pwd
ls

두 방식 모두 java-board 안에 들어온 상태에서 다음 절을 시작합니다. src/Hello.java라는 상대 경로는 이 폴더에서 볼 때의 위치입니다.

앞으로 별도 안내가 없으면 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 / 현재 작업 폴더 javac -d out javac compiler 소스를 읽어 class 생성 터미널 · 명령 호출 경계 현재 위치: java-board 편집기 소스 원본 쓰기 src/*.java 사람이 편집 · 보존 out/*.class 다시 만드는 실행 파일 java · JVM class 읽어 실행 편집 → 컴파일 → 실행: 각 단계의 입력과 결과를 구분합니다.
사람이 보존하는 src와 도구가 다시 만드는 out java-board 안의 src와 out 두 파일 영역; 편집기·컴파일러·실행기와 두 터미널 호출 경로. 상세 문구와 명령은 바로 아래 원래 설명에서 확인합니다. java-board 편집기 src 쓰기 소스 보존 터미널 명령 호출 현재 폴더 java-board src/*.java 사람이 편집 원본 보존 javac 소스 읽기 -d out class 생성 out/ *.class 컴파일 결과 재생성 가능 java · JVM class 읽기 프로그램 실행
  1. 현재 위치가 경로의 기준

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

  2. 편집기는 src에 씀

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

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

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

  4. javac는 out을 갱신

    javac가 src의 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줄짜리 소스 파일을 저장합니다.