๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. just-in-time ์ปดํ์ผ[ํธ์ง]
์ปดํจํฐ ๊ณผํ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๋ ์ฉ์ด. C๋ C++์์ ํ๋ ๊ฒ์ฒ๋ผ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ ์ ์ฒ์ ํ ๋ฒ ์ปดํ์ผ[1]ํ๋ ๋์ , ํ๋ก๊ทธ๋จ์ ์คํํ๋ ์์ ์์ ํ์ํ ๋ถ๋ถ์ ์ฆ์์ผ๋ก ์ปดํ์ผํ๋ ๋ฐฉ์์ ๋งํ๋ค.
๋ณดํต ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ธ์ด ๊ตฌํ๋ค์ด ์ฑ๋ฅ ํฅ์์ ๋ชฉ์ ์ผ๋ก ๋์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, JIT ์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ๋ ๋์ ์ฒ์ ์คํ๋ ๋ ์ธํฐํ๋ฆฌํธ๋ฅผ ํ๋ฉด์ ์์ฃผ ์ฐ์ด๋ ์ฝ๋๋ฅผ ์บ์ฑํ ๋ค[2], ์ดํ์๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ๋๋ฌธ์ ์ธํฐํ๋ฆฌํฐ์ ๋๋ฆฐ ์คํ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฌ์ค JIT '์ปดํ์ผ๋ฌ'๋ณด๋ค๋ JIT '์ธํฐํ๋ฆฌํฐ'๊ฐ ๋ ์ ํํ ํํ์ด๋ค. ๋ฐ์ดํธ์ฝ๋ ์ปดํ์ผ์ ์ฌ์ฉํ๋ Java๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ ๋ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.
๋จ์ ์ด๋ผ๋ฉด ์ด๊ธฐ ๊ตฌ๋ ์์๋ ์์ค ์ฝ๋(ํน์ ๋ฐ์ดํธ์ฝ๋)๋ฅผ ์คํ ๋จ๊ณ์์ ์ปดํ์ผํ๋ ๋ฐ์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋นํด ์คํ ์๋ ๋ฉด์์ ์ํด๋ฅผ ๋ณธ๋ค๋ ๊ฒ์ผ๋ก, ํนํ ์คํ ์๊ฐ์ด ๋งค์ฐ ์งง์ ๊ฒฝ์ฐ์๋ ์ ์จ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์ ๋๋ก ์ธ๊ถ๋จน๊ธฐ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ๋๋๋ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ ์ํฉ์ด ๋ฒ์ด์ง๊ธฐ๋ ํ๋ค.[3]
ํฌ๊ฒ ๋๋ ์ HotSpot VM๊ณผ ๊ฐ์ด ๋ฉ์๋(ํจ์) ๋จ์๋ก JIT ์ปดํ์ผ์ ํ๋ ๋ฐฉ์๊ณผ, ๊ทธ๋ณด๋ค ๋ ์์ ๋จ์์์ ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ์ ์ค์๊ฐ์ผ๋ก ์ถ์ ํ๋ฉฐ ์ปดํ์ผํ ์ฝ๋๋ฅผ ํ์ํ๋ Tracing JIT ๋ฐฉ์์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค. ํนํ Tracing JIT์ ๊ฒฝ์ฐ์๋ ์คํ ์์ ์๋ง ์ ์ ์๋ ์ ๋ณด๋ฅผ ์ปดํ์ผ์ ์ ๊ทน์ ์ผ๋ก ๋ฐ์[4]ํ๊ธฐ ๋๋ฌธ์ ์ด๋ก ์ ์ผ๋ก๋ ์ ์ ์ปดํ์ผ ๋ฐฉ์๋ณด๋ค ์ปดํ์ผ ์๋๊ฐ ๋ ๋นจ๋ผ์ง ์๋ ์๋ค.
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋, ๋ฐํ์์ ๋์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ค๋ ํน์ง ๋๋ฌธ์ JIT ์ปดํ์ผ๋ฌ๋ ์ ์ฌ์ ์ผ๋ก ์๋นํ ๋ณด์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํนํ JIT ์ปดํ์ผ๋ฌ ์์ฒด์ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ณง๋ฐ๋ก ๋ณด์์ทจ์ฝ์ ์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ํ์ ์ผ๋ก ์ธํ CPU ๊ฒ์ดํธ๋ก ์ ๋ช ํ ์คํํฐ ๋ณด์์ทจ์ฝ์ ์ JIT์ ์์กดํ๋ JavaScript ์์ง์ ๊ฐ์ง ๋ธ๋ผ์ฐ์ ์์๋ง ๋ฐ์ํ๋ค. ์ค๋ผํด์ HotSpot VM ๋ํ JIT ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๋ก ์ธํ ๋ค์์ ๋ณด์์ทจ์ฝ์ ์ด ์์๋ค.
์ฐธ๊ณ ๋ก iOS์์๋ ์๊ธฐํ ๋ณด์๋ฌธ์ ๋ฅผ ์ด์ ๋ก ๋คํธ์ํฌ๋ก ๋ฐ์ด๋๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ค์ด๋ฐ์ ์คํํ๋ ๊ฒ์ ๊ธ์งํ๊ณ ์๋ค. ๊ตฌ๊ธ ํฌ๋กฌ์ด๋ ํ์ด์ดํญ์ค์ iOS ๋ฒ์ ์ด ์์ฒด ์์ง์ ์ฐ์ง ๋ชปํ๊ณ ์ ํ์ด ์ ๊ณตํ๋ WebKit์ ์น๋ทฐ๋ฅผ ์ฌ์ฉํ ์๋ฐ์ ์๋ ์ฃผ์ ์ด์ ์ค ํ๋๋ค.[5] ์์ฆ ๋ธ๋ผ์ฐ์ ๋ค์ JavaScript ์์ง์ผ๋ก JIT๋ฅผ ์ฐ๊ธฐ ๋๋ฌธ. iOS๋ ํธ๋ฒ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ ์ ์ฑ ์ด ์ด๋ฅผ ํ์ฉํ์ง ์์ ์คํ ์ด์ ์ฌ๋ฆด ๋ Reject๋๋ค.
๋ณดํต ์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ์ธ์ด ๊ตฌํ๋ค์ด ์ฑ๋ฅ ํฅ์์ ๋ชฉ์ ์ผ๋ก ๋์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, JIT ์ปดํ์ผ๋ฌ๋ ๊ฐ์ ์ฝ๋๋ฅผ ๋งค๋ฒ ํด์ํ๋ ๋์ ์ฒ์ ์คํ๋ ๋ ์ธํฐํ๋ฆฌํธ๋ฅผ ํ๋ฉด์ ์์ฃผ ์ฐ์ด๋ ์ฝ๋๋ฅผ ์บ์ฑํ ๋ค[2], ์ดํ์๋ ์บ์ฑ๋ ์ฝ๋๋ฅผ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ๋๋ฌธ์ ์ธํฐํ๋ฆฌํฐ์ ๋๋ฆฐ ์คํ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ฌ์ค JIT '์ปดํ์ผ๋ฌ'๋ณด๋ค๋ JIT '์ธํฐํ๋ฆฌํฐ'๊ฐ ๋ ์ ํํ ํํ์ด๋ค. ๋ฐ์ดํธ์ฝ๋ ์ปดํ์ผ์ ์ฌ์ฉํ๋ Java๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ ๋ JIT ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.
๋จ์ ์ด๋ผ๋ฉด ์ด๊ธฐ ๊ตฌ๋ ์์๋ ์์ค ์ฝ๋(ํน์ ๋ฐ์ดํธ์ฝ๋)๋ฅผ ์คํ ๋จ๊ณ์์ ์ปดํ์ผํ๋ ๋ฐ์ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ชจํ๊ธฐ ๋๋ฌธ์ ์ ์ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋นํด ์คํ ์๋ ๋ฉด์์ ์ํด๋ฅผ ๋ณธ๋ค๋ ๊ฒ์ผ๋ก, ํนํ ์คํ ์๊ฐ์ด ๋งค์ฐ ์งง์ ๊ฒฝ์ฐ์๋ ์ ์จ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์ ๋๋ก ์ธ๊ถ๋จน๊ธฐ๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ๋๋๋ ๋ฐฐ๋ณด๋ค ๋ฐฐ๊ผฝ์ด ๋ ํฐ ์ํฉ์ด ๋ฒ์ด์ง๊ธฐ๋ ํ๋ค.[3]
ํฌ๊ฒ ๋๋ ์ HotSpot VM๊ณผ ๊ฐ์ด ๋ฉ์๋(ํจ์) ๋จ์๋ก JIT ์ปดํ์ผ์ ํ๋ ๋ฐฉ์๊ณผ, ๊ทธ๋ณด๋ค ๋ ์์ ๋จ์์์ ํ๋ก๊ทธ๋จ ์คํ ํ๋ฆ์ ์ค์๊ฐ์ผ๋ก ์ถ์ ํ๋ฉฐ ์ปดํ์ผํ ์ฝ๋๋ฅผ ํ์ํ๋ Tracing JIT ๋ฐฉ์์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค. ํนํ Tracing JIT์ ๊ฒฝ์ฐ์๋ ์คํ ์์ ์๋ง ์ ์ ์๋ ์ ๋ณด๋ฅผ ์ปดํ์ผ์ ์ ๊ทน์ ์ผ๋ก ๋ฐ์[4]ํ๊ธฐ ๋๋ฌธ์ ์ด๋ก ์ ์ผ๋ก๋ ์ ์ ์ปดํ์ผ ๋ฐฉ์๋ณด๋ค ์ปดํ์ผ ์๋๊ฐ ๋ ๋นจ๋ผ์ง ์๋ ์๋ค.
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋, ๋ฐํ์์ ๋์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์คํํ๋ค๋ ํน์ง ๋๋ฌธ์ JIT ์ปดํ์ผ๋ฌ๋ ์ ์ฌ์ ์ผ๋ก ์๋นํ ๋ณด์ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ํนํ JIT ์ปดํ์ผ๋ฌ ์์ฒด์ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ณง๋ฐ๋ก ๋ณด์์ทจ์ฝ์ ์ด ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ๋ํ์ ์ผ๋ก ์ธํ CPU ๊ฒ์ดํธ๋ก ์ ๋ช ํ ์คํํฐ ๋ณด์์ทจ์ฝ์ ์ JIT์ ์์กดํ๋ JavaScript ์์ง์ ๊ฐ์ง ๋ธ๋ผ์ฐ์ ์์๋ง ๋ฐ์ํ๋ค. ์ค๋ผํด์ HotSpot VM ๋ํ JIT ์ปดํ์ผ๋ฌ ๋ฒ๊ทธ๋ก ์ธํ ๋ค์์ ๋ณด์์ทจ์ฝ์ ์ด ์์๋ค.
์ฐธ๊ณ ๋ก iOS์์๋ ์๊ธฐํ ๋ณด์๋ฌธ์ ๋ฅผ ์ด์ ๋ก ๋คํธ์ํฌ๋ก ๋ฐ์ด๋๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ค์ด๋ฐ์ ์คํํ๋ ๊ฒ์ ๊ธ์งํ๊ณ ์๋ค. ๊ตฌ๊ธ ํฌ๋กฌ์ด๋ ํ์ด์ดํญ์ค์ iOS ๋ฒ์ ์ด ์์ฒด ์์ง์ ์ฐ์ง ๋ชปํ๊ณ ์ ํ์ด ์ ๊ณตํ๋ WebKit์ ์น๋ทฐ๋ฅผ ์ฌ์ฉํ ์๋ฐ์ ์๋ ์ฃผ์ ์ด์ ์ค ํ๋๋ค.[5] ์์ฆ ๋ธ๋ผ์ฐ์ ๋ค์ JavaScript ์์ง์ผ๋ก JIT๋ฅผ ์ฐ๊ธฐ ๋๋ฌธ. iOS๋ ํธ๋ฒ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ ์ ์ฑ ์ด ์ด๋ฅผ ํ์ฉํ์ง ์์ ์คํ ์ด์ ์ฌ๋ฆด ๋ Reject๋๋ค.
1.1. JIT ์ปดํ์ผ์ ์ฌ์ฉํ๋ ํ๋ซํผ์ ์[ํธ์ง]
- LISP - John McCarthy์ ์ํด 1960๋ ์ JIT๋ฅผ ํ์ฌํ๊ณ ์์์ผ๋ฉฐ, ์ด๊ฒ์ด ์ต์ด์ JIT ๊ตฌํ์ฒด๋ค.
- Java HotSpot VM - Update๋ฅผ ํตํด J2SE 1.2์์ ์ต์ด ๋ฑ์ฅํ์ผ๋ฉฐ, J2SE 1.3 ์ดํ ๊ธฐ๋ณธ์ผ๋ก ํ์ฌ
- .NET CLR (C# ๋ฑ์ .NET Framework ๊ณ์ด ์ธ์ด)
- PHP 8.0
- ํ๋์ (์ก์ ์คํฌ๋ฆฝํธ 3.0)
- SQL (Prepared Statement ์ฌ์ฉ ํ์ )
2. 2์ฐจ์ฐ์ ์ ์์ฐ๋ฐฉ์ ์ค ํ๋[ํธ์ง]
ํ๊ธ๋ก ์ ๊ธฐ์์ฐ๋ฐฉ์ ๋ด์ง๋ ์ ์์์ฐ๋ฐฉ์์ผ๋ก ๋ถ๋ฆฌ๋ฉฐ 1950๋
๋์ ์ผ๋ณธ์์ ์ฐ๊ตฌ, 1960๋
๋์ ์ผ๋ณธ ์กฐ์ ์ ๋ฑ์ง์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ค๊ฐ ๋์๊ธฐ ํ ์ํ ์๋์ฐจ์์ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ฉด์ ์ ๋ช
ํด์ง ๋ฐฉ์์ผ๋ก ํํ "์นธ๋ฐ(๊ฐํ) ์์คํ
"์ด๋ผ๊ณ ๋ ์๋ ค์ ธ ์๋ค. ๋ค๋ง ์นธ๋ฐ ์์คํ
์ JIT์ ํ์ ๊ตฌ์ฑ ๊ฐ๋
์ค ํ๋์ผ ๋ฟ์ผ๋ก JIT๋ ํจ์ฌ ๋์ ๋ฒ์๋ฅผ ํฌ๊ดํ๋ค.
ํํ๋ค ํ ์ํ๊ฐ ์ฐฝ์ํ ๊ฒ์ผ๋ก ์๋ชป ์๋ ค์ ธ ์์ง๋ง ์ด๋ ํ ์ํ์ ๋ฏธ๊ตญ์์ฅ ์ฑ๊ณต์ผ๋ก ์ธํด ํ ์ํ๋ฅผ ๋ฒค์น๋งํน ํ์๋ ์์ง์์ ์ผํ์ผ๋ก ์๊ตฌ๊ถ ๊ฒฝ์ํ์ด๋ ์ฐ์ ๊ณตํ ์ชฝ์์ ํ ์ํ์ ์ด์ ์ ๋ง์ถฐ ์ฐ๊ตฌํ๋ฉด์ ํ๋ฌธ์ ์ฒด๊ณ๋ฅผ ์ธ์ฐ๋ค๊ฐ ๋ณด๋ ๋ฒ์ด์ง ์คํด๋ก JIT ์์ฒด๋ ์ ๋ฐ์ ์ผ๋ก ์ผ๋ณธ ์ ์กฐ์ ์ ๋๋ฆฌ ์์ฐ์ค๋ฝ๊ฒ ์ํ๋์๋ ๋ฐฉ์์ ๊ฐ๊น๋ค. ๋์ฒด๋ก ๊ณต๊ธ๋ง ๋ด์ ์ฌ๊ณ ๋ฅผ ์ต๋ํ ๋ฎ์ถ๊ธฐ ์ํด ์์ฐ ์์คํ ์ ๋ฐ์ ๊ธฐ๋ฏผํํ์ฌ ๊ณผ์์ฐ, ์ฌ๊ณ , ๋๊ธฐ, ๋ฐฐ์ก, ๋ถ๋ํ ๋ฑ๊ณผ ๊ฐ์ ๋ญ๋น๋ฅผ ์์ค๋ค๋ ๊ฐ๋ ์ธ๋ฐ, ๋ง๋ก๋ ๊ฐ๋จํด ๋ณด์ด์ง๋ง 60๋ ๋์์ 70๋ ๋ ์์ ์์ ์์ฆ์ ๊ฐ์ ์ธํฐ๋ท์ด๋ ์ปดํจํฐ๋ ์์ด ์ด๋ฌํ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ ๋ค๋ ๊ฒ์ด ์ฌ์ด ์ผ์ ์๋์๋ค.
์์คํ ์กฐ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์์ฐ ์นด๋, ์ปจํ ์ด๋ ๋ฑ์ด ์๋๋ฐ, ์นด๋์ ๊ฒฝ์ฐ B ์์ ์ฅ์์ ์์ฐ์ ์ํ ๋ถ์กฑํ ๋ถํ์ด๋ ์ ํ์ A ์์ ์ฅ์ ์นด๋๋ฅผ ์ ์ถํจ์ผ๋ก์ ์์ฐ ์์ฒญ์ ํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ ๋งํผ๋ง ์์ฐํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ A, B ์์ ์ฅ ์ฌ์ด๋ฅผ ๊ฐ์๊ฐ ์ ํด์ง ์ปจํ ์ด๋๋ก ๋ฌผํ์ ์์กํ๋ ๋ฐฉ์์ธ๋ฐ, ๋ง์ฝ A ์์ ์ฅ์ ์ปจํ ์ด๋๊ฐ ๋ง์ด ๋จ์์๋ค๋ฉด A์ ์์ ๋์ด ๋ค์ณ์ ธ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํ์ ์์ ์ฅ์ธ B ์์ ์ฅ์์ ์์ ์ฐจ์ง์ด ์๊ธธ ์ ์๋ค๋ ๊ฒ์ด ๋์ ํ์คํ ๋ณด์ธ๋ค. ๋ฐ๋๋ก, B ์์ ์ฅ์ ์ปจํ ์ด๋๊ฐ ๋ง์ด ๋จ์์๋ค๋ฉด, A ์์ ์ฅ์์ ๋๋ฌด ์์ ์ ๋นจ๋ฆฌ ํ๋ค๋๊ฐ, B ์์ ์ฅ์์ ์์ ์ด ๋ค์ณ์ ธ ์๋ค๋ ์๋ฏธ๊ฐ ๋๋ค. ์ปจํ ์ด๋๋ผ๋ ์๊ฐ์ ์ธ ์์ฐ ์งํ๊ฐ ์์ผ๋ฏ๋ก ํ์ฅ์์ ์์ ์ ์๋๋ฅผ์ง, ์กฐ๊ธ ์๋๋ฅผ ๋ฆ์ถ์ง ํ๋์ ํ์ ์ด ๊ฐ๋ฅํ ๊ฒ.
80๋ ๋ ์๊ตฌ๊ถ ์ ์ฒด๋ค์ด ์ผ๋ณธ๊ฒฝ์ ์ ์ฑ๊ณต์ ๋ฒค์น๋งํน ํ๋ ๊ณผ์ ์์ ๋ค๋ถ ๋ฒ์ง๋ฏ ์ ํํ๊ณ 87๋ ๋ฏธ๊ตญ ๊ธฐ์ ์ 25%, 92๋ ์๋ 55%๊ฐ ํด๋น ๋ฐฉ์์ ๋์ ํ๋ค. 90๋ ๋ ์ดํ๋ก๋ ๋ฆฐ-์ ์กฐ๋ฐฉ์ ๋ด์ง๋ SCM ๋ฑ ๋ณด๋ค ๊ฐ์ ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ์๋ค.
ํํ๋ค ํ ์ํ๊ฐ ์ฐฝ์ํ ๊ฒ์ผ๋ก ์๋ชป ์๋ ค์ ธ ์์ง๋ง ์ด๋ ํ ์ํ์ ๋ฏธ๊ตญ์์ฅ ์ฑ๊ณต์ผ๋ก ์ธํด ํ ์ํ๋ฅผ ๋ฒค์น๋งํน ํ์๋ ์์ง์์ ์ผํ์ผ๋ก ์๊ตฌ๊ถ ๊ฒฝ์ํ์ด๋ ์ฐ์ ๊ณตํ ์ชฝ์์ ํ ์ํ์ ์ด์ ์ ๋ง์ถฐ ์ฐ๊ตฌํ๋ฉด์ ํ๋ฌธ์ ์ฒด๊ณ๋ฅผ ์ธ์ฐ๋ค๊ฐ ๋ณด๋ ๋ฒ์ด์ง ์คํด๋ก JIT ์์ฒด๋ ์ ๋ฐ์ ์ผ๋ก ์ผ๋ณธ ์ ์กฐ์ ์ ๋๋ฆฌ ์์ฐ์ค๋ฝ๊ฒ ์ํ๋์๋ ๋ฐฉ์์ ๊ฐ๊น๋ค. ๋์ฒด๋ก ๊ณต๊ธ๋ง ๋ด์ ์ฌ๊ณ ๋ฅผ ์ต๋ํ ๋ฎ์ถ๊ธฐ ์ํด ์์ฐ ์์คํ ์ ๋ฐ์ ๊ธฐ๋ฏผํํ์ฌ ๊ณผ์์ฐ, ์ฌ๊ณ , ๋๊ธฐ, ๋ฐฐ์ก, ๋ถ๋ํ ๋ฑ๊ณผ ๊ฐ์ ๋ญ๋น๋ฅผ ์์ค๋ค๋ ๊ฐ๋ ์ธ๋ฐ, ๋ง๋ก๋ ๊ฐ๋จํด ๋ณด์ด์ง๋ง 60๋ ๋์์ 70๋ ๋ ์์ ์์ ์์ฆ์ ๊ฐ์ ์ธํฐ๋ท์ด๋ ์ปดํจํฐ๋ ์์ด ์ด๋ฌํ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ ๋ค๋ ๊ฒ์ด ์ฌ์ด ์ผ์ ์๋์๋ค.
์์คํ ์กฐ์ ๋ฐฉ๋ฒ ์ค ํ๋๋ก ์์ฐ ์นด๋, ์ปจํ ์ด๋ ๋ฑ์ด ์๋๋ฐ, ์นด๋์ ๊ฒฝ์ฐ B ์์ ์ฅ์์ ์์ฐ์ ์ํ ๋ถ์กฑํ ๋ถํ์ด๋ ์ ํ์ A ์์ ์ฅ์ ์นด๋๋ฅผ ์ ์ถํจ์ผ๋ก์ ์์ฐ ์์ฒญ์ ํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ ๋งํผ๋ง ์์ฐํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ปจํ ์ด๋์ ๊ฒฝ์ฐ A, B ์์ ์ฅ ์ฌ์ด๋ฅผ ๊ฐ์๊ฐ ์ ํด์ง ์ปจํ ์ด๋๋ก ๋ฌผํ์ ์์กํ๋ ๋ฐฉ์์ธ๋ฐ, ๋ง์ฝ A ์์ ์ฅ์ ์ปจํ ์ด๋๊ฐ ๋ง์ด ๋จ์์๋ค๋ฉด A์ ์์ ๋์ด ๋ค์ณ์ ธ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก ํ์ ์์ ์ฅ์ธ B ์์ ์ฅ์์ ์์ ์ฐจ์ง์ด ์๊ธธ ์ ์๋ค๋ ๊ฒ์ด ๋์ ํ์คํ ๋ณด์ธ๋ค. ๋ฐ๋๋ก, B ์์ ์ฅ์ ์ปจํ ์ด๋๊ฐ ๋ง์ด ๋จ์์๋ค๋ฉด, A ์์ ์ฅ์์ ๋๋ฌด ์์ ์ ๋นจ๋ฆฌ ํ๋ค๋๊ฐ, B ์์ ์ฅ์์ ์์ ์ด ๋ค์ณ์ ธ ์๋ค๋ ์๋ฏธ๊ฐ ๋๋ค. ์ปจํ ์ด๋๋ผ๋ ์๊ฐ์ ์ธ ์์ฐ ์งํ๊ฐ ์์ผ๋ฏ๋ก ํ์ฅ์์ ์์ ์ ์๋๋ฅผ์ง, ์กฐ๊ธ ์๋๋ฅผ ๋ฆ์ถ์ง ํ๋์ ํ์ ์ด ๊ฐ๋ฅํ ๊ฒ.
80๋ ๋ ์๊ตฌ๊ถ ์ ์ฒด๋ค์ด ์ผ๋ณธ๊ฒฝ์ ์ ์ฑ๊ณต์ ๋ฒค์น๋งํน ํ๋ ๊ณผ์ ์์ ๋ค๋ถ ๋ฒ์ง๋ฏ ์ ํํ๊ณ 87๋ ๋ฏธ๊ตญ ๊ธฐ์ ์ 25%, 92๋ ์๋ 55%๊ฐ ํด๋น ๋ฐฉ์์ ๋์ ํ๋ค. 90๋ ๋ ์ดํ๋ก๋ ๋ฆฐ-์ ์กฐ๋ฐฉ์ ๋ด์ง๋ SCM ๋ฑ ๋ณด๋ค ๊ฐ์ ๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ ํ์๋ค.
[1] JIT ์ปดํ์ผ์ ๋๋น๋๋ ๋ฐฉ์์ผ๋ก ์ ์ ์ปดํ์ผ(Static Compilation) ๋๋ AOT ์ปดํ์ผ(Ahead-Of-Time Compilation)์ด ์๋ค. ์ ์ ์ปดํ์ผ๊ณผ AOT ์ปดํ์ผ์ ์ฐจ์ด์ ์ ์์ ์ฝ๋๋ฅผ ๊ณง๋ฐ๋ก ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผํ๋๋, ๋ฏธ๋ฆฌ ํด์๋์ด ์๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ์ฌ์ฐจ ์ปดํ์ผํ๋๋์ ์ฐจ์ด. JIT์ AOT์ 'Time'์ Runtime, ์ฆ ์คํ ์๊ฐ์ ๋งํ๋ค.
[2] Java Virtual Machine์ ๊ฒฝ์ฐ ๋ฉ์๋ ์์ญ์ ์๋ ์ฝ๋ ์บ์(Code Cache) ๊ณต๊ฐ์ JIT๋ก ์ปดํ์ผ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์บ์ฑํ๋ค.
[3] ๋ณดํต ๊ทธ ์ ๋๋ก ์คํ์๊ฐ์ด ์งง์ ํ๋ก๊ทธ๋จ์ ์ด์ฐจํผ ์ปดํ์ผํด์ ๋๋ฆฌ๋ ์ธํฐํ๋ฆฌํฐ๋ก ๋๋ฆฌ๋ ๋ช ์ด ์ฐจ์ด๋์ง๋ ์๋ ๊ฒฝ์ฐ๋ผ ์คํ๋ ค ์คํฌ๋ฆฝํธ ์ธ์ด๋ก ์ง๊ณ ๋์ถฉ ๋๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธด ํ์ง๋ง, ๋ฒค์น๋งํฌ๋ฅผ ํ ๋๋ ์ด๊ฒ ๋๋ฌธ์ ๋ณธ์ ์๋๊ฒ ํํ์ ๊น์๋จน๊ณค ํ๋ค. ํนํ ์ด์ฌ์๋ค์ด JIT ๋ฐ์ ๊ณ ๋ คํ์ง ์์ ์ด์คํ ๋ฒค์น๋งํฌ ์ฝ๋๋ฅผ ์ง๋๊ณ "์ Java ๊ตฌ๋ฆฌ๋ค C ๋ง์ธ" ์ด๋ฌ๋ ๊ฒฝ์ฐ๊ฐ ๊ฐํน ์๋ค.
[4] ๊ฐ๋ฅํ ์ต์ ํ์ ์๋ก, ๋ฃจํ ๋ด์์ ์ด๋ค ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์์ฃผ ๋ถ๋ฅธ๋ค๋ ๊ฑธ ํ์
ํ๋ฉด ์ปดํ์ผํ ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ๋์ ์ผ๋ก ์ฐพ๋ ๋์ ํด๋น ๋ฉ์๋์ ์์น๋ฅผ ์ ์ ์ผ๋ก ๋ฐ์ธ๋ฉํ ์ ์๋ค.
[5] ๋ฌผ๋ก ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ ํ์ด ์๋ํํฐ ์น ๋ธ๋ผ์ฐ์ ์์ง์ ํ์ฉํ์ง ์์์์ด๊ธด ํ๋ค.
[6] LLVM API๋ฅผ ์ฌ์ฉํ์ฌ LLVM IR๋ฅผ ์ปดํ์ผํ๋ฉด ๋๋ค. Clang์์ LLVM IR์ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์, C/C++ ์ ์ฉ JIT ์ปดํ์ผ๋ฌ ํ๋ก ํธ์๋๋ ์๋ค.
[7] 2017๋
์ Lua 5.1 ๋ฒ์ ์ ๋ํ ์ง์์ ๋์ผ๋ก ์ง์์ด ์ค๋จ๋์๋ค.
[9] ์๋๋ก์ด๋ ๋๊ฐ๋ถํฐ JIT์ ๊ฐ์ด ์ฌ์ฉํ๊ธฐ ์์ํ๋ค.