์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ถœ์ฒ˜ : http://www.jspgeek.com/tt/index.php?pl=17426&PHPSESSID=18639be6718deed229e55fb4b90c6897


Java์˜ ์—ญ์‚ฌ๋Š” Java์˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ธ Java VM์˜ ์‹คํ–‰ ์†๋„์— ๋Œ€ํ•œ ๋„์ „์˜ ์—ญ์‚ฌ์˜€๋‹ค๊ณ  ํ•ด๋„ ๊ณผ์–ธ์€ ์•„๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋” ๋นจ๋ฆฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•˜๋Š” Java VM์ด ๊ฑธ์–ด์˜จ ๊ทธ ๊ธธ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ๋ณ€์ฒœ์‚ฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, Java VM์— ๋Œ€ํ•ด์„œ ๋”์šฑ ๊นŠ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

Java์˜ ์—ญ์‚ฌ


Java๋Š” 1995๋…„ 5์›” 23์ผ์— ๊ฐœ์ตœ๋œ ใ€ŒSun World Expoใ€์˜ ๋””๋ฒจ๋กœํผ ์ปจํผ๋Ÿฐ์Šค์—์„œ ๊ณต๊ฐœ๋˜์—ˆ๋‹ค. ใ€ŒJava ํƒ„์ƒ์˜ ํŽ˜์ด์ง€ใ€์— ์˜ํ•˜๋ฉด ์ด๋‚ ์ด Java์˜ ์ƒ์ผ์ด๋ผ๊ณ  ๋˜๊ณ  ์žˆ๋‹ค. ์ฌ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ด ๋งํ•˜๋‹ˆ๊นŒ ํ‹€๋ฆผ์ด์•ผ ์—†๊ฒ ์ง€๋งŒ, ์›๋ž˜ Java์˜ ์ „์‹ ์€ Oak๋ผ๊ณ  ํ•˜๋Š” ์–ธ์–ด์˜€๋‹ค. Oak๋Š”1990๋…„ 12์›”์— ์‹œ์ž‘๋œ Green Project์˜ ์ผํ™˜์œผ๋กœ์„œ ๊ฐœ๋ฐœ๋œ ์–ธ์–ด์ด๋‹ค. ํ•˜์ง€๋งŒ, Java๋Š” 1995๋…„์— ํƒœ์–ด๋‚ฌ์œผ๋‹ˆ๊นŒ Oak๊ฐ€ ํƒ„์ƒํ•œ 1990๋…„์— ๋ฒŒ์จ ํƒœ์–ด๋‚  ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ด๋‚˜ ๋‹ค๋ฆ„์—†๋‹ค.


์šฐ๋ฆฌ์—๊ฒŒ ์นœ์ˆ™ํ•œ ๋งˆ์Šค์ฝ”ํŠธ "Duke"๋„ ์ด Green Project์˜ "์ค‘์š”ํ•œ ๋ถ€์‚ฐ๋ฌผ"์ด๋ผ๊ณ  Green Project์˜ ํ™ˆํŽ˜์ด์ง€์— ๊ฒŒ์žฌ๋˜์–ด ์žˆ๋‹ค. ๊ฐ€์ „์—…๊ณ„์˜ ์—ด์•…ํ•œ ์ž๊ธˆ ํ™˜๊ฒฝ์œผ๋กœ ๋ฐ›์•„๋“ค์—ฌ์ง€์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์‹ค์ œ๋กœ Green Project์˜ ์ฃผ ์„ฑ๊ณผ๋ฌผ์ธ "*7"(StarSeven๏ผš๋Œ€ํ˜• PDA๋ผ๊ณ ๋„ ํ•œ๋‹ค.)๋„ ํ–‡๋น›์„ ๋ณด์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์‚ฌ์‹ค์ด๋‹ค. ๋ฌผ๋ก , ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธ ์‚ฌ์ • ๋•Œ๋ฌธ์—, ๋˜๋Š” ๋‹จ์ง€ ์šด์ด ์—†์—ˆ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒฌํ•ด๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ๊ทธ ํฌ๊ธฐ, ๋ฌด๊ฒŒ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด, ๊ทธ ๊ฒƒ์„ ํ•œ ์†์— ์ฅ๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒด๊ฒฉ์€ ๋ฏธ๊ตญ์ธ๋ฐ–์— ์—†์„ ๊ฒƒ์ด๋‹ค.


์—ฌ๋‹ด์€ ์ ‘์–ด๋‘๊ณ , ์–ธ์–ด๋กœ์„œ Oak์˜ ๊ณ„๋ณด๋ฅผ ๊ตณ์ด ํ‘œํ˜„ํ•˜์ž๋ฉด, ์•„๋ฒ„์ง€๋Š” C++, ์–ด๋จธ๋‹ˆ๋Š”Smalltalk(interpreter๋ผ๊ณ  ํ•˜๋Š” ๊ด€์ ์—์„œ)๋ฅผ ๋“ค ์ˆ˜ ์žˆ๊ฒ ๊ณ , ๋ฌผ๋ก  ๊ฐ์ฒด ์ง€ํ–ฅ์–ธ์–ด์˜ ์ •ํ†ต์ด๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. (์•„๋ฒ„์ง€๊ฐ€ Smalltalk๋กœ ์–ด๋จธ๋‹ˆ๊ฐ€ C++ ์ผ๊นŒ? ์•„๋‹ˆ, ์•„๋ฒ„์ง€๊ฐ€ C++, ์–ด๋จธ๋‹ˆ๊ฐ€ Green Project์ด๋‹ค!). Gosling์”จ์— ์˜ํ•˜๋ฉด, Oak๋Š” lisp๋‚˜ ๋‹ค๋ฅธ ์–ธ์–ด์—๋„ ์˜ํ–ฅ์„ ๋ฐ›์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์ดˆ๊ธฐ์˜ Oak ๋งค๋‰ด์–ผ์— ๋”ฐ๋ฅด๋ฉด, Green Project์˜ ํŽ˜์ด์ง€์— ๊ฐ€๋ฉด PostScript(๊ทธ๋ฆฝ๋‹ค!)์˜ Ver0.2์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.


