Java 개발 환경부터 실행 원리까지: JDK, JVM, 컴파일 이해하기

Alchemist·2026년 10월 8일

KT AIVLE

목록 보기
75/130

Java를 시작할 때 가장 먼저 헷갈리는 것은 코드를 작성하는 일보다 설치와 실행이다. java와 javac는 무엇이 다르고, JDK를 설치했는데 왜 실행이 안 되는 걸까? 환경 구성과 실행 원리를 한 번에 정리해 보자.

Java 프로그램이 실행되는 과정

Java 소스 코드는 일반적으로 .java 파일에 작성한다. 컴파일러는 이 코드를 JVM이 해석하거나 실행할 수 있는 바이트코드로 바꾼다.

HelloApp.java ── javac ──> HelloApp.class ── JVM ──> 실행
    소스 코드               바이트코드              프로그램 동작
  • JDK(Java Development Kit): 컴파일러(javac), 실행 도구(java), 표준 라이브러리 등 개발에 필요한 도구의 묶음
  • JVM(Java Virtual Machine): 바이트코드를 실행하는 가상 머신
  • JRE(Java Runtime Environment): Java 애플리케이션 실행에 필요한 환경을 가리키는 개념. 현대 JDK 배포에서는 개발용 JDK 자체로 실행 환경을 마련하는 것이 일반적이다.

소스 파일을 바로 실행하는 명령인 java HelloApp.java도 JDK 11부터 지원된다. 내부에서 컴파일 과정이 처리되는 것이지 Java가 컴파일을 하지 않는다는 뜻은 아니다.

JDK 설치하기

처음 시작한다면 유지보수 기간이 긴 LTS JDK가 무난하다. 여기서는 JDK 25(LTS) 또는 프로젝트에서 지정한 LTS 버전을 기준으로 설명한다. 특정 버전을 요구하는 팀 프로젝트라면 그 요구사항을 먼저 따른다.

공식 배포처 중 하나인 Eclipse Temurin에서 운영체제에 맞는 JDK를 설치할 수 있다. Java 공식 학습 사이트에서도 설치와 실행 방법을 안내한다.

Windows

  1. JDK 설치 프로그램에서 Windows와 컴퓨터 아키텍처에 맞는 파일을 선택한다.
  2. 설치 과정에서 PATH 설정 옵션이 제공되면 활성화한다. 그렇지 않다면 JDK의 bin 경로를 PATH에 추가한다.
  3. 새 PowerShell 창을 열고 확인한다.
java -version
javac -version
where.exe java

java뿐 아니라 javac까지 인식되어야 소스 코드를 컴파일할 수 있다. where.exe java가 이전 설치 경로를 가리킨다면 PATH에 오래된 Java가 먼저 등록되어 있는지 살펴본다.

macOS와 Linux

운영체제용 JDK 설치 파일이나 배포판의 패키지 관리자를 이용한다. 설치 확인 명령은 같다.

java -version
javac -version

Ubuntu에서 배포판이 제공하는 OpenJDK를 설치하는 예시는 다음과 같다. 해당 버전의 패키지가 현재 Ubuntu 저장소에 있는 경우에만 실행한다.

sudo apt update
sudo apt install openjdk-25-jdk

일부 Ubuntu 릴리스에는 이 패키지가 없으므로 그런 경우 Temurin 배포 저장소 또는 공식 바이너리 설치 안내를 이용한다. 오래된 Java 7 PPA나 oracle-jdk7-installer, macOS의 시스템 Java 심볼릭 링크를 강제로 변경하는 절차는 따라 하지 않는 것이 좋다.

첫 프로그램 컴파일하기

예제 폴더에 HelloApp.java 파일을 만들자.

public class HelloApp {
    public static void main(String[] args) {
        System.out.println("Java 실행 성공!");
    }
}

터미널을 해당 폴더에서 열고 명령어를 실행한다.

javac HelloApp.java
java HelloApp
Java 실행 성공!

첫 번째 명령이 HelloApp.class를 만들고, 두 번째 명령이 클래스를 실행한다. java HelloApp에서 .class를 붙이지 않는 것에 주의하자.

간단한 단일 파일 프로그램은 다음처럼 실행해도 된다.

java HelloApp.java

main 메서드의 의미

  • public: 외부에서 접근할 수 있다.
  • static: 객체를 별도로 만들지 않고 호출할 수 있다.
  • void: 반환값이 없다.
  • String[] args: 실행 시 넘겨준 문자열 인자를 받는다.

다음 명령으로 프로그램에 인자를 전달할 수 있다.

java HelloApp one two

지금 예제는 args를 사용하지 않으므로 화면 출력은 그대로다. 나중에 args.length를 출력하도록 바꾸면 2를 확인할 수 있다.

IDE는 왜 사용할까?

메모장으로도 Java 파일을 작성할 수 있지만, 소스 파일이 많아지면 자동 완성, 리팩터링, 디버깅, 실행 설정 등이 필요하다. IntelliJ IDEA, Eclipse, VS Code(Java 확장) 등 중 하나를 선택하면 된다. 처음에는 IDE가 빌드 과정을 대신해 주더라도 javac와 java가 하는 일을 알아두는 편이 좋다.

자주 발생하는 오류

'javac'은(는) ... 명령이 아닙니다

JDK 설치가 누락되었거나 PATH에 JDK bin 디렉터리가 등록되지 않았을 수 있다. java -version만 정상이라고 해결된 것이 아니다.

Could not find or load main class HelloApp

파일을 컴파일한 위치와 실행 위치, 클래스 이름, 패키지 선언을 확인한다. 패키지를 붙였다면 이후 글에서 다룰 클래스 경로(classpath)도 중요하다.

class HelloApp is public, should be declared in a file named HelloApp.java

public 최상위 클래스 이름과 파일 이름을 일치시킨다. 대소문자도 구분한다.

소스 코드는 바꿨는데 결과는 예전 그대로다

java HelloApp는 기존의 .class를 실행하므로 javac HelloApp.java로 다시 컴파일해야 한다. 반면 java HelloApp.java는 소스 파일 실행 모드다.

핵심 정리

  • Java 소스 파일은 .java, 일반적인 컴파일 결과는 .class다.
  • JDK에는 개발 및 실행 도구가 포함되어 있다.
  • JVM은 Java 바이트코드를 실행한다.
  • javac는 컴파일, java는 실행을 담당한다.
  • JDK 11 이상은 단일 소스 파일 직접 실행도 가능하다.
  • 운영체제보다 사용할 JDK 버전과 PATH가 설치 문제 해결의 핵심이다.
  • IDE의 실행 버튼을 쓰더라도 컴파일과 실행 원리를 알고 있어야 한다.
profile
html_programming_language

0개의 댓글