Skip to content

🐳 FE κΈ°μˆ μŠ€νƒ

JaeMeDev edited this page Mar 20, 2023 · 4 revisions

πŸ€Β κΈ°μˆ μŠ€νƒ μ„ μ • κΈ°μ€€

  • 짧은 κΈ°κ°„λ™μ•ˆ κ°€μž₯ 쒋은 퍼포먼슀λ₯Ό λ‚΄κΈ° μœ„ν•œ κΈ°μˆ μŠ€νƒ.
  • 2λͺ…μ˜ 멀버가 λͺ¨λ‘ μ‚¬μš©ν•΄ λ³Έ 기술 μœ„μ£Όλ‘œ 선택.

πŸ•ΊΒ μ„ΈλΆ€ 기술 μŠ€νƒ

Yarn berry(yarn 3)

Next.js v13

  • SEOλ₯Ό μœ„ν•œ SSR을 μ‰½κ²Œ μ‚¬μš©ν•  수 있음.
  • Next V13이 μ΄μŠˆκ°€ 많긴 해도 Turbopack , next/image κ°œμ„ , next/link , /app/ 디렉터리 μ‚¬μš©λ“±μ˜ 이점이 있기 λ•Œλ¬Έμ— μ„ νƒν•˜μ˜€μŒ.
  • Next.js unplugged μ΄μœ λŠ” yarn berry pnp κΈ°λŠ₯을 μ‚¬μš©ν•  λ•Œ buildκ°€ μ‹€νŒ¨ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • Next.js 13 변경점

React v18

  • ReactλŠ” νŒ€μ› λͺ¨λ‘ κ²½ν—˜μ„ 가지고 있음.
  • v18 변경점

styled-Components

TanStack Query

  • server state lib.
  • react query의 이름이 v4λΆ€ν„° TanStack Query둜 λ³€κ²½.
  • κ³΅μ‹λ¬Έμ„œ

recoil

  • client state lib.
  • reduxλ₯Ό μ„ νƒν•˜μ§€ μ•Šμ€ μ΄μœ λŠ” client state만 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ μž‘μ„±ν•΄μ•Όν•  λ³΄μΌλŸ¬ν”Œλ ˆμ΄νŠΈκ°€ 많고, third party libraryκ°€ ν¬ν•¨λ˜μ–΄μžˆλŠ” μžˆλŠ” λ¦¬λ•μŠ€ 및 λ¦¬λ•μŠ€ νˆ΄ν‚·μ„ μ‚¬μš©ν•˜κΈ°λ³΄λ‹¨ hook ν˜•μ‹μœΌλ‘œ λ˜μ–΄μžˆκ³  atomλ‹¨μœ„λ‘œ ν•΄λ‹Ή μ±…μž„μ˜ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ ν•„μš”ν•  λ•Œ κ°€μ Έλ‹€ μ“Έ 수 있게 νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλŠ” recoilλ₯Ό 선택.
  • κ²½ν—˜μ€ λ³„λ‘œ μ—†μ§€λ§Œ κ³΅μ‹λ¬Έμ„œλ₯Ό 보면 μΆ©λΆ„νžˆ 해결될 것이라 μƒκ°ν•˜κΈ°μ— μ„ νƒν•˜κ²Œ 됨.

TypeScript

  • TypeScriptλŠ” ν•„μˆ˜μ μΈ 선택!(컴파일 λ‹¨κ³„μ—μ„œ 였λ₯˜λ₯Ό 포착할 수 있고, μžλ™μ™„μ„±μ˜ μž₯점 λ˜ν•œ 가진닀. κ·Έ μ™Έ λ“±λ“± μž₯점이 λ„ˆλ¬΄ 많음)

