๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ 1. Java ์–ธ์–ด์˜ ํŠน์ง• (+JVM๊ณผ ์ž๋ฐ”์˜ ์ปดํŒŒ์ผ ๋ฐฉ์‹, JRE vs JDK) ๋ณธ๋ฌธ

Study/Java

๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ 1. Java ์–ธ์–ด์˜ ํŠน์ง• (+JVM๊ณผ ์ž๋ฐ”์˜ ์ปดํŒŒ์ผ ๋ฐฉ์‹, JRE vs JDK)

Shinjio 2023. 10. 31. 19:54

Java๋ž€?

  • ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ(Sun Microsystems, Inc.)์—์„œ ๊ฐœ๋ฐœํ•˜์—ฌ 1996๋…„ 1์›”์— ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด
  • ์ดˆ๊ธฐ์— ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง(James Gosling)์ด๋ž€ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ€์ „์ œํ’ˆ์— ์‚ฌ์šฉํ•  ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค ํ”Œ๋žซํผ์— ๋…๋ฆฝ์ ์ด๋ฉด์„œ๋„ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด ์–ธ์–ด์˜ ํ•„์š”์„ฑ์„ ๋Š๋ผ๊ณ  ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ ์–ธ์–ด

Java ์–ธ์–ด์˜ ํŠน์ง• 

1. ์ž๋ฐ”๊ฐ€์ƒ๋จธ์‹ (JVM) : ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ ์ด๋‹ค.

์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ๋‚˜ ํ•˜๋“œ์›จ์–ด๊ฐ€ ์•„๋‹Œ JVMํ•˜๊ณ ๋งŒ ํ†ต์‹ ํ•˜๊ณ , JVM์ด ์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ช…๋ น์„ ํ•ด๋‹น ์šด์˜์ฒด์ œ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜ํ•˜์—ฌ ์ „๋‹ฌํ•œ๋‹ค. ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ์—๋Š” ๋…๋ฆฝ์ ์ด์ง€๋งŒ JVM์€ ์šด์˜์ฒด์ œ์— ์ข…์†์ ์ด๋ฏ€๋กœ ์—ฌ๋Ÿฌ ์šด์˜์ฒด์ œ์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ„์ „์˜  JVM์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

2. ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ด๋‹ค.

 ๋Œ€ํ‘œ์ ์ธ ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด

3. Garbage Collection : ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด, ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ(Garbage Collector)๊ฐ€ ์ž๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ

4. ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ์ง€์›

ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ๋‹จ์œ„๊ฐ€ ๋™์ผํ•œ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์šด์˜์ฒด์ œ๋งˆ๋‹ค ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š”  API๊ฐ€ ๋‹ค๋ฅด๋‚˜ ์ž๋ฐ”์˜ ๊ฒฝ์šฐ ์ž๋ฐ” API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

5. ๋™์  ๋กœ๋”ฉ(Dynamic Loading) ์ง€์›

๋ณดํ†ต ์ž๋ฐ”๋กœ ์ž‘์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํด๋ž˜์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ. ์ž๋ฐ”๋Š” ๋™์  ๋กœ๋”ฉ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ๋กœ๋”ฉ๋˜์ง€ ์•Š๊ณ  ํ•„์š”ํ•œ ์‹œ์ ์— ํด๋ž˜์Šค๋ฅผ ๋กœ๋”ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

์˜ˆ์ƒ ์งˆ๋ฌธ 1. ์ž๋ฐ” ์–ธ์–ด์˜ ํŠน์ง• 
์ž๋ฐ” ์–ธ์–ด๋Š” JVM ์œ„์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ์— ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค. 
๋˜ํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ด๋ฉฐ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 
๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์™€ ๋™์ ๋กœ๋”ฉ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค


JVM(์ž๋ฐ”๊ฐ€์ƒ๋จธ์‹ , Java Virtual Machine)

Java๋กœ ๊ฐœ๋ฐœํ•œ ํ”„๋กœ๊ทธ๋žจ(*.java)์„ ์ปดํŒŒ์ผํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ(*.class)๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๋จธ์‹ 

