์๋ฐ๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM) ์์์ ์คํ๋๋ค๋ ๊ฒ์ ์ตํ ์๋ ค์ง ์ฌ์ค์ด๋ค.
์ดํด๋ฆฝ์ค๋ฅผ ๋ค์ด๋ก๋ํ ๋๋ ์ดํด๋ฆฝ์ค ๋ฒ์ ์ ํธํ๋๋ JDK๋ ํจ๊ป ์ค์นํ๋ค.
๋ํ, ์ดํด๋ฆฝ์ค ์ค์ ์์ [Installed JREs]์์ JRE๋ฅผ ์ถ๊ฐํ๋ฉด์, ๊ธฐ์กด์ ๋๋ฃจ๋ญ์ ํ๊ฒ ์๊ณ ์๋ JDK์ JRE์ ์ฐจ์ด๊ฐ ๊ถ๊ธํด์ก๋ค.
๊ทธ๋์ ์ค๋์ ๊ฐ๋ ์ ๋ช ํํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.

1. JDK vs JRE vs JVM ์ฐจ์ด
์ง์ง ๊ฐ๋จํ ์์ฝํ๋ฉด
์๋ฐ๋ก ๊ฐ๋ฐํ ๋ โ JDK ํ์ (์ปดํ์ผ๋ฌ ํฌํจ)
๊ทธ๋ฅ ์คํ๋ง ํ ๋ โ JRE๋ง ์์ด๋ ๋จ
์ค์ ์คํ ๋ด๋น โ JVM ์์์ ๋์๊ฐ...
JRE๋ ์คํ์ฉ, JDK๋ ๊ฐ๋ฐ์ฉ์ด๋ผ๊ณ ์ดํดํ๋ฉด ์ฝ๋ค.
โ JDK (Java Development Kit)
- `.java` ํ์ผ์ `.class(๋ฐ์ดํธ์ฝ๋)`๋ก ๋ณํํ๋ ๊ฐ๋ฐ ๋๊ตฌ (์ปดํ์ผ๋ฌ ํฌํจ)
- JDK๋ ๊ฐ๋ฐ์ ์ํ ํด(์ปดํ์ผ๋ฌ ํฌํจ)
โ JRE (Java Runtime Environment) .class ํ์ผ์ ์คํํ ์ ์๋ ํ๊ฒฝ (JVM ํฌํจ)
- JRE๋ ์คํ ํ๊ฒฝ(๊ฐ๋ฐ ๋๊ตฌ ์์ด ์คํ๋ง ๊ฐ๋ฅ)
โ JVM (Java Virtual Machine) .class ํ์ผ์ ํด์ํ๊ณ OS์ ๋ง๊ฒ ์คํ
- JVM์ ์คํ์ ๋ด๋นํ๋ ํต์ฌ ์์
2. JDK vs JRE ์ฐจ์ด
์ฌ๊ธฐ์ ์ข ๋ ์์ธํ ์์๋ณด์
JDK (Java Development Kit)
- Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ ๊ฐ๋ฐ ๋๊ตฌ ๋ชจ์์ด๋ค.
- ์ปดํ์ผ๋ฌ (javac), ๋๋ฒ๊ฑฐ (jdb), Java API ๋ฑ์ด ํฌํจ๋์ด ์๋ค.
- ๊ฐ๋ฐ์ ์ํด ๋ฐ๋์ ํ์ํ๋ค.
- `.java` ํ์ผ์ `.class(๋ฐ์ดํธ์ฝ๋)`๋ก ๋ณํํ๋ค.
JRE (Java Runtime Environment)
- java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ํ๊ฒฝ์ด๋ค.
- java ์คํ ํ์ผ๊ณผ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ค.
- JDK์๋ ํฌํจ๋์ด ์์ง๋ง, ๋จ์ ์คํ๋ง ํ ๊ฒฝ์ฐ JRE๋ง ์์ด๋๋๋ค.
- ์คํ๋ง ํ ์ ์๊ณ ์ฝ๋ ์ปดํ์ผ์ ํ ์ ์์
- .class(๋ฐ์ดํธ์ฝ๋) ์คํ, .java ์ปดํ์ผ ๋ถ๊ฐ
3. Java ์ฝ๋ ์คํ ๊ณผ์
`.java`๋ก ์์ฑ๋ ํ์ผ์ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ค. ๊ทธ๋์ `.class`(๋ฐ์ดํธ ์ฝ๋)๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
`.java` ํ์ผ์ `.class`(๋ฐ์ดํธ์ฝ๋)๋ก ๋ณํํ๋ ๊ฑด JDK์ ํฌํจ๋ `javac(Java Compiler)`๊ฐ ๋ด๋นํ๋ค.
๊ทธ๋ฆฌ๊ณ `JRE`๋ ๋จ์ํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ค.
JDK ์์ javac(Java Compiler)๊ฐ .java ํ์ผ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํํด์ ํด๋์ค ํ์ผ์ ์์ฑํ๋ค.
javac Hello.java # Hello.class ์์ฑ
๊ทธ๋ฆฌ๊ณ JRE๋ java ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ์คํ ํ๋ค.
์ฌ๊ธฐ์ JRE ๋ด๋ถ์ JVM์ด .class๋ฅผ ์ฝ๊ณ OS์ ๋ง๊ฒ ๋ณํํด์ ์คํํ๋ค.
java Hello # Hello.class ์คํ
โ
.java โ .class ๋ณํ = JDK (javac ์ปดํ์ผ๋ฌ)
โ
.class ์คํ = JRE (java ์คํ)
์ฆ, JDK๋ ๊ฐ๋ฐ + ์คํ์ ๋ชจ๋ ํฌํจํ์ง๋ง, JRE๋ ์คํ๋ง ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
'ํ๋ก๊ทธ๋๋ฐ์ธ์ด > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฐ๊ฐ ์๋ฐ ๊ฐ์ ๋จธ์ (JVM) ์์์ ์คํ๋๋ค๋ ๊ฒ์ ์ตํ ์๋ ค์ง ์ฌ์ค์ด๋ค.
์ดํด๋ฆฝ์ค๋ฅผ ๋ค์ด๋ก๋ํ ๋๋ ์ดํด๋ฆฝ์ค ๋ฒ์ ์ ํธํ๋๋ JDK๋ ํจ๊ป ์ค์นํ๋ค.
๋ํ, ์ดํด๋ฆฝ์ค ์ค์ ์์ [Installed JREs]์์ JRE๋ฅผ ์ถ๊ฐํ๋ฉด์, ๊ธฐ์กด์ ๋๋ฃจ๋ญ์ ํ๊ฒ ์๊ณ ์๋ JDK์ JRE์ ์ฐจ์ด๊ฐ ๊ถ๊ธํด์ก๋ค.
๊ทธ๋์ ์ค๋์ ๊ฐ๋ ์ ๋ช ํํ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.

1. JDK vs JRE vs JVM ์ฐจ์ด
์ง์ง ๊ฐ๋จํ ์์ฝํ๋ฉด
์๋ฐ๋ก ๊ฐ๋ฐํ ๋ โ JDK ํ์ (์ปดํ์ผ๋ฌ ํฌํจ)
๊ทธ๋ฅ ์คํ๋ง ํ ๋ โ JRE๋ง ์์ด๋ ๋จ
์ค์ ์คํ ๋ด๋น โ JVM ์์์ ๋์๊ฐ...
JRE๋ ์คํ์ฉ, JDK๋ ๊ฐ๋ฐ์ฉ์ด๋ผ๊ณ ์ดํดํ๋ฉด ์ฝ๋ค.
โ JDK (Java Development Kit)
.java
ํ์ผ์.class(๋ฐ์ดํธ์ฝ๋)
๋ก ๋ณํํ๋ ๊ฐ๋ฐ ๋๊ตฌ (์ปดํ์ผ๋ฌ ํฌํจ)- JDK๋ ๊ฐ๋ฐ์ ์ํ ํด(์ปดํ์ผ๋ฌ ํฌํจ)
โ JRE (Java Runtime Environment) .class ํ์ผ์ ์คํํ ์ ์๋ ํ๊ฒฝ (JVM ํฌํจ)
- JRE๋ ์คํ ํ๊ฒฝ(๊ฐ๋ฐ ๋๊ตฌ ์์ด ์คํ๋ง ๊ฐ๋ฅ)
โ JVM (Java Virtual Machine) .class ํ์ผ์ ํด์ํ๊ณ OS์ ๋ง๊ฒ ์คํ
- JVM์ ์คํ์ ๋ด๋นํ๋ ํต์ฌ ์์
2. JDK vs JRE ์ฐจ์ด
์ฌ๊ธฐ์ ์ข ๋ ์์ธํ ์์๋ณด์
JDK (Java Development Kit)
- Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์๋ ๊ฐ๋ฐ ๋๊ตฌ ๋ชจ์์ด๋ค.
- ์ปดํ์ผ๋ฌ (javac), ๋๋ฒ๊ฑฐ (jdb), Java API ๋ฑ์ด ํฌํจ๋์ด ์๋ค.
- ๊ฐ๋ฐ์ ์ํด ๋ฐ๋์ ํ์ํ๋ค.
.java
ํ์ผ์.class(๋ฐ์ดํธ์ฝ๋)
๋ก ๋ณํํ๋ค.
JRE (Java Runtime Environment)
- java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ํ๊ฒฝ์ด๋ค.
- java ์คํ ํ์ผ๊ณผ ๊ธฐ๋ณธ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ค.
- JDK์๋ ํฌํจ๋์ด ์์ง๋ง, ๋จ์ ์คํ๋ง ํ ๊ฒฝ์ฐ JRE๋ง ์์ด๋๋๋ค.
- ์คํ๋ง ํ ์ ์๊ณ ์ฝ๋ ์ปดํ์ผ์ ํ ์ ์์
- .class(๋ฐ์ดํธ์ฝ๋) ์คํ, .java ์ปดํ์ผ ๋ถ๊ฐ
3. Java ์ฝ๋ ์คํ ๊ณผ์
.java
๋ก ์์ฑ๋ ํ์ผ์ ๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ค. ๊ทธ๋์ .class
(๋ฐ์ดํธ ์ฝ๋)๋ก ๋ฐ๊ฟ์ผ ํ๋ค.
.java
ํ์ผ์ .class
(๋ฐ์ดํธ์ฝ๋)๋ก ๋ณํํ๋ ๊ฑด JDK์ ํฌํจ๋ javac(Java Compiler)
๊ฐ ๋ด๋นํ๋ค.
๊ทธ๋ฆฌ๊ณ JRE
๋ ๋จ์ํ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ค.
JDK ์์ javac(Java Compiler)๊ฐ .java ํ์ผ ๋ฐ์ดํธ์ฝ๋(.class)๋ก ๋ณํํด์ ํด๋์ค ํ์ผ์ ์์ฑํ๋ค.
javac Hello.java # Hello.class ์์ฑ
๊ทธ๋ฆฌ๊ณ JRE๋ java ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ์คํ ํ๋ค.
์ฌ๊ธฐ์ JRE ๋ด๋ถ์ JVM์ด .class๋ฅผ ์ฝ๊ณ OS์ ๋ง๊ฒ ๋ณํํด์ ์คํํ๋ค.
java Hello # Hello.class ์คํ
โ
.java โ .class ๋ณํ = JDK (javac ์ปดํ์ผ๋ฌ)
โ
.class ์คํ = JRE (java ์คํ)
์ฆ, JDK๋ ๊ฐ๋ฐ + ์คํ์ ๋ชจ๋ ํฌํจํ์ง๋ง, JRE๋ ์คํ๋ง ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.