3 ๋ถ„ ์†Œ์š”


1. JVM์ด๋ž€


  • JVM์€ Java Vertual Machine์˜ ์•ฝ์ž๋กœ โ€˜์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๊ธฐ๊ณ„โ€™๋ฅผ ๋งํ•œ๋‹ค.

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๊ตฌ์กฐ

  • Runtime Data Area
    JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด OS๋กœ๋ถ€ํ„ฐ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹น๋ฐ›๊ณ 
    JVM์€ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
    ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ Method Area, Heap Area, Stack Area, PC register, Native Method Stack์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
    Runtime Data Area์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋”ฐ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์ธ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • Garbage Collector
    GC๋Š” JVM ์ƒ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    GC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ๋Œ€์ƒ์€ Runtime Data Area์˜ Heap ์˜์—ญ์˜ ๊ฐ์ฒด ์ค‘์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์ด๋‹ค.
    JVM์—์„œ ์ž๋™์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.
    GC๋งŒ์œผ๋กœ๋„ ๋‚ด์šฉ์ด ๋งŽ๊ธฐ Java์˜ Garbage Collector์—์„œ GC์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

  • Class Loader
    ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์ณ ์ƒ์„ฑ๋œ .class ํŒŒ์ผ๋“ค์„
    Class Loader๊ฐ€ ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์€ Runtime Data Area๋กœ ์ ์žฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.
    ์ž์„ธํ•œ ๋‚ด์šฉ์€ Java์˜ Class Loader์— ์ •๋ฆฌํ•ด๋†จ๋‹ค.

  • Execution Engine
    Class Loader์— ์˜ํ•ด Runtime Data Area๋กœ ์ ์žฌ๋œ .class ํŒŒ์ผ๋“ค์„ ํ•˜๋‚˜์˜ ๋ช…๋ น ๋‹จ์œ„๋กœ
    ์ฝ์–ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.
    Interpreter ๋ฐฉ์‹๊ณผ JIT๐Ÿ’ฌJust-In-Time๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.
    Interpreter์™€ JIT

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 ๊ตฌ์กฐ

  • Class Loader
    Class Loader๋Š” ์‚ฌ์‹ค ์—„๋ฐ€ํžˆ ๋งํ•˜์ž๋ฉด JVM์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    JVM๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์–ด์„œ JVM๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์–ด์„œ JVM์„ ์„ค๋ช…ํ•  ๋•Œ ํ•„์ˆ˜์ ์œผ๋กœ ์–ธ๊ธ‰๋˜์ง€๋งŒ
    ์ •ํ™•ํ•˜๊ฒŒ๋Š” JRE์— ์†ํ•ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์ด๋ฏ€๋กœ Pass !

  • Class Libraries
    JRE๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์„œ๋น„์Šค ๊ฐ„์— ์™„๋ฒฝํ•œ ๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋‹ค์ˆ˜์˜ ํ†ตํ•ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • JVM
    ์œ„์—์„œ ์„ค๋ช…ํ•œ JVM์€ JRE์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

JDK

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

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

JDK ๊ด€๊ณ„

JDK ๊ตฌ์„ฑ

  • apt : ์–ด๋…ธํ…Œ์ด์…˜ ํˆด
  • appletviewer : ๋‹ค๋ฅธ ๊ฐœ๋ฐœ ํˆด ์—†์ด๋„ ์ž๋ฐ” ์• ํ”Œ๋ฆฟ์„ ์‹คํ–‰์‹œํ‚ค๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋Š” ํˆด
  • jdb : ์ž๋ฐ” ๋””๋ฒ„๊น… ํˆด
  • javac : ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ ์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐœ๋ฐœ ํˆด์ด ๋” ์กด์žฌํ•œ๋‹ค.

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 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ”Œ๋žซํผ์ด๋‹ค.

๊ฒฐ๋ก 

  • JDK๋Š” ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ํˆด์„ ์ œ๊ณตํ•ด์ค€๋‹ค.
  • JRE์„ ํ†ตํ•ด JRE๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋Š ํ™˜๊ฒฝ์—์„œ๋“  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: