React TypeScript | πŸ’¬ Slack 클둠 μ½”λ”© (1)

rimmzΒ·2022λ…„ 6μ›” 27일
1
post-thumbnail

Slack 클둠 μ½”λ”©[μ‹€μ‹œκ°„ μ±„νŒ… with React]


Slack(μŠ¬λž™) μ„œλΉ„μŠ€λ₯Ό 따라 λ§Œλ“€λŠ” Reacr Web 개발
βœ… ν•΄λ‹Ή κ°•μ˜λ₯Ό μˆ˜κ°• ν›„ μž‘μ„±ν•œ 볡슡 및 개인 μŠ€ν„°λ”” κΈ°λ‘μž…λ‹ˆλ‹€.

🚩 ν”„λ‘ νŠΈμ—”λ“œ μ„ΈνŒ…ν•˜κΈ°

βœ”οΈ HTMLκ³Ό CSSλŠ” Slack 개발자 λ„κ΅¬λ‘œ μ°Έκ³ ν•΄μ„œ κ°€μ Έμ˜΄
βœ”οΈ λ°±μ—”λ“œ μ„œλ²„μ˜ μž‘μ—…μ€ μ™„λ£Œκ°€ λ˜μ—ˆλ‹€λŠ” κ°€μ • ν•˜μ— ν”„λ‘ νŠΈμ—”λ“œ μž‘μ—…

  • .env μž‘μ„±ν•˜κΈ°(COOKIE_SECRETκ³Ό MYSQL_PASSWORD λΉ„λ°€λ²ˆν˜Έ μ„€μ •)
  • config/config.json μ„€μ •(MYSQL 접속 μ„€μ •)
  • npx sequelize db:create μŠ€ν‚€λ§ˆ 생성
  • npm run dev ν…Œμ΄λΈ” 생성
  • npx sequelize db:seed:all 기초 데이터 λ„£κΈ°
  • npm run dev NPM λ°±μ—”λ“œ μ„œλ²„ μ‹€ν–‰

β­• μŠ¬λž™μ˜ κΈ°λ³Έ ꡬ쑰

  • Workspace(νšŒμ‚¬) > channel(λΆ€μ„œ)

πŸ”˜ tsconfig.json

  • paths path 섀정을 ν•˜λ©΄ μ ˆλŒ€ 경둜처럼 νŒŒμΌμ„ import ν•΄μ„œ κ°€μ Έμ˜¬ 수 μžˆλ‹€.
// κΈ°μ‘΄ import
import A from ../../../../hello.js

// path μ„€μ • μ‹œ
import A from @src/hello.js
  • "strict": true typescript μ‚¬μš© μ‹œ strict 섀정을 μ•ˆν•˜κ²Œλ˜λ©΄ any νƒ€μž…μ„ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ˜ 이점을 λˆ„λ¦΄ 수 μ—†λ‹€. (μ• λ‹ˆμŠ€ν¬λ¦½νŠΈ κΈˆμ§€βŒπŸ™…πŸ™…)

πŸ”˜ webpack.config.ts

  • extensions babel이 μ²˜λ¦¬ν•  ν™•μž₯자 λͺ©λ‘
  • alias tsconfigμ—μ„œ μ„€μ •ν•œ paths 와 동일

  • Babel은 css μ½”λ“œλ„ μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ λ³€ν™˜ν•΄μ€€λ‹€.

🚩 폴더 ꡬ쑰와 λ¦¬μ•‘νŠΈ λΌμš°ν„°

πŸ”˜ 폴더 ꡬ쑰 μ„ΈνŒ…

  • πŸ“ pages : νŽ˜μ΄μ§€
  • πŸ“ layouts : νŽ˜μ΄μ§€κ°„ κ³΅ν†΅λ˜λŠ” ν‹€
  • πŸ“ components : κ°œλ³„ μ»΄ν¬λ„ŒνŠΈλŠ” νŽ˜μ΄μ§€κ°„ κ³΅ν†΅λ˜λŠ” ν‹€
  • πŸ“ hooks : μ»€μŠ€ν…€ ν›… λͺ¨μŒ
  • πŸ“ utils : 기타 ν•¨μˆ˜

각 μ»΄ν¬λ„ŒνŠΈλŠ” μ»΄ν¬λ„ŒνŠΈ 폴더 μ•„λž˜ index.tsx(JSX)와 styles.tsx(μŠ€νƒ€μΌλ§) μž‘μ—…