1995๋…„ 5์›”์— ํƒ„์ƒํ•œ Java๋Š” 1996๋…„์— ๊ฐœ์ตœ๋œ ใ€ŒJavaOneใ€์—์„œ ์†Œ๊ฐœ๋˜์—ˆ์œผ๋ฉฐ, 80 ์ด์ƒ์˜ ํ˜‘์ฐฌ ๊ธฐ์—…๊ณผ 5000๋ช… ์ด์ƒ์˜ ์ฐธ๊ฐ€์ž๋กœ ๋Œ€์„ฑํ™ฉ์„ ๊ฑฐ๋‘์—ˆ๋‹ค. ์ด ํ–‰์‚ฌ๋Š” OpenSurce ํ”Œ๋žซํผ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ํฌ์ธํ„ฐ๋ฅผ ์ค‘์‹œํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์˜ค๋ธŒ์ ํŠธ ์–ธ์–ด๊ฐ€ Web์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์–ผ๋งˆ๋‚˜ ๋”ฑ ๋“ค์–ด ๋งž๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์ƒ์ง•์ ์ธ ์ผ์ด์—ˆ๋‹ค.


์—ญ์‚ฌ์ ์œผ๋กœ ๋ณด๋ฉด, Java์˜ ๋‹น์ดˆ ์ƒ๊ฐ๋“ค์€ Gosling์”จ์˜ ํ™ˆํŽ˜์ด์ง€์— ์žˆ๋Š” Java ํƒ„์ƒ ๋‹น์‹œ์˜ ใ€Œoriginal Java White Paperใ€์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค. ์ด ์ •์ฑ…์— ๋”ฐ๋ฅด๋ฉด James Gosling์”จ๊ฐ€ Green Project์—์„œ ๊ฐ€์ „์ œํ’ˆ์— ๋‚ด์žฅ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ Oak๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๊ทธ ์ •์‹ ์€ ์•„์ง ์‚ด์•„ ์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ์ด๋‹ค. (ํŽธ์ง‘: ํ˜„์žฌ, Gosling์”จ์˜ ํ™ˆํŽ˜์ด์ง€๋Š” ํ์‡„๋˜๊ณ  ์žˆ๋‹ค. original Java White Paper๋Š” ํ˜„์žฌ ๋‹ค์Œ URL๋กœ ์ฐธ์กฐํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ใ€ŒFocus on Java๏ผšon Overview, original Java White Paper by James Goslingใ€).


(1)Simple

ใ€€ใ€€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ๋‹จ์ˆœํ•ด์•ผ ์•Œ๊ธฐ ์‰ฝ๋‹ค.

(2)Object-Oriented

ใ€€ใ€€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด๋‹ค.

(3)Distributed

ใ€€ใ€€ ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ์ด๋‹ค.

(4)Robust

ใ€€ใ€€ ์•ˆ์ •ํ•˜๋‹ค.

(5)Secure

ใ€€ใ€€ ์•ˆ์ „ํ•˜๋‹ค.

(6)Architecture Neutral

ใ€€ใ€€ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ๋…๋ฆฝ์ ์ด๋‹ค.

(7)Portable

ใ€€ใ€€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ํ†ต์ผ๋˜์–ด ์žˆ๋‹ค.

(8)Interpreted

ใ€€ใ€€ Java์˜ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค.

(9)High performance

ใ€€ใ€€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ, ๋™์ž‘ ์†๋„๊ฐ€ ๊ณ ์„ฑ๋Šฅ์ด๋‹ค.

(10)Multithreaded

ใ€€ใ€€ multi-thread์ด๋‹ค.

(11)Dynamic

ใ€€ใ€€ ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•œ๋‹ค.


์œ„์˜ 11๊ฐœ ํ•ญ๋ชฉ์€ White Paper์— ๋ฒˆํ˜ธ ์—†์ด ์“ฐ์—ฌ์ ธ ์žˆ๋‹ค. ์•ž์œผ๋กœ, ์ด "์œ„๋Œ€ํ•œ ์ •์‹ "์˜ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ, Java VM์˜ ์•„ํ‚คํ…์ฒ˜ ๋ณ€์ฒœ์„ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค.


Simple, Object-Oriented, Distribute


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


White Paper์—๋Š” ์—†์ง€๋งŒ, ๋„คํŠธ์›Œํฌ์ƒ์˜ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ ํ™˜๊ฒฝ์— ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”Œ ์ˆ˜๋„ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ Java ๋ฐ–์— ๋ชจ๋ฅด๋Š”(ํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋ฅด๋Š”) ์šด(?)์ด ์ข‹์€ ๋…์ž๋ฅผ ์œ„ํ•ด์„œ, ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ํ•ด ๋ณด์ž. ํฌ์ธํ„ฐ๋ž€, ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋Œ€์ž…๋œ๋‹ค๋Š” ๊ฐœ๋…์—์„œ, ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ์ฃผ์†Œ์˜ ๊ด€๊ณ„๋ฅผ ์‹คํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ์šฐ์„  ๋ณ€์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋Œ€์ž…ํ•ด ๋‘”๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๊ทธ ์ฃผ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ ํฌ์ธํ„ฐ์ด๋‹ค. ํฌ์ธํ„ฐ ์ž์ฒด์˜ ํ˜•ํƒœ๋Š” ํฌ์ธํ„ฐํ˜•์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์ง€๋งŒ, ํฌ์ธํ„ฐ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ฃผ์†Œ์— ์–ด๋–ค ํ˜•ํƒœ์˜ ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค. ์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ–ˆ์„ ๋•Œ์˜ ํ˜•ํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํฌ์ธํ„ฐ๋Š” ์ทจ๊ธ‰ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ํ˜•ํƒœ๋Š” ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์‚ฌํ•ญ๋“ค์€ ๋ถ„์‚ฐ์˜ค๋ธŒ์ ํŠธ์—์„œ๋Š” ๊ณค๋ž€ํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์–ด๋Š ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์— ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๊ทธ ์˜ค๋ธŒ์ ํŠธ์— ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, ํ˜ธ์ถœํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ƒ๋Œ€๋ฐฉ์˜ ์‹œ์Šคํ…œ์˜ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ์งˆ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์นดํ”ผํ•ด ์˜ค์ง€ ์•Š์œผ๋ฉด ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.


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


ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์ด ์—†๋Š” Java์—์„œ๋Š”, ์ด๋Ÿฌํ•œ ์ผ์ด ๋ชจ๋‘ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌ์ธํ„ฐ๋ฅผ ํ—ˆ๋ฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. CORBA ์ŠคํŒฉ์—์„œ๋„ Java์˜ ์ž„ํ”Œ๋ฆฌ๋ฉ˜ํ…Œ์ด์…˜์ด ์žˆ๋‹ค. Java์—๋Š” RMI๋ผ๊ณ  ํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์›๊ฒฉ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ŠคํŒฉ์ด ์žˆ์–ด, ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ, ์ „์„ฑ๊ธฐ์ธ J2EE ์ŠคํŒฉ, SOAP ๋“ฑ์— ์žˆ์–ด๋„ ๋ง์ด๋‹ค. ์ด๊ฒƒ์€ ๊ณง, Simple, Object-Oriented, Distributed๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ์ƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