Unit Test

  • Jest
  • react-testing-library
  • κ²¬κ³ ν•œ ν”„λ‘œκ·Έλž¨μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” Test Code μž‘μ„±μ€ ν•„μˆ˜μ΄λ‹€.
  • ν…ŒμŠ€νŠΈμ— λŒ€ν•œ μ˜€ν•΄κ°€ λΆ„λͺ…νžˆ μ‘΄μž¬ν•  순 μžˆμ§€λ§Œ, ν…ŒμŠ€νŠΈκ°€ 개발 속도λ₯Ό λŠ¦μΆ˜λ‹€κ³  μƒκ°ν•˜μ§€ μ•Šκ³  ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν–ˆμ„ λ•Œμ˜ 이점이 μ••λ„μ μœΌλ‘œ 많기 λ•Œλ¬Έμ— Unit Test 진행.

E2E Test

  • Cypress
  • λŒ€μ€‘μ μœΌλ‘œ 많이 μ‚¬μš©ν•˜κ³  정보도 κ°€μž₯ λ§Žμ€ Cypress 선택.

ESLint

  • Code Convention
  • airbnb기반으둜 μ§„ν–‰ν•˜λ˜ μ„œλ‘œ rule을 μ •ν•΄μ„œ μ‚¬μš©ν•˜λ©΄ 쒋을 것 κ°™μŒ. 개발둜 λ§žμΆ°κ°€λŠ” 것이 ν•„μš”ν•  λ“―.

Husky

  • Git hook 도ꡬ
  • pre commit , commitlint 적용 μ˜ˆμ •.
  • Git Commit Convention은 commitlint κΈ°λ³Έ 룰둜 진행.

Github Action

  • CI

    • lint
    • unit test
    • e2e test(cypress)
    • code coverage(codecov)
    • lighthouse
    • next bundle size
    • chatgpt review
  • CD

    • 배포(Vercel μ‚¬μš©ν•  것 κ°™μŒ)

Sentry

  • ν”„λ‘ νŠΈμ—”λ“œ μ—λŸ¬ 좔적
  • react guide

react-ga4(보λ₯˜)

  • κΈ°νšμžλΆ„λ“€κ³Ό μƒμ˜κ°€ ν•„μš”ν•˜λ―€λ‘œ 일단 보λ₯˜
  • react-ga4

next-pwa

  • pwaλž€?
  • μŠ€ν† μ–΄ 배포λ₯Ό μœ„ν•΄μ„œ ν•„μˆ˜μž„. λ¬Όλ‘  μ›Ήλ·° μ œμž‘ ν›„ 배포도 μžˆμ§€λ§Œ, PWA둜 선택.
  • next-pwa

πŸŽ―Β μ•„ν‚€ν…μ²˜

  • Project Structure
πŸ“¦ popo-client
 ┣ πŸ“‚ .github
 ┣ πŸ“‚ .husky
 ┣ πŸ“‚ .yarn
 ┣ πŸ“‚ @types
 ┣ πŸ“‚ __mocks__
 ┣ πŸ“‚ cypress
 ┣ πŸ“‚ images
 ┣ πŸ“‚ public
 ┣ πŸ“‚ src
 ┃ ┣ πŸ“‚ app
 ┃ ┃ ┣ πŸ“‚ api
 ┃ ┃ ┣ πŸ“œ head.tsx
 ┃ ┃ ┣ πŸ“œ layout.tsx
 ┃ ┃ ┣ πŸ“œ page.tsx
 ┃ ┣ πŸ“‚ components
 ┃ ┣ πŸ“‚ lib
 ┃ ┣ πŸ“‚ styles
 ┃ ┣ πŸ“‚ utils
 ┣ πŸ“œ .eslintrc.js
 ┣ πŸ“œ .gitignore
 ┣ πŸ“œ .lintstagedrc.json
 ┣ πŸ“œ .pnp.cjs
 ┣ πŸ“œ .pnp.loader.mjs
 ┣ πŸ“œ .yarnrc.yml
 ┣ πŸ“œ .commitlint.config.js
 ┣ πŸ“œ cypress.config.ts
 ┣ πŸ“œ jest.config.js
 ┣ πŸ“œ jest.setup.js
 ┣ πŸ“œ LICENSE
 ┣ πŸ“œ lighthouserc.js
 ┣ πŸ“œ next.config.js
 ┣ πŸ“œ package.json
 ┣ πŸ“œ README.md
 ┣ πŸ“œ tsconfig.json
 β”— πŸ“œ yarn.lock