์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ๋จ์์์ ๋์ ๋ฐ ์ฃผ์์ ์ ๋ํด ๊ณต๋ถํด ๋ณด์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์ ์ ์ธ์ด์ ๋ฌ๋ฆฌ ์๋ฐ์คํฌ๋ฆฝํธ์์์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ์กฐ๊ธ ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ด ๊ถ๊ธ์ฆ์ ๊ฐ์ง๊ณ ๊ตฌ๊ธ๋ง๋ฅผ ํ์ต๋๋ค.
๊ถ๊ธํ ๋๋ก ์กฐ์ฌ๋ฅผ ํ๋ค๋ณด๋ ์์๊ฐ ์กฐ๊ธ์ ๋ค์ฃฝ ๋ฐ์ฃฝ์
๋๋ค.
ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ง์ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
ํ๋ก๊ทธ๋จ์ด ๋์ํ๊ธฐ ์ํด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค. ์ฌ๋ฃ๋ฅผ ์์งํ๊ธฐ ์ํ ๋๋ง๊ฐ ํ์ํ๋ฌ๊น.
๋ค์์ ํ๋ฆฝํ๋กญ (flip-flop) ์ผ๋ก ๊ตฌ์ฑ๋ ๋ฉ๋ชจ๋ฆฌ์๋ ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ๋๋ค.
ํฌ๊ฒ ์ฝ๋์์ญ, ๋ฐ์ดํฐ ์์ญ, ์ฝ์คํ ์์ญ, ํ ์์ญ 4๊ฐ์ง๋ก ๋๋๋ค.
์ ํ๋ํ๋ ๊ถ๊ธ์ฆ์ ํ์ด๋๊ฐ๋ณธ๋ค.
์คํ์ bottom ์ชฝ์๋ ํ๋ก๊ทธ๋จ์ด ๋ฟ์์๋ ์๋๋ ์ปค๋ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ๋ค.
์ปค๋๊ณผ ๋ฟ์ ์ ์๋ ๋ฐฉํฅ์ ๋์ด์ผํด์ ๊ทธ๋ ๊ฒ ๋๋ค๋ ์ฐ์ ๋ณด์๋ค.
๋ ํ๊ณผ ์คํ์ด ์๋ก ์๋ผ๋๋ ๋ฐฉํฅ์ด ๋ง์ฃผ๋ณด๊ฒ๋๋ค๋ฉด ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๋ ๊ณณ์ด ๊ฐ๊น์์ ธ์ ํจ์จ์ ์ด๋ผ๊ณ ํ๋ค.
ํฌ๋กฌ๊ณผ Node js์์ ์ฌ์ฉ๋๋ V8 ์์ง์ ํตํด ์์๋ณด์๋ค.
V8์์ง์ JIT(Just In Time) ์ปดํ์ผ์ ์ฑํํ๋ค. ์ธํฐํ๋ฆฌํฐ์ ์ ์ ์ปดํ์ผ๋ฌ์ ์ค๊ฐ๋จ๊ณ๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ธํฐํ๋ฆฌํฐ์ฒ๋ผ ์คํํ๋ฉด์ ์ฝ๋๋ฅผ ์ฝ์ด๋ค์ฌ ๊ทธ์ ๋์ํ๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ฝ๋๋ฅผ ์บ์ฑํด๋๋ค.
๊ทธ ํ์ ์ฝ๋๋ฅผ ์ฝ์ด๋ค์ด๋ฉด์ ์ ์ ์ฌ์ฉ๋ ์ฝ๋๊ฐ ์๋ค๋ฉด ? ์บ์์์ ๊ฐ์ ธ๋ค ์ฐ๋ ํ์์ด๋ค.
๊ทธ๋ผ ์คํ ํฌ๊ธฐ๋ฅผ ์ปดํ์ผ ํ์ ๊ฒฐ์ ์ง์ ์ ์๋๊ฐ?
์๋ ๊ฒ ๊ฐ๋ค. JIT ์ปดํ์ผ์ด๋ผ๋ ๊ฒ ์์ฒด๊ฐ ์คํ๋จ๊ณ์์ ์ปดํ์ผ์ด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๊ทธ ์คํ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ์ง์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํฌ๋กฌ๊ณผ Node์์ ํต์ 1๋ง๊ฐ์ ์คํ์ด ์์ด๋ฉด ์คํ ์ค๋ฒ ํ๋ก์ฐ๊ฐ ์ผ์ด๋๋ค๊ณ ํ๋ค.
์ฆ 1๋ง๊ฐ ์ ๋์ ์คํ์ ์์๋งํ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ์ง๋๋ค๋ ์๋ฏธ์ด๋ค.
์คํ์ ์์ด๋ ํ๋ํ๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์คํํ๋ ์์ด๋ผ๊ณ ํ๋ค. ์คํํ๋ ์ ํ๋์ ํฌ๊ธฐ๋ ์ผ๋ง๋ ๋๋์ง
๊ทธ๋ฌ๋๊น ์คํ์ด ์ฐจ์งํ๋ ์ด ์ฉ๋์ ์ด๋์ ๋์ผ์ง ๊ฐ๋ ํด๋ณด๋ ค๊ณ ํ๋๋ฐ ์๋ฌด๋ฆฌ ๊ตฌ๊ธ๋ง์ ํด๋ ๋์ค์ง๊ฐ ์๋๋ค.
๊ถ๊ธํ๊ณ ์๊ณ ์ถ๋ค...
์คํ์ด ์ด ์ผ๋ง๋ ํฌ๊ธฐ๋ฅผ ์ฐจ์งํ๋์ง ๊ถ๊ธํ๊ธด ํ์ง๋ง ํฌ๊ฒ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ ๋ฏ ํ๋ค.
๋จผ์ ์คํ์ ๋ฌดํ ์ฌ๊ทํจ์๊ฐ ์ผ์ด๋์ง ์๋ ์ด์ ์ค๋ฒํ๋ก์ฐ๊ฐ ์ผ์ด๋ ์ผ์ด ๊ฑฐ์ ์๋ค๊ณ ํ๋ค.
์คํ์์ญ์์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฒฝ์ฐ ๊ทธ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํฌ๊ฒ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๊ณ ํ๋ค.
๋ฐ์ดํฐ๋ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋น๋๊ณ ๊ทธ ํฌ์ธํฐ๋ง ์คํ์ผ๋ก ๊ฐ์ ธ์์ ์ฐ์ฐ์ ํ๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค.
1๋ง๊ฐ ์ ๋ ์คํ์ด ์์ผ๋งํ ํฌ๊ธฐ๋ผ๋ฉด ํฐ์ผ๋์ง ์๋ ๋ค๋ ๊ฒ์ด๋ค.
๋๊ตฐ๋ค๋ JS๋ ๋น๋๊ธฐ ํจ์๋ฅผ ๋ง์ด ์ฌ์ฉํ๋๋ฐ, ๋น๋๊ธฐ์ ๊ฒฝ์ฐ ์คํ์ ๋น ๋ฅด๊ฒ ๋น์ธ ์ ์๋ค.
JS ๋ ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฐ์ด๋ผ๊ณ ์ ์๋ ค์ ธ ์๋ค. ํ์ง๋ง ์ค์ ๋์๊ฐ๋ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ฑ๊ธ ์ฐ๋ ๋๋ผ ๋ณด๊ธฐ๋ ์ด๋ ต๋ค.
์คํ์ ํด๋น ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ฃ๋ ๊ฒ์ JS ์์ง์ ์ฑ๊ธ์ฐ๋ ๋๊ฐ ๋ด๋นํ๋๋ฐ, ๋ง์ฝ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ ๋ง๋๊ฒ ๋๋ฉด ์ฑ๊ธ์ฐ๋ ๋๋ ์ฝ๋ฐฑ์ผ๋ก WEB API ๋ ์์ง์ผ๋ก ๋๊ฒจ์ค๋ค. JS ์ฑ๊ธ์ฐ๋ ๋๋ ๊ณ์ํด์ ์์
์ ์คํํ๋ค. ์์ง์ ์ด๋ฒคํธ ๋ฃจํ๋ ๊ณ์ ๋๊ณ ์์ผ๋ฉฐ ์์ง์ ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋ง์ด ์ข ์ด๋ ค์ด๋ฐ, ์ด์จ๋ ์คํ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ ์ผ์ด ๊ฑฐ์ ์๋ค๋ ๋ป์ด๋ค. ๋ค์์ ์ด์ด์ง๋ AOT ์ปดํ์ผ์์๋ ์ด๋ฌํ ๋ถ๋ถ์ ๋ฏธ์ฐ์ ๋ฐฉ์งํ ์ ์๋ค.
๋๋ ์ง๊ธ๊ป ์ฝ๋ฉ์ ํ๋ฉด์ ํ๋ฒ๋ ์คํ์ค๋ฒํ๋ก์ฐ ์๋ฌ๋ฅผ ๋ง๋์ ์ด ์๊ธด ํ๋ค.
ahead-of-time compile ์ ์ฝ์๋ก์จ, ์ฐ๋ฆฌ๋ง๋ก ์ง์ญํ๋ฉด ์ฌ์ ์ปดํ์ผ์ ๋๊ฐ ๋๊ฒ ๋ค.
์ฆ ๋ฏธ๋ฆฌ ์ปดํ์ผ์ ํด๋๋๋ค๋ ์๋ฏธ์ด๋ค. ์ธํฐํ๋ฆฌํฐ๋ JIT ์ปดํ์ผ๋ฌ๊ฐ ์ปดํ์ผ ํ๊ธฐ ์ข์ ์ค๊ฐ๋จ๊ณ์ ์ธ์ด๋ก ๋ฐ๊ฟ๋๋ ๊ฒ์ด๋ค.
Angular ๊ฐ์ SPA ๊ฐ๋
์ ์ ๋ค์ด๋ง๋ ๊ฒ ๊ฐ๋ค. ํนํ๋ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด ๋ณด๋ค ์ ํํ๋๊ณ ์ ๋ฆฌ๋ JS๋ก ์ปดํ์ผ ํด๋๋ ๊ฒ์ด ๋ ๋นจ๋ฆฌ ์คํํ ์ ์๋ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ ๊ฒ์ด๋ค.
๋ค์์ Angular ๊ณตํ์ ์๋ AOT ์ปดํ์ผ์ ์ฅ์ ์ด๋ค.
์ AOT๋ก ์ปดํ์ผํฉ๋๊น?
๋ณด๋ค ๋น ๋ฅธ ๋ ๋๋ง
AOT๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ฌ์ ์ปดํ์ผ(AOT) ๋ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฒ์ ์ ๋ค์ด๋ก๋ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ฑ์ ๋จผ์ ์ปดํ์ผํ์ง ์๊ณ ์ฆ์ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๋๋ง ํ ์ ์๋๋ก ์คํ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ๋ก๋ํฉ๋๋ค. (์ฆ ๋ฏธ๋ฆฌ ์ปดํ์ผ ํด๋์ ๋ธ๋ผ์ฐ์ ๋๊ฐ ์ปดํ์ผ ํ ํ์์์ด!)
๋น๋๊ธฐ ์์ฒญ ๊ฐ์
์ปดํ์ผ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
JavaScript ๋ด์์ ์ธ๋ถ HTML ํ
ํ๋ฆฌํธ ๋ฐ CSS ๋ฅผ ์ธ๋ผ์ธํ๊ฒ ๋ถ์ฌํ์ฌ ํด๋น ์์ค ํ์ผ์ ๋ํ ๋ณ๋์ ajax ์์ฒญ์ ์ ๊ฑฐํฉ๋๋ค.
๋ค์ด๋ก๋ ํฌ๊ธฐ ๊ฐ์
์ฑ์ด ์ด๋ฏธ ์ปดํ์ผ ๋ ๊ฒฝ์ฐ Angular ์ปดํ์ผ๋ฌ๋ฅผ ๋ค์ด๋ก๋ ํ ํ์๊ฐ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ Angular์ ์ ๋ฐ ์ ๋์ด๋ฏ๋ก ์ปดํ์ผ๋ฌ๋ฅผ ์๋ตํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ํ์ด๋ก๋๊ฐ ํฌ๊ฒ ์ค์ด ๋ญ๋๋ค.
ํ
ํ๋ฆฟ ์ค๋ฅ๋ฅผ ๋ ๋นจ๋ฆฌ ๊ฐ์ง
AOT ์ปดํ์ผ๋ฌ๋ ์ฌ์ฉ์๊ฐ ๋น๋ ๋จ๊ณ๋ฅผ ๋ณผ ์ ์๊ธฐ ์ ์ ํ
ํ๋ฆฟ ๋ฐ์ธ๋ฉ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ณ ๋ณด๊ณ ํฉ๋๋ค.
์ค์ ๋ก ์ด ๊ธฐ๋ฅ์ ๋๋ฌด ๊ฐ๋ ฅํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ปดํ์ผ์ ์ ์๋ฌ์์๋ฅผ ํ์ธํ ์ ์๋ค๋๊ฑด.... ๋๋ฌด ์ข๋ค!
๋ณด์ ๊ฐํ
AOT๋ HTML ํ
ํ๋ฆฌํธ์ ๊ตฌ์ฑ ์์๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๊ณต๋๊ธฐ ํจ์ฌ ์ ์ JavaScript ํ์ผ๋ก ์ปดํ์ผํฉ๋๋ค. ํ
ํ๋ฆฟ์ ์ฝ์ ํ์๊ฐ ์์ผ๋ฉฐ ์ํํ ํด๋ผ์ด์ธํธ ์ธก HTML ๋๋ JavaScript ํ๊ฐ๊ฐ ์์ผ๋ฏ๋ก ์ฃผ์
๊ณต๊ฒฉ ๊ธฐํ๊ฐ ์ค์ด ๋ญ๋๋ค.
ํ๋ก๊ทธ๋๋ฐ์์ ๋ฉ๋ชจ๋ฆฌ๊ด๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ก์ฐ๋ก ์งํ์ด ๋๋ค๊ณ ํ๋ค.
[๋ฉ๋ชจ๋ฆฌ ํ ๋น] = > [๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ] => [๋ฉ๋ชจ๋ฆฌ ํด์ ]
๋ฉ๋ชจ๋ฆฌ ํ ๋น. JS์์๋ ๋ฉ๋ชจ๋ฆฌํ ๋น์ ๋ณ์์ ์ ์ธ์์ ์๋์ผ๋ก ํด์ค๋ค. ์ฆ C์ธ์ด์ฒ๋ผ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ํ๋ ๋ช ์์ ์ผ๋ก ํด์ค ํ์๊ฐ ์๋ค๋ ๋ป์ด๋ค. ์ ์ฌ๊ธฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ถ๋ถ์์ ๊ถ๊ธํ ๊ฒ์ด ๋ง์ด ์์๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ. ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฝ๊ฑฐ๋ ์ฌ์ฉํ๋ ๋จ๊ณ์ด๋ค
๋ฉ๋ชจ๋ฆฌ ํด์ . ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ ์ด์ ํ์๋ก ํ์ง ์๋ ๊ฒฝ์ฐ ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ ์ด ๊ณต๊ฐ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ก ํ์ฉํ ์ ์์ ํ ๋ ๋ง์ด๋ค. C์ธ์ด์ ๊ฒฝ์ฐ ๋ช ์์ ์ผ๋ก ํด์ ๋ฅผ ํด์ฃผ์ด์ผ ํ์ง๋ง, ๊ณ ์์ค ์ธ์ด๋ค์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ผ๋ ๊ฒ์ด ์์ด ์ด ๋ถ๋ถ์ ์๋์ ์ผ๋ก ํด๊ฒฐํด์ค๋ค. ์ด ๋ถ๋ถ๋ ๊ถ๊ธํ ์ ์ด ๋ง์ด ์์๋ค.
์... ์ง์ง ํท๊ฐ๋ฆฌ๊ณ ์ด๋ ค์ด ๋ถ๋ถ์ด๋ค.
๋จผ์ ์๋ฐ์ ๊ฐ์ ์ ์ ํ์
์ ์ธ์ด๋ฅผ ์ดํด๋ณธ๋ค.
์๋ฐ๋ ํ์
์ ๋ช
ํํ ์ง์ ํด์ค๋ค. ์ฆ, INTํ์์ ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์ด๋ก ์ผ๋ง๋ ๋ค์ด๊ฐ๊ฑฐ์ผ! ๋ผ๊ณ ๋ง์ ํด์ค์ผ๋ก์จ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ๋ง๋ ํ ๋นํ ์ง ์์ธก ํ ์ ์๋ค. ์ธํธ๋ฅผ 4๋ฐ์ดํธ ์ง๋ฆฌ ํ์
์ด๋ผ๊ณ ์๊ฐํ๊ณ ๋ค์ ๊ทธ๋ฆผ์ ๋ณธ๋ค๋ฉด.
์๋ฐ์๋ ํด๋์ค๊ฐ ์๋ค. ํด๋์ค๋ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ์๋๋ฅผ ๋ด๊ณ ์๋ ํ๋์ ์ค๊ณ๋๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๊ฒ๋ ํด์ค๋ค.
์ด ์ธ์คํด์ค๋ ํด๋์ค์ ์ ์๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค. ํด๋์ค์ ์ ์๋๊ณ ๋์๋ถํฐ ๋์ ์ผ๋ก ํด๋์ค์ ๋ณ์๋ฅผ ์ง์ฐ๊ฑฐ๋ ์ญ์ ํ ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฐ์์ ์ ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ฒฝ์ฐ ์ปดํ์ผํ๋๋ฐ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ๊ธดํด๋, ๊ทธ ์๋๊ฐ ๋น ๋ฅด๋ค.
ํ๋์ ๋ฐฐ์ด๋ก๋ถํฐ ์ ํด์ง ํ์
์ Offset ๋งํผ์ ์ฃผ์๋ก ์ฐพ์๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ค๊ฐ? ํ๋กํ ํ์
๊ธฐ๋ฐ์ ํ์
์ญ์ ๋์ ์ผ๋ก ๋ฐ๋ ์ ์๋ค.
๊ทธ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ํ ๋นํ๋ค๋ ๊ฑฐ์ผ????
์ฒซ๋ฒ์งธ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฐฐ์ด์ ๊ธธ์ด์ ํ์
์ด ์ ํด์ ธ ์์ง ์์์ ์๋ฌด๋ ๊ฒ๋ ๋ค์ด๊ฐ ์ ์๋ค.
์๋ฐ์ฒ๋ผ ํ์
์ด ๋ช
ํํ๋ค๋ฉด ์ ๋ฐฐ์ด์ด ์ผ๋ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ ์ง ์์ ์๊ฒ ์ง๋ง... ์ ์ํ๋ผ๋ฉด ์์ ์์๊น?
๋๋ฒ์งธ, ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์๋ ๋ฉค๋ฒ๋ฅผ ๋์ ์ผ๋ก ํ ๋น ํ ์๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด๊ฐ ์ฐจ์งํ ๋ค์์ ์ค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฐฐ์ด์ด ์ฐจ์งํ๋ค๊ณ ์๊ฐํด๋ณด์.
๊ทธ๋ผ ๊ฐ์ฒด์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๋์ ์ ์ฅ๋ ์ง๋ฅผ ์์ ์ฐจ๋ฆด ์๊ฐ ์๋ค...
๊ทธ๋ ๊ตฌ๋!!! ์ด์ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๋์ง ๋จธ๋ฆฟ์์ ์กฐ๊ธ ์ดํด๊ฐ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ฒ์ ์๋์์ ๋ค๋ฅธ ์ธ์ด๋ค ๋ณด๋ค ๋๋ฆฌ๋ค๊ณ ํ๋ค.
๊ทธ๋ฌ๋ V8 ์์ง์ ๊ทธ๊ฒ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ค.
์ธ๋ผ์ด๋๊ณผ ํ๋ ํด๋์ค
์ธ๋ผ์ด๋์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ถ๋ถ์ ๊ทธ๋ฅ ํธ์ถ๋๋ ํจ์๋ก ์นํํด๋ฒ๋ฆฌ๋ ๊ธฐ๋ฒ์ด๋ค.
์๋ฅผ ๋ค์ด
function test(){
a+b
}
test();
๊ฐ ์คํ๋์๋ค๊ณ ์น๋ฉด ์ธ๋ผ์ด๋ ๊ธฐ๋ฒ์ผ๋ก test() ๋ถ๋ถ์ ์ค์ test ํจ์ ์ฝ๋๋ก ๋์ฒด๋๋ ๊ฒ์ด๋ค.
//test()
a+b
๊ฐ๋ฅํ ํ ๋ง์ ์ฝ๋๋ฅผ ์ธ๋ผ์ด๋ ์ํจ๋ค๊ณ ํ๋ค.
ํ๋ ํด๋์ค๋ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํด๋์ค์ฒ๋ผ ๋ฉค๋ฒ์ ์ ๊ทผ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ฅ์น์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฒด๊ฐ ์์ฑ์ด๋๋ฉด ํค, ๋ฐธ๋ฅ๋ก ๋ฉ๋ชจ๋ฆฌ ์์น๊ฐ ํ์ฑ์ด ๋๋ค๊ณ ์์์ ์ด์ผ๊ธฐํ์๋ค. ํด๋น ์์น์ ๋ํ ํด์์ด ํ์์๊ฒ๋ ๋ณด์ด์ง ์๋ ํด๋์ค๋ฅผ ๋ถ์ฌ์ฃผ๋๋ฐ (C0, C1์ ์ด๋ฆ์ผ๋ก ๋ถ์ฌ์ง๋ค. ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ปดํ์ผํ๋ฉด ๋ณผ ์ ์๋๋ผ!) ์ฌ๊ธฐ์๋ ํด๋น ๋ณ์๋ก ์ ๊ทผ ํ ์ ์๊ฒ๋ ํด์ฃผ๋ ์์น๊ฐ์ด ์ด๋ฏธ ์ ์ ๋์ด ๋ค์ด๊ฐ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋ค. V8 ์์ง์ ๋งํฌ ์ค ์ค์ (mark-and-sweep) ๊ธฐ๋ฒ์ ํตํด ๊ฐ๋น์ง ์ปฌ๋ ํ
์ ์ํํ๋๋ฐ,
์ ์ง์ ์ธ ๋งํน์ ์ด์ฉํ๋ค๊ณ ํ๋ค. ์ฆ, ์ด๋ค ๊ฐ์ฒด๋ฅผ ์น์์ผํ๋์ง์ ๋ํด์ ์ ์ฒด๋ฅผ ํ์ด๋ณด๋๊ฒ ์๋๋ผ ์ผ๋ถ๋ง ๋ณด๊ณ , ํด๋น ์์น๋ฅผ ๊ธฐ์ตํด๋์๋ค๊ฐ ๋ค์ ๋งํน์์
๋ ๊ทธ ์์น๋ก๊ฐ์ ๋ค์ ์ผ๋ถ๋ง ํ๋ค๋ ๊ฒ์ด๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํ
์ด ์ผ์ด๋๋ ๋์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ํ์ ๋ฉ์ถ๋ค๊ณ ํ๋ค. ์ฆ ๊ฐ๋น์ง ์ปฌ๋ ํ
์ด ์์ฃผ ์ผ์ด๋๋ ์น ์ดํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ๊ทธ UX๊ฐ ๋ณ๋ก ์ ์พํ์ง ์์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
ํฌ๋กฌ ๊ฐ๋ฐ์ ๋๊ตฌ์ Performance ํญ์์ ๊ฐ๋น์ง ์ปฌ๋ ํ ์ด ์ผ๋ง๋ ์ผ์ด๋๋์ง ํ์ธ ํด ๋ณผ ์ ์๋ค.
๋ง์ฝ ๋ด๊ฐ ๋ง๋ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฐ ํฑ๋๋ฐํด ๋ชจ์์ ๊ทธ๋ํ๊ฐ ๊ทธ๋ ค์ง๋ค๋ฉด ํ ....์ฝ๋๋ฅผ ๋ค์ ๋ค์์ผ์ ์ผ ํ๊ฒ ๋ค.
์ข์ ๋ชจ์์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ณ๋์ด ์๋๋ก ํ๋ ๊ฒ์ด๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋์ง ์๋์ง์ ์ฌ๋ถ๋ฅผ ์ถ์ ํ๋ค๊ณ ํ๋ค.
์? ๋ฌด์จ ์๋ฆฐ๊ณ ํ๋, ๋ฉ๋ชจ๋ฆฌ์ ํ์ ์ฌ๋ถ๋ ๊ฒฐ์ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ์๋ขฐ๋ฉ๊ฑฐ์ ๊ณ ์์ด ๊ฐ์ ๊ฑด๊ฐ?
๋ ์์๋ณด๋, ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฐธ์กฐ์ ์์กด์ ์ด๋ผ๊ณ ํ๋ค.
์ฐธ์กฐ๋ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๊ฐ์ฒด๋ฅผ ์๊ณ ์๋๋์ ์๋ฏธ์ด๋ค. ์ด ์ฐธ์กฐ ํ์๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ ๊ฐ์ฅ ๋จ์ํ ํํ์ ๊ฐ๋น์ง ์ปฌ๋ ํ
์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์๋ฌด๋ ์์์ฃผ์ง ์๋ ๋ ์๋ค ๋ฐ๋ ค๋ค๊ฐ ๋ด๋ณด๋ธ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค. ์์ธ๋ ์ด๋๊ฐ๋ ํ๋๋ฅผ ๋ฐ์ง ๋ชปํ๋ ๊ตฌ๋.
๊ทธ๋ ๋ค๋ฉด ์ํ ์ฐธ์กฐ๋ผ๋ ๋
์์ ์ด๋จ๊น? A๊ฐ B๋ฅผ ์๊ณ B๊ฐ A๋ฅผ ์๊ณ ์๋ค. ์ด ๋์ ์๋ก๋ฅผ ์๊ณ ์๊ธฐ๋๋ฌธ์ ์ ๋ ์ฐธ์กฐ ํ์๊ฐ 0์ด ๋์ง ์๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ๋์ด ํ์๊ฐ ์์ด์ก๋ค๋ฉด, ์ด๋
์๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ์ฑ ๋๋ฌ์๊ณ ์์ ๊ฒ์ด๋ค.
์ด๋ฐ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ฉ๋ชจ๋ฆฌ leak ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. ์ด๋ฐ ์ํฉ์ ๋ง๋ค์ง ์๋ ๊ฒ์ด ์ข๋ค.
์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ์ด๋ป๊ฒ ์ ์ ์์๊น? ๋ธ๋ผ์ฐ์ ๋ Node js ๋ root๊ฐ ๋๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ์๋ค.
์ด ๊ฐ์ฒด๋ก๋ถํฐ ์์ํ์ฌ ์ฐธ์กฐ์ ์ฐธ์กฐ๋ฅผ ์ฐพ์ ์์์ผ๋ก ์ญ ํ๊ณ ๋ด๋ ค๊ฐ๋ค.
๋ฟ์์ ์๋ ๋์ unreachable ํ ๋
์๋ค์ ๊ฐ๋น์ง ๋์์ด ๋์ด ๋งํน๋๊ณ ์ค์๋์ด OS์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ๋ค.
์ด๋ฅผ ํตํด ์ํ ์ฐธ์กฐ๊ฐ ์ผ์ด๋๋๋ผ๋ ์ ์ญ๊ฐ์ฒด๋ก๋ถํฐ ๋ฟ์ ์ ์๋ ๋
์๋ค์ ๊ฐ๋น์ง๊ฐ ๋์ด ๋ฐํ ์ํฌ ์ ์๋ค.
์ด์จ๋ ๋น๊ฒฐ์ ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๊ฐ๋น์ง ์ปฌ๋ ํ
์์ ์ ๋ช
ํํ ์์๋ ์๋ค. ํ์ง๋ง ๊ฐ๋น์ง ์ปฌ๋ ํ
์ ํผํ๋ ๋ฐฉ๋ฒ์
์๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ์ผ์ด๋๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์์์ด์ง๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๋ค์ง ์๋ ๊ฒ์ด๋ค.
๊ฐ๋จํ๋ฉด์๋ ์ด๋ ค์ด ๋ฌธ์ !
๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ํ
์์ฒด๊ฐ ์์ฒญ ๋์๊ฑด ์๋๋ค.
๊ฐ๋น์ง ์ปฌ๋ ํ
์ด ์์ฃผ ์ผ์ด๋์ง๋ง ์๋๋ค๋ฉด ํฐ ์ฑ๋ฅ์ด์๋ ์๋ ๋ฏ ํ๋ ์์ฌํด๋ ์ข๋ค. ์์์ ์ธ๊ธํ ํฑ๋๋ฐํด ํจํด๋ง ์กฐ์ฌํ์.
ํฑ๋๋ฐํด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฒด ํ (Object Pool) ๊ฐ๋
์ด ์๋ค.
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ปค๋ฅ์
ํ๊ณผ ๋น์ทํ ๊ฐ๋
์ผ๋ก, ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ค์ ๋ฏธ๋ฆฌ ์ฌ์ ์ ์ ํด๋๊ณ ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ค๋ ํ์์ญ์ ๋์ ์ผ๋ก ํ ๋นํ๋ ๊ฒ์ด ์๋๋ผ ๊ธฐ์กด์ ์๋ ๊ฐ์ฒด๋ค ์ค์์ ์์ฐ๋ ๊ฐ์ฒด๋ค์ด ์์ผ๋ฉด ๊ฐ์ ธ๋ค ์ฐ๋ ํ์์ด๋ค.
์ฅ๋จ์ ์ด ์๋ค. ์์๋งํ ๊ฐ๋น์ง์ปฌ๋ ํ ๊ด๋ จ ์ด์๋ฅผ ํด๊ฒฐํ๋๋ฐ ์ ์ฉํด๋ณด์ด์ง๋ง ์ด๊ธฐํ ์์ ์ ๊ฐ์ฒด๋ค์ ์ค๋นํ๋๋ผ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค๋ ์ . ๊ฐ์ฒด๋ค์ด ํ์์ค๋ฝ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง ํ๊ธฐ ๋๋ฌธ์ ์ ์ ๊ฐ์ฒด๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์ ๋จน๋๋ค๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด ํ์ ์ธ ๋ ์๋ค๋ง ๋ช ํํ ์๊ณ ์๊ณ ๊ทธ๊ฒ๋ง ๊ฐ๋ค์ธ ์์ ์ด ์์ผ๋ฉด ๋งค์ฐ ์ข์ ๊ฒ๊ฐ๋ค.
์ด์ ์๋ฒฝ๋ถํฐ ์์ํด์ ์ค๋ ๋ฐค๊น์ง ๊ณ์ํด์ ์กฐ์ฌํ๊ณ ๊ธ์ ๊ตฌ์ฑํ๋ค.
์๋ฒฝํ ์๋ ๊ฒ๋ ์๋์ง๋ง ์์๊ฐ๋ ๊ณผ์ ์ด ์ฌ๋ฏธ์๊ธด ํ๋ค.
์ปดํจํฐ ์ง์์ ๋ํ ๋ถ๋ถ์ด ์ข ๋ ์ฑ์ฅํจ๊ณผ ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ๋กํ ํ์
์ ๋ํด์๋ ์ข ๋ ๋ฉด๋ฐํ ๊ณต๋ถํ ์๊ฐ์ด ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํด๋์ค๋ ์๋ค ์๋ค? ์ฃผ์ ๋ก ํฌ์คํ ์ ํด๋ณผ๊น ํ๋ค. ์ด ๋ถ๋ถ๋ ์ข ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด ๊ธ์ ๋ค์ ํฌ์คํธ๋ค์ ์ฐธ์กฐํ์ฌ ์์ฑ๋์์ต๋๋ค.
https://engineering.huiseoul.com/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%EA%B0%80-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-4%EA%B0%80%EC%A7%80-%ED%9D%94%ED%95%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%88%84%EC%88%98-%EB%8C%80%EC%B2%98%EB%B2%95-5b0d217d788d
https://www.html5rocks.com/ko/tutorials/speed/static-mem-pools/
http://sjh836.tistory.com/92
http://www.nextree.co.kr/p7323/