์—ฌ๊ธฐ์„œ ๋ฐ”์ดํŠธ์ฝ”๋“œ(Java bytecode)๋Š” JVM์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ž๋ฐ” ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด ๋ณ€ํ™˜๋œ ์ฝ”๋“œ์˜ ๋ช…๋ น์–ด ํฌ๊ธฐ๊ฐ€ 1๋ฐ”์ดํŠธ๋ผ์„œ ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ผ ๋ถˆ๋ฆฌ๊ณ  ์žˆ๋‹ค. 

 

Java ์†Œ์Šค ์ฝ”๋“œ๋Š” javac ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ, ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š”  JRE์— ๋“ค์–ด์žˆ๋Š” java classloader์— ์˜ํ•ด JVM์œผ๋กœ ์ ์žฌ๋˜๊ณ  JVM์€ ์ ์žฌ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ  JIT  ์ปดํŒŒ์ผ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ OS ๋ฐ CPU ์•„ํ‚คํ…์ฒ˜์šฉ ๊ธฐ๊ณ„์–ด(0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์ฝ”๋“œ)๋กœ ๋ฒˆ์—ญ๋˜์–ด ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

์ถœ์ฒ˜ : https://namu.wiki/w/Java%20Virtual%20Machine

 

JVM ๊ตฌ์กฐ

  • ํด๋ž˜์Šค ๋กœ๋”(Class Loader)
  • ์‹คํ–‰ ์—”์ง„(Execution Engine)
    • ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter) : ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ๋ฐ”๋กœ ์‹คํ–‰
    • JIT ์ปดํŒŒ์ผ๋Ÿฌ(Just-in-Time)
    • ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ(Garbage collector)
  • ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Area)
    • ๋ฉ”์†Œ๋“œ ์˜์—ญ
    • ํž™ ์˜์—ญ
    • PC Register
    • ์Šคํƒ ์˜์—ญ
    • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ ์ธํ„ฐํŽ˜์ด์Šค(Native Method Interface)
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”์†Œ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Native Method Library)
ํด๋ž˜์Šค ๋กœ๋”(Class Loader)
- JVM ๋‚ด๋กœ ํด๋ž˜์Šค ํŒŒ์ผ(*.class)์„ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ณ , ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐฐ์น˜ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ๋ฐ”์ดํŠธ ์ฝ”๋“œ(*.class)๋ฅผ ์—ฎ์–ด์„œ JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ Runtime Data Areas์— ๋ฐฐ์น˜ํด๋ž˜์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๋กœ๋”ฉ ๊ธฐ๋Šฅ์€ ํ•œ ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•จ

์‹คํ–‰ ์—”์ง„(Execution Engine)
- ํด๋ž˜์Šค ๋กœ๋”๋ฅผ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ช…๋ น์–ด ๋‹จ์œ„๋กœ ์ฝ์–ด์„œ ์‹คํ–‰
- ์ธํ„ฐํ”„๋ฆฌํ„ฐ, JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์ด ์žˆ์Œ

์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)
- ๋ฐ”์ดํŠธ์ฝ”๋“œ ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ํ•ด์„ํ•˜๊ณ  ๋ฐ”๋กœ ์‹คํ–‰

JIT ์ปดํŒŒ์ผ๋Ÿฌ(Just-in-Time)
- Interpreter์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜์—ฌ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ Native Code(C์–ธ์–ด, C++, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๊ตฌ์„ฑ๋œ ์ฝ”๋“œ)๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๋” ์ด์ƒ ์ธํ„ฐํ”„๋ฆฌํŒ…ํ•˜์ง€ ์•Š๊ณ  ์บ์‹ฑํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹. ์œ„์˜ ๋ฐฉ์‹๋„ ์ „์ฒด๋ฅผ ์ปดํŒŒ์ผ ํ•˜๋Š”๋ฐ ๋น„์šฉ์ด ์†Œ๋ชจ ๋˜๋ฏ€๋กœ JVM์€ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ JIT ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์ผ์ • ์ˆ˜์ค€์ด ๋„˜์–ด๊ฐ€๋ฉด JIT ์ปดํŒŒ์ผ์„ ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ(Garbage Collector)
- Heap ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์—์„œ ๋”๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜

๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ(Runtime Data Area)
- JVM์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ์žฌํ•˜๋Š” ์˜์—ญ

 

 

์˜ˆ์ƒ ์งˆ๋ฌธ 2. JVM์ด๋ž€? ์ž๋ฐ”์˜ ์‹คํ–‰ ๋ฐฉ์‹๊ณผ ํ•จ๊ป˜ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. 

