
๋น์ทํด ๋ณด์ด์ง๋ง ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ชจ๋, ๊ฐ๋ ์ ๋ฆฌ
๋น์ทํด ๋ณด์ด์ง๋ง ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ชจ๋, ๊ฐ๋ ์ ๋ฆฌ ๊ด๋ จ
ํ๋ก๊ทธ๋๋ฐ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ์ข ์ข ๋น์ทํด ๋ณด์ด๋ ์ฉ์ด๋ค ๋๋ฌธ์ ํท๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํนํ ์น ๊ฐ๋ฐ์ ํ๋ฉด์ ์์ฃผ ๋ง๋๋ ์ฉ์ด๊ฐ ๋ฐ๋ก ์ปดํฌ๋ํธ(Component)์ ๋ชจ๋(Module)์ด์ฃ . ์ด ๋ ์ฉ์ด๋ ์์ฃผ ํผ๋๋๊ณค ํ๋๋ฐ์, ์ฌ์ค ๋ช ํํ ๊ตฌ๋ถํ๋ฉด ๊ฐ๋ฐ ๊ณผ์ ์์ ์ ๋ง ๋ง์ ๋์์ด ๋๋ ๊ฐ๋ ์ ๋๋ค.
์ค๋์ ์ด ๋ ์ฉ์ด๋ฅผ ๋ช ํํ ๊ตฌ๋ถํ๊ณ , ๋ ๋์๊ฐ ๋ชจ๋ ์์คํ ๊น์ง ์์ฐ์ค๋ฝ๊ฒ ์ฐ๊ฒฐํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค. ์ด๋ฒ ๊ธ์ ๋๊น์ง ์ฝ๊ณ ๋๋ฉด, ์ปดํฌ๋ํธ์ ๋ชจ๋์ ๋ํด ๋์ฑ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ ๊ฒ๋๋ค.
์ปดํฌ๋ํธ์ ๋ชจ๋
๋จผ์ ์ปดํฌ๋ํธ์ ๋ชจ๋, ์ด ๋ ๊ฐ์ง์ ๊ฐ๋ ์ ๋ํด ๋ช ํํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
1. ์ปดํฌ๋ํธ๋?
์ปดํฌ๋ํธ(Component)๋ ์ฝ๊ฒ ๋งํ๋ฉด ์ํํธ์จ์ด๋ฅผ ์ด๋ฃจ๋ ๋ ๋ฆฝ์ ์ธ ๊ตฌ์ฑ ์์์ ๋๋ค. ๋ง์น ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ, ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์ฐ๊ฒฐ๋์ด ํ๋์ ํฐ ์์คํ ์ ๋ง๋ค์ด๋ ๋๋ค.
์ปดํฌ๋ํธ๋ ์ฃผ๋ก ์ค์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋ฐํ์(runtime)์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๊ณ ๋ฐฐํฌ๋ ์ ์๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ค์ ๋งํด, ์ปดํฌ๋ํธ๋ ์ค์ ๋ก ํ๋ก๊ทธ๋จ์ด ๋์ํ ๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๊ณ ์๋ก ์ํธ์์ฉํ๋ ๋ฉ์ด๋ฆฌ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข์ต๋๋ค.
์๋ฅผ ๋ค์ด๋ณผ๊น์? ์ฐ๋ฆฌ๊ฐ ํํ ๋ณด๋ ์น์ฌ์ดํธ ํ๋ฉด์ ์๋ ๋ฒํผ, ๋ก๊ทธ์ธ ํผ, ๋ด๋น๊ฒ์ด์ ๋ฐ์ ๊ฐ์ UI ์์๋ค์ ๋ฐ๋ก UI ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๊ณ ์ปดํฌ๋ํธ๊ฐ ๊ผญ UI์๋ง ๊ตญํ๋๋ ๊ฒ์ ์๋๋ฐ์, ๋ก๊ทธ์ธ ์ธ์ฆ ์๋น์ค๋ ๊ฒฐ์ ์๋น์ค์ฒ๋ผ ๋์ ๋ณด์ด์ง๋ ์์ง๋ง, ๋ ๋ฆฝ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ๋ '์๋น์ค ์ปดํฌ๋ํธ'๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.

์ปดํฌ๋ํธ๋ ๊ผญ ๋ฒํผ์ด๋ ํผ๊ณผ ๊ฐ์ ๋จ์ํ UI ์์๋ฟ๋ง ์๋๋ผ, ์ํ ๊ด๋ฆฌ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ ผ๋ฆฌ์ ์ธ ๊ธฐ๋ฅ๋ ๋ ๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๋ฐ์ดํฐ ์์ฒญ ์ปดํฌ๋ํธ๋, ๋ก๊ทธ์ธ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ธ์ฆ ์ปดํฌ๋ํธ, ํ ๋ง๋ค ์ธ์ด์ ๊ฐ์ ์ฌ์ฉ์ ํ๊ฒฝ์ค์ ์ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ ๋ฑ UI ๋ค์์ ๋ณด์ด์ง ์์ง๋ง, ์ค์ ๋์๊ณผ ๋ก์ง์ ์ฑ ์์ง๋ ์์๋ค๋ ๋ชจ๋ ํ๋ก ํธ์๋์ ์ค์ํ ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ์ปดํฌ๋ํธ๋ ๋ฐ๋์ ๋์ ๋ณด์ด๋ UI๋ง์ ์๋ฏธํ์ง ์๊ณ , ๋ ๋ฆฝ์ ์ธ ์ญํ ์ ๊ฐ์ง ๊ธฐ๋ฅ ๋จ์๋ก ํ์ฅ๋ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ํน์ฑ ๋๋ถ์ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.
2. ๋ชจ๋์ด๋?
๋ชจ๋(Module)์ ์ํํธ์จ์ด์ ์ฝ๋๋ฅผ ๊ธฐ๋ฅ์ด๋ ๋ก์ง ๋จ์๋ก ๋๋์ด ์ ๋ฆฌํ ์ฝ๋ ๋ฌถ์์ ์๋ฏธํฉ๋๋ค. ์ฝ๊ฒ ๋งํด, ์ฝ๋๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ์ฌ๋ฌ ๊ธฐ๋ฅ์ด๋ ๋ก์ง์ ๊ฐ์ถ ํจ์๋ ํด๋์ค๋ค์ด ๋ง์์ง๋๋ฐ, ์ด๊ฒ๋ค์ ๋น์ทํ ์ฑ๊ฒฉ์ด๋ ์ญํ ์ ๊ธฐ์ค์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ๋ชจ๋์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์น์ฌ์ดํธ์์ ์์ฃผ ์ฌ์ฉํ๋ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฅ, ๋ ์ง๋ ์๊ฐ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ, ํน์ ์๋ฒ์์ API ํต์ ๊ธฐ๋ฅ ๋ฑ์ ํ๋ก์ ํธ ์ ๋ฐ์์ ๋ฐ๋ณตํด์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ์ฌ์ฌ์ฉ์ด ์์ฃผ ๋๋ ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๋ถ๋ฆฌํ๋ฉด, ์ธ์ ๋ ์ง ํธํ๊ฒ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ ์๊ณ ์ฝ๋์ ์ค๋ณต์ ํฌ๊ฒ ์ค์ผ ์ ์์ฃ .
๋ค์๊ณผ ๊ฐ์ด ์ด๋ฉ์ผ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ์ ๋ชจ๋๋ก ์์ฑํด ๋ณผ ์ ์์ต๋๋ค.
// ๋ชจ๋ ์์
export function isEmailValid(email) {
return /^\S+@\S+.\S+$/.test(email);
}
๋ชจ๋์ ๊ฐ๋ ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง๋ค ์กฐ๊ธ์ฉ ๋ค๋ฆ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ESM(ECMAScript Modules), Node.js์ CommonJS, ํ์ด์ฌ์ ํจํค์ง ๋ฑ ๊ฐ ์ธ์ด์ ํน์ฑ์ ๋ง๊ฒ ๋ค๋ฅด๊ฒ ํํ๋์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ๋ชฉ์ (์ฌ์ฌ์ฉ์ฑ๊ณผ ์ฝ๋ ๊ด๋ฆฌ)์ ๋์ผํฉ๋๋ค.
3. ์ปดํฌ๋ํธ์ ๋ชจ๋์ ์ฐจ์ด์
์ปดํฌ๋ํธ์ ๋ชจ๋์ ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ญํ ๋๋ฌธ์ ์ฝ๊ฒ ํท๊ฐ๋ฆด ์ ์์ง๋ง, ๋ช ํํ ๋ค๋ฅธ ๊ฐ๋ ์ ๋๋ค. ์ฝ๊ฒ ๋น์ ํ์๋ฉด, ๋ชจ๋์ ๋ง์น ์๋์ฐจ์ ์์ง, ํ์ด์ด, ๋์ฌ์ ๊ฐ์ ๋ถํ๊ณผ ๊ฐ๋ค๊ณ ํ ์ ์์ต๋๋ค. ๊ฐ ๋ถํ์ ๊ธฐ๋ฅ๋ณ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ํ์ํ ๋ ์กฐ๋ฆฝํด์ ์ฌ์ฉํ ์ ์์ฃ .

