์ด ํ๋ก์ ํธ๋ ๋ฉ์ ธ ๋ณด์ ๋๋ค. ์ ๋ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ ค๊ณ ํ๋๋ฐ next.js, create-react-app, razzle ์ฌ์ด์ ์ด๋ค ์ด์ ์ด ์๋์ง ๋๋ ์ฅ๊ธฐ์ ์ผ๋ก ๊ฐ์ฅ ์ข์ ๊ฒ์ ๋ฌด์์ธ์ง ๊ถ๊ธํ์ต๋๋ค. ๋๋ SSR์ ์ ๋ง๋ก ์ํ๋ฏ๋ก CRA๋ ์๋ง๋ ๋ฌธ์ ๊ฐ๋์ง ์์ ๊ฒ์ ๋๋ค. ๋๋ next๋ก ์ฑ์ ๋ง๋ ๋ค์ ์ด ํ๋ก์ ํธ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ฐ๋ผ๊ฑด๋ ์ด๊ฒ์ ์ด๊ฒ์ ์ง๋ฌธํ๊ธฐ์ ๊ด์ฐฎ์ ๊ณณ์ด์ง๋ง ์ฅ๊ธฐ์ ์ผ๋ก ๋ฌด์์ด ์ต์ ์ธ์ง์ ๋ํ ์๊ฐ์ ์ป๊ณ ์ถ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๋น์ ๊ณผ ๋น์ ์ ์๋ก์ด ํ๋ก์ ํธ์ ํ์ํ ๊ฒ์ ๋ฌ๋ ค ์๋ค๋ ๊ฒ์ด ์ ๋ต์ด๋ผ๋ ๋ฐ ๋ชจ๋๊ฐ ๋์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์๋ ํ Next.js๋ ZEIT ์ํ๊ณ์ ์ผ๋ถ๋ก ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์์ ํ ํ๋ ์์ํฌ์ ๋๋ค. ๋๋ ํ๋ซํผ?. ๋ฐ๋ฉด Razzle์ ํจ์ฌ ๋ ๋ฏธ๋๋ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ธฐ์๋ ํ์ํ์ง ์์ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง ์์ง๋ง ํ์ํ ์๋ ์๊ณ ๊ฒฐ๊ตญ์๋ ํ์ํ ์๋ ์๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง ์์ ๊ฒ๋ ์ฌ์ค์ ๋๋ค.
๋๋ ๋ํ Next.js๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ง๋ง ๋๋ฅผ ์ง์ฆ๋๊ฒ ํ๋ ๋ช ๊ฐ์ง ์์ ์ธ๋ถ ์ฌํญ์ด ์์์ต๋๋ค. ์๋ฅผ ๋ค์ด Next.js๋ HTML ์ถ๋ ฅ์ ์ ์ ํ๊ฒ ์ถ์ํ์ง ์์ต๋๋ค. ๋ํ styled-jsx CSS-in-JS๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ๋ Styled Components ๋ฅผ ์ ํธํฉ๋๋ค. ๊ฒ๋ค๊ฐ ๋ด ์ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ผ์ฐํ ์ด ํ์ํ์ง ์์์ต๋๋ค(์์ง ๐).
๋ง์ง๋ง์ผ๋ก ์ด ์ข๊ฒ๋ ๋ง์ ์์ ํ๋ก์ ํธ๋ฅผ ํ ์คํธํ ํ Razzle์ ์ฐพ์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ์ ๋ ํ์ํ ๋ช ๊ฐ์ง ๋ชจ๋๊ณผ ๊ธฐ๋ฅ์ ํฌํจํ๋ Razzle Material UI Styled Example ์ด๋ผ๋ ์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค. ์ด์ ๊ฑฐ์ ๋ป๋ปํ๊ฒ ์ ํ๋ก์ ํธ๋ฅผ ์งํํ ์ ์์ต๋๋ค. ๋์ผํ ๊ธฐ๋ฅ ๋๋ ๊ทธ ์ค ์ผ๋ถ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ธ๊ธ๋ ์ ์ฅ์๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ์ญ์์ค.
@knipferrc ๊ฐ์ฌํฉ๋๋ค
๋น์ทํ ๊ฒฝํ์ ํตํด Razzle์ ๋ง๋ค๊ฒ ๋์์ต๋๋ค.
์ฝ 6๊ฐ์ ์ ์ Next.js๊ฐ ๋์จ ์งํ ๊ฑฐ๋ํ ์ฑ์ ์์ํ๋๋ฐ ์ฑ ์ดํ์ด ๋๋ฌด ์ปค์ ๊ฐ๋นํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ๋ง ๊ทธ๋๋ก ๋งค๊ฐ๋ณ์ํ๋ ๋ผ์ฐํ
์์ (์: /user/:id
)์ ๋ํ PR์ ์ ์ถํ์ต๋๋ค. ๊ฒฝ๋ก ๋ณ๊ฒฝ ์ getInitialProps๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ด์ํ ๋ฒ๊ทธ๋ก ์ธํด ์ผ์ฃผ์ผ ๋ด๋ด ์์
์ ์์๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. ํ๋ฃจ๊ฐ ๋๋๋ฉด Next.js๋ ๋ผ์ฐํ
, ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํด๋ ๊ตฌ์กฐ ๋ฐ ์คํ์ผ ์ง์ ๊ณผ ๊ฐ์ ๋งค์ฐ ์ค์ํ ๊ฒฐ์ ์ ๋ง์ด ๋ด๋ฆฝ๋๋ค. ์ด๊ฒ๋ค์ด ์ข์์ง ๋์์ง๋ ์ ์ ์ผ๋ก ๋น์ ์ด ๊ตฌ์ถํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฅ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ๋ ์ค์ ๋ก ๋ชจ๋ ๋จ์ผ ๊ฒฝ๋ก(2๊ฐ๋ง)๋ฅผ ์๋ฒ ๋ ๋๋งํ ํ์๊ฐ ์์๊ณ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ๋ ๋์ ํด๋ผ์ด์ธํธ ๋ก๋ ์ํ๋ฅผ ์ํ์ผ๋ฉฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ ์ฌ์ด์ ์ ์ญ ์ํ ํธ๋ฆฌ๋ฅผ ํ๊ดดํ๊ณ ์ถ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ React-Router 4๊ฐ ์๊ฒ ์ฌ ๋นต ์ดํ๋ก ์ต๊ณ ๋ผ๋ ์ ์๊ฒฌ๊ณผ ํจ๊ป Next.js๊ฐ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค.
๋ ์์ ์ ์ธ ๊ฒ์ ์ฐพ๋ค๊ฐ NYT์ kyt ํ๋ก์ ํธ๋ก ์ฎ๊ฒผ์ต๋๋ค. ์ด๊ฒ์ ์ฝ 2๊ฐ์ ๋์ ์ถฉ๋ถํ์ง๋ง 1) ์ฑ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋น๋ ์๊ฐ์ด ์์ฒญ๋๊ฒ ๋๋ ค์ก๊ณ (>45์ด), 2) kyt์ SCSS ๊ท์น์ด ํ๋ก์ ํธ์ ์ ํฉํ์ง ์์๊ณ , 3) kyt์ ๋ก๊น
์ ์ฐพ์์ต๋๋ค. ๋ฏธ์น ์์ ์ด๋ชจํฐ์ฝ) ๊ฝค ์ง์ฆ๋ฉ๋๋ค. ๊ทธ๋์ ๋๋ kyt์ ๋ํ ๋ ์๊ณ ๋น ๋ฅธ ๋์ฒด ์์
์ ์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ง๋ง, ๋ฒ์ฉ HMR๊ณผ Next.js-- create-react-app-ssr
์ ์ ์ฌํ ๊ตฌ์ฑ API๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ชจ๋ ๊ฒ์ ๋งํ๊ณ ์๋ฃํ๊ณ ๋๋ฉด ๊ฑฐ์ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋น๋ ์์คํ ์ ๋ง๋ค์์ผ๋ฉฐ ์ด ์์ค์ ์ถ์ํ๊ฐ ๋ด ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ๋ ์ ํฉํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. "ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋"์ด๋ผ๋ ๋ง์ Razzle์ด Angular, Vue, Rax, Preact, Inferno, React-XP, RN-Web, Reason-React ๋ฐ _๊ฐ์ฅ ์ค์ํ ๊ฒ์_ ๋ค์์ ๋์ค๋ ๋ชจ๋ ๋ฏธ์น ๊ฒ๋ค์ด 100% ์๋ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. IMHO, ์ ์์ฑ์ Razzle๊ณผ ๋ด๊ฐ ๋ณธ ๊ฑฐ์ ๋ชจ๋ ๊ฒ ์ฌ์ด์ ์ฃผ์ ์ฐจ๋ณํ ์์์ ๋๋ค. Razzle์ ์ฌ์ฉํ๋ฉด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ๋ฌด์ธ๊ฐ์ ๋ํด ์ฝ๊ณ , ํฌํฌ๋ฅผ ๋ง๋ค๊ณ , babel-transform/webpack config/parallel ๋น๋ ์์คํ ์ ์ถ๊ฐ ํ๊ณ ์๋ํด๋ณผ ์ ์์ต๋๋ค. ์์? Next์ ๋ฌ๋ฆฌ Razzle์ ํ๋ ์์ํฌ๊ฐ ์๋๋ฉฐ CRA์ ๋ฌ๋ฆฌ Razzle์ ์ฌ์ฉํ๋ฉด ๋ถ๊ธฐํ์ง ์๊ณ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋ณด๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ด๊ฐ ๋ฐฐ์ฐ๊ณ , ๊ฐ๋ฅด์น๊ณ , ์คํํ๊ณ , ์ฌ์ ์ ํ๋ ๋ฐฉ์์ ์์ด์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Razzle์ ์ ์ฐ์ฑ๊ณผ ๋ถ๊ฐ์ง๋ก ์ ์ด๋ฏธ ๋์ ๋ด ํ์ ๋์์ด ๋์์ต๋๋ค.
razzle.config.js
์์ 10์ค ๋ฏธ๋ง์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ถ๋ถ์ ์ผ๋ก ํ๋ฆ์์ 100% TypeScript๋ก ์ฑ์ ์ ์ง์ ์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.Razzle์ ๋ฏธ๋์ ๊ดํด์. ์ดํ ์ "CRA์ SSR ์ง์ ์ถ๊ฐ"๊ฐ React Core ํ์ ๋ก๋๋งต์์ ์์ 15๊ฐ ํ ์ผ์ ์ธ๊ธ๋์์ต๋๋ค. SSR ์ง์์ด CRA์ ์ถ๊ฐ๋๋ฉด Razzle์ด ๋ ์ด์ ์กด์ฌํ ํ์๊ฐ ์์ ์๋ ์์ต๋๋ค..._๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ๊ฒ์ ๋ํด ์์ ํ ๋ฉ์ง๋๋ค_. ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋ ๋๊น์ง Razzle์ ์๋ฒ์์ ๋ ๋๋ง๋ ๋ฒ์ฉ JavaScript๋ฅผ ์ํ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋น๋ ๋๊ตฌ๋ก ์์ผ๋ก ๋์๊ฐ ๊ฒ์ ๋๋ค.
์!! ๋ฉ์ง ๋ต๋ณ๋ค ์ ๋ง ๊ฐ์ฌํฉ๋๋ค.
์๋
ํ์ธ์ Jared, ์ ๋ Razzle์ ์ฌ์ฉํ์ฌ SPA Angular ํ๋ก์ ํธ๋ฅผ SSR๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ด๋ป๊ฒ ํ๋์ง ํํธ๋ ์ง์นจ์ ์ฃผ์๊ฒ ์ต๋๊น? ์ ๋ง ๊ณ ๋ง์ต๋๋ค.
Razzle Angular ์๋ฃจ์ ์ ๊ฒฝ์ฐ +1์ ๋๋ค. https://github.com/jaredpalmer/razzle/issues/1109
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@knipferrc ๊ฐ์ฌํฉ๋๋ค
๋น์ทํ ๊ฒฝํ์ ํตํด Razzle์ ๋ง๋ค๊ฒ ๋์์ต๋๋ค.
์ฝ 6๊ฐ์ ์ ์ Next.js๊ฐ ๋์จ ์งํ ๊ฑฐ๋ํ ์ฑ์ ์์ํ๋๋ฐ ์ฑ ์ดํ์ด ๋๋ฌด ์ปค์ ๊ฐ๋นํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ๋ง ๊ทธ๋๋ก ๋งค๊ฐ๋ณ์ํ๋ ๋ผ์ฐํ ์์ (์:
/user/:id
)์ ๋ํ PR์ ์ ์ถํ์ต๋๋ค. ๊ฒฝ๋ก ๋ณ๊ฒฝ ์ getInitialProps๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ด์ํ ๋ฒ๊ทธ๋ก ์ธํด ์ผ์ฃผ์ผ ๋ด๋ด ์์ ์ ์์๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค. ํ๋ฃจ๊ฐ ๋๋๋ฉด Next.js๋ ๋ผ์ฐํ , ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํด๋ ๊ตฌ์กฐ ๋ฐ ์คํ์ผ ์ง์ ๊ณผ ๊ฐ์ ๋งค์ฐ ์ค์ํ ๊ฒฐ์ ์ ๋ง์ด ๋ด๋ฆฝ๋๋ค. ์ด๊ฒ๋ค์ด ์ข์์ง ๋์์ง๋ ์ ์ ์ผ๋ก ๋น์ ์ด ๊ตฌ์ถํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฅ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ๋ ์ค์ ๋ก ๋ชจ๋ ๋จ์ผ ๊ฒฝ๋ก(2๊ฐ๋ง)๋ฅผ ์๋ฒ ๋ ๋๋งํ ํ์๊ฐ ์์๊ณ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ๋ ๋์ ํด๋ผ์ด์ธํธ ๋ก๋ ์ํ๋ฅผ ์ํ์ผ๋ฉฐ ๊ฒฝ๋ก ๋ณ๊ฒฝ ์ฌ์ด์ ์ ์ญ ์ํ ํธ๋ฆฌ๋ฅผ ํ๊ดดํ๊ณ ์ถ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ React-Router 4๊ฐ ์๊ฒ ์ฌ ๋นต ์ดํ๋ก ์ต๊ณ ๋ผ๋ ์ ์๊ฒฌ๊ณผ ํจ๊ป Next.js๊ฐ ํ๋ก์ ํธ์ ์ ํฉํ์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค.๋ ์์ ์ ์ธ ๊ฒ์ ์ฐพ๋ค๊ฐ NYT์ kyt ํ๋ก์ ํธ๋ก ์ฎ๊ฒผ์ต๋๋ค. ์ด๊ฒ์ ์ฝ 2๊ฐ์ ๋์ ์ถฉ๋ถํ์ง๋ง 1) ์ฑ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋น๋ ์๊ฐ์ด ์์ฒญ๋๊ฒ ๋๋ ค์ก๊ณ (>45์ด), 2) kyt์ SCSS ๊ท์น์ด ํ๋ก์ ํธ์ ์ ํฉํ์ง ์์๊ณ , 3) kyt์ ๋ก๊น ์ ์ฐพ์์ต๋๋ค. ๋ฏธ์น ์์ ์ด๋ชจํฐ์ฝ) ๊ฝค ์ง์ฆ๋ฉ๋๋ค. ๊ทธ๋์ ๋๋ kyt์ ๋ํ ๋ ์๊ณ ๋น ๋ฅธ ๋์ฒด ์์ ์ ์์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ง๋ง, ๋ฒ์ฉ HMR๊ณผ Next.js--
create-react-app-ssr
์ ์ ์ฌํ ๊ตฌ์ฑ API๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ชจ๋ ๊ฒ์ ๋งํ๊ณ ์๋ฃํ๊ณ ๋๋ฉด ๊ฑฐ์ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋น๋ ์์คํ ์ ๋ง๋ค์์ผ๋ฉฐ ์ด ์์ค์ ์ถ์ํ๊ฐ ๋ด ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ์ ๋ ์ ํฉํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. "ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋"์ด๋ผ๋ ๋ง์ Razzle์ด Angular, Vue, Rax, Preact, Inferno, React-XP, RN-Web, Reason-React ๋ฐ _๊ฐ์ฅ ์ค์ํ ๊ฒ์_ ๋ค์์ ๋์ค๋ ๋ชจ๋ ๋ฏธ์น ๊ฒ๋ค์ด 100% ์๋ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. IMHO, ์ ์์ฑ์ Razzle๊ณผ ๋ด๊ฐ ๋ณธ ๊ฑฐ์ ๋ชจ๋ ๊ฒ ์ฌ์ด์ ์ฃผ์ ์ฐจ๋ณํ ์์์ ๋๋ค. Razzle์ ์ฌ์ฉํ๋ฉด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ๋ฌด์ธ๊ฐ์ ๋ํด ์ฝ๊ณ , ํฌํฌ๋ฅผ ๋ง๋ค๊ณ , babel-transform/webpack config/parallel ๋น๋ ์์คํ ์ ์ถ๊ฐ ํ๊ณ ์๋ํด๋ณผ ์ ์์ต๋๋ค. ์์? Next์ ๋ฌ๋ฆฌ Razzle์ ํ๋ ์์ํฌ๊ฐ ์๋๋ฉฐ CRA์ ๋ฌ๋ฆฌ Razzle์ ์ฌ์ฉํ๋ฉด ๋ถ๊ธฐํ์ง ์๊ณ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋ณด๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ด๊ฐ ๋ฐฐ์ฐ๊ณ , ๊ฐ๋ฅด์น๊ณ , ์คํํ๊ณ , ์ฌ์ ์ ํ๋ ๋ฐฉ์์ ์์ด์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
Razzle์ ์ ์ฐ์ฑ๊ณผ ๋ถ๊ฐ์ง๋ก ์ ์ด๋ฏธ ๋์ ๋ด ํ์ ๋์์ด ๋์์ต๋๋ค.
razzle.config.js
์์ 10์ค ๋ฏธ๋ง์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ถ๋ถ์ ์ผ๋ก ํ๋ฆ์์ 100% TypeScript๋ก ์ฑ์ ์ ์ง์ ์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.Razzle์ ๋ฏธ๋์ ๊ดํด์. ์ดํ ์ "CRA์ SSR ์ง์ ์ถ๊ฐ"๊ฐ React Core ํ์ ๋ก๋๋งต์์ ์์ 15๊ฐ ํ ์ผ์ ์ธ๊ธ๋์์ต๋๋ค. SSR ์ง์์ด CRA์ ์ถ๊ฐ๋๋ฉด Razzle์ด ๋ ์ด์ ์กด์ฌํ ํ์๊ฐ ์์ ์๋ ์์ต๋๋ค..._๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ๊ฒ์ ๋ํด ์์ ํ ๋ฉ์ง๋๋ค_. ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋ ๋๊น์ง Razzle์ ์๋ฒ์์ ๋ ๋๋ง๋ ๋ฒ์ฉ JavaScript๋ฅผ ์ํ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋น๋ ๋๊ตฌ๋ก ์์ผ๋ก ๋์๊ฐ ๊ฒ์ ๋๋ค.