JVM์ด๋ž€ Java Virtual Machine์˜ ์•ฝ์ž๋กœ, ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ CPU๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋ฅด ๋ฒˆ์—ญํ•˜์—ฌ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค. ์ž๋ฐ” ์–ธ์–ด๋กœ ์“ฐ์ธ java ํŒŒ์ผ์€ javac ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ณ€ํ™˜๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ JVM์˜ ํด๋ž˜์Šค ๋กœ๋”๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ๋ฐฐ์น˜ํ•˜๊ณ , ์‹คํ–‰ ์—”์ง„์„ ํ†ตํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์—”์ง„์— ์žˆ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ด ์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ OSํ™˜๊ฒฝ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

 

 

์˜ˆ์ƒ ์งˆ๋ฌธ 3. ์ž๋ฐ”์˜ ์ปดํŒŒ์ผ ๊ณผ์ •

์ปดํŒŒ์ผ(Compile)์ด๋ž€?
์ธ๊ฐ„์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ(๊ณ ์ˆ˜์ค€ ์–ธ์–ด: C, C++, Java ๋“ฑ)๋ฅผ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด(์ €์ˆ˜์ค€ ์–ธ์–ด: ๊ธฐ๊ณ„์–ด)๋กœ ๋ฒˆ์—ญ(๋ณ€ํ™˜)ํ•˜๋Š” ์ž‘์—…

์ž๋ฐ”๋Š” javac.exe ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™ฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” JVM์˜ ํด๋ž˜์Šค๋กœ๋”๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ๋กœ๋”๋Š” ๋™์ ๋กœ๋”ฉ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋กœํŒ… ๋ฐ ๋งํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. JVM์˜ ์‹คํ–‰ ์—”์ง„์€  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์™€ JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด(๋ฐ”์ด๋„ˆ๋ฆฌ ์ฝ”๋“œ)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์šด์˜์ฒด์ œ ์œ„ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 


JDK์™€ JRE

JDK(Java Development Kit) vs JRE(Java Runtime Enviroment)

JDK๋ผ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์ปดํŒŒ์ผํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ๋กœ JRE์™€ JVM์„ ํฌํ•จํ•œ๋‹ค. 

๋งŒ๋ฉด, JRE๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋„๊ตฌ๋กœ JVM์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. 

  • JRE๋Š” ์ž๋ฐ” ์‹คํ–‰ ํ™˜๊ฒฝ(Java Runtime Enviroment)์˜ ์•ฝ์ž๋กœ ์ž๋ฐ”๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ค๋Š”๋ฐ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ๊ฐ์ข… API, ๊ทธ๋ฆฌ๊ณ  ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (JVM)์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์‰ฝ๊ฒŒ ์ž๋ฐ”๋กœ ์“ฐ๊ธฐ(๊ฐœ๋ฐœ)๋Š” ์•ˆ๋˜๊ณ  ์ฝ๊ธฐ(์‹คํ–‰)๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Œ
  • JDK๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ ํ‚ค๋“œ(Java Development Kit)์˜ ์•ฝ์ž๋กœ ๊ฐœ๋ฐœ์‹œ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ javac, javadoc ๋“ฑ ๊ฐœ๋ฐœ ๋„๊ตฌ์™€ ํ•จ๊ป˜ JRE๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ

์‚ฌ์šฉ์ž ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

  • bin : ์ž๋ฐ” ๊ฐœ๋ฐœ๊ณผ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ช…๋ น
  • conf : ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ํŒจ์น˜ ํŒŒ์ผ
  • include : ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•„์š”ํ•œ C์–ธ์–ด ํ—ค๋“œ ํŒŒ์ผ
  • jmods : ์ปดํŒŒ์ผ๋œ ๋ชจ๋“ˆ ํŒŒ์ผ
  • legal : ๊ฐ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ €์ž‘๊ถŒ๊ณผ ๋ผ์ด์„ ์Šค
  • lib : ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํด๋ž˜์Šค

