1. JVM์ด๋ž€


JVM์€ ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ

JVM์€ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์šด์˜์ฒด์ œ์™€ ์ƒ๊ด€์—†์ด ์‹คํ–‰๐Ÿ’ฌ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ณ  ์ •ํ™•ํ•˜๊ฒŒ๋Š” Java๋ผ๋Š” ์–ธ์–ด๊ฐ€ JVM์œผ๋กœ ์ธํ•ด์„œ OS์— ๋…๋ฆฝ์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค. JVM์ž์ฒด๋กœ๋Š” OS๋งˆ๋‹ค ์ •์˜๋œ ์‹คํ–‰๋ฐฉ๋ฒ•์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— JVM ์ž์ฒด๋Š” OS์— ์ข…์†์ ์ด๋‹ค.
ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ตœ์ ํ™”๋ฅผ ํ•ด์ค€๋‹ค.
JVM์œ„์น˜
์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ JVM์„ ํ†ตํ•ด ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ JVM์ด ํ•„์š”ํ•˜๋‹ค.
์œ„์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ OS๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— JVM์„ ๊ฑฐ์ณ ํ•ด์„๋˜๊ณ  ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ตœ๊ทผ์—๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ ์ตœ์ ํ™” ๊ธฐ์ˆ ์˜ ๋ฐœ๋‹ฌ๋กœ ์†๋„ ์ €ํ•˜๊ฐ€ ๋งŽ์ด ์ค„์—ˆ๋‹ค.
๋ฐ˜๋ฉด์— OS์™€ HW์— ๋…๋ฆฝ์ ์ด๋ผ๋Š” ํŠน์ง• ๋•Œ๋ฌธ์— WORA๐Ÿ’ฌ Write Once Run Anywhere ๊ฐ€ ์‹คํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

WORA์— ๋Œ€ํ•ด ์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ ๊ธ€

2. JVM์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘๊ณผ์ •

JVM์˜ ๊ตฌ์กฐ

JVM์€ ํฌ๊ฒŒ Runtime Data Area, Garbage Collector, Execution Engine, Class Loader์˜ 4๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
JVM๊ตฌ์กฐ

JVM์˜ ๋™์ž‘ ๊ณผ์ •

JVM์˜ ๋™์ž‘๊ณผ์ •์„ ์•Œ์•„๋ณด์ž.

์‚ฌ์ง„์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ž๋ฐ” ์ฝ”๋“œ๋Š” (*.java)๋ผ๋Š” ํ™•์žฅ์ž๋กœ ์ปดํ“จํ„ฐ์— ์ €์žฅ์ด ๋œ๋‹ค.
(*.java)๋Š” CPU๊ฐ€ ์ธ์‹์„ ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ java๋Š” ์•ž์„œ ๋งํ–ˆ๋“ฏ์ด JVM์„ ๊ฑฐ์ณ OS์— ๋„๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— OS๊ฐ€ ์ธ์‹ํ•˜๋Š” ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹ˆ๋ผ
JVM์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” Java Bytecode(*.class)๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
์ด ๊ณผ์ •์„ ์ปดํŒŒ์ผ ๊ณผ์ •์ด๋ผํ•˜๋ฉฐ ์—ฌ๊ธฐ์„œ Java Compiler๊ฐ€ ๋™์ž‘ํ•œ๋‹ค.

๐Ÿ’ก Java Compiler๋Š” JDK์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” javac.exe ๋ฅผ ๋งํ•œ๋‹ค.
โ€ƒโ€‚bin ํด๋”์— ๊ฐ€๋ณด๋ฉด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์œˆ๋„์šฐ์˜ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ(cmd)๋ฅผ ์ด์šฉํ•ด ์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. (*.java) ํŒŒ์ผ์ด ์ €์žฅ๋œ ์œ„์น˜๋กœ ์ด๋™ ํ›„

์ด๋ ‡๊ฒŒ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ์ปดํŒŒ์ผ์ด ๋˜์–ด (*.class) ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.
๋ณ€ํ™˜๋œ java bytecode๋Š” ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๊ณ„์–ด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— OS๋ฐ”๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ 
JVM์ด OS์— ๋งž์ถฐ java bytecode๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์„ํ•ด ์‹คํ–‰๋œ๋‹ค.

์ด ๊ณผ์ •์—์„œ ์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ Runtime Data Area, Garbage Collector, Execution Engine, Class Loader๋„ ์ž‘๋™ํ•œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” java ํŒŒ์ผ๋งŒ ๋งŒ๋“ ๋‹ค๋ฉด ์–ด๋А ๋””๋ฐ”์ด์Šค์—์„œ๋“  OS์™€ ์ƒ๊ด€์—†์ด ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

3. JVM, JRE, JDK์˜ ์ฐจ์ด


JVM์„ ๊ณต๋ถ€ํ•˜๋ฉด ๋‹น์—ฐํžˆ ๋”ฐ๋ผ์˜ค๋Š” ๊ฒƒ์ด JDK์™€ JRE์ด๋‹ค.
JVM์€ ์œ„์—์„œ ์„ค๋ช…ํ–ˆ์œผ๋ฏ€๋กœ JRE์™€ JDK๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.

JRE

JRE๋Š” ์ž๋ฐ” ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ ๐Ÿ’ฌ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ
์–ด๋– ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋˜๋‹ค๋ฅธ ์†Œํ”„ํŠธ์›จ์–ด.
(Java Runtime Enviroment) ์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.
๋”ฐ๋ผ์„œ, JRE๋Š” Java๊ฐ€ ๋™์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค.

JRE์˜ ๊ตฌ์กฐ

JRE๋Š” ์—ฌ๋Ÿฌ ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.
ํฌ๊ฒŒ Class Libraries, Class Loader, Java Vertual Machine์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
JRE ๊ตฌ์กฐ

JDK

JDK๋Š” Java Development์˜ ์•ฝ์ž๋กœ ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚คํŠธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
JRE์™€ javac๋“ฑ์˜ ์ปดํŒŒ์ผ๋Ÿฌ, ๋””๋ฒ„๊ฑฐ ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

JDK ํฌํ•จ๊ด€๊ณ„ ๋„์‹๋„

JDK ๊ด€๊ณ„

JDK ๊ตฌ์„ฑ

JDK ์ข…๋ฅ˜

  1. Java SE (Java Platform Standard Edition)
    ํ‘œ์ค€ ์ž๋ฐ” ํ”Œ๋žซํผ, ํ‘œ์ค€์ ์ธ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ๋จธ์‹  ๊ทœ๊ฒฉ ๋ฐ API์ง‘ํ•ฉ์„ ํฌํ•จํ•œ๋‹ค.
    ์ž๋ฐ”๋ผ๋Š” ์–ธ์–ด๊ฐ€ ์–ด๋–ค ๋ฌธ๋ฒ•์  ๊ตฌ์„ฑ์„ ๊ฐ€์กŒ๋Š”์ง€์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.
    ๊ตฌ์ฒด์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๊ณ  ๊ทธ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ค๊ณ„๋„๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

  2. Java EE (Java Platform Enterprise Edition)
    Java SE์— ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•œ ํ”Œ๋žซํผ์ด๋‹ค.

  3. Java ME (Java Platform Micro Edition)
    ์กฐ๊ธˆ ๋” ์ œํ•œ๋œ ์ž์›์„ ๊ฐ€์ง„ ํœด๋Œ€์ „ํ™”, PDA ๋“ฑ์—์„œ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”Œ๋žซํผ์ด๋‹ค.

๊ฒฐ๋ก