Robust, Secure, Architecture Neutral, Portable


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


White Paper์—์„œ๋Š” Secure ๊ตฌํ˜„ ์ •์ฑ…์œผ๋กœ virus-free, tamper-free๋ฅผ ์ œ์ฐฝํ•˜๊ณ  ์žˆ๋‹ค. ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์—ฌ๋Ÿฌ ๊ตฌ๋ฉ์ด ๋ฐœ๊ฒฌ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ํ˜„์‹ค์ด์ง€๋งŒ, ์ด์ƒ์ ์ธ ๋ชฉํ‘œ๋กœ๋Š” virus-free, tamper-free์ด๋‹ค.


์ธํ„ฐ๋„ท์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ์˜ ๋ฐ์ดํ„ฐ, ์‹คํ–‰ ํ˜•์‹์„ ์˜์‹ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ถ„์‚ฐ ์˜ค๋ธŒ์ ํŠธ์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์ด๋‹ค. ์ด๋Ÿฐ ์ƒ๊ฐ์ด Architecture Neutral, Portable์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ด ์˜ค๋ธŒ์ ํŠธ๋Š” ์ด ๋ฉ”์ด์ปค์˜ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ •์ˆ˜๋Š” 16bit๊ฐ€ ๋˜์–ด์•ผ ํ•ด. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ด์ชฝ์˜ ์‹œ์Šคํ…œ์—์„œ ๋ณด๋‚ด๋Š” ๋ณ€์ˆ˜๋Š” 16bit ์ดํ•˜๋กœ ๋–จ์–ด๋œจ๋ ค ๋‘์ง€ ์•Š์œผ๋ฉดโ€ฆโ€ฆ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์ด ์ ‘์†๋œ ์ธํ„ฐ๋„ท์ƒ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊น๋‹ค.


Interpreted


๋“œ๋””์–ด ๊ตฌํ˜„์˜ ์ด์•ผ๊ธฐ ์ฐจ๋ก€์ด๋‹ค. Interpreted๋ž€, ๋ฒˆ์—ญํ•ด ์‹คํ–‰ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์„ ๋ฐฐ์ œํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ์ฑ…์ž„์„ ์–ธ์–ด์ธก๋ฉด์—์„œ ํก์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์ด์™€ ๋”๋ถˆ์–ด, ํ”Œ๋žซํผ ์˜์กด์„ฑ์„ ๋ฐฐ์ œํ•˜๊ณ , ์–ด๋Š ์‹œ์Šคํ…œ์—์„œ๋‚˜ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋„ ํ”Œ๋žซํผ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ํ†ต์ผ๋œ ํ‘œํ˜„์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, Smalltalk์™€ ๊ฐ™์€ interpreter ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


interpreter์˜ ์ƒ๋Œ€์–ด๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฏธ๋ฆฌ ์ž์—ฐ ์–ธ์–ด์— ๊ฐ€๊นŒ์šด ์›์‹œ์ฝ”๋“œ๋ฅผ CPU๊ฐ€ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•ด, ๋‚˜์ค‘์— ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด interpreter๋Š”, ์›์‹œ ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ, ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค. interpreter์˜ ์‹œ์ดˆ๋ผ๊ณ  ํ•˜๋ฉด Bill Gates๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ BASIC์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. Java๋Š” BASIC๊ณผ ๋‹ฌ๋ฆฌ, ์›์‹œ ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ผ๊ณ  ํ•˜๋Š” ์ค‘๊ฐ„ ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜๊ณ  ๋‚˜์„œ, ๊ทธ๊ฒƒ์„ interpreter๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ, Java์™€ ๊ฐ™์€ ์ค‘๊ฐ„ ์ฝ”๋“œ ๋ฐฉ์‹์˜ interpreter๋Š”, Java๊ฐ€ ์ตœ์ดˆ์ด๋‹ค. Smalltalk๋ผ๊ณ  ๋งํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์„ธ์ƒ์˜ ์—ฐ๊ตฌ์ž์˜ ๋…ผ๋ฌธ์„ ๋‹ฅ์น˜๋Š” ๋Œ€๋กœ ์ฝ์–ด ๋ณด์ง€ ์•Š์œผ๋ฉด ์ •๋ง๋กœ ๋ฌด์—‡์ด ์ตœ์ดˆ ์ธ๊ฐ€, ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๋ก ์€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์ƒ์šฉ ์—ฌ๋ถ€์™€ ๋Œ€์ค‘์ ์ธ ์˜๋ฏธ์—์„œ ๊ทธ ์‹œ์ž‘์„ ์ฐพ์•„๋ณด๋ฉด UCSD Pascal์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 1970๋…„๋Œ€ ์ดˆ์˜ ๋งˆ์ดํฌ๋กœ ์ปดํ“จํ„ฐ ์‹œ๋Œ€๋Š”, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋งค์šฐ ๊ณ ๊ฐ€์—ฌ์„œ CPU๋Š” ์“ธ๋ฐ์—†์ด ๋Šฆ์€ ๊ธฐ๊ธฐ๊ฐ€ ๋  ์ˆ˜ ๋ฐ–์— ์—†๋Š” ํ™˜๊ฒฝ์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ ๊ฐ€์šด๋ฐ, ๊ตฌ์กฐํ™” ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ํ’๋ถ€ํ•œ ํฌ๋งท ์„ ์–ธ์„ ๊ฐ€์กŒ๋˜ UCSD Pascal์˜ ์ค‘๊ฐ„ ์ฝ”๋“œ ์ปดํŒŒ์ผ ๋ฐฉ์‹์€, ๊ฐœ๋ฐœ์ž NiklausWirth ๋ฐ•์‚ฌ์˜ "์–ธ์–ด์ŠคํŒฉ๊ณผ ์ตœ์ ํ™”๋Š” ๋…๋ฆฝ๋œ ๋ฌธ์ œ์ด๋‹ค"๋ผ๊ณ  ํ•˜๋Š” ๋…ผ์˜๋ฅผ ์ฆ๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ ๋„ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์‹ค์ œ๋กœ ์ž„ํ”Œ๋ฆฌ๋ฉ˜ํ…Œ์ด์…˜ ์ธก๋ฉด์—์„œ๋Š” ๊ฝค ์œ ๋ฆฌํ–ˆ๋‹ค.


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