์ปดํฌ๋ํธ๋ ์ด๋ ๊ฒ ๋๋์ด์ง ๋ถํ๋ค(๋ชจ๋)์ ์ฌ์ฉํด์ ๋ง๋ ํ๋์ ๋ ๋ฆฝ์ ์ธ ์์ฑํ๊ณผ ๊ฐ์ต๋๋ค. ์ฆ, ์๋์ฐจ ์ ์ฒด๋ ์๋์ฐจ ๋ด๋น๊ฒ์ด์ ์ฒ๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๊ณ , ์๊ฒฐ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง ์์์ ๋๋ค.
๋ํ ํฌ๊ธฐ๋ ํฌํจ ๊ด๊ณ๋ ์๋์ ์ธ๋ฐ์, ์ผ๋ฐ์ ์ผ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋๋ณด๋ค ํฐ ๋จ์๋ก ๊ตฌ์ฑ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ง, ๋๋ก๋ ํ๋์ ๋ชจ๋์ด ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ํฌํจํ๊ธฐ๋ ํ๊ณ , ํ๋์ ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๋๋์ด ๊ตฌ์ฑ๋ ์๋ ์์ต๋๋ค. ์ฆ, ์ํฉ์ ๋ฐ๋ผ ๋์ ํฌํจ ๊ด๊ณ๋ ํฌ๊ธฐ๋ ๋ฌ๋ผ์ง ์ ์๋ค๋ ์ ์ ๊ผญ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋ชจ๋ ์์คํ ์์๋ณด๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ค ๋ณด๋ฉด, ์ฒ์์๋ ๊ฐ๋จํ๊ฒ ์์ํ๋ ์ฝ๋๊ฐ ์ ์ ๊ธธ์ด์ง๊ณ , ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ค์์ด๋ฉด์ ๋ณต์กํด์ง๋ ๊ฒฝํ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ธฐ๋ฅ์ด ๋ง์์ง์๋ก ์ ์ง๋ณด์๋ ์ด๋ ค์์ง๊ณ , ์ค๋ณต๋ ์ฝ๋๊ฐ ๋์ด๋๋ฉฐ, ํ์ ์ ์ถฉ๋์ด๋ ํผ๋๋ ๋ฐ์ํ๊ธฐ ์ฌ์์ง์ฃ .
์ด๋ด ๋ ์ฐ๋ฆฌ๊ฐ ์์ ๋ฐฐ์ด ์ปดํฌ๋ํธ์ ๋ชจ๋ ๊ฐ๋ ์ด ํฐ ๋์์ด ๋ฉ๋๋ค. ์ปดํฌ๋ํธ๋ฅผ ํ์ฉํ๋ฉด UI๋ ๊ธฐ๋ฅ ๋จ์๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ๋๋๊ณ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์์ฃผ ์ฌ์ฉํ๋ ํจ์๋ ๋ก์ง์ ๊ธฐ๋ฅ๋ณ๋ก ๋ถ๋ฆฌํ๊ณ , ํ์ํ ๊ณณ์์๋ง ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์์ด ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๋๋ค.
์ด๋ ๊ฒ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฅ ๋จ์๋ก ๋ช ํํ ๋๋๊ณ , ํ์ํ ๋ถ๋ถ๋ง ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ์ฒด๊ณ๊ฐ ๋ฐ๋ก ๋ชจ๋ ์์คํ ์ ๋๋ค. ๋ชจ๋ ์์คํ ์ ๋จ์ํ ์ฝ๋ ๋ถํ ์ ๋์ด์, ์ฝ๋์ ์ฌ์ฌ์ฉ, ์์กด์ฑ ๊ด๋ฆฌ, ์ค์ฝํ ๋ณดํธ, ๊ทธ๋ฆฌ๊ณ ์ฑ๋ฅ ์ต์ ํ๊น์ง ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ์ค์ํ ๊ตฌ์กฐ์ ๋๋ค. ์ด์ ๋ถํฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๋ชจ๋ ์์คํ ์ธ ESM(ECMA Script Modules)์ ๋ํด ๋ณธ๊ฒฉ์ ์ผ๋ก ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ESM
ESM์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ณต์์ผ๋ก ์ฑํ๋ ๋ชจ๋ ์์คํ ํ์ค์ ๋๋ค. import์ export ๋ฌธ๋ฒ์ ์ฌ์ฉํด ๋ชจ๋์ ์ ์ํ๊ณ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ํด์ค๋๋ค. ESM ์ด์ ์๋ CommonJS๋ AMD์ ๊ฐ์ ๋ชจ๋ ์์คํ ์ด ์ฌ์ฉ๋์์ง๋ง, ํ์ฌ๋ ESM์ด ๋ธ๋ผ์ฐ์ ์ Node.js ๋ชจ๋์์ ์ง์๋๋ฉฐ, ๋๋ถ๋ถ์ ์ต์ ํ๋ก์ ํธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ฑํํ๊ณ ์์ต๋๋ค.
ESM์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ ์ ์ ์ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค๋ ์ ์ ๋๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด๋ ๋ฒ๋ค๋ฌ๊ฐ ์ฝ๋๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฐ์ ์์กด ๊ด๊ณ๋ฅผ ๋ฏธ๋ฆฌ ํ์ ํ ์ ์๋ค๋ ์๋ฏธ์ธ๋ฐ์. ์ด ๊ตฌ์กฐ ๋๋ถ์ ๋ชจ๋์ ๋ถ์ํ๊ณ ์ต์ ํํ๋ ์์ ์ด ํจ์จ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ๊ฐ๋ฐ ์ค ์ค๋ฅ๋ฅผ ๋ฏธ๋ฆฌ ์ฐพ๊ฑฐ๋ ๋ถํ์ํ ์ฝ๋ ๋ก๋ฉ์ ์ค์ด๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค.
๋ํ ์ด ์ ์ ์ธ ๊ตฌ์กฐ ๋๋ถ์ ๊ฐ๋ฅํ ๊ธฐ๋ฅ์ด ๋ฐ๋ก ํธ๋ฆฌ ์์ดํน(Tree Shaking)์ ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ํจ์๋ ๋ชจ๋์ ๋ฒ๋ค์์ ์๋์ผ๋ก ์ ๊ฑฐํด ์ฃผ๋ ๊ธฐ๋ฅ์ผ๋ก, ํ๋ก์ ํธ์ ์ต์ข ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ค ์ ํธ๋ฆฌํฐ ํ์ผ์์ ์ฌ๋ฌ ํจ์๋ฅผ export ํ๋๋ผ๋, ๊ทธ์ค ์ผ๋ถ๋ง ์ฌ์ฉํ๋ฉด ๋๋จธ์ง๋ ๋ฒ๋ค์ ํฌํจ๋์ง ์์ต๋๋ค.
์ด๋ฟ๋ง ์๋๋ผ ESM์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ค์ฝํ(module scope)๋ฅผ ๊ฐ๊ณ , ์ ์ญ ์ค์ฝํ๋ฅผ ์ค์ผ์ํค์ง ์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋์ import๋ฅผ ํตํด ์ง์ฐ ๋ก๋ฉ(lazy loading)๋ ์ง์ํฉ๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ ๋๋ถ์, ESM์ ์ ์ ๋ถ์์ด ์ฉ์ดํ ๊ตฌ์กฐ์์๋ ๋ถ๊ตฌํ๊ณ , ๋ฐํ์ ์ค ํ์ํ ๋ชจ๋์ ๋ถ๋ฌ์ค๋ ์ ์ฐํ ๋ฐฉ์๋ ํจ๊ป ์ ๊ณตํ๋ ๋งค์ฐ ๊ฐ๋ ฅํ ์์คํ ์ ๋๋ค.
์ด์ ์ค์ ๋ก ESM์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ตฌ์ฒด์ ์ธ ์์ ์ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค.
2. ESM ์ฌ์ฉ ๋ฐฉ๋ฒ
ESM์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋งค์ฐ ๊ฐ๋จํ๋ฉด์๋ ์ง๊ด์ ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก export
ํค์๋๋ฅผ ์ฌ์ฉํด ๋ชจ๋์์ ํน์ ๋ณ์, ํจ์, ํด๋์ค ๋ฑ์ ์ธ๋ถ๋ก ๋ด๋ณด๋ด๊ณ , import ํค์๋๋ฅผ ์ฌ์ฉํด ๋ค๋ฅธ ํ์ผ์์ ์ด๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ์ํ ์ ํธ๋ฆฌํฐ ๋ชจ๋์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค.
export function add(a, b) {
return a + b;
}
export const PI = 3.14159;
์ด ํ์ผ์์๋ add
ํจ์์ PI ์์๋ฅผ export
ํ์ฌ, ์ธ๋ถ์์ ์ด ๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋ชจ๋์ ์์ฑํ๋ค๋ฉด, ์ด์ ๋ค๋ฅธ ํ์ผ์์ ์ด ๋ชจ๋์ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, app.js
ํ์ผ์์๋ ๋ค์๊ณผ ๊ฐ์ด import๋ฅผ ์ฌ์ฉํด add ํจ์์ PI๊ฐ์ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค.
import { add, PI } from './mathUtils.js';
console.log(add(3, 4)); // 7
console.log(PI); // 3.14159
์ด์ฒ๋ผ ์ค๊ดํธ {}
์์ export๋ ์ด๋ฆ์ ์ ํํ๊ฒ ์ง์ ํด ์ฃผ๋ฉด, ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ์์ ๋ช
๋ช
๋(named) import
/export
๋ผ๊ณ ํฉ๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ๊ธฐ๋ณธ(default
) export
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ํ ๋ชจ๋์์ ํ๋์ ์ฃผ๋ ๊ธฐ๋ฅ๋ง์ ์ธ๋ถ์ ๋
ธ์ถํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํ์ผ์ ๋ถ๋ฌ์ค๋ ์ชฝ์์๋ ์ด๋ฆ์ ์์ ๋กญ๊ฒ ์ ํ ์ ์๋ ํน์ง์ด ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, logger.js
๋ผ๋ ํ์ผ์์ ๊ธฐ๋ณธ export
๋ฅผ ์ฌ์ฉํด ํจ์๋ฅผ ๋ด๋ณด๋ธ๋ค๊ณ ํด๋ด
์๋ค.
export default function log(message) {
console.log('Log:', message);
}
์ด ํจ์๋ฅผ ๋ค๋ฅธ ํ์ผ์์ ๋ถ๋ฌ์ฌ ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
import log from './logger.js';
log('Hello!'); // Log: Hello!
์ด ๊ฒฝ์ฐ log
๋ ํ์ผ ๋ด๋ถ์ ํจ์ ์ด๋ฆ๊ณผ ์ผ์นํ ํ์๋ ์๊ณ , import
ํ ๋ ์์ ๋กญ๊ฒ ์ด๋ฆ์ ์ง์ ํ ์ ์๋ค๋ ์ ์ด ์ฐจ์ด์ ์
๋๋ค.
ESM์ ์ด์ฒ๋ผ ๊ฐ๋จํ ๋ฌธ๋ฒ์ผ๋ก๋ ๊ฐ๋ ฅํ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ ๊ณตํ๋ฉฐ, ํ์ฌ ๋๋ถ๋ถ์ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ Node.js ํ๊ฒฝ์์๋ ํ์ค์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
3. ๋ชจ๋ ์ค์ฝํ
ESM์ ์ฌ๋ฌ ํน์ง ์ค ํ๋์ธ '๋ชจ๋ ์ค์ฝํ'๋ ๋งค์ฐ ์ค์ํ ํน์ง์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ ๋ชจ๋์ด ๊ณ ์ ํ ์ค์ฝํ๋ฅผ ๊ฐ์ง๊ณ , ๋ด๋ถ์์ ์ ์ธ๋ ๋ณ์๋ ํจ์๋ ํด๋น ๋ชจ๋ ์ธ๋ถ์์๋ ์ ๊ทผํ ์ ์๋๋ก ์ ํ๋๋ค๋ ์๋ฏธ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ๋ชจ๋ ์์์ const token = 'secret';
์ด๋ผ๊ณ ์ ์ธํ๋ค๋ฉด, ์ด token
์ด๋ผ๋ ๋ณ์๋ ํด๋น ๋ชจ๋ ์์์๋ง ์ฌ์ฉํ ์ ์๊ณ , ์ธ๋ถ ํ์ผ์์๋ ๋ณด์ด์ง ์๊ฒ ๋ฉ๋๋ค. ์ธ๋ถ์์ ์ด ๊ฐ์ ์ฌ์ฉํ๋ ค๋ฉด, ๋ฐ๋์ export๋ฅผ ๋ช
์ํด์ผ ํฉ๋๋ค. ์ด๋ ๋ชจ๋์ ์บก์ํ๋ฅผ ๋ณด์ฅํ๋ฉฐ ์ ์ญ ๋ณ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ , ์ฝ๋์ ์์ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋์ฌ์ค๋๋ค.