bin ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋“ค์–ด์žˆ๋Š” ์ฃผ์š” ๊ฐœ๋ฐœ ์†Œํ”„ํŠธ์›จ์–ด 

  • javac : ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ, ์ž๋ฐ” ์†Œ์Šค๋ฅผ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜
  • java : ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰๊ธฐ, JVM์„ ์ž‘๋™ํ•˜์—ฌ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
  • javadoc : ์ž๋ฐ” ์†Œ์Šค๋กœ๋ถ€ํ„ฐ HTML ํ˜•์‹์˜ API ๋„ํ๋จผํŠธ ์ƒ์„ฑ
  • jar : ์ž๋ฐ” ํด๋ž˜์Šค ํŒŒ์ผ์„ ์••์ถ•ํ•œ ์ž๋ฐ” ์•„์นด์ด๋ธŒ ํŒŒ์ผ ์ƒ์„ฑ, ๊ด€๋ฆฌ
  • jmod : ์ž๋ฐ”์˜ ๋ชจ๋“ˆ ํŒŒ์ผ(.jmd)์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋ชจ๋“ˆ ํŒŒ์ผ์˜ ๋‚ด์šฉ ์ถœ๋ ฅ
  • jlink : ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— ๋งž์ถ˜ ๋งž์ถคํ˜• JRE ์ƒ์„ฑ
  • jdb : ์ž๋ฐ” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘ ์˜ค๋ฅ˜๋ฅผ ์ฐพ๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋””๋ฒ„๊ฑฐ 
  • javap : ํด๋ž˜์Šค ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์†Œ์Šค์™€ ํ•จ๊ป˜ ๋ณด์—ฌ์ฃผ๋Š” ๋””์–ด์…ˆ๋ธ”๋Ÿฌ

์˜ˆ์ƒ ์งˆ๋ฌธ 4. JDK์™€ JRE์˜ ์ฐจ์ด์  

JRE๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์•ฝ์ž๋กœ ์ž๋ฐ”๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š”๋ฐ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ API ๊ทธ๋ฆฌ๊ณ  JVM์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JDK๋Š” ์ž๋ฐ”๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ํ•„์š”ํ•œ ๋„๊ตฌ ๋ชจ์Œ์œผ๋กœ ๊ฐœ๋ฐœ์‹œ ํ•„์š”๋กœํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ javac, javadoc ๋“ฑ์˜ ๊ฐœ๋ฐœ ๋„๊ตฌ์™€ ํ•จ๊ป˜ JRE๊นŒ์ง€ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.  


์ฐธ๊ณ ์ž๋ฃŒ

๋ช…ํ’ˆ Java Programming (ํ™ฉ๊ธฐํƒœ, ๊น€ํšจ์ˆ˜)

Java์˜ ์ •์„ (๋‚จ๊ถ์„ฑ)

 

[JAVA] JVM์ด๋ž€? ๊ฐœ๋… ๋ฐ ๊ตฌ์กฐ (JDK, JRE, JIT, ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ...)

JVM์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€ Java Virtual Machine์˜ ์ค„์ž„๋ง. ์ง์—ญํ•˜๋ฉด '์ž๋ฐ”๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์ƒ ๊ธฐ๊ณ„(์ปดํ“จํ„ฐ)'๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. Java ๋Š” OS์— ์ข…์†์ ์ด์ง€ ์•Š๋‹ค๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. OS์— ์ข…์†๋ฐ›์ง€ ์•Š๊ณ  ์‹คํ–‰๋˜

doozi0316.tistory.com

 

 

โ˜• JVM ๋‚ด๋ถ€ ๊ตฌ์กฐ & ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๐Ÿ’ฏ ์ด์ •๋ฆฌ

์ €๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” JRE / JDK / JVM์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค๋ฉด, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” JVM์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•  ์˜ˆ์ •์ด๋‹ค. JVM(์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ )์€ ์ž๋ฐ” ์–ธ

inpa.tistory.com

 

 

[Java] ์ž๋ฐ” JDK, JRE์˜ ์ฐจ์ด์ (JDK๋ž€? JRE๋ž€?)

์ž๋ฐ”๋ฅผ ์ฒ˜์Œ ์„ค์น˜ํ•˜๋ฉด Java ํด๋”์— ์•„๋ž˜์™€ ๊ฐ™์ด JDK์™€ JRE ๊ฐ€ ๊ฐ๊ฐ ์„ค์น˜๋˜๋Š” ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด JDK์™€ JRE์˜ ์—ญํ• ์€ ๋ฌด์—‡์ผ๊นŒ์š”? ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” JDK, JRE ์šฉ์–ด์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด๋„

coding-factory.tistory.com