๐ก ๋ณธ ๋ฌธ์๋ 'JVM, JDK, JRE ๋? (java์ javac ๊น์ง ์์๋ณด๊ธฐ)'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
JAVA๋ฅผ ์ฒ์ ๊ณต๋ถํ ๋ ํ๊ฐ๋ฆฌ๋ ์ ๋ณด์ธ JVM, JDK, JRE์ ์ฐจ์ด์ java์ javac์ ์ฐจ์ด์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. JVM vs JRE vs JDK
1.1 JVM(Java Virtual Machine)
JVM์ ์๋ฐ ์์ค์ฝ๋๋ก ๋ถํฐ ๋ง๋ค์ด์ง๋ ์๋ฐ ๋ฐ์ด๋๋ฆฌ ํ์ผ(.class)์ ์คํํ ์ ์์ต๋๋ค. ๋ฆฌ๋ ์ค์ JVM๊ณผ ์๋์ฐ์ JVM์ ๋ค๋ฅธ๋ฐ, ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ ์ด๋ค JVM์์๋ ๋์ ์ํฌ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ JVM์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ '์ฝ๊ณ ' '๊ฒ์ฆ'ํ๊ณ '์คํ'ํ๋ฉฐ,
- ์คํํ๊ฒฝ(Runtime Environment)์ ๊ท๊ฒฉ์ ์ ๊ณตํฉ๋๋ค(ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ธฐํํ์ผ).
1.2 JRE(Java Runtime Enviroment)
JRE๋ JVM์ด ์๋ฐ ํ๋ก๊ทธ๋จ์ ๋์์ํฌ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค๊ณผ ๊ธฐํ ํ์ผ๋ค์ ๊ฐ์ง๊ณ ์์ต๋๋ค. JRE๋ JVM์ ์คํํ๊ฒฝ์ ๊ตฌํํ๋ค๊ณ ํ ์ ์๊ธฐ์, ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ํด์ JRE๋ฅผ ๋ฐ๋์ ์ค์นํด์ผ ํฉ๋๋ค. ์ด๋ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ๋ ํฌํจ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฐํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ํด์ JDK๊ฐ ํ์ํ๋ค.
1.3 JDK(Java Development kit)
JDK๋ java์ javac์ ๊ฐ์ ๊ฐ๋ฐ์ ์ํด ํ์ํ ๋๊ตฌ์ ์ปดํ์ผ๋ฌ ๋ฑ์ ํฌํจํฉ๋๋ค. JRE์ ํฌํจํ๋ ๊ฐ๋ ์ผ๋ก JDK๋ฅผ ์ค์นํ๋ฉด JRE๋ ๊ฐ์ด ์ค์น๊ฐ ๋ฉ๋๋ค(์ฆ, JDK = JRE + a ).
2. java vs javac
2.1 ๊ฐ๋
- javac: *.java ํ์ผ์ *.class ํ์ผ๋ก ์ปดํ์ผ ํด์ฃผ๋ ์ปดํ์ผ๋ฌ
- java: javac๋ก ์ปดํ์ผ ๋ class ํ์ผ์ ์คํํ๋ ํ๋ก๊ทธ๋จ
2.2 ๋ฒ์ ํ์ธ
java, javac ๋ฒ์ ํ์ธํ๊ธฐ
javac -versionjavac 1.8.0_302โ
java -versionopenjdk version "1.8.0_302" OpenJDK Runtime Environment (build 1.8.0_302-b08) OpenJDK 64-Bit Server VM (build 25.302-b08, mixed mode)โ
2.3 ์์น ํ์ธ
java, javac ์์น ํ์ธํ๊ธฐ
which javac/usr/bin/javacโ
which java/usr/bin/javaโ
java์ javac์ ์ฌ๋ณผ๋ฆญ ๋งํฌ ์๋ณธ ์ฐพ๊ธฐ
readlink -f /usr/bin/javac/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/bin/javacโ
readlink -f /usr/bin/java/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-0.el7_9.x86_64/jre/bin/javaโ
์ฐธ๊ณ
- [Blog] JDK vs JRE vs JVM: https://goodgid.github.io/Java-JDK-JRE/
- [Blog] JAVA ๋ฒ์ ๊ณผ ์์น ํ์ธํ๊ธฐ: https://lee-automation-lab.tistory.com/entry/Linux-%EB%AA%85%EB%A0%B9%EC%96%B4-JAVA-%EB%B2%84%EC%A0%84%EA%B3%BC-%EC%9C%84%EC%B9%98-%ED%99%95%EC%9D%B8%ED%95%98%EA%B8%B0