티스토리 뷰

현대 소프트웨어 생태계에서 자바(Java)는 단순한 언어를 넘어 거대한 인프라입니다. 클라우드 네이티브 환경부터 고성능 백엔드 시스템까지, 자바의 안정성은 수많은 기업의 선택을 받았습니다. 하지만 초심자에게 가장 높은 벽은 코드 작성이 아닌 **'환경 구축'**인 경우가 많습니다. "내 PC에서는 왜 안 되지?"라는 의문을 해소하고, 견고한 개발 환경을 구축하는 방법을 심도 있게 다뤄보겠습니다.
JDK, JRE, JVM: 왜 설치해야 할까?
자바를 배우기 시작하면 가장 먼저 마주치는 약어들이 있습니다. 이를 이해하는 것은 자동차를 운전하기 전 엔진의 구동 원리를 아는 것과 같습니다.
- JVM (Java Virtual Machine): 자바 프로그램이 실행되는 가상의 엔진입니다. "Write Once, Run Anywhere"라는 철학을 실현하며, 운영체제에 상관없이 동일한 코드가 작동하게 합니다.
- JRE (Java Runtime Environment): JVM을 포함하여 자바 프로그램을 실행하는 데 필요한 라이브러리 집합입니다.
- JDK (Java Development Kit): JRE에 **컴파일러(javac)**와 디버깅 도구 등 개발에 필요한 툴을 합친 것입니다.
비유하자면: JRE가 완성된 요리를 먹을 수 있는 '식탁'이라면, JDK는 요리를 직접 할 수 있는 각종 도구가 갖춰진 '주방'입니다. 개발자인 우리는 주방(JDK)이 필요합니다.
1단계: JDK 선택과 설치 (OpenJDK vs Oracle JDK)
최근 자바 생태계는 라이선스 정책에 따라 선택지가 다양합니다. 상용 서비스가 목적이라면 무료이면서도 강력한 커뮤니티 지원을 받는 **OpenJDK (예: Amazon Corretto, Azul Zulu)**를 권장합니다.
- 배포판 다운로드: Adoptium이나 Amazon Corretto 사이트에서 현재 가장 안정적인 LTS(Long Term Support) 버전인 Java 17 또는 21을 선택합니다.
- OS에 맞는 패키지 설치: Windows는 .msi, macOS는 .pkg 파일을 실행하여 기본 경로에 설치를 진행합니다.
2단계: 환경 변수 설정 (시스템의 이정표 만들기)
설치만 한다고 끝이 아닙니다. 운영체제가 java라는 명령어를 입력했을 때, 어느 폴더에 있는 파일을 실행해야 할지 알려주는 환경 변수(Environment Variable) 설정이 필수입니다.
Windows 기준 설정
- 시스템 환경 변수 편집 실행.
- JAVA_HOME 변수 생성: 값은 JDK가 설치된 경로 (예: C:\Program Files\Amazon Corretto\jdk17.0.x).
- Path 변수 편집: %JAVA_HOME%\bin 항목 추가.
Troubleshooting Tip: > 터미널에서 java -version을 입력했을 때 "명령어를 찾을 수 없음"이 뜬다면, 90% 확률로 Path 설정 시 bin 폴더까지 경로를 지정하지 않았기 때문입니다. 반드시 실행 파일이 모여 있는 bin까지 연결하세요.
3단계: 실전 Hands-on - 단순 출력 그 이상
이제 환경이 준비되었으니 코드를 작성해 봅시다. 단순한 "Hello World"를 넘어, 객체 지향의 맛을 살짝 가미한 주문 시스템 알림 예제로 구성했습니다.
소스 코드 작성 (OrderProcessor.java)
/**
* 자바의 모든 코드는 클래스 내부에 존재해야 합니다.
* 파일명과 public 클래스명은 반드시 일치해야 합니다.
*/
public class OrderProcessor {
public static void main(String[] args) {
// 비즈니스 로직을 모방한 변수 선언
String customerName = "Gemini";
int orderId = 20260303;
boolean isPremium = true;
// 시스템 출력 (표준 출력 스트림)
System.out.println("=== 주문 처리 시스템 가동 ===");
printOrderSummary(customerName, orderId, isPremium);
}
/**
* 주문 요약 정보를 출력하는 헬퍼 메서드
*/
private static void printOrderSummary(String name, int id, boolean premium) {
String status = premium ? "우선 처리 대상" : "일반 처리 대상";
// 문자열 연결과 포맷팅 활용
System.out.printf("고객명: %s%n", name);
System.out.printf("주문 번호: %d%n", id);
System.out.println("처리 상태: " + status);
System.out.println("결과: 시스템이 정상적으로 구동되었습니다.");
}
}
컴파일 및 실행
터미널(또는 CMD)을 열고 파일이 저장된 디렉토리에서 다음 명령어를 순차적으로 입력합니다.
- 컴파일: 소스 코드(.java)를 JVM이 이해할 수 있는 바이트코드(.class)로 변환합니다.
-
Bash
javac OrderProcessor.java - 실행: 생성된 클래스 파일을 실행합니다. (확장자는 생략합니다)
-
Bash
java OrderProcessor
Trade-offs: 왜 자바는 설치가 까다로울까?
파이썬(Python) 같은 인터프리터 언어에 비해 자바는 설치와 컴파일 과정이 복잡해 보일 수 있습니다. 하지만 이 과정은 정적 타입 검사를 통해 런타임 오류를 사전에 방지하고, JVM이라는 추상화 계층을 통해 하드웨어 종속성을 완전히 제거하기 위한 기회비용입니다.
특히 대규모 시스템에서는 이러한 엄격한 절차가 코드의 유지보수성과 성능 최적화(JIT 컴파일러 등)에 핵심적인 역할을 합니다.
요약 및 제언
JDK 설치는 단순한 소프트웨어 다운로드가 아니라, 자바 생태계의 철학인 플랫폼 독립성을 내 컴퓨터에 이식하는 과정입니다. 오늘 우리는 다음 세 가지를 마스터했습니다.
- JDK와 JVM의 구조적 차이 이해.
- 운영체제 레벨에서의 환경 변수(Path) 최적화.
- 컴파일러(javac)와 실행기(java)의 작동 메커니즘 확인.
성공적으로 실행 결과를 확인하셨나요? 만약 오류가 발생한다면 어떤 메시지가 출력되었나요? 자바 개발의 절반은 에러 로그와의 대화입니다. 이제 이 탄탄한 기초 위에 Spring Boot나 JPA 같은 거대한 프레임워크를 쌓아 올릴 준비가 되었습니다.
'Backend > Java' 카테고리의 다른 글
| 자바 메모리 관리의 심장, JVM Stack과 Heap 영역 완벽 해부 (0) | 2026.03.03 |
|---|---|
| 객체지향 프로그래밍(OOP)의 4대 핵심 원칙: 지속 가능한 코드를 설계하는 법 (0) | 2026.03.03 |
| 자바 배열(Array) vs 리스트(ArrayList): 성능과 유연성 사이의 전략적 선택 (0) | 2026.03.03 |
| 조건문 마스터: if와 switch, 상황에 맞는 최적의 선택 전략 (0) | 2026.03.03 |
| 자바 변수와 자료형: 왜 String은 기본 타입이 아닐까? (0) | 2026.03.03 |
- Total
- Today
- Yesterday
- MSA
- java
- sLLM
- 멀티모달
- AI
- Nextjs
- HBM
- 구글
- CSR
- SSR
- react
- 엣지컴퓨팅
- HTML
- LLM
- Rag
- Javascript
- TypeScript
- 카카오
- 웹기초
- 협력
- CSS
- It용어
- on-device ai
- 스마트안경
- prompt engineering
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |