๋ถ์ ์ ํ ์ง๋ฌธ์ด์๋ค๋ฉด ์ฃ์กํฉ๋๋ค
๋ด ํ๋ก์ ํธ๋ CRA์์ ๋ง๋ค๊ณ Express.js๋ฅผ ๋ฐฑ์๋๋ก ์ฌ์ฉํฉ๋๋ค.
์์ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ฌธ์์ ๋ฐ๋ผ ์๋ก์ด razzle ์ฑ์ ๋ง๋๋ ๊ฒ์
๋๊น?
ํ์ฌ ํ๋ก์ ํธ์๋ง ์ ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
์ฑ์ ๋ค์ ์์ฑํ์ง ์๋ ํ ๊ทธ๊ฒ ๊ฐ๋ฅํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋๋ ์ง๊ธ ์ด ์ผ์ ๊ฒช๊ณ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก CRA ํ๋ก์ ํธ๋ฅผ ์ค์ ํ์ต๋๋ค.
/projects/my-cra-app
์์ ์๋์๋ src , node_modules ๋ฐ CRA๊ฐ ๋ง๋ ๋ชจ๋ ๊ฒ์ด ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ razzle์ ํผํฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์์ต๋๋ค. (์ฒ์์๋ razzle์ด CRA๋ฅผ ๋์ฒดํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ค์ ๋ก ๋์ผํ ํ๋ก์ ํธ์์ Client-render(ํฌํธ 3001) ๋ฐ Server-render(ํฌํธ 3000)๋ฅผ ์ ๊ณตํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ ์๋ํ์ง ์์์ต๋๋ค(์ด์ ์ ์ฌ๊ธฐ์ ์ง๋ฌธ์ ์ฌ๋ ธ์ง๋ง ์๋ต์ ์์์ต๋๋ค).
๋ํ webpack4์ ํจ๊ป razzle ์ต์ (์ํ)์ ์ฌ์ฉํ๊ณ ์์ง๋ง CRA๋ ์ฌ์ ํ webpack(3)์ด์ง๋ง webpack 4์ ๋ํ ์ผ๋ถ ์ด๊ธฐ ์ปค๋ฐ์ด ์ด์ ๋ง์คํฐ ๋ธ๋์น์ ๋์ฐฉํ์ต๋๋ค...
๊ทธ๋์ ์ง๊ธ ๋ด๊ฐ ํ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/projects/my-app/app.src
node_modules๋ฅผ ํฌํจํ๋ /projects/my-app/app-cra(cra ์์ฑ App.js App.css๋ฅผ ํฌํจํ๋ ./src/ ํฌํจ)
node_modules๋ฅผ ํฌํจํ๋ /projects/my-app/app-ssr(razzle ์์ฑ ํญ๋ชฉ์ ํฌํจํ๋ ./src/ ํฌํจ)
๊ทธ๋ฌ๋ฉด app-cra/src์๋ ../../app.src์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ํฌํจ๋ฉ๋๋ค.
app-ssr/src์๋ ../../app.src์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ํฌํจ๋์ด ์์ต๋๋ค.
์ด๋ฐ ์์ผ๋ก ์์ค๋ ๊ฐ์ง๋ง ์ง์ ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅด๊ณ razzle๊ณผ cra ๊ฐ์ ๋ค๋ฅธ node_modules๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๋ถํํ๋ razzle์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ๋๋ ํ ๋ฆฌ์์ ๋ฐ๋ก JS๋ฅผ ๋ณํ/์ปดํ์ผํ์ง ์์ต๋๋ค(ํด๋น ๋ฌธ์ ์ ๋ํด์๋ cRA๋ ๋ง์ฐฌ๊ฐ์ง์).
๊ทธ๋์ ์ ๋ CRA์ ๋ํด rewire๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ razle-config.js๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ๋๋ ํ ๋ฆฌ์์ ๋ด JS ํ์ผ์ ๋ณด๋๋ก ์ง์ํฉ๋๋ค.
์ง๊ธ ๊ฐ์ง๊ณ ์๋ razle-config.js์์ ์ ํํ๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ stack-overflow์์ ๋ณผ ์ ์์ต๋๋ค(SSR์ ์ฌ์ฉํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ .. . ๊ทธ๋์ ์คํ ์ค๋ฒํ๋ก์ ๋ํ ๋์๋ง์ ๊ฒ์ํฉ๋๋ค).
๋๋ ๊ธฐ๋ณธ razzle(react-native-web, react-vector-icons, sass, symlinked ๋๋ ํ ๋ฆฌ..., ์ ํํ node_modules ๋ชจ๋์ ์ ์กํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ์ผ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ๋ณต์กํฉ๋๋ค. ๋ฐฐํฌ ๋ฑ)
ํ , ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ์์ง๋ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋ผ์.
@ifndefdeadmau5 CRA ์ฑ์ ์ ์งํ์ธ์.
a) CRA ์ฑ์ ๋์ผํ ํด๋ ์์ค์์ create-razzle-app์ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ ์ฑ์ ๋ง๋ญ๋๋ค.
b) ๋ ์ฑ ๊ฐ์ ๊ณต์ ํ๋ ค๋ ํ์ผ์ ๊ณตํต ํด๋๋ก ์ด๋ํฉ๋๋ค.
c) b)์์ ์์ฑํ ํด๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ฑ์ src ๋๋ ํ ๋ฆฌ์์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑํฉ๋๋ค.
d) razzle-config.js๋ฅผ ์ฌ์ฉํ๊ณ (CRA ์ฑ์ ๊ฒฝ์ฐ) ๋ค์ ๋ฐฐ์ ํ์ฌ ์นํฉ์ด c) ๋จ๊ณ์์ ์์ฑ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ JS ํ์ผ์ ์ ์กํ๋๋ก ์ง์ํฉ๋๋ค.
๋๋ ์๋ฅผํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์์ผ๋ฏ๋ก ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ ๋์ ๋๋ต์ ํ ์ ์์ต๋๋ค ...
@jaredpalmer ์๋ ํ์ธ์, CRA์์ razzle ์๋ฒ ๋ ๋๋ง ์ฑ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ readme์์ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๋ฃจ์ ์ ์ ๊ณตํ ์ ์์ต๋๊น? ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
ํ! ๊ทธ๋์ ์ฌ๊ธฐ ์คํ ์์ค์ ์ผ์ ์ ๋ฌด ๋ฐ ์ํ ์ฌ์ด์ ๊ฑฐ๋๊ฐ ์์ต๋๋ค. ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ GitHub ๋ด์ ์ฌ์ฉํ์ฌ ์ฌ๊ธฐ์ ๊ธฐ์ ๋ช ๊ฐ์ง๋ฅผ ์๋ํํฉ๋๋ค. ์ด ํน์ GitHub ๋ด์ ์ต๊ทผ ํ๋์ด ํ๋์ ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ถ์คํ ๊ฒ์ผ๋ก ํ์ํ ๊ฒ์ ๋๋ค. ๋ฉฐ์น ๋์ ๋ ์ด์ ํ๋์ด ์์ผ๋ฉด ํ์๋ฉ๋๋ค. ์ด ์์ ์ ๊ฐ์ธ์ ์ผ๋ก ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด์ง ๋ง์ญ์์ค. ์ด๊ฒ์ ์์ ํ ์๋ํ๋ ์์ ์ ๋๋ค. ์ด๊ฒ์ด ์ค์๋ผ๋ฉด ๋๊ธ, DM, ์บ๋ฆฌ์ด ๋น๋๊ธฐ ๋๋ ์ฐ๊ธฐ ์ ํธ๋ฅผ ๋ณด๋ด์ญ์์ค.
๋นํ์ฑ ์ํ๋ก ์ธํด ProBot์ด ์ด๋ฅผ ์๋์ผ๋ก ๋ซ์์ต๋๋ค. ์ด๊ฒ์ด ์ค์๋ผ๋ฉด Holler, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ค์ ์ด ๊ฒ์ ๋๋ค.
๊ฐ์ ์ง๋ฌธ์ด ์์ต๋๋ค. ๋ง์ถคํ React ์ฑ์ ๋ง๋ค์์ต๋๋ค. razzle์ ์ด๋ป๊ฒ ํตํฉํ ์ ์์ต๋๊น?
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋๋ ์ด๊ฒ์ ๋ํ ๋ช ๊ฐ์ง ์์ต์๊ฐ ์์ด์ผํ๋ค๋ ๋์ผํ ์ง๋ฌธ์ด ์์ต๋๋ค.
์ด๋ค ์ง์ ์ด ์์ต๋๊น?
์ ๋ ์ด๊ฒ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฒฝํ๊ฒ ์๋ํ๋ CRA ์ฑ์ด ์์๊ณ index.tsx
์ ์ด๋ฆ์ client.tsx
๋ก ๋ฐ๊พธ๊ณ ์๋ฒ๋ฅผ index.ts
์ ์ถ๊ฐํ์ฌ Razzle๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ค๊ณ ์๋ํ์ง๋ง razzle start
๋ฅผ ์คํํ ๋ ๊ทธ๊ฒ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฝ๋๋ฅผ ๋ฌถ์ผ๋ ค๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋์ง๋๋ค.
These dependencies were not found:
* fs in ../.yarn/$$virtual/babel-plugin-styled-components-virtual-cfb9253662/0/cache/babel-plugin-styled-components-npm-1.11.1-9e78975a1c-4b545bed54.zip/node_modules/babel-plugin-styled-components/lib/visitors/displayNameAndId.js, ../.yarn/cache/cosmiconfig-npm-6.0.0-cb7d64a2b9-bbd6bbaefe.zip/node_modules/cosmiconfig/dist/readFile.js and 4 others
* module in ../.yarn/cache/resolve-patch-af4189aea7-9e62d2803a.zip/node_modules/resolve/lib/normalize-options.js, ../.yarn/cache/resolve-from-npm-4.0.0-f758ec21bf-87a4357c0c.zip/node_modules/resolve-from/index.js
๋๊ตฌ๋ ์ง ๊ฐ์ ๊ฒ์ด ์๊ฑฐ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ์ ์ง๋ฌธ์ด ์์ต๋๋ค. ๋ง์ถคํ React ์ฑ์ ๋ง๋ค์์ต๋๋ค. razzle์ ์ด๋ป๊ฒ ํตํฉํ ์ ์์ต๋๊น?