Skip to content

๐Ÿ’ป ๊ธฐ์ˆ  ์Šคํƒ & ์•„ํ‚คํ…์ฒ˜

choiseona edited this page Dec 5, 2024 · 2 revisions
Category Stack

Common

Frontend

Backend

Deployment

Collaboration

1. ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €

// ... ์ž๋ฃŒ ์ • ๋ฆฌ ์ค‘ ...

2. ํ”„๋ก ํŠธ์—”๋“œ (FE) ๊ธฐ์ˆ  ์Šคํƒ

๊ธฐ์ˆ  ๋ฒ”์ฃผ ์„ ์ •๋œ ๊ธฐ์ˆ  ์ด์œ 
TS/JS TypeScript - ํƒ€์ž… ์ •์˜๋กœ ์ธํ•ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜ ๋ฐฉ์ง€
- ํ˜‘์—… ์‹œ API ์Šคํ‚ค๋งˆ ๋“ฑ ํ•„์š”ํ•œ ํƒ€์ž… ๋ฏธ๋ฆฌ ์ •์˜ โžก๏ธ ํšจ์œจ์„ฑ ์ฆ๋Œ€
ํ”„๋ ˆ์ž„์›Œํฌ React - SSR์ด ํ•„์š” ์—†๋Š” ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์ƒ React ์„ ํƒ
- ํ•„์š” ์‹œ ๋ฉ”์ธํŽ˜์ด์ง€์—๋งŒ SEO ์ ์šฉ ์˜ˆ์ •
๋ฒˆ๋“ค๋Ÿฌ Vite - ๋น ๋ฅธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋‹จ์ถ•
- ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์› ๋ฐ ๋ฐฉ๋Œ€ํ•ด์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ณ„
CSS Tailwind CSS - ์ง๊ด€์ ์ธ ๋””์ž์ธ ์ ์šฉ๊ณผ ๋น ๋ฅธ ๊ตฌ์ถ• ๊ฐ€๋Šฅ
- cva, clsx, twMerge ์‚ฌ์šฉ์œผ๋กœ ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์šฉ์ด
์ƒํƒœ ๊ด€๋ฆฌ (ํด๋ผ์ด์–ธํŠธ) Zustand - ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” React ํ›…๋งŒ์œผ๋กœ๋Š” ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๋Š” ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…
- Recoil์€ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๊ณ , Redux๋Š” ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊ณผ ํฐ ํŒจํ‚ค์ง€ ํฌ๊ธฐ๋กœ ์ธํ•ด ์ œ์™ธ
- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌ๊ธฐ ๋น„๊ต์—์„œ Zustand(2.9kB)์™€ Jotai(13.1kB)๋กœ ์ขํ˜€์กŒ์œผ๋‚˜ Flux ํŒจํ„ด์ด ์ต์ˆ™ํ•œ Zustand๋กœ ๊ฒฐ๋ก 
- Flux ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zustand๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์ ธ๋„ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด, ์žฅ๊ธฐ์  ๊ด€์ ์—์„œ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ์„ ํƒ
์ƒํƒœ ๊ด€๋ฆฌ (์„œ๋ฒ„) React Query - ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด React Query ๋„์ž…์„ ๊ณ ๋ ค
- ํ”„๋กœ์ ํŠธ์˜ ํŠน์„ฑ์ƒ ์„œ๋ฒ„์™€์˜ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋ฐ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์ด ์ค‘์š”ํ•˜๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ปค์Šคํ…€ ํ›… ๋ฐ ์ „์—ญ ์ƒํƒœ ๊ตฌํ˜„ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ ์ž ํ•จ
- ์ œํ•œ๋œ ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ๋‚ด์— ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด React Query์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์ด ์œ ์šฉํ•˜๋‹ค๊ณ  ํŒ๋‹จ
- React Query์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ, SWR์€ ๋” ์„ธ๋ฐ€ํ•œ ๋ Œ๋”๋ง ์ œ์–ด๋ฅผ ์œ„ํ•ด ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์ถ”๊ฐ€์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จ
ํ…Œ์ŠคํŠธ X - ์‹œ๊ฐ„ ์ œํ•œ๊ณผ UI/DOM ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ ํŠน์„ฑ์ƒ ๋„์ž…ํ•˜์ง€ ์•Š์Œ
- ์ถ”ํ›„ ๋ณต์žกํ•œ ์ปค์Šคํ…€ ํ›…/ํ•จ์ˆ˜๊ฐ€ ์ƒ๊ธธ ์‹œ ๋„์ž… ๊ฒ€ํ† 
์ปดํฌ๋„ŒํŠธ ๋ฌธ์„œํ™” Storybook - UI/UX ํ™•์ธ ๋ฐ ํ…Œ์ŠคํŠธ & ์ปดํฌ๋„ŒํŠธ ๋ฌธ์„œํ™” ๊ฐ€๋Šฅ

