์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์ฑ์ ๋ํ ์ฌ์ธต ๋ถ์. ์ ์ธ๊ณ์ ์ผ๋ก ๋์ ์ด๊ณ ํจ์จ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST) ์กฐ์๊ณผ ํ ํ๋ฆฟ ์์คํ ์ ๋น๊ตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์์ฑ: AST ์กฐ์๊ณผ ํ ํ๋ฆฟ ์์คํ ๋น๊ต
๋์์์ด ๋ฐ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ๋ฅ๋ ฅ์ ๊ฐ๋ ฅํ ์์ฐ์ ๋๋ค. ๋ณต์กํ ํ๋ ์์ํฌ๋ฅผ ๊ตฌ์ถํ๋ , ์ฑ๋ฅ์ ์ต์ ํํ๋ , ๋ฐ๋ณต์ ์ธ ์์ ์ ์๋ํํ๋ , ์ฝ๋ ์์ฑ์ ๋ํ ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์ดํดํ๋ฉด ์์ฐ์ฑ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST) ์กฐ์๊ณผ ํ ํ๋ฆฟ ์์คํ ์ด๋ผ๋ ๋ ๊ฐ์ง ์ฃผ์ ๋ฐฉ๋ฒ๋ก ์ ์ดํด๋ด ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ค์ ํต์ฌ ๊ฐ๋ , ์ฅ๋จ์ , ๊ทธ๋ฆฌ๊ณ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ํด ๊ฐ๊ฐ์ ์ธ์ ํ์ฉํด์ผ ํ๋์ง์ ๋ํด ์์ธํ ์์๋ณผ ๊ฒ์ ๋๋ค.
์ฝ๋ ์์ฑ์ ๋ํ ์ดํด
๋ณธ์ง์ ์ผ๋ก ์ฝ๋ ์์ฑ์ ์์ค ์ฝ๋๋ฅผ ์๋์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ๊ฐ๋จํ ๋ฌธ์์ด ์ฐ๊ฒฐ๋ถํฐ ๊ธฐ์กด ์ฝ๋์ ๋งค์ฐ ์ ๊ตํ ๋ณํ, ๋๋ ์ฌ์ ์ ์๋ ๊ท์น์ด๋ ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ ์์ ํ ์๋ก์ด ์ฝ๋ ๊ตฌ์กฐ์ ์์ฑ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ค์ํฉ๋๋ค. ์ฝ๋ ์์ฑ์ ์ฃผ์ ๋ชฉํ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ณด์ผ๋ฌํ๋ ์ดํธ ๊ฐ์: ๋ฐ๋ณต์ ์ธ ์ฝ๋ ํจํด ์์ฑ์ ์๋ํํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ํน์ ์๋๋ฆฌ์ค์ ๋ง์ถฐ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ์ ์ง๋ณด์์ฑ ํฅ์: ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๊ณ ์์ฑ๋ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ํฉ๋๋ค.
- ๋ฉํํ๋ก๊ทธ๋๋ฐ ํ์ฑํ: ๋ค๋ฅธ ์ฝ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์กฐ์ํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
- ํฌ๋ก์ค ํ๋ซํผ ํธํ์ฑ: ๋ค์ํ ํ๊ฒฝ์ด๋ ๋์ ์ธ์ด๋ฅผ ์ํ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
๊ตญ์ ์ ์ธ ๊ฐ๋ฐํ์๊ฒ ๊ฐ๋ ฅํ ์ฝ๋ ์์ฑ ๋๊ตฌ์ ๊ธฐ์ ์ ๋ค์ํ ํ๋ก์ ํธ์ ์ง์ญ์ ๊ฑธ์ณ ์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ ๊ฐ๋ณ ๊ฐ๋ฐ์์ ์ ํธ๋๋ ํ์ง ๊ฐ๋ฐ ํ์ค๊ณผ ๊ด๊ณ์์ด ํต์ฌ ๋ก์ง์ด ๊ท ์ผํ๊ฒ ๊ตฌํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST) ์กฐ์
์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST) ์กฐ์์ ์ฝ๋ ์์ฑ์ ๋ํ ๋ ์ ์์ค์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์ ์ ๊ทผ๋ฒ์ ๋ํ๋ ๋๋ค. AST๋ ์์ค ์ฝ๋์ ์ถ์์ ์ธ ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ํธ๋ฆฌ ํํ๋ก ํํํ ๊ฒ์ ๋๋ค. ํธ๋ฆฌ์ ๊ฐ ๋ ธ๋๋ ์์ค ์ฝ๋์ ๋ํ๋๋ ๊ตฌ๋ฌธ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ณธ์ง์ ์ผ๋ก, ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๊ตฌ์กฐํ๋๊ณ ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ํํ๋ก ํด์ํ ๊ฒ์ ๋๋ค.
AST๋ ๋ฌด์์ธ๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ ์์ง(์: ํฌ๋กฌ์ V8 ๋๋ Node.js)์ด ์ฝ๋๋ฅผ ํ์ฑํ ๋, ๋จผ์ AST๋ฅผ ์์ฑํฉ๋๋ค. ์ด ํธ๋ฆฌ๋ ์ฝ๋์ ๋ฌธ๋ฒ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์์๋ฅผ ํํํฉ๋๋ค:
- ํํ์: ์ฐ์ ์ฐ์ฐ, ํจ์ ํธ์ถ, ๋ณ์ ํ ๋น.
- ๋ฌธ์ฅ: ์กฐ๊ฑด๋ฌธ(if/else), ๋ฐ๋ณต๋ฌธ(for, while), ํจ์ ์ ์ธ.
- ๋ฆฌํฐ๋ด: ์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ, ๊ฐ์ฒด, ๋ฐฐ์ด.
- ์๋ณ์: ๋ณ์๋ช , ํจ์๋ช .
Esprima, Acorn, Babel Parser์ ๊ฐ์ ๋๊ตฌ๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก๋ถํฐ AST๋ฅผ ์์ฑํ๋ ๋ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. AST๊ฐ ์์ผ๋ฉด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ค์์ ์ํํ ์ ์์ต๋๋ค:
- ์ฝ๋๋ฅผ ๋ถ์ํ๊ธฐ ์ํด ํธ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.
- ๊ธฐ์กด ๋ ธ๋๋ฅผ ์์ ํ์ฌ ์ฝ๋์ ๋์์ ๋ณ๊ฒฝํฉ๋๋ค.
- ์๋ก์ด ๋ ธ๋๋ฅผ ์์ฑํ์ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ์๋ก์ด ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
์กฐ์ ํ์๋ Escodegen์ด๋ Babel Generator์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ AST๋ฅผ ๋ค์ ์ ํจํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค ์ฝ๋๋ก ๋ณํํ ์ ์์ต๋๋ค.
AST ์กฐ์์ ์ํ ์ฃผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๋๊ตฌ:
- Acorn: ์๊ณ ๋น ๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์์ ๋๋ค. ํ์ค AST๋ฅผ ์์ฑํฉ๋๋ค.
- Esprima: ESTree ํธํ AST๋ฅผ ์์ฑํ๋ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์์ ๋๋ค.
- Babel Parser (๊ตฌ Babylon): Babel์์ ์ฌ์ฉ๋๋ฉฐ, ์ต์ ECMAScript ๊ธฐ๋ฅ๊ณผ ์ ์์ ์ง์ํ์ฌ ํธ๋์คํ์ผ๋ง ๋ฐ ๊ณ ๊ธ ๋ณํ์ ์ด์์ ์ ๋๋ค.
- Lodash/AST (๋๋ ์ ์ฌ ์ ํธ๋ฆฌํฐ): AST ์ํ, ๊ฒ์, ์์ ์ ์ํ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์ ๊ณตํ์ฌ ๋ณต์กํ ์์ ์ ๋จ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Escodegen: AST๋ฅผ ์ ๋ ฅ๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค ์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ ์ฝ๋ ์์ฑ๊ธฐ์ ๋๋ค.
- Babel Generator: Babel์ ์ฝ๋ ์์ฑ ๊ตฌ์ฑ ์์๋ก, AST๋ก๋ถํฐ ์์ค ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ์ข ์ข ์์ค ๋งต์ ์ง์ํฉ๋๋ค.
AST ์กฐ์์ ์ฅ์ :
- ์ ๋ฐ์ฑ๊ณผ ์ ์ด: AST ์กฐ์์ ์ฝ๋ ์์ฑ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฝ๋์ ๊ตฌ์กฐํ๋ ํํ์ ๋ค๋ฃจ๋ฏ๋ก ๊ตฌ๋ฌธ์ ์ ํ์ฑ๊ณผ ์๋ฏธ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๊ฐ๋ ฅํ ๋ณํ: ๋ณต์กํ ์ฝ๋ ๋ณํ, ๋ฆฌํฉํ ๋ง, ์ต์ ํ, ํด๋ฆฌํ(polyfill)์ ์ด์์ ์ ๋๋ค. ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ์ด ๋๋ Babel๊ณผ ๊ฐ์ ๋๊ตฌ๋ค(์: ES6+๋ฅผ ES5๋ก ํธ๋์คํ์ผ๋งํ๊ฑฐ๋ ์คํ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ)์ AST ์กฐ์์ ํฌ๊ฒ ์์กดํฉ๋๋ค.
- ๋ฉํํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ: ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์์ ๋๋ฉ์ธ ํนํ ์ธ์ด(DSL)๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ณ ๊ธ ๊ฐ๋ฐ์ ๋๊ตฌ ๋ฐ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฐํ ์ ์๊ฒ ํฉ๋๋ค.
- ์ธ์ด ์ธ์: AST ํ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ๊น์ด ์ดํดํ๋ฏ๋ก ๊ฐ๋จํ ๋ฌธ์์ด ์กฐ์์์ ๋ฐ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๊ธ๋ก๋ฒ ์ ์ฉ์ฑ: AST ๊ธฐ๋ฐ ๋๊ตฌ๋ ํต์ฌ ๋ก์ง์์ ์ธ์ด์ ๊ตฌ์ ๋ฐ์ง ์์ผ๋ฏ๋ก, ์ ์ธ๊ณ์ ๋ค์ํ ์ฝ๋๋ฒ ์ด์ค์ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ฑธ์ณ ๋ณํ์ ์ผ๊ด๋๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ํ์๊ฒ ์ด๋ ์ฝ๋ฉ ํ์ค๊ณผ ์ํคํ ์ฒ ํจํด์ ์ผ๊ด๋๊ฒ ์ค์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
AST ์กฐ์์ ๋จ์ :
- ๊ฐํ๋ฅธ ํ์ต ๊ณก์ : AST ๊ตฌ์กฐ, ์ํ ํจํด, AST ์กฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API๋ฅผ ์ดํดํ๋ ๊ฒ์ ํนํ ๋ฉํํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ์ ํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ณต์กํ ์ ์์ต๋๋ค.
- ์ฅํฉํจ: ํธ๋ฆฌ ๋ ธ๋๋ฅผ ๋ช ์์ ์ผ๋ก ๊ตฌ์ฑํด์ผ ํ๋ฏ๋ก, ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ์ ์์ฑํ๋ ๋ฐ์๋ ํ ํ๋ฆฟ ์์คํ ์ ๋นํด ๋ ๋ง์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ์ ์์ต๋๋ค.
- ๋๊ตฌ ์ค๋ฒํค๋: AST ํ์, ๋ณํ๊ธฐ, ์์ฑ๊ธฐ๋ฅผ ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ๋ ๊ฒ์ ๋ณต์ก์ฑ๊ณผ ์ข ์์ฑ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
AST ์กฐ์ ์ฌ์ฉ ์๊ธฐ:
- ํธ๋์คํ์ผ๋ง: ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ ๋ฒ์ ์ผ๋ก ๋ณํํ ๋ (์: Babel).
- ์ฝ๋ ๋ถ์ ๋ฐ ๋ฆฐํ : ESLint์ ๊ฐ์ ๋๊ตฌ๋ AST๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ์ค๋ฅ๋ ์คํ์ผ ๋ฌธ์ ๋ฅผ ๋ถ์ํฉ๋๋ค.
- ์ฝ๋ ์์ถ ๋ฐ ์ต์ ํ: ๊ณต๋ฐฑ ์ ๊ฑฐ, ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ ๋ฐ ๊ธฐํ ์ต์ ํ ์ ์ฉ.
- ๋น๋ ๋๊ตฌ์ฉ ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ: Webpack, Rollup, Parcel์ ์ํ ๋ง์ถคํ ๋ณํ ์์ฑ.
- ๋ณต์กํ ์ฝ๋ ๊ตฌ์กฐ ์์ฑ: ํ๋ ์์ํฌ์ ์ ์ปดํฌ๋ํธ๋ฅผ ์ํ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์์ฑ์ด๋ ์คํค๋ง ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ก์ธ์ค ๊ณ์ธต ์์ฑ๊ณผ ๊ฐ์ด, ๋ก์ง์ด ์์ฑ๋ ์ฝ๋์ ์ ํํ ๊ตฌ์กฐ์ ๋ด์ฉ์ ๊ฒฐ์ ํ ๋.
- ๋๋ฉ์ธ ํนํ ์ธ์ด(DSL) ๊ตฌํ: ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ปดํ์ผํด์ผ ํ๋ ์ฌ์ฉ์ ์ ์ ์ธ์ด ๋๋ ๊ตฌ๋ฌธ์ ๋ง๋ค ๊ฒฝ์ฐ.
์์: ๊ฐ๋จํ AST ๋ณํ (๊ฐ๋ ์ )
๋ชจ๋ ํจ์ ํธ์ถ ์ ์ `console.log` ๋ฌธ์ ์๋์ผ๋ก ์ถ๊ฐํ๊ณ ์ถ๋ค๊ณ ์์ํด ๋ณด์ธ์. AST ์กฐ์์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค:
- ์์ค ์ฝ๋๋ฅผ AST๋ก ํ์ฑํฉ๋๋ค.
- AST๋ฅผ ์ํํ์ฌ ๋ชจ๋ `CallExpression` ๋ ธ๋๋ฅผ ์ฐพ์ต๋๋ค.
- ๊ฐ `CallExpression`์ ๋ํด, ์๋ `CallExpression` ์์ `console.log`๋ฅผ ์ํ `CallExpression`์ ํฌํจํ๋ ์๋ก์ด `ExpressionStatement` ๋ ธ๋๋ฅผ ์ฝ์ ํฉ๋๋ค. `console.log`์ ์ธ์๋ ํธ์ถ๋๋ ํจ์๋ก๋ถํฐ ํ์๋ ์ ์์ต๋๋ค.
- ์์ ๋ AST๋ก๋ถํฐ ์๋ก์ด ์์ค ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
์ด๊ฒ์ ๋จ์ํ๋ ์ค๋ช
์ด์ง๋ง, ํ๋ก์ธ์ค์ ํ๋ก๊ทธ๋๋ฐ์ ์ฑ๊ฒฉ์ ๋ณด์ฌ์ค๋๋ค. Babel์ @babel/traverse
์ @babel/types
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด ์์
์ ํจ์ฌ ๋ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ์ค๋๋ค.
ํ ํ๋ฆฟ ์์คํ
๋ฐ๋ฉด์ ํ ํ๋ฆฟ ์์คํ ์ ์ฝ๋ ์์ฑ์ ๋ํ ๋ ๋์ ์์ค์ ์ ์ธ์ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํ ํ๋ฆฟ ๊ตฌ์กฐ ๋ด์ ์ฝ๋๋ ๋ก์ง์ ํฌํจ์ํจ ๋ค์, ์ด๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํฉ๋๋ค. ์ด๋ฌํ ์์คํ ์ HTML ์์ฑ์ ๋๋ฆฌ ์ฌ์ฉ๋์ง๋ง, ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ํฌํจํ ๋ชจ๋ ํ ์คํธ ๊ธฐ๋ฐ ํ์์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
ํ ํ๋ฆฟ ์์คํ ์ ์๋ ๋ฐฉ์:
ํ ํ๋ฆฟ ์์ง์ ํ ํ๋ฆฟ ํ์ผ(์ ์ ํ ์คํธ์ ํ๋ ์ด์คํ๋ ๋ฐ ์ ์ด ๊ตฌ์กฐ๊ฐ ํผํฉ๋)๊ณผ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ ํ๋ฆฟ์ ์ฒ๋ฆฌํ์ฌ ํ๋ ์ด์คํ๋๋ฅผ ๋ฐ์ดํฐ๋ก ๋์ฒดํ๊ณ ์ ์ด ๊ตฌ์กฐ(์: ๋ฐ๋ณต๋ฌธ ๋ฐ ์กฐ๊ฑด๋ฌธ)๋ฅผ ์คํํ์ฌ ์ต์ข ์ถ๋ ฅ ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค.
ํ ํ๋ฆฟ ์์คํ ์ ์ผ๋ฐ์ ์ธ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ณ์/ํ๋ ์ด์คํ๋: `{{ variableName }}` ๋๋ `<%= variableName %>` - ๋ฐ์ดํฐ์ ๊ฐ์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
- ์ ์ด ๊ตฌ์กฐ: `{% if condition %}` ... `{% endif %}` ๋๋ `<% for item in list %>` ... `<% endfor %>` - ์กฐ๊ฑด๋ถ ๋ ๋๋ง ๋ฐ ๋ฐ๋ณต์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
- ์ธํด๋ฃจ๋/ํ์ : ํ ํ๋ฆฟ ์กฐ๊ฐ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ ํ๋ฆฟ ์์ง:
- Handlebars.js: ๋จ์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ฐ์กฐํ๋ ์ธ๊ธฐ ์๋ ๋ก์ง-๋ฆฌ์ค(logic-less) ํ ํ๋ฆฟ ์์ง์ ๋๋ค.
- EJS (Embedded JavaScript templating): `<% ... %>` ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ํ ํ๋ฆฟ ๋ด์ ์ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํ์ฌ, ๋ก์ง-๋ฆฌ์ค ์์ง๋ณด๋ค ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- Pug (๊ตฌ Jade): ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๊ณ ์ฑ๋ฅ ํ ํ๋ฆฟ ์์ง์ผ๋ก, ํนํ HTML์ ๋ํด ๊ฐ๊ฒฐํ๊ณ ๊น๋ํ ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค.
- Mustache.js: ์ด์์ฑ๊ณผ ๊ฐ๋จํ ๊ตฌ๋ฌธ์ผ๋ก ์๋ ค์ง ๋จ์ํ ๋ก์ง-๋ฆฌ์ค ํ ํ๋ฆฟ ์์คํ ์ ๋๋ค.
- Underscore.js Templates: Underscore.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด์ฅ๋ ํ ํ๋ฆฟ ๊ธฐ๋ฅ์ ๋๋ค.
ํ ํ๋ฆฟ ์์คํ ์ ์ฅ์ :
- ๋จ์์ฑ๊ณผ ๊ฐ๋ ์ฑ: ํ ํ๋ฆฟ์ ์ผ๋ฐ์ ์ผ๋ก AST ๊ตฌ์กฐ๋ณด๋ค ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ํนํ ๋ฉํํ๋ก๊ทธ๋๋ฐ์ ์ต์ํ์ง ์์ ๊ฐ๋ฐ์์๊ฒ ๊ทธ๋ ์ต๋๋ค. ์ ์ ์ฝํ ์ธ ์ ๋์ ๋ฐ์ดํฐ์ ๋ถ๋ฆฌ๊ฐ ๋ช ํํฉ๋๋ค.
- ์ ์ํ ํ๋กํ ํ์ดํ: UI ์ปดํฌ๋ํธ์ฉ HTML, ์ค์ ํ์ผ, ๋๋ ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์ฝ๋์ ๊ฐ์ ๋ฐ๋ณต์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ฒ ์์ฑํ๋ ๋ฐ ํ์ํฉ๋๋ค.
- ๋์์ด๋ ์นํ์ : ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํ ํ๋ฆฟ ์์คํ ์ ์ข ์ข ๋์์ด๋๊ฐ ๋ณต์กํ ํ๋ก๊ทธ๋๋ฐ ๋ก์ง์ ๋ํ ๊ฑฑ์ ์์ด ์ถ๋ ฅ๋ฌผ์ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ํฉ๋๋ค.
- ๋ฐ์ดํฐ์ ์ง์ค: ๊ฐ๋ฐ์๋ ํ ํ๋ฆฟ์ ์ฑ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐํ์ ์ง์คํ ์ ์์ด ๋ช ํํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ก ์ด์ด์ง๋๋ค.
- ๋์ ์ฑํ ๋ฐ ํตํฉ: ๋ง์ ํ๋ ์์ํฌ์ ๋น๋ ๋๊ตฌ๋ ํ ํ๋ฆฟ ์์ง์ ๋ํ ๋ด์ฅ ์ง์์ด๋ ์ฌ์ด ํตํฉ์ ์ ๊ณตํ์ฌ, ๊ตญ์ ํ์ด ์ ์ํ๊ฒ ์ฑํํ ์ ์๋๋ก ํฉ๋๋ค.
ํ ํ๋ฆฟ ์์คํ ์ ๋จ์ :
- ์ ํ๋ ๋ณต์ก์ฑ: ๋งค์ฐ ๋ณต์กํ ์ฝ๋ ์์ฑ ๋ก์ง์ด๋ ๋ณต์กํ ๋ณํ์ ๊ฒฝ์ฐ, ํ ํ๋ฆฟ ์์คํ ์ ๋ค๋ฃจ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์ฌ์ง์ด ๊ด๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํด์ง ์ ์์ต๋๋ค. ๋ก์ง-๋ฆฌ์ค ํ ํ๋ฆฟ์ ๋ถ๋ฆฌ๋ฅผ ์ด์งํ์ง๋ง, ์ ํ์ ์ผ ์ ์์ต๋๋ค.
- ๋ฐํ์ ์ค๋ฒํค๋ ๊ฐ๋ฅ์ฑ: ์์ง๊ณผ ํ ํ๋ฆฟ์ ๋ณต์ก์ฑ์ ๋ฐ๋ผ ํ์ฑ ๋ฐ ๋ ๋๋ง๊ณผ ๊ด๋ จ๋ ๋ฐํ์ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ์์ง์ ๋น๋ ๊ณผ์ ์์ ์ฌ์ ์ปดํ์ผ๋์ด ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- ๊ตฌ๋ฌธ ๋ณํ: ํ ํ๋ฆฟ ์์ง๋ง๋ค ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฏ๋ก, ํ์ด ํ๋๋ก ํ์คํ๋์ง ์์ผ๋ฉด ํผ๋์ ์ด๋ํ ์ ์์ต๋๋ค.
- ๊ตฌ๋ฌธ์ ๋ํ ์ ์ด ๋ถ์กฑ: AST ์กฐ์์ ๋นํด ์์ฑ๋ ์ฝ๋ ๊ตฌ๋ฌธ์ ๋ํ ์ง์ ์ ์ธ ์ ์ด๊ฐ ์ ์ต๋๋ค. ํ ํ๋ฆฟ ์์ง์ ๊ธฐ๋ฅ์ ์ ์ฝ์ ๋ฐ์ต๋๋ค.
ํ ํ๋ฆฟ ์์คํ ์ฌ์ฉ ์๊ธฐ:
- HTML ์์ฑ: ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ก, Express(EJS ๋๋ Pug ์ฌ์ฉ)์ ๊ฐ์ Node.js ํ๋ ์์ํฌ์์์ ์๋ฒ ์ธก ๋ ๋๋ง(SSR)์ด๋ ํด๋ผ์ด์ธํธ ์ธก ์ปดํฌ๋ํธ ์์ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ค์ ํ์ผ ์์ฑ: ํ๊ฒฝ ๋ณ์๋ ํ๋ก์ ํธ ์ค์ ์ ๋ฐ๋ผ `.env`, `.json`, `.yaml` ๋๋ ๊ธฐํ ์ค์ ํ์ผ ์์ฑ.
- ์ด๋ฉ์ผ ์์ฑ: ๋์ ์ฝํ ์ธ ๋ฅผ ํฌํจํ HTML ์ด๋ฉ์ผ ์์ฑ.
- ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ ์์ฑ: ๊ตฌ์กฐ๊ฐ ๋์ฒด๋ก ์ ์ ์ด๊ณ ํน์ ๊ฐ๋ง ์ฃผ์ ํ๋ฉด ๋ ๋.
- ๋ณด๊ณ ์ ์์ฑ: ๋ฐ์ดํฐ๋ก๋ถํฐ ํ ์คํธ ๊ธฐ๋ฐ ๋ณด๊ณ ์๋ ์์ฝ ์์ฑ.
- ํ๋ก ํธ์๋ ํ๋ ์์ํฌ: ๋ง์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ(React, Vue, Angular)๋ ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์ํด ์์ฒด ํ ํ๋ฆฟ ๋ฉ์ปค๋์ฆ์ ๊ฐ์ง๊ณ ์๊ฑฐ๋ ํ ํ๋ฆฟ๊ณผ ์ํํ๊ฒ ํตํฉ๋ฉ๋๋ค.
์์: ๊ฐ๋จํ ํ ํ๋ฆฟ ์์ฑ (EJS)
์ฌ์ฉ์์๊ฒ ์ธ์ฌํ๋ ๊ฐ๋จํ ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. EJS๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
ํ
ํ๋ฆฟ (์: greet.js.ejs
):
function greet(name) {
console.log('Hello, <%= name %>!');
}
๋ฐ์ดํฐ:
{
"name": "World"
}
์ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฌผ:
function greet(name) {
console.log('Hello, World!');
}
์ด๊ฒ์ ํนํ ๋ค์์ ์ ์ฌํ ๊ตฌ์กฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ง๊ด์ ์ด๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
AST ์กฐ์ vs. ํ ํ๋ฆฟ ์์คํ : ๋น๊ต ๊ฐ์
๊ธฐ๋ฅ | AST ์กฐ์ | ํ ํ๋ฆฟ ์์คํ |
---|---|---|
์ถ์ํ ์์ค | ์ ์์ค (์ฝ๋ ๊ตฌ์กฐ) | ๊ณ ์์ค (ํ๋ ์ด์คํ๋๊ฐ ์๋ ํ ์คํธ) |
๋ณต์ก์ฑ | ๋์ ํ์ต ๊ณก์ , ์ฅํฉํจ | ๋ฎ์ ํ์ต ๊ณก์ , ๊ฐ๊ฒฐํจ |
์ ์ด | ์ธ๋ฐํ ๊ตฌ๋ฌธ ๋ฐ ๋ก์ง ์ ์ด | ๋ฐ์ดํฐ ์ฃผ์ ๋ฐ ๊ธฐ๋ณธ ๋ก์ง ์ ์ด |
์ฌ์ฉ ์ฌ๋ก | ํธ๋์คํ์ผ๋ง, ๋ณต์กํ ๋ณํ, ๋ฉํํ๋ก๊ทธ๋๋ฐ, ํด๋ง | HTML ์์ฑ, ์ค์ ํ์ผ, ๊ฐ๋จํ ์ฝ๋ ์กฐ๊ฐ, UI ๋ ๋๋ง |
ํ์ํ ๋๊ตฌ | ํ์, ์์ฑ๊ธฐ, ์ํ ์ ํธ๋ฆฌํฐ | ํ ํ๋ฆฟ ์์ง |
๊ฐ๋ ์ฑ | ์ฝ๋์ ์ ์ฌ, ๋ณต์กํ ๋ณํ์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ด๋ ค์ธ ์ ์์ | ์ ์ ๋ถ๋ถ์ ๋์ฒด๋ก ๋์, ๋ช ํํ ํ๋ ์ด์คํ๋ |
์ค๋ฅ ์ฒ๋ฆฌ | AST ๊ตฌ์กฐ์ ์ํด ๊ตฌ๋ฌธ์ ์ ํ์ฑ ๋ณด์ฅ | ํ ํ๋ฆฟ ๋ก์ง์ด๋ ๋ฐ์ดํฐ ๋ถ์ผ์น์์ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ |
ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ๋ฒ๊ณผ ์๋์ง
์ด๋ฌํ ์ ๊ทผ๋ฒ๋ค์ด ์ํธ ๋ฐฐํ์ ์ด์ง ์๋ค๋ ์ ์ ์ฃผ๋ชฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค์ ๋ก, ์ด๋ค์ ์ข ์ข ๊ฐ๋ ฅํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ํจ๊ป ์ฌ์ฉ๋ ์ ์์ต๋๋ค:
- AST ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฝ๋ ์์ฑ์ ์ํด ํ ํ๋ฆฟ ์ฌ์ฉ: ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ AST ์กฐ์์ ์ํํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๊ณ ๋๋ก ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
- ํ ํ๋ฆฟ ์ต์ ํ๋ฅผ ์ํ AST ๋ณํ: ๊ณ ๊ธ ๋น๋ ๋๊ตฌ๋ ํ ํ๋ฆฟ ํ์ผ์ ํ์ฑํ๊ณ , ๊ทธ AST๋ฅผ ๋ณํํ ๋ค์(์: ์ต์ ํ๋ฅผ ์ํด), ํ ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ์ฌ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ ๋ ๋๋งํ ์ ์์ต๋๋ค.
- ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ํ์ฉํ๋ ํ๋ ์์ํฌ: ๋ง์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ ๋ด๋ถ์ ์ผ๋ก ๋ณต์กํ ์ปดํ์ผ ๋จ๊ณ(๋ชจ๋ ๋ฒ๋ค๋ง, JSX ํธ๋์คํ์ผ๋ง ๋ฑ)์ AST๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ๋ค์ ํ ํ๋ฆฟ๊ณผ ์ ์ฌํ ๋ฉ์ปค๋์ฆ์ด๋ ์ปดํฌ๋ํธ ๋ก์ง์ ์ฌ์ฉํ์ฌ UI ์์๋ฅผ ๋ ๋๋งํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์๊ฒ ์ด๋ฌํ ์๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ ํต์ฌ์ ๋๋ค. ํ ํ์ ๋ค๋ฅธ ์ง์ญ์ ๊ฑธ์ณ ์ด๊ธฐ ํ๋ก์ ํธ ์ค์บํด๋ฉ์ ์ํด ํ ํ๋ฆฟ ์์คํ ์ ์ฌ์ฉํ๊ณ , ๊ทธ ๋ค์ ์ผ๊ด๋ ์ฝ๋ฉ ํ์ค์ ๊ฐ์ ํ๊ฑฐ๋ ํน์ ๋ฐฐํฌ ๋์์ ๋ํ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด AST ๊ธฐ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค๊ตญ์ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์ง์ญํ๋ ์ ํ ๋ชฉ๋ก ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ํ ํ๋ฆฟ์ ์ฌ์ฉํ๊ณ , ์ฌ๋ฌ ๋๋ฅ์ ๊ฑธ์ณ ๊ด์ฐฐ๋๋ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ํ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ฃผ์ ํ๊ธฐ ์ํด AST ๋ณํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ํ๋ก์ ํธ๋ฅผ ์ํ ์ฌ๋ฐ๋ฅธ ๋๊ตฌ ์ ํ
AST ์กฐ์๊ณผ ํ ํ๋ฆฟ ์์คํ , ๋๋ ์ด ๋์ ์กฐํฉ ์ฌ์ด์ ๊ฒฐ์ ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ์ฌํญ๊ณผ ํ์ ์ ๋ฌธ์ฑ์ ํฌ๊ฒ ์ข์ฐ๋ฉ๋๋ค.
๊ตญ์ ํ์ ์ํ ๊ณ ๋ ค์ฌํญ:
- ํ ๊ธฐ์ ์์ค: ํ์ ๋ฉํํ๋ก๊ทธ๋๋ฐ๊ณผ AST ์กฐ์ ๊ฒฝํ์ด ์๋ ๊ฐ๋ฐ์๊ฐ ์์ต๋๊น, ์๋๋ฉด ์ ์ธ์ ํ ํ๋ฆฟ ๋ฐฉ์์ ๋ ์ต์ํฉ๋๊น?
- ํ๋ก์ ํธ ๋ณต์ก์ฑ: ๊ฐ๋จํ ํ ์คํธ ๋์ฒด๋ฅผ ์ํํ๊ณ ์์ต๋๊น, ์๋๋ฉด ์ฝ๋ ๋ก์ง์ ๊น์ด ์ดํดํ๊ณ ์ฌ์์ฑํด์ผ ํฉ๋๊น?
- ๋น๋ ํ๋ก์ธ์ค ํตํฉ: ์ ํํ ์ ๊ทผ ๋ฐฉ์์ ๊ธฐ์กด CI/CD ํ์ดํ๋ผ์ธ ๋ฐ ๋น๋ ๋๊ตฌ(Webpack, Rollup, Parcel)์ ์ผ๋ง๋ ์ฝ๊ฒ ํตํฉํ ์ ์์ต๋๊น?
- ์ ์ง๋ณด์์ฑ: ์ด๋ค ์ ๊ทผ ๋ฐฉ์์ด ์ ์ฒด ๊ธ๋ก๋ฒ ํ์ด ์ฅ๊ธฐ์ ์ผ๋ก ์ดํดํ๊ณ ์ ์งํ๊ธฐ ๋ ์ฌ์ด ์ฝ๋๋ก ์ด์ด์ง ๊ฒ์ ๋๊น?
- ์ฑ๋ฅ ์๊ตฌ์ฌํญ: ํ ์ ๊ทผ ๋ฐฉ์์ ๋ค๋ฅธ ๋ฐฉ์๋ณด๋ค ์ ํธํ๊ฒ ๋ง๋ค ์ ์๋ ์ค์ํ ์ฑ๋ฅ ์๊ตฌ์ฌํญ์ด ์์ต๋๊น (์: AST ๊ธฐ๋ฐ ์ฝ๋ ์์ถ vs. ๋ฐํ์ ํ ํ๋ฆฟ ๋ ๋๋ง)?
- ํ์คํ: ๊ธ๋ก๋ฒ ์ผ๊ด์ฑ์ ์ํด ํน์ ๋๊ตฌ์ ํจํด์ ๋ํ ํ์คํ๋ ํ์์ ์ ๋๋ค. ์ ํํ ์ ๊ทผ ๋ฐฉ์์ ๋ฌธ์ํํ๊ณ ๋ช ํํ ์์๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์คํ ๊ฐ๋ฅํ ํต์ฐฐ:
๋จ์์ฑ์ ์ํด ํ ํ๋ฆฟ์ผ๋ก ์์ํ์ธ์: ๋ชฉํ๊ฐ HTML, JSON ๋๋ ๊ธฐ๋ณธ ์ฝ๋ ๊ตฌ์กฐ์ ๊ฐ์ ๋ฐ๋ณต์ ์ธ ํ ์คํธ ๊ธฐ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฑํ๋ ๊ฒ์ด๋ผ๋ฉด, ํ ํ๋ฆฟ ์์คํ ์ด ์ข ์ข ๊ฐ์ฅ ๋น ๋ฅด๊ณ ๊ฐ๋ ์ฑ์ด ์ข์ ํด๊ฒฐ์ฑ ์ ๋๋ค. ์ ๋ฌธ ์ง์์ด ๋ ํ์ํ๋ฉฐ ์ ์ํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๊ฐ๋ ฅํจ๊ณผ ์ ๋ฐ์ฑ์ ์ํด AST๋ฅผ ์ฑํํ์ธ์: ๋ณต์กํ ์ฝ๋ ๋ณํ, ๊ฐ๋ฐ์ ๋๊ตฌ ๊ตฌ์ถ, ์๊ฒฉํ ์ฝ๋ฉ ํ์ค ๊ฐ์ , ๋๋ ๊น์ ์ฝ๋ ์ต์ ํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด์๋ AST ์กฐ์์ด ์ ๋ต์ ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ํ ๊ต์ก์ ํฌ์ํ์ธ์. ์๋ํ์ ์ฝ๋ ํ์ง์์์ ์ฅ๊ธฐ์ ์ธ ์ด์ต์ ์๋นํ ์ ์์ต๋๋ค.
๋น๋ ๋๊ตฌ๋ฅผ ํ์ฉํ์ธ์: Babel, Webpack, Rollup๊ณผ ๊ฐ์ ํ๋ ๋น๋ ๋๊ตฌ๋ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฉฐ ์ฝ๋ ์์ฑ ๋ฐ ๋ณํ์ ์ํ ๊ฐ๋ ฅํ ์ํ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ฉด ์๋นํ ๋ฅ๋ ฅ์ ๋ฐํํ ์ ์์ต๋๋ค.
์ฒ ์ ํ๊ฒ ๋ฌธ์ํํ์ธ์: ์ ๊ทผ ๋ฐฉ์์ ๊ด๊ณ์์ด ๋ช ํํ ๋ฌธ์๋ ํนํ ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ์๊ฒ ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ๊ตฌํ๋ ๋ชจ๋ ์ฝ๋ ์์ฑ ๋ก์ง์ ๋ชฉ์ , ์ฌ์ฉ๋ฒ, ๊ท์น์ ์ค๋ช ํ์ธ์.
๊ฒฐ๋ก
AST ์กฐ์๊ณผ ํ ํ๋ฆฟ ์์คํ ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ ์ฝ๋ ์์ฑ ๋๊ตฌ ์์์์ ๊ท์คํ ๋๊ตฌ์ ๋๋ค. ํ ํ๋ฆฟ ์์คํ ์ ํ ์คํธ ๊ธฐ๋ฐ ๊ฒฐ๊ณผ๋ฌผ์ ๋ํ ๋จ์์ฑ, ๊ฐ๋ ์ฑ, ์ ์ํ ํ๋กํ ํ์ดํ์ ๋ฐ์ด๋ UI ๋งํฌ์ ์ด๋ ์ค์ ํ์ผ ์์ฑ๊ณผ ๊ฐ์ ์์ ์ ์ด์์ ์ ๋๋ค. ๋ฐ๋ฉด์ AST ์กฐ์์ ๋ณต์กํ ์ฝ๋ ๋ณํ, ๋ฉํํ๋ก๊ทธ๋๋ฐ, ์ ๊ตํ ๊ฐ๋ฐ์ ๋๊ตฌ ๊ตฌ์ถ์ ์์ด ๋นํ ๋ฐ ์๋ ๊ฐ๋ ฅํจ, ์ ๋ฐ์ฑ, ์ ์ด๋ ฅ์ ์ ๊ณตํ๋ฉฐ, ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ฌ์ ๋ฆฐํฐ์ ์ค์ถ๋ฅผ ํ์ฑํฉ๋๋ค.
๊ตญ์ ๊ฐ๋ฐํ์ ๊ฒฝ์ฐ, ์ ํ์ ํ๋ก์ ํธ์ ๋ณต์ก์ฑ, ํ์ ์ ๋ฌธ์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์คํ์ ํ์์ฑ์ ๋ฐ๋ผ ๊ฒฐ์ ๋์ด์ผ ํฉ๋๋ค. ์ข ์ข ๋ ๋ฐฉ๋ฒ๋ก ์ ์ฅ์ ์ ๋ชจ๋ ํ์ฉํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ด ๊ฐ์ฅ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์๋ฃจ์ ์ ๋ณ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ต์ ์ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ ์ฝ๋ ์์ฑ์ ํ์ ํ์ฉํ์ฌ ๋ ํจ์จ์ ์ด๊ณ , ์ ๋ขฐํ ์ ์์ผ๋ฉฐ, ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.