์‹ค์ œ๋กœ, ์ž์—ฐ ์–ธ์–ด์— ๊ฐ€๊นŒ์šด ํ”„๋กœ๊ทธ๋žจ ๊ธฐ์ˆ ์ธ Java ์–ธ์–ด๋ฅผ *.java ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•˜๊ณ  javac ์ปค๋งจ๋“œ๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ์ธ *.class ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค. java.exe๋Š” ์ด ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•˜๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Ÿฐ ํ๋ฆ„์€ UCSD Pascal๊ณผ ์™„์ „ํžˆ ๋˜‘๊ฐ™๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ Java์˜ ๊ฒฝ์šฐ, ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ์˜ ํšจ์œจํ™”๋ฅผ ์ƒ๊ฐํ•ด์„œ, ZIP์œผ๋กœ ์••์ถ•๋˜์–ด ์žˆ๊ธฐ๋„ ํ•œ๋‹ค. CPU์™€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ด€๊ณ„์™€ ๋น„๊ตํ•˜๋ฉด, ์ธํ„ฐ๋„ท์˜ ํ†ต์‹  ์†๋„๋‚˜, ๋””์Šคํฌ์˜ I/O ์†๋„๊ฐ€ ๋” ๋Šฆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ CPU๋กœ ZIP์œผ๋กœ ์••์ถ•ํ•ด ์ „์†ก ๋Ÿ‰์„ ์ค„์ด๋˜์ง€, ์••์ถ•์„ ํ•˜์ง€ ์•Š๊ณ  CPU์˜ ๋ถ€ํ•˜๋ฅผ ์ €ํ•˜์‹œํ‚ค๋˜์ง€ ์˜ ์„ ํƒ์—์„œ ์ „์ž๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.


์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰ํ•˜๋Š” ํ˜•์‹(/opt/java/bin/java๋ผ๋“ ์ง€ java.exe)์„ Java Virtual Machine(Java ๊ฐ€์ƒ ์‹œ์Šคํ…œ, ์ดํ•˜JVM)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ์ข…์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ OS๋กœ JVM์„ ๋งŒ๋“ค์–ด ๋ฒ„๋ฆฌ๋ฉด, ์–ด๋Š ์‹œ์Šคํ…œ์—์„œ๋„, ์™„์ „ํžˆ ๋˜‘๊ฐ™์€ ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์–ด๋Š ์‹œ์Šคํ…œ์—์„œ๋„ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ์„œ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ฅด๋ฐ”์ดํŠธ ์ฝ”๋“œ๊ฐ€ ์–ด๋Š ์ •๋„ ๊ธฐ๊ณ„์–ด์— ๊ฐ€๊นŒ์šฐ๋ฉด ์‹คํ–‰๋„ ๊ฐ€๋ฒผ์šด ๋ฒ•์ด๋‹ค. ๋ฒˆ์—ญํ•ด์„œ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ€์ • ์‚ฌ์šฉ์ด ์žˆ์œผ๋ฉด, ๋ฒˆ์—ญํ•œ ์‹œ์ ์—์„œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ์จ, ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ฃฝ๋Š” ์ผ์€ ์—†์–ด์ง„ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•ด์„œ, ์ธํ„ฐ๋„ท์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ชจ๋“  ์š”๊ฑด๋“ค์ด JVM์ด ๋“ฑ์žฅํ•จ์œผ๋กœ์จ ๋‹จ๋ฒˆ์— ํ•ด๊ฒฐ๋œ๋‹ค.


High Performance


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


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


JIT์˜ ๋“ฑ์žฅ


์•ž์—์„œ ์†Œ๊ฐœํ•œ ํผํฌ๋จผ์Šค์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ์žฅํ–ˆ๋˜ ๊ฒƒ์ด JIT(Just In Time Compiler๏ผš์‹คํ–‰ ์‹œ ์ปดํŒŒ์ผ)๋‹ค. ์ด๊ฒƒ์€, ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค, ์ค‘๊ฐ„์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋ฐœ์ƒ์ด๋‹ค. ๋‹น์—ฐํ•œ ๋ง์ด๊ฒ ์ง€๋งŒ, ์‹คํ–‰ ์‹œ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ดˆ๋กœ ์‹คํ–‰ํ•  ๋•Œ๋Š” ์‹œ๊ฐ„์ด ์•ฝ๊ฐ„ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š”, ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ •์˜๋Š” constructor๋ผ๊ณ  ํ•˜๋ฉฐ, ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์ปดํŒŒ์ผ์€ ์ฒซ ํšŒ ์ฆ‰ ํ•ด๋‹น ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ๋•Œ ๋™์ž‘ํ•˜๋ฏ€๋กœ, constructor๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ž์ฃผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผ์ด ๋ฌด๊ฑฐ์›Œ์ ธ ๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒฐ์ ์ด ์žˆ์ง€๋งŒ, ๋ณดํ†ต ์ธํ„ฐ๋„ท ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ˜๋ณต์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์—, interpreter์— ๋น„ํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ฒŒ ๋œ๋‹ค. ์•„๋งˆ๋„, ๋ฐ˜๋ณต์ด ์ „ํ˜€ ์—†๋Š” ์ง์„  ๋„๋กœ์™€ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์€(๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์–ด๋ ต๊ฒ ์ง€๋งŒ) interpreter๊ฐ€ ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค.


๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ๋˜๋ฉด ์ด์‹์„ฑ์ด ์—†์–ด์งˆ ๊ฑฐ๋ผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  ์‚ฌ์šฉ๋  ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋กœ๋“œ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, java.exe์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์—†์–ด์ ธ ๋ฒ„๋ฆฐ๋‹ค. ๋‹ค๋ฅธ UNIX ์‹œ์Šคํ…œ์œผ๋กœ ๊ธฐ๋™ํ•  ๋•Œ๋Š”, ๊ทธ ์‹œ์Šคํ…œ์˜ ์ƒˆ๋กœ์šด ๊ธฐ๊ณ„์–ด๊ฐ€ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ, ์ด์‹์— ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฌผ๋ก  ์ทจ๊ธ‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹๋„ ์œ ์ง€๋˜๋ฏ€๋กœ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.


JIT๋Š” ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด์˜ ์„ฑ๋Šฅ๋ณด๋‹ค๋Š” ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์ด ์ค‘์š”ํ•œ ์‚ฌํ•ญ์ด๋‹ค.


๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๊ฐœ์„ 


Java๋Š” ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฆด๋ฆฌ์Šค๋ฅผ JVM์ด ์ž๋™์ ์œผ๋กœ ์‹ค์‹œํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ , JVM์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ์‹คํ–‰ํ•  ๋•Œ ์ง€์ •ํ•œ๋‹ค(์ด ์˜์—ญ์„ heap ์ด๋ผ๊ณ  ํ•œ๋‹ค). ์ดˆ๊ธฐ์˜ Java์—์„œ๋Š” heap์„ ๋Œ€์ถฉ๋Œ€์ถฉ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ๋นˆ ๊ณณ์ด ์—†์œผ๋ฉด ์ •๋ฆฌํ•ด์„œ ๋ฆด๋ฆฌ์Šคํ•˜์˜€๋‹ค. ์ฆ‰, ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ณณ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋™์ž‘์‹œํ‚ค๋ฉด, ์ •๋ฆฌํ•ด์„œ ๋ฆด๋ฆฌ์Šคํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๊ธˆ๋ฐฉ ์ฐจ ๋ฒ„๋ฆฐ๋‹ค. Heap ์‚ฌ์ด์ฆˆ๋ฅผ ํฌ๊ฒŒ ์žก์•„์ฃผ๋ฉด, heap์ด ์—†์–ด์งˆ ๋•Œ๊นŒ์ง€ ์ˆœ์กฐ๋กญ๊ฒŒ ์›€์ง์ด๋‹ค๊ฐ€ ์กฐ๊ธˆ ๋ฉˆ์ถ”๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์ž‘๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.


๊ผญ Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ๋ผ๋„, ๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ , ๊ฝค ์˜ค๋žซ๋™์•ˆ ์˜ค๋ธŒ์ ํŠธ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋งค๋‹ˆ์ง€๋จผํŠธ ์˜์—ญ์—์„œ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š๋‹ค.


๊ทธ๋ž˜์„œ, New์™€ Old๋กœ heap์˜ ๋‚ด์šฉ์„ 2๊ฐœ๋กœ ๋‚˜๋ˆˆ ๊ตฌ์กฐ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ๋‹จ๊ธฐ์ ์œผ๋กœ ์ฐธ์กฐ๋˜์ž ๋งˆ์ž ํ•„์š” ์—†๊ฒŒ ๋˜๋Š” ๋ณ€์ˆ˜๋Š”, New์˜ heap์— ๋†“๊ณ , ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฆด๋ฆฌ์Šค์‹œํ‚จ๋‹ค. ํ•œํŽธ, ์–ด๋Š ์ •๋„ ์˜ค๋žซ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๋Š”, Old์˜ heap์— ๋†“๊ณ , ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์— ๋ฆด๋ฆฌ์Šค์‹œํ‚จ๋‹ค. ์ด Old๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์— ์ผ์–ด๋‚˜๋Š” ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์„ Full GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


HotSpot์˜ ๋“ฑ์žฅ


heap์˜ ๊ฐœ์„ ์€ Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ์‹คํ–‰์— ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์ณค๋‹ค. ์ด์™€ ๋™์‹œ์—, Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋Š” ๋”์šฑ ๋งŽ์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ํ”„๋กœ๊ทธ๋žจ๋„ ๊ฑฐ๋Œ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ๊ฑฐ๋Œ€ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š”, JIT์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ปดํŒŒ์ผํ•˜๊ฒŒ ๋˜๋ฉด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๊ฒƒ๋„ ์ข‹์ง€ ์•Š์€ ๋ฐฉ์‹์ด๋‹ค. ์•„๋ฌด๋ฆฌ JIT๊ฐ€ ๊ณ ์†์œผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค๊ณ  ํ•ด๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ํ•ด์„ํ•˜๋Š” ๋„์ค‘์— ํ”„๋กœํŒŒ์ผ์„ ์ทจํ•ด, ํŠนํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„๋งŒ ์ปดํŒŒ์ผํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฐ€๋งŒํžˆ ๋‘๋ฉด, ์ข€ ๋” ๋นจ๋ผ์ง€์ง€ ์•Š์„๊นŒ? ๋งž๋Š” ๋ง์ด๋‹ค. ์ด๋Ÿฐ ๋ฐฉ์‹์ด ๋ฐ”๋กœ HotSpot์ด๋‹ค. ์ด ๊ธฐ์ˆ ์€ ํœด๋ ›ํŒฉ์ปค๋“œ(์ดํ•˜ HP)๊ฐ€ JavaSoft์— ์ œ์•ˆํ•ด, ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋‹ค. ์•„~ JavaSoft๋Š” ์–ธ์ œ ์˜คํ”ˆ ๋˜์—ˆ๋‹จ ๋ง์ธ๊ฐ€!