์• ๋‹ˆ๋ฉ”์ด์…˜: ๊ธฐ๋ณธ์ ์œผ๋กœ CSS ์‚ฌ์šฉ, ํ•„์š” ์‹œ Framer Motion ์‚ฌ์šฉ


3. ๋ฐฑ์—”๋“œ (BE) ๊ธฐ์ˆ  ์Šคํƒ

๊ธฐ์ˆ  ๋ฒ”์ฃผ ์„ ์ •๋œ ๊ธฐ์ˆ  ์ด์œ 
ํ”„๋ ˆ์ž„์›Œํฌ Nest.JS - ๋‚ด์žฅ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ ์ฆ๊ฐ€
- ์˜์กด์„ฑ ์ฃผ์ž…(DI)๊ณผ ๋ชจ๋“ˆํ™”๋กœ ํ…Œ์ŠคํŠธ ์šฉ์ด
- ์Šค์›จ๊ฑฐ ์ž๋™ ๋ฌธ์„œํ™” ๋ฐ DTO ์ •์˜ + ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์šฉ์ด
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค MySQL, Redis - ํ”„๋กœ์ ํŠธ์˜ ์‹ค์‹œ๊ฐ„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ฒŒ์ž„ ํŠน์„ฑ์— ๋งž์ถฐ, MySQL์€ ๋ฌธ์ œ ์ œ์‹œ์–ด์™€ ๊ฐ™์€ ์˜๊ตฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ
- Redis๋Š” ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์—ฌ ๊ฒŒ์ž„๋ฐฉ ์ •๋ณด, ์ ์ˆ˜, ์ƒํƒœ ๋“ฑ์˜ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…
- Redis์˜ TTL ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์ข…๋ฃŒ๋œ ๊ฒŒ์ž„๋ฐฉ์„ ์ž๋™ ์ •๋ฆฌํ•˜๋ฉฐ, Redis์˜ ๋‹จ์ˆœํ•œ key-value ๊ตฌ์กฐ๋กœ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•จ

4. ์ฝ”๋“œ ์Šคํƒ€์ผ

๊ธฐ์ˆ  ๋ฒ”์ฃผ ์„ ์ •๋œ ๊ธฐ์ˆ  ์„ค๋ช…
JSX ์ฝ”๋“œ formatter ESlint - Airbnb - ์ฝ”๋“œ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ดˆ๊ธฐ์—๋Š” ๊ทœ์น™์„ ํƒ€์ดํŠธํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ธฐ๋กœ ํ•จ
- ๊ฐœ๋ฐœ ์ง„ํ–‰ ์ค‘ ํŒ€์› ๊ฐ„์˜ ํ•ฉ์˜์— ๋”ฐ๋ผ ๊ทœ์น™์„ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ฝ”๋“œ ์ •๋ฆฌ์— ๋” ์šฉ์ดํ•  ๊ฒƒ์œผ๋กœ ํŒ๋‹จ
์ „์ฒด ์ฝ”๋“œ formatter Prettier - ์ฝ”๋“œ ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ

5. ๊ธฐํƒ€ ์„ค์ •

  • TypeDoc ๋ฌธ์„œํ™” & Github Action์œผ๋กœ ๋ฐฐํฌ
  • clsx ์‚ฌ์šฉ ๊ฒ€ํ†  (๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์‹œ ์œ ์šฉ)
  • alias ์„ค์ • (@๋กœ ์ ‘๊ทผ)
  • husky ์„ค์ • (Git Hook ์„ค์ • & ESLint์™€ prettier ๊ฒ€์‚ฌ)

๐Ÿ˜Ž ์›จ๋ฒ ๋ฒ ๋ฒ ๋ฒฑ

๐Ÿ‘ฎ๐Ÿป ํŒ€ ๊ทœ์น™

๐Ÿ’ป ํ”„๋กœ์ ํŠธ

๐Ÿชต ์›จ๋ฒ ๋ฒฑ ๊ธฐ์ˆ ๋กœ๊ทธ

๐Ÿช„ ๋ฐ๋ชจ ๊ณต์œ 

๐Ÿ”„ ์Šคํ”„๋ฆฐํŠธ ๊ธฐ๋ก

๐Ÿ“— ํšŒ์˜๋ก

Clone this wiki locally