JavaScript ๋ชจ๋ ๋ณด์์ ํ๊ตฌํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํธํ๋ ์ฝ๋ ๊ฒฉ๋ฆฌ ์์น์ ์ง์คํฉ๋๋ค. ES ๋ชจ๋ ์ดํด, ์ ์ญ ์ค์ผ ๋ฐฉ์ง, ๊ณต๊ธ๋ง ์ํ ์ํ, ๊ฒฌ๊ณ ํ ๋ณด์ ๊ดํ ๊ตฌํ.
JavaScript ๋ชจ๋ ๋ณด์: ์ฝ๋ ๊ฒฉ๋ฆฌ๋ฅผ ํตํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐํ
ํ๋ ์น ๊ฐ๋ฐ์ ์ญ๋์ ์ด๊ณ ์ํธ ์ฐ๊ฒฐ๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ ๋ ๋ณต์กํด์ง๊ณ ์์ผ๋ฉฐ, ์ข ์ข ์๋ฐฑ ๋๋ ์์ฒ ๊ฐ์ ๊ฐ๋ณ ํ์ผ๊ณผ ํ์ฌ ์ข ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. JavaScript ๋ชจ๋์ ์ด ๋ณต์ก์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋น๋ฉ ๋ธ๋ก์ผ๋ก ๋ฑ์ฅํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๊ฒฉ๋ฆฌ๋ ๋จ์๋ก ๊ตฌ์ฑํ ์ ์๋๋ก ํฉ๋๋ค. ๋ชจ๋์ ๋ชจ๋์ฑ, ์ ์ง๋ณด์์ฑ ๋ฐ ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ๋ถ์ธํ ์ ์๋ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ๋ณด์ ์ํฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ๋ด์์ ์ฝ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฒฉ๋ฆฌํ๋ ๋ฅ๋ ฅ์ ๋จ์ํ ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์๋๋ผ ์ทจ์ฝ์ ์ ๋ฐฉ์งํ๊ณ , ๊ณต๊ธ๋ง ์ํ์ ์ํํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ๋ณด์ ํ์ ์์์ ๋๋ค.
์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ JavaScript ๋ชจ๋ ๋ณด์์ ์ธ๊ณ๋ฅผ ๊น์ด ํ๊ณ ๋ค๋ฉฐ, ํนํ ์ฝ๋ ๊ฒฉ๋ฆฌ์ ์ค์ํ ์ญํ ์ ์ค์ ์ ๋ก๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์ํ ๋ชจ๋ ์์คํ ์ด ๋ค์ํ ์์ค์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ด๋ป๊ฒ ๋ฐ์ ํด ์๋์ง ์ดํด๋ณด๊ณ , ํนํ ๋ค์ดํฐ๋ธ ECMAScript ๋ชจ๋(ES ๋ชจ๋)์ด ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ฃผ๋ชฉํ ๊ฒ์ ๋๋ค. ๋ํ, ๊ฐ๋ ฅํ ์ฝ๋ ๊ฒฉ๋ฆฌ์์ ํ์๋๋ ์ค์ง์ ์ธ ๋ณด์ ์ด์ , ๋ด์ฌ๋ ๊ณผ์ ๋ฐ ํ๊ณ๋ฅผ ๋ถ์ํ๊ณ , ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ์กฐ์ง์ด ๋ณด๋ค ํ๋ ฅ์ ์ด๊ณ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์คํ ๊ฐ๋ฅํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
๊ฒฉ๋ฆฌ์ ์ค์์ฑ: ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ค์ํ ์ด์
์ฝ๋ ๊ฒฉ๋ฆฌ์ ๊ฐ์น๋ฅผ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด ๋จผ์ ๊ทธ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋ฉฐ ์ ์์ ํ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํ์์ ์ธ ๊ฐ๋ ์ด ๋์๋์ง ์ดํดํด์ผ ํฉ๋๋ค.
์ฝ๋ ๊ฒฉ๋ฆฌ๋ ๋ฌด์์ธ๊ฐ?
ํต์ฌ์ ์ผ๋ก ์ฝ๋ ๊ฒฉ๋ฆฌ๋ ์ฝ๋, ๊ด๋ จ ๋ฐ์ดํฐ ๋ฐ ์ํธ ์์ฉํ๋ ๋ฆฌ์์ค๋ฅผ ๋ณ๋์ ๊ฐ์ธ ๊ฒฝ๊ณ ๋ด์ ์บก์ํํ๋ ์์น์ ๋งํฉ๋๋ค. JavaScript ๋ชจ๋์ ๋งฅ๋ฝ์์ ์ด๋ ๋ชจ๋์ ๋ด๋ถ ๋ณ์, ํจ์ ๋ฐ ์ํ๊ฐ ๋ช ์์ ์ผ๋ก ๊ณต๊ฐ ์ธํฐํ์ด์ค(๋ด๋ณด๋ด๊ธฐ)๋ฅผ ํตํด ๋ ธ์ถ๋์ง ์๋ ํ ์ธ๋ถ ์ฝ๋์์ ์ง์ ์ก์ธ์คํ๊ฑฐ๋ ์์ ํ ์ ์๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์๋ํ์ง ์์ ์ํธ ์์ฉ, ์ถฉ๋ ๋ฐ ๋ฌด๋จ ์ก์ธ์ค๋ฅผ ๋ฐฉ์งํ๋ ๋ณดํธ ์ฅ๋ฒฝ์ ๋ง๋ญ๋๋ค.
๊ฒฉ๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ค์ํ ์ด์ ๋ ๋ฌด์์ธ๊ฐ?
- ์ ์ญ ๋ค์์คํ์ด์ค ์ค์ผ ๋ฐฉ์ง: ์ญ์ฌ์ ์ผ๋ก JavaScript ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ญ ๋ฒ์์ ํฌ๊ฒ ์์กดํ์ต๋๋ค. ๊ฐ ์คํฌ๋ฆฝํธ๋ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋จํ
<script>
ํ๊ทธ๋ฅผ ํตํด ๋ก๋๋ ๋ ์ ์ญwindow
๊ฐ์ฒด์ ๋ณ์์ ํจ์๋ฅผ ์ง์ ๋คํํ์ต๋๋ค. ์ด๋ ๊ด๋ฒ์ํ ์ด๋ฆ ์ถฉ๋, ์ค์ ๋ณ์์ ์ฐ๋ฐ์ ์ธ ๋ฎ์ด์ฐ๊ธฐ ๋ฐ ์์ธก ๋ถ๊ฐ๋ฅํ ๋์์ผ๋ก ์ด์ด์ก์ต๋๋ค. ์ฝ๋ ๊ฒฉ๋ฆฌ๋ ๋ณ์์ ํจ์๋ฅผ ๋ชจ๋ ๋ฒ์๋ก ์ ํํ์ฌ ์ ์ญ ์ค์ผ ๋ฐ ๊ด๋ จ ์ทจ์ฝ์ ์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํฉ๋๋ค. - ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์: ์๊ณ ๋ ์ ๊ฒฉ๋ฆฌ๋ ์ฝ๋ ์กฐ๊ฐ์ ๋ณธ์ง์ ์ผ๋ก ๋ ์์ ๊ณต๊ฒฉ ํ๋ฉด์ ์ ์ํฉ๋๋ค. ๋ชจ๋์ด ์ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋ถ๋ถ์ ์นจํดํ ๊ณต๊ฒฉ์๋ ๋ค๋ฅธ ๊ด๋ จ ์๋ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ํด ์ ํํ๊ธฐ๊ฐ ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค. ์ด ์์น์ ๋ณด์ ์์คํ ์ ๊ตฌํํ์ ์ ์ฌํ๋ฉฐ, ํ ๊ตฌ์ฑ ์์์ ์คํจ๊ฐ ์ ์ฒด ์์คํ ์ ์นจํด๋ก ์ด์ด์ง์ง ์์ต๋๋ค.
- ์ต์ ๊ถํ ์์น(PoLP) ์ํ: ์ฝ๋ ๊ฒฉ๋ฆฌ๋ ๊ธฐ๋ณธ ๋ณด์ ๊ฐ๋ ์ธ ์ต์ ๊ถํ ์์น๊ณผ ์์ฐ์ค๋ฝ๊ฒ ์ผ์นํฉ๋๋ค. ์ด ์์น์ ๋ชจ๋ ๊ตฌ์ฑ ์์ ๋๋ ์ฌ์ฉ์๊ฐ ์๋ํ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฐ ํ์ํ ์ต์ํ์ ์ก์ธ์ค ๊ถํ ๋๋ ๊ถํ๋ง ๊ฐ์ ธ์ผ ํ๋ค๊ณ ๋ช ์ํฉ๋๋ค. ๋ชจ๋์ ์ธ๋ถ ์๋น์ ์ ๋์ ์ผ๋ก ํ์ํ ๊ฒ๋ง ๋ ธ์ถํ๊ณ ๋ด๋ถ ๋ก์ง ๋ฐ ๋ฐ์ดํฐ๋ ๋น๊ณต๊ฐ๋ก ์ ์งํฉ๋๋ค. ์ด๋ ์ ์ฑ ์ฝ๋ ๋๋ ์ค๋ฅ๊ฐ ๊ณผ๋ํ ๊ถํ ์ก์ธ์ค๋ฅผ ์ ์ฉํ ๊ฐ๋ฅ์ฑ์ ์ต์ํํฉ๋๋ค.
- ์์ ์ฑ ๋ฐ ์์ธก ๊ฐ๋ฅ์ฑ ํฅ์: ์ฝ๋๊ฐ ๊ฒฉ๋ฆฌ๋๋ฉด ์๋ํ์ง ์์ ๋ถ์์ฉ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. ํ ๋ชจ๋์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค๋ฅธ ๋ชจ๋์ ๊ธฐ๋ฅ์ ์ฐ๋ฐ์ ์ผ๋ก ์์์ํฌ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์ด๋ฌํ ์์ธก ๊ฐ๋ฅ์ฑ์ ๊ฐ๋ฐ์ ์์ฐ์ฑ์ ํฅ์์ํฌ ๋ฟ๋ง ์๋๋ผ ์ฝ๋ ๋ณ๊ฒฝ์ ๋ณด์ ์ํฅ์ ์ถ๋ก ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค๊ณ ์์์น ๋ชปํ ์ํธ ์์ฉ์ ํตํด ์ทจ์ฝ์ ์ด ๋์ ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค.
- ๋ณด์ ๊ฐ์ฌ ๋ฐ ์ทจ์ฝ์ ๋ฐ๊ฒฌ ์ฉ์ด: ์ ๊ฒฉ๋ฆฌ๋ ์ฝ๋๋ ๋ถ์ํ๊ธฐ ์ฝ์ต๋๋ค. ๋ณด์ ๊ฐ์ฌ์๋ ๋ชจ๋ ๋ด ๋ฐ ๋ชจ๋ ๊ฐ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ ๋ช ํํ๊ฒ ์ถ์ ํ์ฌ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ๋ ํจ์จ์ ์ผ๋ก ์๋ณํ ์ ์์ต๋๋ค. ๋ช ํํ ๊ฒฝ๊ณ๋ ์๋ณ๋ ๊ฒฐํจ์ ๋ํ ์ํฅ ๋ฒ์๋ฅผ ์ดํดํ๊ธฐ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
JavaScript ๋ชจ๋ ์์คํ ๋ฐ ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ ํ๊ตฌ
JavaScript ๋ชจ๋ ํ๊ฒฝ์ ๋ฐ์ ์ ์ ์ ๋ ๊ฐ๋ ฅํด์ง๋ ์ธ์ด์ ๊ตฌ์กฐ, ๊ตฌ์ฑ ๋ฐ ํนํ ๋ ๋์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ์ง์์ ์ธ ๋ ธ๋ ฅ์ ๋ฐ์ํฉ๋๋ค.
์ ์ญ ๋ฒ์ ์๋ (๋ชจ๋ ์ด์ )
ํ์คํ๋ ๋ชจ๋ ์์คํ ์ด์ ์๋ ๊ฐ๋ฐ์๋ค์ด ์ ์ญ ๋ฒ์ ์ค์ผ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ ๊ธฐ์ ์ ์์กดํ์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ฆ์ ํธ์ถ ํจ์ ํํ์(IIFE)์ ์ฌ์ฉํ๋ ๊ฒ์ด์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฝ๋๋ ์ฆ์ ์คํ๋๋ ํจ์๋ก ๋ํ๋์ด ๊ฐ์ธ ๋ฒ์๋ฅผ ์์ฑํ์ต๋๋ค. ๊ฐ๋ณ ์คํฌ๋ฆฝํธ์๋ ํจ๊ณผ์ ์ด์์ง๋ง, ์ฌ๋ฌ IIFE์ ๊ฑธ์ณ ์ข ์์ฑ์ ๊ด๋ฆฌํ๊ณ ๋ด๋ณด๋ด๋ ๊ฒ์ ์๋์ ์ด๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ํ๋ก์ธ์ค๋ก ๋จ์ ์์์ต๋๋ค. ์ด ์๋๋ ์ฝ๋ ์บก์ํ๋ฅผ ์ํ ๋ณด๋ค ๊ฐ๋ ฅํ๊ณ ๋ค์ดํฐ๋ธ ์๋ฃจ์ ์ ๊ธด๊ธํ ํ์์ฑ์ ๊ฐ์กฐํ์ต๋๋ค.
์๋ฒ ์ธก ์ํฅ: CommonJS (Node.js)
CommonJS๋ ์๋ฒ ์ธก ํ์ค์ผ๋ก ๋ฑ์ฅํ์ผ๋ฉฐ, ๊ฐ์ฅ ์ ๋ช
ํ๊ฒ๋ Node.js์์ ์ฑํ๋์์ต๋๋ค. ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ ๋ด๋ณด๋ด๊ธฐ ์ํด ๋๊ธฐ์ require()
๋ฐ module.exports
(๋๋ exports
)๋ฅผ ๋์
ํ์ต๋๋ค. CommonJS ํ๊ฒฝ์ ๊ฐ ํ์ผ์ ์์ฒด ๊ฐ์ธ ๋ฒ์๋ฅผ ๊ฐ์ง ๋ชจ๋๋ก ์ทจ๊ธ๋ฉ๋๋ค. CommonJS ๋ชจ๋ ๋ด์ ์ ์ธ๋ ๋ณ์๋ ๋ช
์์ ์ผ๋ก module.exports
์ ์ถ๊ฐ๋์ง ์๋ ํ ํด๋น ๋ชจ๋์ ๋ก์ปฌ์
๋๋ค. ์ด๋ ์ ์ญ ๋ฒ์ ์๋์ ๋นํด ์ฝ๋ ๊ฒฉ๋ฆฌ์์ ์๋นํ ๋ฐ์ ์ ์ ๊ณตํ์ฌ Node.js ๊ฐ๋ฐ์ ์ค๊ณ์ ํจ์ฌ ๋ ๋ชจ๋์ ์ด๊ณ ์์ ํ๊ฒ ๋ง๋ค์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์งํฅ: AMD (๋น๋๊ธฐ ๋ชจ๋ ์ ์ - RequireJS)
๋๊ธฐ์ ๋ก๋ฉ์ด ๋ธ๋ผ์ฐ์ ํ๊ฒฝ(๋คํธ์ํฌ ์ง์ฐ์ด ๋ฌธ์ ์ธ ๊ฒฝ์ฐ)์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ์ธ์ํ๊ณ AMD๊ฐ ๊ฐ๋ฐ๋์์ต๋๋ค. RequireJS์ ๊ฐ์ ๊ตฌํ์ define()
์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ์ํ๊ณ ๋ก๋ํ ์ ์๋๋ก ํ์ต๋๋ค. AMD ๋ชจ๋๋ CommonJS์ ์ ์ฌํ๊ฒ ์์ฒด ๊ฐ์ธ ๋ฒ์๋ฅผ ์ ์งํ์ฌ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ๋ฅผ ์ด์งํ์ต๋๋ค. ๋น์ ๋ณต์กํ ํด๋ผ์ด์ธํธ ์ธก ์ ํ๋ฆฌ์ผ์ด์
์ ์ธ๊ธฐ๊ฐ ์์์ง๋ง, ์ฅํฉํ ๊ตฌ๋ฌธ๊ณผ ๋น๋๊ธฐ ๋ก๋ฉ์ ์ค์ ์ ๋์๊ธฐ ๋๋ฌธ์ ์๋ฒ์ CommonJS๋ณด๋ค ๋ ๊ด๋ฒ์ํ๊ฒ ์ฑํ๋์์ต๋๋ค.
ํ์ด๋ธ๋ฆฌ๋ ์๋ฃจ์ : UMD (๋ฒ์ฉ ๋ชจ๋ ์ ์)
UMD ํจํด์ ๋ชจ๋์ด CommonJS ๋ฐ AMD ํ๊ฒฝ ๋ชจ๋์ ํธํ๋๋๋ก ํ๊ณ , ๋ ๋ค ์๋ ๊ฒฝ์ฐ ์์ ์ ์ ์ญ์ ์ผ๋ก ๋ ธ์ถํ ์ ์๋๋ก ํ๋ ๋ธ๋ฆฌ์ง ์ญํ ์ ํ์ต๋๋ค. UMD ์์ฒด๋ ์๋ก์ด ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋์ ํ์ง ์์ต๋๋ค. ์คํ๋ ค ๋ค์ํ ๋ก๋์ ๋ง๊ฒ ๊ธฐ์กด ๋ชจ๋ ํจํด์ ์กฐ์ ํ๋ ๋ํผ์ ๋๋ค. ๊ด๋ฒ์ํ ํธํ์ฑ์ ๋ชฉํ๋ก ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์์๊ฒ๋ ์ ์ฉํ์ง๋ง, ์ ํํ ๋ชจ๋ ์์คํ ์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ์ง๋ ์์ต๋๋ค.
ํ์ค ๋๋ณ์: ES ๋ชจ๋ (ECMAScript ๋ชจ๋)
ES ๋ชจ๋(ESM)์ ECMAScript ์ฌ์์ ์ํด ํ์คํ๋ JavaScript์ ๊ณต์ ๋ค์ดํฐ๋ธ ๋ชจ๋ ์์คํ
์
๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ์ Node.js(v13.2๋ถํฐ ํ๋๊ทธ ์๋ ์ง์)์์ ๋ค์ดํฐ๋ธ๋ก ์ง์๋ฉ๋๋ค. ES ๋ชจ๋์ import
๋ฐ export
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
ํํ๊ณ ์ ์ธ์ ์ธ ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค. ๋ณด์ ์ธก๋ฉด์์ ๋ ์ค์ํ ๊ฒ์ ํ๋์ ์ด๊ณ ์์ ํ ํ์ฅ ๊ฐ๋ฅํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ธ ๋ด์ฌ์ ์ด๊ณ ๊ฐ๋ ฅํ ์ฝ๋ ๊ฒฉ๋ฆฌ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค๋ ๊ฒ์
๋๋ค.
ES ๋ชจ๋: ํ๋ JavaScript ๊ฒฉ๋ฆฌ์ ์ด์
ES ๋ชจ๋์ ๊ฒฉ๋ฆฌ ๋ฐ ์ ์ ๋ถ์์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์ด ํ๋์ ์ด๊ณ ์์ ํ JavaScript ๊ฐ๋ฐ์ ์ํ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค.
์ดํ ๋ฒ์ ๋ฐ ๋ชจ๋ ๊ฒฝ๊ณ
๋ชจ๋ ES ๋ชจ๋ ํ์ผ์ ์๋์ผ๋ก ๊ณ ์ ํ ์ดํ ๋ฒ์๋ฅผ ํ์ฑํฉ๋๋ค. ์ฆ, ES ๋ชจ๋ ์ต์์์ ์ ์ธ๋ ๋ณ์, ํจ์ ๋ฐ ํด๋์ค๋ ํด๋น ๋ชจ๋์๋ง ๊ฐ์ธ์ด๋ฉฐ ์ ์ญ ๋ฒ์(์: ๋ธ๋ผ์ฐ์ ์ window
)์ ์๋ฌต์ ์ผ๋ก ์ถ๊ฐ๋์ง ์์ต๋๋ค. export
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ๋ด๋ณด๋ด์ผ๋ง ๋ชจ๋ ์ธ๋ถ์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ณธ ์ค๊ณ ์ ํ์ ์ ์ญ ๋ค์์คํ์ด์ค ์ค์ผ์ ๋ฐฉ์งํ์ฌ ์ด๋ฆ ์ถฉ๋ ๋ฐ ๋ฌด๋จ ๋ฐ์ดํฐ ์กฐ์ ์ํ์ ํฌ๊ฒ ์ค์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์๋ฅผ ๋ค์ด, moduleA.js
์ moduleB.js
๋ผ๋ ๋ ๊ฐ์ ๋ชจ๋์ด ๋ชจ๋ counter
๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ ์ธํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ES ๋ชจ๋ ํ๊ฒฝ์์๋ ์ด๋ฌํ counter
๋ณ์๊ฐ ๊ฐ๊ฐ์ ๊ฐ์ธ ๋ฒ์์ ์กด์ฌํ๋ฉฐ ์๋ก ๊ฐ์ญํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ช
ํํ ๊ฒฝ๊ณ ๊ตฌ๋ถ์ ๋ฐ์ดํฐ ๋ฐ ์ ์ด ํ๋ฆ์ ์ถ๋ก ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ๋ณธ์ง์ ์ผ๋ก ๋ณด์์ ๊ฐํํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฒฉํ ๋ชจ๋
ES ๋ชจ๋์ ๋ฏธ๋ฌํ์ง๋ง ์ํฅ๋ ฅ ์๋ ํน์ง์ ๋ชจ๋์ด ์๋์ผ๋ก "์๊ฒฉํ ๋ชจ๋"๋ก ์๋ํ๋ค๋ ๊ฒ์
๋๋ค. ์ฆ, ๋ชจ๋ ํ์ผ ๋งจ ์์ 'use strict';
๋ฅผ ๋ช
์์ ์ผ๋ก ์ถ๊ฐํ ํ์๊ฐ ์์ต๋๋ค. ์๊ฒฉํ ๋ชจ๋๋ ์ทจ์ฝ์ ์ ์ฐ๋ฐ์ ์ผ๋ก ๋์
ํ๊ฑฐ๋ ๋๋ฒ๊น
์ ๋ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์๋ ๋ช ๊ฐ์ง JavaScript "์ด๊ธฐ"๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- ์ ์ญ ๋ณ์ ์์ฑ์ ์ฐ๋ฐ์ ์ผ๋ก ๋ฐฉ์งํฉ๋๋ค(์: ์ ์ธ๋์ง ์์ ๋ณ์์ ํ ๋น).
- ์ฝ๊ธฐ ์ ์ฉ ์์ฑ์ ๋ํ ํ ๋น ๋๋ ์๋ชป๋ ์ญ์ ์ ๋ํด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- ๋ชจ๋์ ์ต์์์์
this
๋ฅผ ์ ์๋์ง ์์ ์ํ๋ก ๋ง๋ค์ด ์ ์ญ ๊ฐ์ฒด์ ๋ํ ์๋ฌต์ ๋ฐ์ธ๋ฉ์ ๋ฐฉ์งํฉ๋๋ค.
๋ ์๊ฒฉํ ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ํํจ์ผ๋ก์จ ES ๋ชจ๋์ ๋ณธ์ง์ ์ผ๋ก ๋ ์์ ํ๊ณ ์์ธก ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์ด์งํ์ฌ ๋ฏธ๋ฌํ ๋ณด์ ๊ฒฐํจ์ด ๊ฐ๊ณผ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค.
๋ชจ๋ ๊ทธ๋ํ์ ๋ํ ๋จ์ผ ์ ์ญ ๋ฒ์ (๊ฐ์ ธ์ค๊ธฐ ๋งต & ์บ์ฑ)
๊ฐ ๋ชจ๋์ ์์ฒด ๋ก์ปฌ ๋ฒ์๋ฅผ ๊ฐ์ง๋ง, ES ๋ชจ๋์ด ๋ก๋๋๊ณ ํ๊ฐ๋๋ฉด ํด๋น ๊ฒฐ๊ณผ(๋ชจ๋ ์ธ์คํด์ค)๊ฐ JavaScript ๋ฐํ์์ ์ํด ์บ์๋ฉ๋๋ค. ๋์ผํ ๋ชจ๋ ์ง์ ์๋ฅผ ์์ฒญํ๋ ํ์ import
๋ฌธ์ ์ ์ธ์คํด์ค๊ฐ ์๋ ๋์ผํ ์บ์๋ ์ธ์คํด์ค๋ฅผ ๋ฐ์ต๋๋ค. ์ด๋ฌํ ๋์์ ์ฑ๋ฅ ๋ฐ ์ผ๊ด์ฑ์ ์ค์ํ๋ฉฐ, ์ฑ๊ธํค ํจํด์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
๋ถ๋ถ ๊ฐ์ ๊ณต์ ๋๋ ์ํ(๋ช
์์ ์ผ๋ก ๋ด๋ณด๋ธ ๊ฐ์ ํตํด)๊ฐ ์ผ๊ด๋๊ฒ ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ด๊ฒ์ด ์ ์ญ ๋ฒ์ ์ค์ผ๊ณผ ๋ค๋ฅด๋ค๋ ์ ์ ์ ์ํด์ผ ํฉ๋๋ค. ๋ชจ๋ ์์ฒด๋ ํ ๋ฒ ๋ก๋๋์ง๋ง, ๋ด๋ถ ๋ณ์ ๋ฐ ํจ์๋ ๋ด๋ณด๋ด์ง ์๋ ํ ํด๋น ๋ฒ์์ ๋ํด ๊ฐ์ธ์ผ๋ก ์ ์ง๋ฉ๋๋ค. ์ด ์บ์ฑ ๋ฉ์ปค๋์ฆ์ ๋ชจ๋ ๊ทธ๋ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ผ๋ถ์ด๋ฉฐ ๋ชจ๋๋ณ ๊ฒฉ๋ฆฌ๋ฅผ ์ฝํ์ํค์ง ์์ต๋๋ค.
์ ์ ๋ชจ๋ ํด๊ฒฐ
CommonJS์ ๋ฌ๋ฆฌ require()
ํธ์ถ์ ๋์ ์ด๋ฉฐ ๋ฐํ์์ ํ๊ฐ๋ ์ ์์ง๋ง, ES ๋ชจ๋ import
๋ฐ export
์ ์ธ์ ์ ์ ์
๋๋ค. ์ด๋ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ ์ ๊ตฌ๋ฌธ ๋ถ์ ์๊ฐ์ ํ์ธ๋จ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์ ์ ํน์ฑ์ ๋ณด์ ๋ฐ ์ฑ๋ฅ์ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์กฐ๊ธฐ ์ค๋ฅ ๊ฐ์ง: ๊ฐ์ ธ์ค๊ธฐ ๊ฒฝ๋ก์ ์คํ ๋๋ ์กด์ฌํ์ง ์๋ ๋ชจ๋์ ๋ฐํ์ ์ด์ ์ ๊ฐ์ง๋์ด ์๋ชป๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ต์ ํ๋ ๋ฒ๋ค๋ง ๋ฐ ํธ๋ฆฌ ์์ดํน: ๋ชจ๋ ์ข ์์ฑ์ด ์ ์ ์ผ๋ก ์๋ ค์ ธ ์๊ธฐ ๋๋ฌธ์ Webpack, Rollup ๋ฐ Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ "ํธ๋ฆฌ ์์ดํน"์ ์ํํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ๋ถ๊ธฐ๋ฅผ ์ต์ข ๋ฒ๋ค์์ ์ ๊ฑฐํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน ๋ฐ ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์
ํธ๋ฆฌ ์์ดํน์ ES ๋ชจ๋์ ์ ์ ๊ตฌ์กฐ์ ์ํด ์ง์๋๋ ๊ฐ๋ ฅํ ์ต์ ํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฒ๋ค๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๋ณด์ ๊ด์ ์์ ๋ณผ ๋ ์ด๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ ์์ ์ต์ข ๋ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณต๊ฒฉ ํ๋ฉด ๊ฐ์: ํ๋ก๋์ ์ ๋ฐฐํฌ๋๋ ์ฝ๋๊ฐ ์ ๋ค๋ ๊ฒ์ ๊ณต๊ฒฉ์๊ฐ ์ทจ์ฝ์ ์ ์กฐ์ฌํ ์ ์๋ ์ฝ๋ ์ค์ด ์ ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ทจ์ฝํ ํจ์๊ฐ ์์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ ๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ํธ๋ฆฌ ์์ดํน์ ํตํด ์ ๊ฑฐํ์ฌ ํด๋น ํน์ ์ํ์ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์์์๋ก ๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น๊ณ ๊ฐ์ ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ฅ์ฑ์ ๊ธฐ์ฌํฉ๋๋ค.
"์๋ ๊ฒ์ ์ฐฉ์ทจ๋ ์ ์๋ค"๋ ๊ฒฉ์ธ์ด ์ฌ์ค์ด๋ฉฐ, ํธ๋ฆฌ ์์ดํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ง๋ฅ์ ์ผ๋ก ๊ฐ์ง์น๊ธฐํ์ฌ ํด๋น ์ด์์ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ฐ๋ ฅํ ๋ชจ๋ ๊ฒฉ๋ฆฌ์์ ํ์๋๋ ์ค์ง์ ์ธ ๋ณด์ ์ด์
ES ๋ชจ๋์ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ง์ ๋ณด์ ์ด์ ์ผ๋ก ์ง์ ์ ํ๋์ด ์ผ๋ฐ์ ์ธ ์ํ์ ๋ํ ๋ฐฉ์ด ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
์ ์ญ ๋ค์์คํ์ด์ค ์ถฉ๋ ๋ฐ ์ค์ผ ๋ฐฉ์ง
๋ชจ๋ ๊ฒฉ๋ฆฌ์ ๊ฐ์ฅ ์ฆ๊ฐ์ ์ด๊ณ ์ค์ํ ์ด์ ์ค ํ๋๋ ์ ์ญ ๋ค์์คํ์ด์ค ์ค์ผ์ ๋ช ํํ ์ข ์์ ๋๋ค. ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ํด ์ ์๋ ๋ณ์๋ ํจ์๋ฅผ ์ฐ๋ฐ์ ์ผ๋ก ๋ฎ์ด์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์์ธก ๋ถ๊ฐ๋ฅํ ๋์, ๊ธฐ๋ฅ ๋ฒ๊ทธ ๋ฐ ์ ์ฌ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ์ด์ด์ก์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์ ์ญ์ ์ผ๋ก ์ก์ธ์ค ๊ฐ๋ฅํ ์ ํธ๋ฆฌํฐ ํจ์(์: ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ ํจ์)๋ฅผ ์์ฒด ์นจํด๋ ๋ฒ์ ์ผ๋ก ์ฌ์ ์ํ ์ ์๋ค๋ฉด, ์ฝ๊ฒ ๊ฐ์ง๋์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ๋ณด์ ๊ฒ์ฌ๋ฅผ ์ฐํํ ์ ์์ต๋๋ค.
ES ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๊ฐ ๋ชจ๋์ด ์์ฒด ์บก์ํ๋ ๋ฒ์์์ ์๋ํฉ๋๋ค. ์ฆ, ModuleA.js
์ config
๋ผ๋ ๋ณ์๋ ModuleB.js
์ ๋์ผํ ์ด๋ฆ์ config
๋ณ์์ ์์ ํ ๋ณ๊ฐ์
๋๋ค. ๋ชจ๋์์ ๋ช
์์ ์ผ๋ก ๋ด๋ณด๋ธ ๊ฒ๋ง ๋ช
์์ ๊ฐ์ ธ์ค๊ธฐ ํ์ ๋ค๋ฅธ ๋ชจ๋์์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ ํ ์คํฌ๋ฆฝํธ์ ์ค๋ฅ ๋๋ ์
์ฑ ์ฝ๋์ "ํญ๋ฐ ๋ฐ๊ฒฝ"์ด ์ ์ญ ๊ฐ์ญ์ ํตํด ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ์ ๊ฑฐํฉ๋๋ค.
๊ณต๊ธ๋ง ๊ณต๊ฒฉ ์ํ
ํ๋ ๊ฐ๋ฐ ์ํ๊ณ๋ npm ๋๋ Yarn๊ณผ ๊ฐ์ ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ํจํค์ง์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ๋งค์ฐ ํจ์จ์ ์ด์ง๋ง ์ด๋ฌํ ์์กด์ฑ์ "๊ณต๊ธ๋ง ๊ณต๊ฒฉ"์ ์ผ๊ธฐํ์ต๋๋ค. ์ฌ๊ธฐ์ ์ ์ฑ ์ฝ๋๋ ์ธ๊ธฐ ์๊ณ ์ ๋ขฐํ ์ ์๋ ํ์ฌ ํจํค์ง์ ์ฃผ์ ๋ฉ๋๋ค. ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ์นจํด๋ ํจํค์ง๋ฅผ ๋ฌด์ฌ์ฝ ํฌํจํ๋ฉด ์ ์ฑ ์ฝ๋๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค.
๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ์ด๋ฌํ ๊ณต๊ฒฉ์ *์ํฅ*์ ์ํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ ์์ ์ธ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ง์ ์๋ ์์ง๋ง ํผํด๋ฅผ ์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ ๊ฒฉ๋ฆฌ๋ ์ ์์ ์ธ ๋ชจ๋์ ๋ฒ์๋ ์ ํ์ ์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํฉ๋ฒ์ ์ธ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ํ์ฉ๋์ง ์๋ ํ ๊ด๋ จ ์๋ ์ ์ญ ๊ฐ์ฒด, ๋ค๋ฅธ ๋ชจ๋์ ๊ฐ์ธ ๋ฐ์ดํฐ ๋๋ ๊ถํ ์๋ ์์ ์ ์์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ ์ ์ถ์ ์ํด ์ค๊ณ๋ ์ ์์ ์ธ ๋ชจ๋์ ์์ฒด ๋ด๋ถ ํจ์์ ๋ณ์๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ ํต์ฌ ์ฝ๋ ๋ด์ ๋ณ์์ ์ง์ ์ก์ธ์คํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ์ฝ๋์์ ํด๋น ๋ณ์๋ฅผ ์ ์์ ์ธ ๋ชจ๋์ ๋ด๋ณด๋ธ ํจ์๋ก ๋ช ์์ ์ผ๋ก ์ ๋ฌํ์ง ์๋ ํ.
์ค์ ์ฃผ์ ์ฌํญ: ์ ํ๋ฆฌ์ผ์ด์
์ด ์นจํด๋ ํจํค์ง์์ ์
์์ ์ธ ํจ์๋ฅผ ๋ช
์์ ์ผ๋ก ๊ฐ์ ธ์ ์คํํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ํด๋น ํจ์์ ์๋๋ (์
์์ ์ธ) ์์
์ ๋ง์ง ๋ชปํฉ๋๋ค. ์๋ฅผ ๋ค์ด, evilModule.authenticateUser()
๋ฅผ ๊ฐ์ ธ์ค๊ณ ํด๋น ํจ์๊ฐ ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช
์ ์๊ฒฉ ์๋ฒ๋ก ๋ณด๋ด๋๋ก ์ค๊ณ๋ ๊ฒฝ์ฐ ๊ฒฉ๋ฆฌ๋ ์ด๋ฅผ ๋ง์ง ๋ชปํฉ๋๋ค. ์ปจํ
์ธ๋จผํธ๋ ์ฃผ๋ก ์๋ํ์ง ์์ ๋ถ์์ฉ๊ณผ ๊ด๋ จ ์๋ ์ฝ๋๋ฒ ์ด์ค ๋ถ๋ถ์ ๋ฌด๋จ์ผ๋ก ์ก์ธ์คํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
์ ์ด๋ ์ก์ธ์ค ๋ฐ ๋ฐ์ดํฐ ์บก์ํ ์ํ
๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ์บก์ํ ์์น์ ์์ฐ์ค๋ฝ๊ฒ ์ํํฉ๋๋ค. ๊ฐ๋ฐ์๋ ํ์ํ ๊ฒ(๊ณต๊ฐ API)๋ง ๋ ธ์ถํ๊ณ ๋๋จธ์ง ๋ชจ๋ ๊ฒ์ ๊ฐ์ธ(๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ ๋ณด)์ผ๋ก ์ ์งํ๋๋ก ๋ชจ๋์ ์ค๊ณํฉ๋๋ค. ์ด๋ ๋ ๊นจ๋ํ ์ฝ๋ ์ํคํ ์ฒ๋ฅผ ์ด์งํ๊ณ ๋ ์ค์ํ๊ฒ๋ ๋ณด์์ ๊ฐํํฉ๋๋ค.
๋ด๋ณด๋ผ ํญ๋ชฉ์ ์ ์ดํจ์ผ๋ก์จ ๋ชจ๋์ ๋ด๋ถ ์ํ ๋ฐ ๋ฆฌ์์ค๋ฅผ ์๊ฒฉํ๊ฒ ์ ์ดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ธ์ฆ์ ๊ด๋ฆฌํ๋ ๋ชจ๋์ login()
ํจ์๋ฅผ ๋
ธ์ถํ ์ ์์ง๋ง ๋ด๋ถ ํด์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋น๋ฐ ํค ์ฒ๋ฆฌ ๋ก์ง์ ์์ ํ ๋น๊ณต๊ฐ๋ก ์ ์งํ ์ ์์ต๋๋ค. ์ต์ ๊ถํ ์์น์ ์ค์ํ๋ฉด ๊ณต๊ฒฉ ํ๋ฉด์ด ์ต์ํ๋๊ณ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋๋ ํจ์๊ฐ ๋ฌด๋จ ์ ํ๋ฆฌ์ผ์ด์
๋ถ๋ถ์์ ์ก์ธ์ค๋๊ฑฐ๋ ์กฐ์๋ ์ํ์ด ์ค์ด๋ญ๋๋ค.
๋ถ์์ฉ ๊ฐ์ ๋ฐ ์์ธก ๊ฐ๋ฅํ ๋์
์ฝ๋๊ฐ ์์ฒด ๊ฒฉ๋ฆฌ๋ ๋ชจ๋ ๋ด์์ ์๋ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๊ด๋ จ ์๋ ๋ถ๋ถ์ ์ฐ๋ฐ์ ์ผ๋ก ์ํฅ์ ๋ฏธ์น ๊ฐ๋ฅ์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. ์ด ์์ธก ๊ฐ๋ฅ์ฑ์ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ด์์ ๋๋ค. ๋ชจ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ๋์์ด ์ด๋ค ์์ผ๋ก๋ ์นจํด๋ ๊ฒฝ์ฐ, ๊ทธ ์ํฅ์ ์ฃผ๋ก ์์ฒด ๊ฒฝ๊ณ ๋ด์ ๊ตญํ๋ฉ๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ํน์ ์ฝ๋ ๋ธ๋ก์ ๋ณด์ ์ํฅ์ ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค. ์จ๊ฒจ์ง ์ ์ญ ์ข ์์ฑ์ด๋ ์์์น ๋ชปํ ์์ ์ด ์์ผ๋ฏ๋ก ๋ชจ๋์ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ ์ดํดํ๋ ๊ฒ์ด ๊ฐ๋จํด์ง๋๋ค. ์ด๋ฌํ ์์ธก ๊ฐ๋ฅ์ฑ์ ์์์น ๋ชปํ ์ํธ ์์ฉ์ ํตํด ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก ๋ณํ ์ ์๋ ๊ด๋ฒ์ํ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋ณด์ ๊ฐ์ฌ ๋ฐ ์ทจ์ฝ์ ์๋ณ ๊ฐ์ํ
๋ณด์ ๊ฐ์ฌ์, ์นจํฌ ํ ์คํฐ ๋ฐ ๋ด๋ถ ๋ณด์ ํ์ ๊ฒฝ์ฐ ์ ๊ฒฉ๋ฆฌ๋ ๋ชจ๋์ ์ถ๋ณต์ ๋๋ค. ๋ช ํํ ๊ฒฝ๊ณ์ ๋ช ์์ ์ธ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ํตํด ๋ค์๊ณผ ๊ฐ์ ์์ ์ด ํจ์ฌ ์ฌ์์ง๋๋ค.
- ๋ฐ์ดํฐ ํ๋ฆ ์ถ์ : ๋ฐ์ดํฐ๊ฐ ๋ชจ๋๋ก ์ด๋ป๊ฒ ๋ค์ด๊ฐ๊ณ ๋๊ฐ๋์ง, ์ด๋ป๊ฒ ๋ณํ๋๋์ง ์ดํดํฉ๋๋ค.
- ๊ณต๊ฒฉ ๊ฒฝ๋ก ์๋ณ: ์ฌ์ฉ์ ์ ๋ ฅ์ด ์ฒ๋ฆฌ๋๋ ๊ณณ, ์ธ๋ถ ๋ฐ์ดํฐ๊ฐ ์๋น๋๋ ๊ณณ, ๋ฏผ๊ฐํ ์์ ์ด ๋ฐ์ํ๋ ๊ณณ์ ์ ํํ ์๋ณํฉ๋๋ค.
- ์ทจ์ฝ์ ๋ฒ์ ์ง์ : ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋๋ฉด ์ํฅ ๋ฒ์๊ฐ ์นจํด๋ ๋ชจ๋ ๋๋ ์ฆ๊ฐ์ ์ธ ์๋น์์๊ฒ ๊ตญํ๋๋ฏ๋ก ํด๋น ์ํฅ์ ๋ ์ ํํ๊ฒ ํ๊ฐํ ์ ์์ต๋๋ค.
- ํจ์น ์ฉ์ด: ์์ ์ฌํญ์ ๋ค๋ฅธ ๊ณณ์์ ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋์ ํ ๊ฒ์ด๋ผ๋ ํ์ ์ ๊ฐ์ง๊ณ ํน์ ๋ชจ๋์ ์ ์ฉํ ์ ์์ด ์ทจ์ฝ์ ์ํ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ํํฉ๋๋ค.
ํฅ์๋ ํ ํ์ ๋ฐ ์ฝ๋ ํ์ง
๊ฐ์ ์ ์ผ๋ก ๋ณด์ด์ง๋ง ํฅ์๋ ํ ํ์ ๋ฐ ๋ ๋์ ์ฝ๋ ํ์ง์ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์์ ์ง์ ์ ์ผ๋ก ๊ธฐ์ฌํฉ๋๋ค. ๋ชจ๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ๋ฐ์๋ ๋ค๋ฅธ ์ฝ๋๋ฒ ์ด์ค ๋ถ๋ถ์ ๋ํ ํ๊ดด์ ์ธ ๋ณ๊ฒฝ ๋๋ ์๋ํ์ง ์์ ๋ถ์์ฉ์ ๋์ ํ ๋๋ ค์ ์์ด ๋ณ๋์ ๊ธฐ๋ฅ ๋๋ ๊ตฌ์ฑ ์์์์ ์์ ํ ์ ์์ต๋๋ค. ์ด๋ ๋ณด๋ค ๋ฏผ์ฒฉํ๊ณ ์์ ๊ฐ ์๋ ๊ฐ๋ฐ ํ๊ฒฝ์ ์กฐ์ฑํฉ๋๋ค.
์ฝ๋๊ฐ ์ ๊ตฌ์ฑ๋๊ณ ๊ฒฉ๋ฆฌ๋ ๋ชจ๋๋ก ๋ช ํํ๊ฒ ๊ตฌ์กฐํ๋๋ฉด ์ดํด, ๊ฒํ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๋๋ค. ์ด๋ฌํ ๋ณต์ก์ฑ ๊ฐ์๋ ์ข ์ข ๊ฐ๋ฐ์๊ฐ ๋ ์๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋ ๋จ์์ ์ฃผ์๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋ก ์ง์คํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ ์ผ๋ก ๋ฒ๊ทธ๊ฐ ์ค์ด๋ค์ด ๋ณด์ ๊ด๋ จ ๊ฒฐํจ์ด ์ค์ด๋ญ๋๋ค.
๋ชจ๋ ๊ฒฉ๋ฆฌ์์ ๊ณผ์ ๋ฐ ํ๊ณ ํ์
JavaScript ๋ชจ๋ ๊ฒฉ๋ฆฌ๊ฐ ์ฌ์คํ ๋ณด์ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๋ง๋ณํต์น์ฝ์ ์๋๋๋ค. ๊ฐ๋ฐ์์ ๋ณด์ ์ ๋ฌธ๊ฐ๋ ์ ์ฒด์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ์ ๊ทผ ๋ฐฉ์์ ๋ณด์ฅํ๊ธฐ ์ํด ์กด์ฌํ๋ ๊ณผ์ ์ ํ๊ณ๋ฅผ ์ธ์ํด์ผ ํฉ๋๋ค.
ํธ๋์คํ์ผ๋ง ๋ฐ ๋ฒ๋ค๋ง ๋ณต์ก์ฑ
์ต์ ํ๊ฒฝ์์ ๋ค์ดํฐ๋ธ ES ๋ชจ๋ ์ง์์๋ ๋ถ๊ตฌํ๊ณ , ๋ง์ ํ๋ก๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ ํ Webpack, Rollup ๋๋ Parcel๊ณผ ๊ฐ์ ๋น๋ ๋๊ตฌ์ ์์กดํ๋ฉฐ, ์ข ์ข Babel๊ณผ ๊ฐ์ ํธ๋์คํ์ผ๋ฌ์ ํจ๊ป ์ฌ์ฉํ์ฌ ์ค๋๋ ๋ธ๋ผ์ฐ์ ๋ฒ์ ์ ์ง์ํ๊ฑฐ๋ ๋ฐฐํฌ๋ฅผ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์์ค ์ฝ๋(ES ๋ชจ๋ ๊ตฌ๋ฌธ ์ฌ์ฉ)๋ฅผ ๋ค์ํ ๋์์ ์ ํฉํ ํ์์ผ๋ก ๋ณํํฉ๋๋ค.
์ด๋ฌํ ๋๊ตฌ์ ์๋ชป๋ ๊ตฌ์ฑ์ ์ฐ๋ฐ์ ์ผ๋ก ์ทจ์ฝ์ ์ ๋์ ํ๊ฑฐ๋ ๊ฒฉ๋ฆฌ์ ์ด์ ์ ์ฝํ์ํฌ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ชป ๊ตฌ์ฑ๋ ๋ฒ๋ค๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ํธ๋ฆฌ ์์ดํน๋์ง ์์ ๋ถํ์ํ ์ฝ๋๋ฅผ ํฌํจํ์ฌ ๊ณต๊ฒฉ ํ๋ฉด์ ๋๋ฆฝ๋๋ค.
- ๊ฐ์ธ์ผ๋ก ์๋๋์๋ ๋ด๋ถ ๋ชจ๋ ๋ณ์ ๋๋ ํจ์๋ฅผ ๋ ธ์ถํฉ๋๋ค.
- ํ๋ก๋์ ์์ ๋๋ฒ๊น ๋ฐ ๋ณด์ ๋ถ์์ ๋ฐฉํดํ๋ ์๋ชป๋ ์์ค ๋งต์ ์์ฑํฉ๋๋ค.
๋น๋ ํ์ดํ๋ผ์ธ์ด ๋ชจ๋ ๋ณํ ๋ฐ ์ต์ ํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ์๋๋ ๋ณด์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
๋ชจ๋ ๋ด ๋ฐํ์ ์ทจ์ฝ์
๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ์ฃผ๋ก ๋ชจ๋ ์ฌ์ด ๋ฐ ์ ์ญ ๋ฒ์๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ชจ๋ ๋ด๋ถ์ ๋ฐ์ํ๋ ์ทจ์ฝ์ ์ ๋ณธ์ง์ ์ผ๋ก ๋ณดํธํ์ง ์์ต๋๋ค. ๋ชจ๋์ ์์ ํ์ง ์์ ๋ก์ง์ด ํฌํจ๋์ด ์์ผ๋ฉด ํด๋น ๊ฒฉ๋ฆฌ๊ฐ ํด๋น ์์ ํ์ง ์์ ๋ก์ง์ด ์คํ๋์ด ํผํด๋ฅผ ์ ๋ ๊ฒ์ ๋ง์ง ๋ชปํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํ๋กํ ํ์
์ค์ผ: ๋ชจ๋์ ๋ด๋ถ ๋ก์ง์ด ๊ณต๊ฒฉ์๊ฐ
Object.prototype
์ ์์ ํ๋๋ก ํ์ฉํ๋ ๊ฒฝ์ฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๊ด๋ฒ์ํ ์ํฅ์ ๋ฏธ์น ์ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒฝ๊ณ๋ฅผ ์ฐํํฉ๋๋ค. - ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ (XSS): ๋ชจ๋์ด ์ ์ ํ ์์ ์์ด ์ฌ์ฉ์ ์ ๊ณต ์ ๋ ฅ์ DOM์ ์ง์ ๋ ๋๋งํ๋ฉด ๋ชจ๋์ด ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๊ฒฉ๋ฆฌ๋๋๋ผ๋ XSS ์ทจ์ฝ์ ์ด ์ฌ์ ํ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ์์ ํ์ง ์์ API ํธ์ถ: ๋ชจ๋์ ์์ฒด ๋ด๋ถ ์ํ๋ฅผ ์์ ํ๊ฒ ๊ด๋ฆฌํ ์ ์์ง๋ง, ์์ ํ์ง ์์ API ํธ์ถ(์: HTTPS ๋์ HTTP๋ฅผ ํตํด ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ ์ก ๋๋ ์ฝํ ์ธ์ฆ ์ฌ์ฉ)์ ์ํํ๋ฉด ํด๋น ์ทจ์ฝ์ ์ด ์ง์๋ฉ๋๋ค.
์ด๋ ๊ฐ๋ ฅํ ๋ชจ๋ ๊ฒฉ๋ฆฌ๊ฐ ๊ฐ ๋ชจ๋ ๋ด์ ์์ ํ ์ฝ๋ฉ ๊ดํ๊ณผ ๊ฒฐํฉ๋์ด์ผ ํจ์ ๊ฐ์กฐํฉ๋๋ค.
๋์ import()
๋ฐ ๊ทธ ๋ณด์ ์ํฅ
ES ๋ชจ๋์ import()
ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ง์ํ๋ฉฐ, ์ด๋ ์์ฒญ๋ ๋ชจ๋์ ๋ํ Promise๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ์ฝ๋ ๋ถํ , ์ง์ฐ ๋ก๋ฉ ๋ฐ ์ฑ๋ฅ ์ต์ ํ์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค. ๋ชจ๋์ ์ ํ๋ฆฌ์ผ์ด์
๋ก์ง ๋๋ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ๋ฐ๋ผ ๋ฐํ์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ ๋์ ๊ฐ์ ธ์ค๊ธฐ๋ ๋ชจ๋ ๊ฒฝ๋ก๊ฐ ์ ๋ขฐํ ์ ์๋ ์์ค(์: ์ฌ์ฉ์ ์ ๋ ฅ ๋๋ ์์ ํ์ง ์์ API ์๋ต)์์ ์ค๋ ๊ฒฝ์ฐ ์ ์ฌ์ ์ธ ๋ณด์ ์ํ์ ์ด๋ํฉ๋๋ค. ๊ณต๊ฒฉ์๋ ์ ์ฌ์ ์ผ๋ก ์ ์์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ฃผ์ ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- ์์ ์ฝ๋ ๋ก๋: ๊ณต๊ฒฉ์๊ฐ
import()
์ ์ ๋ฌ๋ ๊ฒฝ๋ก๋ฅผ ์ ์ดํ ์ ์๋ค๋ฉด ์ ์์ ์ธ ๋๋ฉ์ธ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด ์์์น ๋ชปํ ์์น์์ ์์์ JavaScript ํ์ผ์ ๋ก๋ํ๊ณ ์คํํ ์ ์์ต๋๋ค. - ๊ฒฝ๋ก ํ์: ์๋ ๊ฒฝ๋ก(์:
../evil-module.js
)๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ์๋ ์๋๋ ๋๋ ํฐ๋ฆฌ ์ธ๋ถ์ ๋ชจ๋์ ์ก์ธ์คํ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค.
์ํ: import()
์ ์ ๊ณต๋๋ ๋ชจ๋ ๋์ ๊ฒฝ๋ก๋ ์๊ฒฉํ๊ฒ ์ ์ด, ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์์ ์ฒ๋ฆฌ๋์ด์ผ ํจ์ ํญ์ ๋ณด์ฅํฉ๋๋ค. ์์ ์ฒ๋ฆฌ๋์ง ์์ ์ฌ์ฉ์ ์
๋ ฅ์์ ์ง์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ํผํ์ญ์์ค. ๋์ ๊ฒฝ๋ก๊ฐ ํ์ํ ๊ฒฝ์ฐ ํ์ฉ๋ ๊ฒฝ๋ก๋ฅผ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ฐ๋ ฅํ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ญ์์ค.
ํ์ฌ ์ข ์์ฑ ์ํ์ ์ง์
์์ ๋ ผ์ํ๋ฏ์ด ๋ชจ๋ ๊ฒฉ๋ฆฌ๋ ์ ์์ ์ธ ํ์ฌ ์ฝ๋์ ์ํฅ์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ์์ ์ธ ํจํค์ง๋ฅผ ์์ ํ๊ฒ ๋ง๋ค์ง๋ ์์ต๋๋ค. ๋ฌดํดํด ๋ณด์ด๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํธ์ถ๋ ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ถํ๋ ํจ์๋ฅผ ํฌํจํ๋๋ก ์ ๋ฐ์ดํธ๋์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํด๋น ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒฉ๋ฆฌ์ ๊ด๊ณ์์ด ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๊ฒฉ๋ฆฌ๋ ์ปจํ ์ธ๋จผํธ ๋ฉ์ปค๋์ฆ์ด์ง๋ง ํ์ฌ ์ข ์์ฑ์ ๋ํ ์ฒ ์ ํ ๊ฒ์ฆ์ ๋์ฒดํ์ง๋ ์์ต๋๋ค. ์ด๋ ํ๋ ์ํํธ์จ์ด ๊ณต๊ธ๋ง ๋ณด์์์ ๊ฐ์ฅ ์ค์ํ ๊ณผ์ ์ค ํ๋๋ก ๋จ์ ์์ต๋๋ค.
๋ชจ๋ ๋ณด์ ๊ทน๋ํ๋ฅผ ์ํ ์คํ ๊ฐ๋ฅํ ๋ชจ๋ฒ ์ฌ๋ก
JavaScript ๋ชจ๋ ๊ฒฉ๋ฆฌ์ ๋ณด์ ์ด์ ์ ์ต๋ํ ํ์ฉํ๊ณ ํ๊ณ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๊ฐ๋ฐ์์ ์กฐ์ง์ ํฌ๊ด์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก ์งํฉ์ ์ฑํํด์ผ ํฉ๋๋ค.
1. ES ๋ชจ๋์ ์์ ํ ์ฌ์ฉํ์ญ์์ค
๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ค์ดํฐ๋ธ ES ๋ชจ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ์ญ์์ค. ์ค๋๋ ๋ธ๋ผ์ฐ์ ์ง์์ ๊ฒฝ์ฐ ๋ฒ๋ค๋ฌ(Webpack, Rollup, Parcel)๊ฐ ์ต์ ํ๋ ES ๋ชจ๋์ ์ถ๋ ฅํ๋๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ๋ฐ ์ค์ ์ด ์ ์ ๋ถ์์ ์ด์ ์ ๋๋ฆฌ๋๋ก ํ์ญ์์ค. ๋ณด์ ํจ์น ๋ฐ ์ฑ๋ฅ ๊ฐ์ ์ ํ์ฉํ๊ธฐ ์ํด ๋น๋ ๋๊ตฌ๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ญ์์ค.
2. ์ธ์ฌํ ์ข ์์ฑ ๊ด๋ฆฌ ์ฐ์ต
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์์ ๊ฐ์ฅ ์ฝํ ์ฐ๊ฒฐ๋งํผ ๊ฐ๋ ฅํ๋ฉฐ, ์ข ์ข ๊ฐ์ ์ข ์์ฑ์ ๋๋ค. ์ด ์์ญ์ ์ง์์ ์ธ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
- ์ข ์์ฑ ์ต์ํ: ๊ฐ ์ข ์์ฑ(์ง์ ๋๋ ๊ฐ์ )์ ์ ์ฌ์ ์ธ ์ํ์ ๋์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต๊ฒฉ ํ๋ฉด์ ๋๋ฆฝ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์ ๋ก ํ์ํ์ง ๋นํ์ ์ผ๋ก ํ๊ฐํ์ญ์์ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ ์๊ณ ๋ ์ง์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ์ญ์์ค.
- ์ ๊ธฐ ๊ฐ์ฌ: CI/CD ํ์ดํ๋ผ์ธ์ ์๋ํ๋ ๋ณด์ ์ค์บ๋ ๋๊ตฌ๋ฅผ ํตํฉํ์ญ์์ค.
npm audit
,yarn audit
, Snyk ๋ฐ Dependabot๊ณผ ๊ฐ์ ๋๊ตฌ๋ ํ๋ก์ ํธ์ ์ข ์์ฑ์์ ์๋ ค์ง ์ทจ์ฝ์ ์ ์๋ณํ๊ณ ์ํ ๋จ๊ณ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ฌ๋ฅผ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ์ ์ผ์์ ์ธ ๋ถ๋ถ์ผ๋ก ๋ง๋์ญ์์ค. - ๋ฒ์ ๊ณ ์ : ์ฝ๊ฐ์ ์
๋ฐ์ดํธ ๋๋ ํจ์น ์
๋ฐ์ดํธ๋ฅผ ํ์ฉํ๋ ์ ์ฐํ ๋ฒ์ ๋ฒ์(์:
^1.2.3
๋๋~1.2.3
)๋ฅผ ์ฌ์ฉํ๋ ๋์ ์ค์ ์ข ์์ฑ์ ๊ฒฝ์ฐ ์ ํํ ๋ฒ์ (์:1.2.3
)์ ๊ณ ์ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ ์ ๋ฐ์ดํธ์ ๋ ๋ง์ ์๋ ๊ฐ์ ์ด ํ์ํ์ง๋ง ๋ช ์์ ์ธ ๊ฒํ ์์ด ์ ์ฌ์ ์ผ๋ก ์ทจ์ฝํ ์ฝ๋ ๋ณ๊ฒฝ์ด ๋์ ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. - ๋น๊ณต๊ฐ ๋ ์ง์คํธ๋ฆฌ & ๋ฒค๋๋ง: ๋งค์ฐ ๋ฏผ๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋น๊ณต๊ฐ ํจํค์ง ๋ ์ง์คํธ๋ฆฌ(์: Nexus, Artifactory)๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์ฉ ๋ ์ง์คํธ๋ฆฌ๋ฅผ ํ๋ก์ํํ์ฌ ์น์ธ๋ ํจํค์ง ๋ฒ์ ์ ๊ฒํ ํ๊ณ ์บ์ํ ์ ์์ต๋๋ค. ๋๋ "๋ฒค๋๋ง"(์ข ์์ฑ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ง์ ๋ณต์ฌ)๋ ์ต๋ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง ์ ๋ฐ์ดํธ์ ๋ํ ์ ์ง ๊ด๋ฆฌ ์ค๋ฒํค๋๊ฐ ๋ ๋์ต๋๋ค.
3. ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP) ๊ตฌํ
CSP๋ ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ
(XSS)์ ํฌํจํ ๋ค์ํ ์ ํ์ ์ฃผ์
๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋๋ HTTP ๋ณด์ ํค๋์
๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ๋ก๋ํ๊ณ ์คํํ ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ ์ํฉ๋๋ค. ๋ชจ๋์ ๊ฒฝ์ฐ script-src
์ง์๋ฌธ์ด ์ค์ํฉ๋๋ค.
Content-Security-Policy: script-src 'self' cdn.example.com 'unsafe-eval';
์ด ์์์๋ ์คํฌ๋ฆฝํธ๋ง ์์ฒด ๋๋ฉ์ธ('self'
) ๋ฐ ํน์ CDN์์ ๋ก๋ํ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ํ ์๊ฒฉํ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํนํ ES ๋ชจ๋์ ๊ฒฝ์ฐ CSP๊ฐ ๋ชจ๋ ๋ก๋๋ฅผ ํ์ฉํ๋์ง ํ์ธํ์ญ์์ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก 'self'
๋๋ ํน์ ์ถ์ฒ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. CSP์ ๋ณดํธ๋ฅผ ์๋นํ ์ฝํ์ํค๋ฏ๋ก 'unsafe-inline'
๋๋ 'unsafe-eval'
์ ๋ฐ๋์ ํ์ํ ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ํผํ์ญ์์ค. ์ ๊ตฌ์ฑ๋ CSP๋ ๊ณต๊ฒฉ์๊ฐ ๋์ import()
ํธ์ถ์ ์ฃผ์
ํ๋๋ผ๋ ๋ฌด๋จ ๋๋ฉ์ธ์์ ์
์์ ์ธ ๋ชจ๋์ ๋ก๋ํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
4. ์๋ธ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ(SRI) ํ์ฉ
์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ(CDN)์์ JavaScript ๋ชจ๋์ ๋ก๋ํ ๋ CDN ์์ฒด๊ฐ ์์๋ ์ํ์ด ๋ด์ฌ๋์ด ์์ต๋๋ค. ์๋ธ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ(SRI)์ ์ด๋ฌํ ์ํ์ ์ํํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. <script type="module">
ํ๊ทธ์ integrity
์์ฑ์ ์ถ๊ฐํ์ฌ ์์ ๋ฆฌ์์ค ์ฝํ
์ธ ์ ์ํธํ ํด์๋ฅผ ์ ๊ณตํฉ๋๋ค.
<script type="module" src="https://cdn.example.com/some-module.js"
integrity="sha384-xyzabc..." crossorigin="anonymous"></script>
๊ทธ๋ฌ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ๋ค์ด๋ก๋๋ ๋ชจ๋์ ํด์๋ฅผ ๊ณ์ฐํ๊ณ integrity
์์ฑ์ ์ ๊ณต๋ ๊ฐ๊ณผ ๋น๊ตํฉ๋๋ค. ํด์๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ธ๋ผ์ฐ์ ๋ ์คํฌ๋ฆฝํธ ์คํ์ ๊ฑฐ๋ถํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋์ด ์ ์ก ์ค์ด๊ฑฐ๋ CDN์์ ๋ณ์กฐ๋์ง ์์์์ ๋ณด์ฅํ์ฌ ์ธ๋ถ ํธ์คํ
์์ฐ์ ๋ํ ๊ณต๊ธ๋ง ๋ณด์์ ์ค์ํ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค. crossorigin="anonymous"
์์ฑ์ SRI ๊ฒ์ฌ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๋ฐ ํ์ํฉ๋๋ค.
5. ์ฒ ์ ํ ์ฝ๋ ๊ฒํ ์ํ (๋ณด์ ๊ด์ ํฌํจ)
์ธ์ ๊ฐ๋ ์ ์ฌ์ ํ ํ์์ ์ ๋๋ค. ๋ณด์ ์ค์ฌ ์ฝ๋ ๊ฒํ ๋ฅผ ๊ฐ๋ฐ ์ํฌํ๋ก์ ํตํฉํ์ญ์์ค. ๊ฒํ ์๋ ๋ค์ ์ฌํญ์ ๊ตฌ์ฒด์ ์ผ๋ก ํ์ธํด์ผ ํฉ๋๋ค.
- ์์ ํ์ง ์์ ๋ชจ๋ ์ํธ ์์ฉ: ๋ชจ๋์ด ์ํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์บก์ํํ๊ณ ์์ต๋๊น? ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ๊ฐ์ ๋ถํ์ํ๊ฒ ์ ๋ฌ๋๊ณ ์์ต๋๊น?
- ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐ ์์: ์ฌ์ฉ์ ์ ๋ ฅ ๋๋ ์ธ๋ถ API์ ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋ด์์ ์ฒ๋ฆฌ๋๊ฑฐ๋ ํ์๋๊ธฐ ์ ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ํจ์ฑ ๊ฒ์ฌ๋๊ณ ์์ ์ฒ๋ฆฌ๋ฉ๋๊น?
- ๋์ ๊ฐ์ ธ์ค๊ธฐ:
import()
ํธ์ถ์ ์ ๋ขฐํ ์ ์๋ ์ ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๊น? ๊ณต๊ฒฉ์๊ฐ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์กฐ์ํ ์ํ์ด ์์ต๋๊น? - ํ์ฌ ํตํฉ: ํ์ฌ ๋ชจ๋์ด ํต์ฌ ๋ก์ง๊ณผ ์ด๋ป๊ฒ ์ํธ ์์ฉํฉ๋๊น? API๊ฐ ์์ ํ๊ฒ ์ฌ์ฉ๋ฉ๋๊น?
- ๋น๋ฐ ๊ด๋ฆฌ: ํด๋ผ์ด์ธํธ ์ธก ๋ชจ๋ ๋ด์ ๋น๋ฐ(API ํค, ์๊ฒฉ ์ฆ๋ช )์ด ์์ ํ์ง ์๊ฒ ์ ์ฅ๋๊ฑฐ๋ ์ฌ์ฉ๋ฉ๋๊น?
6. ๋ชจ๋ ๋ด ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ
๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ ๋ชจ๋ ๋ด๋ถ์ ์ฝ๋๋ ์์ ํด์ผ ํฉ๋๋ค. ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ ์์น์ ์ ์ฉํ์ญ์์ค.
- ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ: ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋๋ ์ธ๋ถ API์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ ๋ ฅ์ ํฌํจํ์ฌ ๋ชจ๋ ํจ์์ ๋ํ ๋ชจ๋ ์ ๋ ฅ์ ํญ์ ์ ํจ์ฑ ๊ฒ์ฌํ๊ณ ์์ ์ฒ๋ฆฌํ์ญ์์ค. ๋ชจ๋ ์ธ๋ถ ๋ฐ์ดํฐ๋ ์ฆ๋ช ๋ ๋๊น์ง ์ ์์ ์ธ ๊ฒ์ผ๋ก ๊ฐ์ ํ์ญ์์ค.
- ์ถ๋ ฅ ์ธ์ฝ๋ฉ/์์: ๋์ ์ฝํ ์ธ ๋ฅผ DOM์ ๋ ๋๋งํ๊ฑฐ๋ ๋ค๋ฅธ ์์คํ ์ผ๋ก ๋ณด๋ด๊ธฐ ์ ์ XSS ๋ฐ ๊ธฐํ ์ฃผ์ ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ๋ฐ๋ฅด๊ฒ ์ธ์ฝ๋ฉ๋๊ฑฐ๋ ์์ ์ฒ๋ฆฌ๋์๋์ง ํ์ธํ์ญ์์ค.
- ์ค๋ฅ ์ฒ๋ฆฌ: ๊ณต๊ฒฉ์๋ฅผ ๋์ธ ์ ์๋ ์ ๋ณด ๋์ถ(์: ์คํ ์ถ์ )์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ฐ๋ ฅํ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
- ์ํํ API ํผํ๊ธฐ: ํนํ ์ ๋ขฐํ ์ ์๋ ์
๋ ฅ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ
eval()
, ๋ฌธ์์ด ์ธ์๋ฅผ ์ฌ์ฉํsetTimeout()
๋๋new Function()
๊ณผ ๊ฐ์ ํจ์ ์ฌ์ฉ์ ์ต์ํํ๊ฑฐ๋ ์๊ฒฉํ๊ฒ ์ ์ดํ์ญ์์ค.
7. ๋ฒ๋ค ์ฝํ ์ธ ๋ถ์
ํ๋ก๋์ ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฒ๋ค๋งํ ํ Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข JavaScript ๋ฒ๋ค ์ฝํ ์ธ ๋ฅผ ์๊ฐํํ์ญ์์ค. ์ด๋ฅผ ํตํด ๋ค์์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์์์น ๋ชปํ ํฐ ์ข ์์ฑ.
- ์ค์๋ก ํฌํจ๋์์ ์ ์๋ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋๋ ๋ถํ์ํ ์ฝ๋.
- ์๋ชป๋ ๊ตฌ์ฑ ๋๋ ์ ์ฌ์ ์ธ ๊ณต๊ฒฉ ํ๋ฉด์ ๋ํ๋ผ ์ ์๋ ์ค๋ณต ๋ชจ๋.
๋ฒ๋ค ๊ตฌ์ฑ์ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๋ฉด ์ฌ์ฉ์์๊ฒ ๋๋ฌํ๋ ๊ฒ์ด ํ์ํ ๊ฒ์ฆ๋ ์ฝ๋๋ฟ์ธ์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
8. ๋น๋ฐ ์์ ํ๊ฒ ๊ด๋ฆฌ
API ํค, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ฒฉ ์ฆ๋ช ๋๋ ๋น๊ณต๊ฐ ์ํธํ ํค์ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ ์ธก JavaScript ๋ชจ๋์ ์ง์ ํ๋์ฝ๋ฉํ์ง ๋ง์ญ์์ค. ๋ชจ๋์ด ์ผ๋ง๋ ์ ๊ฒฉ๋ฆฌ๋์๋์ง์ ์๊ด์์ด ํด๋น ์ฝ๋๋ ๋๊ตฌ๋ ๊ฒ์ฌํ ์ ์๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋ฉ๋๋ค. ๋์ ํ๊ฒฝ ๋ณ์, ์๋ฒ ์ธก ํ๋ก์ ๋๋ ์์ ํ ํ ํฐ ๊ตํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ญ์์ค. ํด๋ผ์ด์ธํธ ์ธก ๋ชจ๋์ ์ค์ ๋น๋ฐ์ด ์๋ ํ ํฐ ๋๋ ๊ณต๊ฐ ํค์ ๋ํด์๋ง ์๋ํด์ผ ํฉ๋๋ค.
JavaScript ๊ฒฉ๋ฆฌ์ ์งํํ๋ ํ๊ฒฝ
๋ ์์ ํ๊ณ ๊ฒฉ๋ฆฌ๋ JavaScript ํ๊ฒฝ์ ํฅํ ์ฌ์ ์ ๊ณ์๋ฉ๋๋ค. ๋ช ๊ฐ์ง ์ ํฅ ๊ธฐ์ ๊ณผ ์ ์์ ํจ์ฌ ๋ ๊ฐ๋ ฅํ ๊ฒฉ๋ฆฌ ๊ธฐ๋ฅ์ ์ฝ์ํฉ๋๋ค.
WebAssembly (Wasm) ๋ชจ๋
WebAssembly๋ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ์ ์์ค์ ๊ณ ์ฑ๋ฅ ๋ฐ์ดํธ์ฝ๋ ํ์์ ๋๋ค. Wasm ๋ชจ๋์ ์๊ฒฉํ ์๋๋ฐ์ค์์ ์คํ๋์ด JavaScript ๋ชจ๋๋ณด๋ค ํจ์ฌ ๋์ ์์ค์ ๊ฒฉ๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ํ ๋ฉ๋ชจ๋ฆฌ: Wasm ๋ชจ๋์ ํธ์คํธ JavaScript ํ๊ฒฝ๊ณผ ์์ ํ ๋ถ๋ฆฌ๋ ์์ฒด ๊ณ ์ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
- ์ง์ DOM ์ก์ธ์ค ์์: Wasm ๋ชจ๋์ DOM ๋๋ ์ ์ญ ๋ธ๋ผ์ฐ์ ๊ฐ์ฒด์ ์ง์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ํธ ์์ฉ์ JavaScript API๋ฅผ ํตํด ๋ช ์์ ์ผ๋ก ์ฑ๋๋ง๋์ด์ผ ํ๋ฉฐ, ์ด๋ ์ ์ด๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ์ด ํ๋ฆ ๋ฌด๊ฒฐ์ฑ: Wasm์ ๊ตฌ์กฐํ๋ ์ ์ด ํ๋ฆ์ ๋ค์ดํฐ๋ธ ์ฝ๋์ ์์ธก ๋ถ๊ฐ๋ฅํ ์ ํ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ ์ฉํ๋ ํน์ ํด๋์ค์ ๊ณต๊ฒฉ์ ๋ณธ์ง์ ์ผ๋ก ์ ํญ์ ์ ๋๋ค.
Wasm์ ์ต๋ ๊ฒฉ๋ฆฌ๊ฐ ํ์ํ ๊ณ ์ฑ๋ฅ ๋๋ ๋ณด์์ ๋ฏผ๊ฐํ ๊ตฌ์ฑ ์์์ ํ์ํ ์ ํ์ ๋๋ค.
๊ฐ์ ธ์ค๊ธฐ ๋งต
๊ฐ์ ธ์ค๊ธฐ ๋งต์ ๋ธ๋ผ์ฐ์ ์์ ๋ชจ๋ ์ง์ ์๊ฐ ํ์ธ๋๋ ๋ฐฉ์์ ์ ์ดํ๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์์ ๋ฌธ์์ด ์๋ณ์๋ฅผ ๋ชจ๋ URL์ ๋งคํํ ์ ์์ต๋๋ค. ์ด๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋ชจ๋์ ๋ค๋ฅธ ๋ฒ์ ์ ์ฒ๋ฆฌํ ๋ ๋ชจ๋ ๋ก๋์ ๋ํ ๋ ํฐ ์ ์ด ๋ฐ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ๋ณด์ ๊ด์ ์์ ๊ฐ์ ธ์ค๊ธฐ ๋งต์ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ข ์์ฑ ํด๊ฒฐ ์ค์ ์ง์คํ: ๊ฒฝ๋ก๋ฅผ ํ๋์ฝ๋ฉํ๋ ๋์ ์ค์์์ ์ ์ํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋ชจ๋ ์์ค๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
- ๊ฒฝ๋ก ํ์ ์ํ: ์ ๋ขฐํ ์ ์๋ ์ด๋ฆ์ URL์ ๋ช ์์ ์ผ๋ก ๋งคํํจ์ผ๋ก์จ ๊ณต๊ฒฉ์๊ฐ ์๋ํ์ง ์์ ๋ชจ๋์ ๋ก๋ํ๊ธฐ ์ํด ๊ฒฝ๋ก๋ฅผ ์กฐ์ํ๋ ์ํ์ ์ค์ผ ์ ์์ต๋๋ค.
ShadowRealm API (์คํ์ )
ShadowRealm API๋ ์ง์ ์ผ๋ก ๊ฒฉ๋ฆฌ๋๊ณ ๊ฐ์ธ์ ์ธ ์ ์ญ ํ๊ฒฝ์์ JavaScript ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ์ค๊ณ๋ ์คํ์ ์ธ JavaScript ์ ์์ ๋๋ค. ์์ ์ ๋๋ iframe๊ณผ ๋ฌ๋ฆฌ ShadowRealm์ ๋๊ธฐ ํจ์ ํธ์ถ ๋ฐ ๊ณต์ ๊ธฐ๋ณธ๊ฐ์ ๋ํ ์ ๋ฐํ ์ ์ด๋ฅผ ํ์ฉํ๋๋ก ์๋๋์์ต๋๋ค. ์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค.
- ์์ ํ ์ ์ญ ๊ฒฉ๋ฆฌ: ShadowRealm์ ์ฃผ ์คํ ์์ญ๊ณผ ์์ ํ ๋ถ๋ฆฌ๋ ์์ฒด ๊ณ ์ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ์ต๋๋ค.
- ์ ์ด๋ ํต์ : ๊ธฐ๋ณธ ์์ญ๊ณผ ShadowRealm ๊ฐ์ ํต์ ์ ๋ช ์์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ ๋ด๋ณด๋ธ ํจ์๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ง์ ์ก์ธ์ค ๋๋ ๋์ถ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ ๋ขฐํ ์ ์๋ ์ฝ๋์ ์ ๋ขฐํ ์ ์๋ ์คํ: ์ด API๋ ํ์ฌ ๋ชจ๋ ๊ฒฉ๋ฆฌ๋ฅผ ๋์ด์๋ ์๋๋ฐ์ฑ ์์ค์ ์ ๊ณตํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ ๋ขฐํ ์ ์๋ ํ์ฌ ์ฝ๋(์: ์ฌ์ฉ์ ์ ๊ณต ํ๋ฌ๊ทธ์ธ, ๊ด๊ณ ์คํฌ๋ฆฝํธ)๋ฅผ ์์ ํ๊ฒ ์คํํ๋ ๋ฐ ์์ฒญ๋ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก
JavaScript ๋ชจ๋ ๋ณด์์ ๊ทผ๋ณธ์ ์ผ๋ก ๊ฐ๋ ฅํ ์ฝ๋ ๊ฒฉ๋ฆฌ์ ์ํด ์ฃผ๋๋๋ฉฐ, ๋ ์ด์ ํ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ํ๋ ฅ์ ์ด๊ณ ์์ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ค์ํ ๊ธฐ๋ฐ์ด ๋์์ต๋๋ค. ๋์งํธ ์ํ๊ณ์ ๋ณต์ก์ฑ์ด ๊ณ์ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์บก์ํํ๊ณ , ์ ์ญ ์ค์ผ์ ๋ฐฉ์งํ๊ณ , ์ ์ ์๋ ๋ชจ๋ ๊ฒฝ๊ณ ๋ด์์ ์ ์ฌ์ ์ธ ์ํ์ ํฌํจํ๋ ๋ฅ๋ ฅ์ ํ์์ ์ ๋๋ค.
ES ๋ชจ๋์ ์ดํ ๋ฒ์, ๊ธฐ๋ณธ์ ์ผ๋ก ์๊ฒฉํ ๋ชจ๋ ๋ฐ ์ ์ ๋ถ์ ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ์ฝ๋ ๊ฒฉ๋ฆฌ ์ํ๋ฅผ ํฌ๊ฒ ๋ฐ์ ์์ผฐ์ง๋ง, ๋ชจ๋ ์ํ์ ๋ํ ๋ง๋ฒ ๋ฐฉํจ๋ ์๋๋๋ค. ์ ์ฒด์ ์ธ ๋ณด์ ์ ๋ต์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฌํ ๊ณ ์ ํ ๋ชจ๋ ์ด์ ์ ์ ์คํ ์ข ์์ฑ ๊ด๋ฆฌ, ์๊ฒฉํ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ , ์ ์ ์ ์ธ ์๋ธ ๋ฆฌ์์ค ๋ฌด๊ฒฐ์ฑ ์ฌ์ฉ, ์ฒ ์ ํ ์ฝ๋ ๊ฒํ ๋ฐ ๊ฐ ๋ชจ๋ ๋ด์ ๊ท์จ ์๋ ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ ์ ์คํ ๋ชจ๋ฒ ์ฌ๋ก์ ๊ฒฐํฉํด์ผ ํฉ๋๋ค.
์ด๋ฌํ ์์น์ ์์์ ์ผ๋ก ์ฑํํ๊ณ ๊ตฌํํจ์ผ๋ก์จ ์ ์ธ๊ณ ์กฐ์ง๊ณผ ๊ฐ๋ฐ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐํํ๊ณ , ๋์์์ด ์งํํ๋ ์ฌ์ด๋ฒ ์ํ ํ๊ฒฝ์ ์ํํ๋ฉฐ, ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋ ์น์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. WebAssembly ๋ฐ ShadowRealm API์ ๊ฐ์ ์ ํฅ ๊ธฐ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์งํ๋ ๊ฒ์ ์์ ํ ์ฝ๋ ์คํ์ ๊ฒฝ๊ณ๋ฅผ ๋ํ๋ ๋ฐ ๋์ฑ ํ์ ์ค์ด์ค ๊ฒ์ด๋ฉฐ, JavaScript์ ํฐ ํ์ ์ฃผ๋ ๋ชจ๋์ฑ์ด ๋ํ ๋นํ ๋ฐ ์๋ ๋ณด์์ ์ ๊ณตํ๋๋ก ๋ณด์ฅํฉ๋๋ค.