๋งŽ์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „์ฒด ์ฒ˜๋ฆฌ์˜ 20%๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์˜ 80%๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜›๋‚ , CISC ์‹œ์Šคํ…œ๊ณผ RISC ์‹œ์Šคํ…œ ์ค‘ ์–ด๋Š ์ชฝ์ด ๋” ์šฐ์ˆ˜ํ•˜๋ƒ๋Š” ๋…ผ์Ÿ์ด ์žˆ์—ˆ๋Š”๋ฐ, HP๊ฐ€ ์žฌ๋นจ๋ฆฌ RISC๋ฅผ ์ƒ์šฉํ™”ํ–ˆ๋‹ค. ์ด๊ฒƒ์€, CISC ์‹œ์Šคํ…œ์—์„œ๋Š”, ์‹คํ–‰ ์‹œ๊ฐ„์˜ ๋Œ€๋ถ€๋ถ„์„ ์ผ๋ถ€์˜ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์†Œ๋น„๋˜๊ณ  ์žˆ์–ด, ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ๋Š” ๋‚˜๋จธ์ง€์˜ ๋ช‡ ์•ˆ ๋˜๋Š” ์‹œ๊ฐ„๋งŒ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์‹คํ–‰ ์‹œ๊ฐ„์˜ ๋Œ€๋ถ€๋ถ„์„ ์†Œ๋น„ํ•˜๊ณ  ์žˆ๋Š” ๋ช…๋ น์„ธํŠธ๋ฅผ ๊ณ ์†ํ™”ํ•ด์„œ, ๋ณต์žกํ•œ ๋ช…๋ น ์„ธํŠธ๋ฅผ ์—ฌ์œ  ์žˆ๊ฒŒ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–จ๊นŒ? HotSpot์ด ์ด์™€ ๊ฐ™์€ ํ˜•์‹์ด๋‹ค.


์˜ˆ์ „์— C์™€ Java ์ค‘ ์–ด๋Š ์ชฝ์ด ๋” ๋น ๋ฅธ๊ฐ€? ๋ผ๋Š” ์งˆ๋ฌธ์—, ์ตœ์ ํ™” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•ด ์ž˜ ์ปดํŒŒ์ผ ๋œ C๋ณด๋‹ค Java๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๋Š” ๋Œ€๋‹ต์„ ํ•œ ์ ์ด ์žˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์ž˜ ์‚ฌ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ด๊ธธ ์ˆ˜ ์—†๊ฒ ์ง€๋งŒ, ์•„๋งˆ์ถ”์–ด๊ฐ€ ๋‹จ์ง€ ์ตœ์ ํ™” ์˜ต์…˜์„ ์ง€์ •ํ•ด ์ปดํŒŒ์ผ ํ•œ C์˜ ๊ณ„์‚ฐ ํ”„๋กœ๊ทธ๋žจ๊ณผ Java๋ฅผ ๋น„๊ตํ•˜์˜€์„ ๋•Œ, Java๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ์˜ˆ๊ฐ€ ์‹ค์ œ๋กœ ์žˆ์—ˆ๋‹ค. ๋ช‡ ๋ฒˆ์ด๋‚˜ interpreter๋กœ ์‹คํ–‰ํ•œ ํ›„, ํ”„๋กœํŒŒ์ผ์„ ์ทจ๋“ํ•ด์„œ, ์ด๊ฒƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ปดํŒŒ์ผ ํ•˜๋ฏ€๋กœ, C๋กœ ๋งํ•˜์ž๋ฉด, prof ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” "์ตœ์ ํ™” ์ปดํŒŒ์ผ"๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.


์ตœ๊ทผ Intel์˜ Itanium์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์ธ EPIC(Explicitly Parallel Instruction Computing๏ผš๋ช…์‹œ์  ๋ณ‘๋ ฌ ๋ช…๋ น ์ปดํ“จํŒ…)์—์„œ๋Š”, ์ปดํŒŒ์ผ ์‹œ์— ์ตœ์ ํ™”ํ•ด, ๋‚ด๋ถ€ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ๋‚ญ๋น„ ์—†๊ฒŒ ์‚ฌ์šฉํ•ด, ๊ณ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•œ๋‹ค. HotSpot ๊ธฐ์ˆ ๊ณผ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. HP๋Š” Itanium์„ ํƒ‘์žฌํ•œ HP-UX์‹œ์Šคํ…œ์— HotSpot์„ ๊ตฌํ˜„ํ•œ JVM์„ ๋ฒŒ์จ ๋ฆด๋ฆฌ์Šค ํ–ˆ์œผ๋ฉฐ, ๋†’์€ ์„ฑ๋Šฅ์„ ์‹คํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.


๊ทธ๋Ÿผ, ์ตœ์ดˆ์˜ ์ปดํŒŒ์ผ ์‹œ์— ํ”„๋กœํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘๋„๋ก ์ง€์ •ํ•ด์„œ, ํ…Œ์ŠคํŠธ Run์„ ํ•œ๋ฒˆ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ตœ์ ํ™” ์ปดํŒŒ์ผ์— ๋ฐ˜์˜ํ•œ๋‹ค. ์ด๋Š” ๊ณ ๋„์˜ ์ปดํŒŒ์ผ ํ…Œํฌ๋‹‰์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ, Java์—์„œ๋Š” ์ ๋‹นํ•˜๊ฒŒ ํ•ด๋„ ์ž๋™์ ์œผ๋กœ ํ•ด ์ค€๋‹ค. ๊ณ„์‚ฐ์— ์‚ฌ์šฉํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ๋ฐ”๋€” ๊ฒฝ์šฐ, C++์—์„œ๋Š” prof๋ฅผ ๊ณ ์ณ ์ปดํŒŒ์ผ์„ ๋‹ค์‹œ ํ•˜์ง€๋งŒ, Java์—์„œ๋Š” ๋‹จ์ง€ ์‹คํ–‰๋งŒํ•˜๋ฉด, ๊ทธ ๋•Œ์— ์‘ํ•œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.


