๋ฐํ์์ Node์์ ์ง์ PEGJS ํ์ผ์ ์๊ตฌํ ์ ์๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ ์ ์์ง๋ง ์ด ๋ฌธ์ ์ ์ฃผ์ ๋ชฉ์ ์ ์ฝ๋ ์ ์ฉ(์: Mocha ํ ์คํธ์ฉ)์ ๋๋ค.
์ด ํ์์ ์ฝ๋ ์ ์ฉ ์ฌ๋ก๋ ๋จผ์ #93(์์ค ๋งต ์ ๊ณต)์ ๋จผ์ ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ตฌํํ๋ฉด ํ ์คํธ + ํ๊ทธ ์ฝ๋์ ๋ณ๋ ๊ณ์ธก ์ฌ๋ณธ์ด ํ์ํ์ง ์์ ์ ์์ต๋๋ค.
Node์ require.extensions
๊ฐ ts-node
์ ๋ํด ์ด ์์
์ ์ํ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ https://stackoverflow.com/ ์ ๋ํ ํ ๋ก ์ ๋ฐ๋ผ require.extensions
๋ Node ์์ ๊ธฐ์ ์ ์ผ๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. Questions/28884377/better-way-to-require-extensions-with-node-js (ํนํ ์ด ๋ต๋ณ ์ ๋งฅ๋ฝ์์ ), ์ฌ๊ธฐ์์ ์ ์ผํ ์ค์ฉ์ ์ธ ๋ฉ์ปค๋์ฆ์ธ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์๊ฒฌ์ ๋ฐ๋ฅด๋ฉด ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ Node๊ฐ Babel์ ๊นจ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ํ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
@ExE-Boss : ์ฐ๋ฆฌ์ ์ฌ์ฉ ์ฌ๋ก์ ๊ฒฝ์ฐ ํ ์คํธ์ฉ์ผ ๊ฒ์ ๋๋ค(๋ํ ์ด๊ฒ์ด pegjs ๋ฆฌํฌ์งํ ๋ฆฌ๋ผ๊ณ ์ธ๊ธํ๋์ง ํ์คํ์ง ์์ต๋๋ค.)
์ด๊ฒ์ด PEG.js ๋ฆฌํฌ์งํ ๋ฆฌ ๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ ๊ฐ ์ฌ๊ธฐ์์ ์ด๊ฒ์ ๊ตฌํํ๋ ๊ฒ์ ๋ฐ๋ํ๋ ์ด์ ์ ๋๋ค.
์ข์ต๋๋ค.
2017๋ es6 ๋ชจ๋๊ณผ ํ์ดํ๋ฅผ ์ฌ์ฉํ ์ ์๋ 2์ค์ด ๋์ฌ ๋๊น์ง ๋ ์ด์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
๋ํ ์ค์ ๋ก ์ํ๋ ๊ฒ์ด ํ ์คํธ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปค๋ฒ๋ฆฌ์ง ํํฌ๋ฅผ ๋์ง ์์ต๋๋ค. ํ ์คํธ ํ์ผ์ ๋ฃ์ต๋๋ค.
์ ์ฉ ๋ฒ์๋ฅผ ์ํ๋ ๊ฒฝ์ฐ jest
์ค์นํ๋ฉด ๋ฉ๋๋ค. ํ์ํ ๋ชจ๋ ๊ฒ์ด ์๋์ผ๋ก ํฌํจ๋๋ฉฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ๋ด๋ถ๊ฐ ์๋ ์ธ๋ถ์์ ์ถ๊ฐ๋๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด ํ์ ์์ฑ๊ธฐ๋ ๋ด๋ถ ๊ธฐ๋ฅ์ผ๋ก ๊ฐ์๊ธฐ node.js
ํจํค์ง ์ํ๊ณ์ ์ฐ๊ฒฐ๋์ด์๋ ์ ๋ฉ๋๋ค.
๊ฒ๋ค๊ฐ ์ปค๋ฒ๋ฆฌ์ง๋ ํ์์ ๋ํ ์๋ชป๋ ์๋ง์ ๋๋ค. ๋ค์์ ๊ณ ๋ คํ์ธ์:
Food
/ "Peanuts"
/ "Shellfish"
/ "Rice"
์ด์ ์์ ๋ํ ํ
์คํธ๋ฅผ ์์ฑํ์ญ์์ค. peg
์ ๋จผ์ Peanuts
๋ฅผ ์๋ํ ๋ค์ ์๋ํ์ง ์์ ๋ peg
๋ Shellfish
๋ฅผ ์๋ํ ๋ค์ peg
๋ Rice
๋ฅผ ์๋ํฉ๋๋ค.
Rice
์ ๋ํ ํ
์คํธ๋ง ์์ฑํ์ง๋ง ์ธ ๊ฐ์ง ๋ชจ๋์ ๋ํ ์ ์ฉ ๋ฒ์๋ฅผ ์๋ชป ํ์ํ๊ณ ์์ต๋๋ค.
packrat ํ์(์์งํ ๋ด๊ฐ ์๊ฐํ ์ ์๋ ํ์์ ๋ฐฉ์)๊ฐ ์๋ํ๋ ๋ฐฉ์์ ์ ์ฉ ๋ฒ์๊ฐ ๊ฐ์ง์์ ์๋ฏธํฉ๋๋ค
์๊ฐ์ ๋ญ๋นํ์ง ๋ง์ธ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ปค๋ฒ๋ฆฌ์ง ํํฌ๋ฅผ ๋ฃ๋ ํ ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ์ ๋ฃ์ต๋๋ค. ํ์ง๋ง ํ์๊ฐ ๊ด๋ จ์ฑ์ด ์๋ ์ผ๋ถ ๋ถ๊ธฐ์ ๊ทธ๋ ์ง ์์ ๋ถ๊ธฐ๋ก ์๋ ์์ฑ๋๋ฉด ์๋ ์์ฑ๊ธฐ๊ฐ ์ด๊ฒ์ ์์ฑํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ ๋๋ค. ํ์ ํ์ผ์ ๋ฌด์ํ๊ณ ์ถ์ง ์์ ํ๋ก์ ํธ๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. ์ด๋ pegjs ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์์ฒด ์ ์ฉ ์๊ตฌ ์ฌํญ์ด ์์)์ ์ ์ฉ ๋ฒ์์ ๊ด๋ จ์ด ์์ง๋ง ์์ฑ๋ ๊ตฌ๋ฌธ ๋ถ์๊ธฐ์ ๋ฌธ๋ฒ ์ฌ์ฉ ์ ์ฉ ๋ฒ์์ ๊ด๋ จ์ด ์์ต๋๋ค.
๊ทํ์ ์์์ ์์ฑ๋ ํ์๋ "๋ ์ฝฉ", "์กฐ๊ฐ๋ฅ" ๋ฐ "์"์ ํ์ธํ๊ธฐ ์ํ ์ฝ๋ ํ์ด ์์ผ๋ฉฐ, ํฌํจ๋์ง ์์ ๊ฒฝ์ฐ ์ค์ ๋ก ๋ณด๊ณ ๋ ์ ์์ต๋๋ค.
ruleA = ruleB / ruleC
์ ๊ฐ์ ๊ท์น์ด "ruleA"์ "ruleB"์ "ruleC"๊ฐ ๋ชจ๋ ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํด์ผ ํ๋์ง ๋๋ "ruleA", "ruleB" , ๋ฐ "ruleC"๋ ๋ชจ๋ ์ด๋ป๊ฒ๋ ์ ์ฉ๋ฉ๋๋ค(์: ruleD = ruleB / ruleF
ruleB
์ ์ ์ฉ ๋ฒ์๋ ์ผ๋ถ ํ๋ก์ ํธ์์ ํด๋น ์ ์ฉ ๋ฒ์๊ฐ ๋ด์์ ์ ์ฉ๋๋์ง ํ์ธํ ํ์๋ฅผ ํผํ๊ธฐ์ ์ถฉ๋ถํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค. "ruleA", ํนํ ๋์๊ณผ ์กฐํฉ์ด ๋ง์ ๊ฒฝ์ฐ).
์ด ๋ฌธ์ ์ ๊ดํด์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ๊ตฌ ํ์ผ๊ณผ ์ถ๊ฐํ์ง ์์ ์ ๊ตฌ ํ์ผ์ด ์์ ์ ์์ต๋๋ค.
@brettz9 - "๋๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค"๋ผ๊ณ ๋งํ๋ ค๋ ์ฐธ์ด์๋๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ๋น์ ์ด๋ผ๋ ๊ฑธ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋น์ทํ ์ฌ๋์ ์ํด ์ด ํ ๋ก ์ ์ค๋จํ๊ฒ ์ต๋๋ค. ๊ด์ฐฎ์ผ์๋ค๋ฉด
๋๋ ํ์ฌ ๊ฑฐ๊ธฐ์์ ๊ธด ๊ฒ์ ์ฐ๊ณ ์๋ค
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@brettz9 - "๋๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ด์ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค"๋ผ๊ณ ๋งํ๋ ค๋ ์ฐธ์ด์๋๋ฐ, ๊ทธ๊ฒ ๋ฐ๋ก ๋น์ ์ด๋ผ๋ ๊ฑธ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋น์ทํ ์ฌ๋์ ์ํด ์ด ํ ๋ก ์ ์ค๋จํ๊ฒ ์ต๋๋ค. ๊ด์ฐฎ์ผ์๋ค๋ฉด
๋๋ ํ์ฌ ๊ฑฐ๊ธฐ์์ ๊ธด ๊ฒ์ ์ฐ๊ณ ์๋ค