๋ํ ์ด๋ฐ ์ค์ฝํ ๊ตฌ์กฐ ๋๋ถ์ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ํ๋ ์ํฉ์์๋ ๋ณ์ ์ด๋ฆ์ด ๊ฒน์ณ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๊ณ , ๊ฐ์์ ํ์ผ ์์์๋ง ์ํฅ์ ์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ทธ๋ฟ๋ง ์๋๋ผ ๋ชจ๋์ ํ์ผ ํ๋๋น ํ๋์ ๋
๋ฆฝ์ ์ธ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ฏ๋ก, ํด๋น ํ์ผ์์ import
ํ ํญ๋ชฉ๋ค๋ง ์ฌ์ฉํ ์ ์๊ณ , ๋ค๋ฅธ ํ์ผ์์ ์ ์ธ๋ ์ฝ๋๋ค์ ์๋์ผ๋ก ๊ณต์ ๋์ง ์์ต๋๋ค. ์ฆ, ๋ชจ๋์ ํญ์ ๋ช
์์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ (export
/import
), ๋ช
์์ ์ผ๋ก ๋ด๋ณด๋ด๋ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฆ
๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ์ฝ๋์ ํ๋ฆ์ ๋์ฑ ๋ช ํํ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ , ์ ์ง๋ณด์ ์ ์ด๋ค ๊ฐ์ด ์ด๋์ ์๋์ง๋ฅผ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ํ ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๋์ฑ ๊ฐ๋ ฅํ ์ฅ์ ์ผ๋ก ์์ฉํฉ๋๋ค.
๋ง์น๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋ ์์คํ ์ ๋จ์ํ ์ฝ๋๋ฅผ ์ฌ๋ฌ ํ์ผ๋ก ๋๋๋ ๊ฐ๋ ์ ๋์ด, ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๊ทน๋ํํด ์ค๋๋ค. ๋ ๋ถํ์ํ ์ฝ๋ ์ ๊ฑฐ๋ฅผ ํตํ ์ต์ ํ๊น์ง ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ํต์ฌ์ ์ธ ์ค๊ณ์ ๋๋ค.
ํนํ 'ESM'์ ์ ์ ๊ตฌ์กฐ, ํธ๋ฆฌ ์์ดํน, ๋ชจ๋ ์ค์ฝํ ๋ฑ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๊ฐ์ถ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ํ์ค ๋๊ตฌ๋ก ์๋ฆฌ ์ก๊ณ ์๊ณ ์. ์์ผ๋ก ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ฑฐ๋ ํ์ ์ ์งํํ ์๋ก, ๋ชจ๋ ์์คํ ์ ์ ์ดํดํ๊ณ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ฑ ์ค์ํด์ง ๊ฒ์ ๋๋ค. ์ด๋ฒ ๊ธฐํ์ ๋ชจ๋ ์์คํ ์ ํต์ฌ ๊ฐ๋ ๊ณผ ์ฌ์ฉ๋ฒ์ ์ ํํ๊ฒ ์ดํดํ๊ณ , ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ ๊ฒฌ๊ณ ํ๊ณ ๊น๋ํ๊ฒ ๋ง๋ค์ด๋ณด์ธ์.