πŸ”˜ λ¦¬μ•‘νŠΈ λΌμš°ν„° react-router

  • <Switch> μ—¬λŸ¬κ°œμ˜ λΌμš°ν„° 쀑에 ν•΄λ‹Ήν•˜λŠ” ν•˜λ‚˜μ˜ ν™”λ©΄λ§Œ ν‘œμ‹œ

  • <Redirect exact path="/" to="/login" /> pathκ°€ '/'둜 λλ‚˜λ©΄ login νŽ˜μ΄μ§€λ‘œ λ³€κ²½

  • react-routerλ₯Ό μ‚¬μš©ν•˜κΈ°μœ„ν•΄μ„œλŠ” <BrowserRouter> νƒœκ·Έλ‘œ κ°μ‹Έμ Έμ•Όν•œλ‹€.

  • μ‹±κΈ€ νŽ˜μ΄μ§€μ—μ„œλŠ” URL의 κ°œλ…μ΄ μ—†μ§€λ§Œ μ›ΉνŒ©μ˜ historyApiFallback μ„€μ •μœΌλ‘œ μ„œλ²„μ—λŠ” μ‹€μ œλ‘œ μ—†λŠ” μ£Όμ†Œμ΄μ§€λ§Œ λ¦¬μ•‘νŠΈ λΌμš°ν„°λ₯Ό μ‹€μ œ μ£Όμ†Œ 처럼 μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€μ •ν•΄μ€€λ‹€.

🚩 μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…κ³Ό 이λͺ¨μ…˜

πŸ”˜ μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…

μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… (Code Splitting) πŸ€”
webpack, rollup, browserify와 같은 λͺ¨λ“ˆ λ²ˆλ“€λŸ¬λ₯Ό μ΄μš©ν•˜μ—¬ λ§Œλ“€μ–΄μ§„ ν•˜λ‚˜μ˜ λ²ˆλ“€ νŒŒμΌμ„ μ—¬λŸ¬ 개의 λ²ˆλ“€ 파일둜 λ‚˜λˆ„λŠ” 것을 μ˜λ―Έν•œλ‹€.

μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ„ μ‚¬μš©ν•˜λŠ” 이유? πŸ€”
μžλ°”μŠ€ν¬λ¦½νŠΈλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ°œλ°œν•˜κ²Œ 되면, 기본적으둜 ν•˜λ‚˜μ˜ νŒŒμΌμ— λͺ¨λ“  λ‘œμ§λ“€μ΄ λ“€μ–΄κ°€κ²Œ λœλ‹€. ν”„λ‘œμ νŠΈμ˜ 규λͺ¨κ°€ 컀질수둝 μžλ°”μŠ€ν¬λ¦½νŠΈ 파일 μš©λŸ‰λ„ μ»€μ§€λ©΄μ„œ, 인터넷이 느린 ν™˜κ²½μ—μ„œλŠ” νŽ˜μ΄μ§€ λ‘œλ”© 속도가 ν•¨κ»˜ λŠλ €μ§„λ‹€.

μ§€κΈˆ λ‹Ήμž₯ ν•„μš”ν•œ μ½”λ“œκ°€ μ•„λ‹ˆλΌλ©΄ λ”°λ‘œ λΆ„λ¦¬μ‹œμΌœμ„œ, λ‚˜μ€‘μ— ν•„μš”ν•  λ•Œ λΆˆλŸ¬μ™€μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…μ„ 톡해, νŽ˜μ΄μ§€μ˜ λ‘œλ”© 속도λ₯Ό κ°œμ„ ν•  수 μžˆλ‹€.

  • npm install @loadable/component loadable을 μ‚¬μš©ν•˜μ—¬ μ½”λ“œμŠ€ν”Œλ¦¬νŒ… μž‘μ—…

  • μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… μž‘μ—… μ‹œ μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈλ₯Ό 뢄리해야 ν•˜λŠ”κ°€ ν—·κ°ˆλ¦΄ λ•ŒλŠ” νŽ˜μ΄μ§€λ‘œ λ‹¨μœ„λ‘œ μš°μ„  생각을 ν•˜λ©΄ 쉽닀.

πŸ”˜ styled-components λŒ€μ‹  이λͺ¨μ…˜(Emotion) μ‚¬μš©

  • npm install @emotion/react emotion μ„€μΉ˜

  • νƒœκ·Έλ₯Ό λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©ν•  μ»΄ν¬λ„ŒνŠΈμ— λŒ€ν•΄ 미리 CSS μŠ€νƒ€μΌμ„ 지정
  • μŠ€νƒ€μΌ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ„ˆλ¬΄ 많이 λ§Œλ“€ 경우 λ³€μˆ˜λͺ…을 μ§“λŠ” κ³Όμ •κ³Ό ꡬ뢄이 μ–΄λ €μš°λ―€λ‘œ ꡬ별이 되기 쒋은 μ»΄ν¬λ„ŒνŠΈ κΈ°μ€€μœΌλ‘œ μŠ€νƒ€μΌμ„ λ§Œλ“œλŠ” 것이 μ’‹λ‹€.

πŸ”— μ°Έκ³ 

https://velog.io/@velopert/react-code-splitting

profile
#μ˜μš•λ„˜μΉ˜λŠ”#πŸ’»#✨#FE#πŸ’ͺ🏻

0개의 λŒ“κΈ€