์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
์ถ์ฒ : 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 ํ์์ ํ์ด์ง๋ฅผ ์์ง ๋ณด์ง ์์ ์์๋ค๋ฉด, ๊ผญ ๋ณด๊ธฐ๋ฅผ ๋ฐ๋๋ค.