HotSpot๊ณผ heap์˜ ๊ฐœ์„ ์€ JDK(Java Development Kit) 1.3.x๋ถ€ํ„ฐ ์‹คํ˜„๋˜์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ, EC ์‚ฌ์ดํŠธ์—์„œ Java๋ฅผ ์„ฑ๋Šฅ์˜ ์ €ํ•ด์—†์ด ์ด์šฉ๋˜๊ธฐ์— ์ด๋ฅธ ๊ฒƒ์ด๋‹ค. HP์˜ Itanium์šฉ JDK์˜ ์ตœ์‹  ๋ฒ„์ „์€ 1.4.2์ด๋‹ค.


Multithreaded (multi-thread)


HotJava์™€ ๊ฐ™์ด ๋™์˜์ƒ์„ ์ทจ๊ธ‰ํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ multi-thread๋Š” ํ•„์ˆ˜ ์š”๊ฑด์ด๋‹ค. 1๊ฐœ์˜ ๋™์˜์ƒ์ด ์›€์ง์ด๊ณ  ์žˆ๋Š” ๋™์•ˆ์— ๋‹ค๋ฅธ ๋ฒ„ํŠผ์˜ ์กฐ์ž‘์„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ํ•˜๋ฉด, ์™„์ „ํžˆ ์“ธ๋ชจ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฌผ๋ก , ์š”์ฆ˜์—๋Š” Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ ๋ณต์ˆ˜์˜ request๋ฅผ multi-thread๋กœ ๋ณ‘ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š” ๋ถˆ๊ฐ€๊ฒฐํ•œ ์š”์†Œ์ด๋‹ค. ๋‹น์ดˆ์˜ Java์—์„œ multi-thread๋Š” ๋ชจ๋‘ JVM์œผ๋กœ ์‹คํ˜„๋˜๊ณ  ์žˆ์—ˆ๋‹ค. interpreter๊ฐ€ ํƒ€์ž„ ์‰์–ด๋ง์„ ํ†ตํ•ด์„œ ๊ฐ€์ƒ์ ์œผ๋กœ ๋ณต์ˆ˜์˜ thread๋ฅผ ๋™์ž‘์‹œํ‚ค๊ฒŒ ๋˜์–ด ์žˆ์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ interpreter๋กœ ์‹คํ–‰๋˜๋Š” thread๋ฅผ green thread๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์•„๋งˆ Green Project์˜ ํ”์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. JIT, HotSpot์˜ ๋“ฑ์žฅ์œผ๋กœ ์‹คํ–‰ ์‹œ์— ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ, ๊ฐ€์ƒ ์‹œ์Šคํ…œ์ƒ์˜ thread๋„, OS๊ฐ€ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” thread๊ฐ€ ๋˜์—ˆ๋‹ค. ์ด๊ฒƒ์„ native thread๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Green thread์— ๋น„ํ•˜๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ˜„๊ฒฉํžˆ ์ ๋‹ค.


Dynamic


C++์—๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ผ๊ณ  ํ•˜๋Š” ๊ฐœ๋…์ด ์žˆ์ง€๋งŒ, Java์—๋Š” ์—†๋‹ค. ๋น„์Šทํ•œ ๊ฒƒ์„ ์ฐพ์ž๋ฉด Class Path๊ฐ€ ์žˆ๋‹ค. Class Path๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ CLASS_PATH์— ์„ค์ •ํ•ด Java๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•œ๋‹ค. OS์˜ ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ด์œ ๋Š” ์‹คํ–‰ ์‹œ์— ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ด๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Java๋Š” ํ”„๋กœ๊ทธ๋žจ์„ *.java๋กœ ๊ธฐ์ˆ ํ•ด, javac ์ปค๋งจ๋“œ๋กœ ์ปดํŒŒ์ผ ํ•ด์„œ, *.class๋ผ๋Š” ์ด๋ฆ„์˜ ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์„ค๋ช…ํ–ˆ์ง€๋งŒ, ์ด ํด๋ž˜์Šค ํŒŒ์ผ์ด ์‹คํ–‰ ์‹œ์— ์ฝํ˜€์ง€๋ฏ€๋กœ, ์ฝ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ง€์ •ํ•ด๋‘์ง€ ์•Š์œผ๋ฉด ์ฐพ์ง€๋ฅผ ๋ชปํ•˜๊ฒŒ ๋œ๋‹ค.


UNIX์—๋Š”, gnuzip์ด๋ผ๋Š” ํ‘œ์ค€ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค. ๋Œ€์ฒด๋กœ ๋ชจ๋“  UNIX OS์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ZIP์—๋Š” ์—†๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. Windows์˜ WinZip๋กœ ์ž‘์„ฑํ•œ ZIP ํŒŒ์ผ์€ UNIX์—์„œ ์••์ถ•์„ ํ’€๊ณ  ์‹ถ์–ด๋„ ํ’€ ์ˆ˜ ์—†๋‹ค! ์ด๋Ÿด ๊ฒฝ์šฐ์—๋Š”, JDK์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” jar ์ปค๋งจ๋“œ๋ผ๊ณ  ํ•˜๋Š” Java ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Windows์˜ ์—”์ง€๋‹ˆ์–ด๋ผ๋ฉด ์ต์ˆ™ํ•  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋Œ€๋กœ, UNIX์˜ tar ์ปค๋งจ๋“œ๋กœ ์ž‘์„ฑํ•œ ํŒŒ์ผ์„ Windows์—์„œ ํ’€๊ณ  ์‹ถ์„ ๋•Œ๋Š”, jar ์ปค๋งจ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค, Windows์—๋Š” tar ์ปค๋งจ๋“œ์˜ ๋ฌด๋ฃŒ ๋ฒ„์ „์€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


