[DevCamp] ๐Ÿงฑ ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌ์กฐ ์„ค๊ณ„ ๊ฐ€์ด๋“œ

๋™๊ฑดยท2025๋…„ 5์›” 30์ผ

DevCamp

๋ชฉ๋ก ๋ณด๊ธฐ
76/85

๐Ÿงฑ ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌ์กฐ ์„ค๊ณ„ ๊ฐ€์ด๋“œ

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์€ ๋‹จ์ˆœํžˆ UI๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ๋„˜์–ด, ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•œ ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.

์˜ค๋Š˜์€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๊ณ ๋ฏผํ•ด์•ผ ํ• 
FE ๊ตฌ์กฐ ์„ค๊ณ„์˜ ํ•ต์‹ฌ ํฌ์ธํŠธ์™€ ๋””๋ ‰ํ† ๋ฆฌ ์„ค๊ณ„ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณธ๋‹ค.


๐Ÿ“Œ ๊ตฌ์กฐ ์„ค๊ณ„์˜ ์ค‘์š”์„ฑ

  • ํ˜‘์—… ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ: ๋ˆ„๊ตฌ๋‚˜ ๋น ๋ฅด๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋„๋ก
  • ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด: ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋‚˜ ์ˆ˜์ • ์‹œ ์ตœ์†Œํ•œ์˜ ์˜ํ–ฅ์œผ๋กœ ์ž‘์—… ๊ฐ€๋Šฅ
  • ์žฌ์‚ฌ์šฉ์„ฑ ํ™•๋ณด: ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ, ์œ ํ‹ธ ํ•จ์ˆ˜ ๋“ฑ์„ ์ž˜ ์ •๋ฆฌํ•ด ๋ฐ˜๋ณต ๊ฐœ๋ฐœ ๋ฐฉ์ง€

๐Ÿ“ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ์˜ˆ์‹œ (React ๊ธฐ์ค€)

src/
โ”œโ”€โ”€ assets/         # ์ด๋ฏธ์ง€, ํฐํŠธ ๋“ฑ ์ •์  ์ž์›
โ”œโ”€โ”€ components/     # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ UI ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ pages/          # ๋ผ์šฐํŠธ ๋‹จ์œ„ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ hooks/          # ์ปค์Šคํ…€ ํ›…
โ”œโ”€โ”€ utils/          # ์œ ํ‹ธ ํ•จ์ˆ˜, ํ—ฌํผ ๋ชจ์Œ
โ”œโ”€โ”€ services/       # API ํ˜ธ์ถœ ํ•จ์ˆ˜
โ”œโ”€โ”€ store/          # ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ (Redux, Zustand ๋“ฑ)
โ”œโ”€โ”€ constants/      # ์ƒ์ˆ˜, Enum, ์„ค์ • ๊ฐ’
โ”œโ”€โ”€ types/          # TypeScript ํƒ€์ž… ์„ ์–ธ
โ”œโ”€โ”€ layouts/        # ๊ณตํ†ต ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ
โ””โ”€โ”€ App.tsx         # ์•ฑ ์ง„์ž…์ 

๐Ÿงฉ ํด๋”๋ณ„ ์—ญํ•  ์ •๋ฆฌ

1. components/

  • ์ตœ์†Œ ๋‹จ์œ„ UI ๋‹จ์œ„ (Button, Modal ๋“ฑ)
  • ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์บก์Аํ™” ๊ณ ๋ คํ•˜์—ฌ ๋ถ„๋ฆฌ

2. pages/

  • ๋ผ์šฐํŒ…๊ณผ ๋ฐ€์ ‘ํ•œ ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ปดํฌ๋„ŒํŠธ
  • ๊ฐ ํŽ˜์ด์ง€๋ณ„ ํด๋” ์ƒ์„ฑ ํ›„ index.tsx๋กœ ๊ตฌ์„ฑ

3. services/

  • axios ๋“ฑ์œผ๋กœ API ํ†ต์‹  ํ•จ์ˆ˜ ์ •๋ฆฌ
  • ์‘๋‹ต ํƒ€์ž…์€ types/์—์„œ ์ •์˜ ํ›„ import

4. hooks/

  • ๋ณต์žกํ•œ ์ƒํƒœ๋‚˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋ง์„ ์ปค์Šคํ…€ ํ›…์œผ๋กœ ์ถ”์ƒํ™”

5. store/

  • Redux, Zustand ๋“ฑ ์ƒํƒœ ๊ด€๋ฆฌ ํˆด ์ ์šฉ
  • slice ๋‹จ์œ„๋กœ ํŒŒ์ผ ๊ตฌ์„ฑ

๐Ÿ› ๏ธ ์‹ค์ „ ํŒ

  • ๋ผ์šฐํ„ฐ์™€ ํŽ˜์ด์ง€ ๊ตฌ์กฐ๋Š” 1:1๋กœ ๋งคํ•‘ํ•˜๋ฉด ์ถ”์ ์ด ์‰ฝ๋‹ค
  • atomic design ๋„์ž… ์‹œ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„ ์ •๋ฆฌ๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
  • ํŒ€์—์„œ ๊ตฌ์กฐ๋ฅผ ์ •ํ•œ ๋’ค wiki ๋“ฑ์— ์ •์˜ํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
  • ์ปดํฌ๋„ŒํŠธ/ํ›…/์„œ๋น„์Šค ๋“ฑ์€ index.ts๋กœ export ์ •๋ฆฌํ•˜๋ฉด import ๊ฐ„๊ฒฐํ™” ๊ฐ€๋Šฅ

๐Ÿ”จ TIL

  • ๊ตฌ์กฐ๋Š” ํ•œ ๋ฒˆ์— ์™„๋ฒฝํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ”„๋กœ์ ํŠธ์˜ ํ๋ฆ„์— ๋”ฐ๋ผ ์ง„ํ™”์‹œ์ผœ์•ผ ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ณด๋‹ค ๋” ์ค‘์š”ํ•œ ๊ฒƒ์ด ๊ตฌ์กฐ๋ฅผ ์ง€ํ‚ค๋ฉฐ ํ™•์žฅํ•˜๋Š” ๋Šฅ๋ ฅ์ด๋‹ค.
  • ์ดˆ๊ธฐ ์„ค๊ณ„์— ์‹œ๊ฐ„์„ ์“ฐ๋Š” ๊ฒƒ์ด ์žฅ๊ธฐ์ ์œผ๋กœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๋Š” ์ง€๋ฆ„๊ธธ์ž„์„ ๋‹ค์‹œ ๋А๊ผˆ๋‹ค.
profile
๋ฐฐ๊ณ ํ”ˆ ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€