jar์ปค๋งจ๋“œ๋ฅผ ๊ฐ‘์ž๊ธฐ ๋“ฑ์žฅ์‹œ์ผœ ๋ฏธ์•ˆํ•˜์ง€๋งŒ, Class Path์— ๋‹ค์ˆ˜์˜ class ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒƒ๋„ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ๋Š” ๊ท€์ฐฎ์€ ์ผ์ด๋‹ค. ๊ทธ๋Ÿฐ ์ธก๋ฉด์—์„œ Java์—์„œ๋Š” WinZip๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ jar ์ปค๋งจ๋“œ๋กœ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์„ ์••์ถ•ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋˜์–ด ์žˆ๋‹ค. ์ด ํŒŒ์ผ์€ *.jar ๋ผ๊ณ  ํ•˜๋Š” ํ™•์žฅ์ž๋ฅผ ๋ถ™์ด๊ธฐ ๋•Œ๋ฌธ์— jarํŒŒ์ผ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. JavaํŒ์˜ tar๋‹ˆ๊นŒ jar๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?


ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ๋“ค์–ด ๋†“์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ „๋ถ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. Jar๋กœ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋ฅผ ์ •๋ฆฌํ•ด์„œ ๊ฑฐ๋Œ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ•ด๋„, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰ ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. Swing๋„ ๊ทธ๋ ‡๋‹ค. ์ „๋ถ€ ์ฝ์–ด ๋“ค์ธ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํฐ์ผ์ผ ๊ฒƒ์ด๋‹ค.


๊ทธ๋Ÿฐ๋ฐ, ์‹คํ–‰ ์‹œ์— ํด๋ž˜์Šค๋ฅผ ์ฝ์–ด ๋“ค์ด๋Š” ๋ฐฉ์‹์€ ์˜ค๋Š˜๋‚  Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ํ…Œํฌ๋†€๋กœ์ง€ ๋ฐœ์ƒ์„ ์žฌ์ด‰ํ•˜๋Š” ํฐ ์—ญํ• ์„ ํ•˜์˜€๋‹ค. ์‹คํ–‰ ์‹œ์— ๋™์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ด๋Š” ๊ธฐ๋Šฅ์ด ์—†์—ˆ๋‹ค๋ฉด, JSP(Java Server Pages)์™€ ๊ฐ™์€ ์ŠคํŒฉ๋„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, *.jsp ํŒŒ์ผ ์•ˆ์— Java์–ธ์–ด๋ฅผ ๋ฌป์–ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ํ†ต์ƒ์ ์œผ๋กœ JSP๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋Š” *.java๊ฐ€ ์‹ ๊ทœ๋กœ ์ƒ์„ฑ๋˜์–ด javac๋กœ ์ปดํŒŒ์ผ ๋˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ *.class๊ฐ€ ์ž‘์„ฑ๋œ๋‹ค. ์ด *.class๋Š” Servlet์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.


๊ทธ๋Ÿฌ๋‚˜, JSP๋„ ๊ณ ๋„๋กœ ๋น„๋Œ€ํ™”๋˜๊ณ  ์žˆ๋Š” ์˜ค๋Š˜๋‚ , ์‚ฌ์ „์— ์ปดํŒŒ์ผ ํ•ด ๋‘๋Š” ๊ธฐ๋Šฅ์„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ๋Š” ํ‘œ์ค€์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. JSP๋ฅผ *.java๋กœ ๋ณ€ํ™˜ํ•œ ์‹œ์ ์—์„œ 2Gbytes๋ฅผ ๋„˜์–ด ๋ฒ„๋ ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด ๋ฒ„๋ฆฌ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ , ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š”, ์‚ฌ์ „์— ์ปดํŒŒ์ผํ•ด ๋‘๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ•˜๊ณ  ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ ์›ƒ๊ธฐ์ง€๋„ ์•Š๋‹ค.


ํ•œ ๋ฒˆ ์šด์˜์„ ์‹œ์ž‘ํ•˜๋ฉด ๋ฉˆ์ถœ ์ˆ˜ ์—†๋Š” Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ, ๋ฒ„๊ทธ์— ์˜ํ•œ ์›์‹œ์ฝ”๋“œ์˜ ์ˆ˜์ •์„ ๋ฐ˜์˜์‹œํ‚ค๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ(deployment)๊ฐ€ ์ˆœ์กฐ๋กญ๊ฒŒ ํ–‰ํ•ด์ ธ์•ผ ํ•œ๋‹ค. ํด๋ž˜์Šค๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๋Š” Java์˜ ์ƒ๊ฐ์ด Web ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—๋„ ๊ณ„์†๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.


โ—†ใ€€์ปดํ“จํ„ฐ ๊ทธ ์ž์ฒด์˜ ์—ญ์‚ฌ๊ฐ€, ์ด์ œ ๊ฒจ์šฐ ๋ฐ˜์„ธ๊ธฐ๋ฅผ ์ง€๋‚˜๊ณ  ์žˆ๋Š” ๊ฐ€์šด๋ฐ, ๋ฒŒ์จ 8๋…„์˜ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Java๋Š” ์–ด๋Š๋ง ๊ฒฐ์ฝ” ์ƒˆ๋กœ์šด ์–ธ์–ด๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์ปดํ“จํ„ฐ ์†Œ๋…„์˜ ์‹œ๋Œ€๋ถ€ํ„ฐ, Jobs์”จ๋‚˜, Gosling์”จ์™€ ๊ฐ™์€ ์„ธ๋Œ€๋ฅผ ๋ณด๋‚ธ ์—”์ง€๋‹ˆ์–ด๋กœ์„œ Java์˜ ์ŠคํŒฉ์€ ๋Œ€๋‹จํ•˜๋‹ค๊ณ  ๋Š๋‚€๋‹ค. ์ด๋Ÿฐ ๋‚˜์˜ ์ƒ๊ฐ์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ์ „ํ•ด์ง€๋ฉด ๋‹คํ–‰์ผ ๊ฒƒ์ด๋‹ค. Java๋ฅผ ๋„“์€ ๋…์ž์ธต์—๊ฒŒ ์•„์ฃผ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜๋Š” ์—†์—ˆ์ง€๋งŒ, ์ „์ˆ ํ•œ Original Java Whitepaper๋‚˜, Java ํƒ„์ƒ์˜ ํŽ˜์ด์ง€๋ฅผ ์•„์ง ๋ณด์ง€ ์•Š์€ ์•Š์•˜๋‹ค๋ฉด, ๊ผญ ๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

๋ฐ˜์‘ํ˜•

+ Recent posts