๐ŸŒฑ ๋””๋ ‰ํ† ๋ฆฌ ์„ค๊ณ„ ๊ธฐ์ค€ ๊ณ ๋ฏผ

MIloยท2025๋…„ 10์›” 31์ผ

FE_์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

๐Ÿ” ์‹œ์ž‘: ๊ตฌ์กฐ๋ฅผ ์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ... ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๊ฒ ์„ ๋•Œ

์ฒ˜์Œ์—๋Š” ๋„ˆ๋ฌด ๋ง‰๋ง‰ํ–ˆ๋‹ค.

  • ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜๋ˆ ์•ผ ํ•˜๋Š”์ง€๋„ ๋ชฐ๋ž๊ณ ,
  • ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์จ์•ผ ํ• ์ง€๋„ ๊ฐ์ด ์—†์—ˆ๋‹ค.
  • ๋ฌด์ž‘์ • ๋”ฐ๋ผํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜๊ณ , ๋‚ด ๊ธฐ์ค€์œผ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

์ด ๊ณผ์ •์€ ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ  ์„ ํƒ์ด ์•„๋‹ˆ๋ผ
"๋‚˜๋งŒ์˜ ์‚ฌ๊ณ  ๊ธฐ์ค€์„ ์„ธ์šฐ๋Š” ๊ณผ์ •"์ด์—ˆ๊ณ , ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์กฐ๊ธˆ์”ฉ ์ƒ๊ฐ์ด ์ •๋ฆฌ๋˜์—ˆ๋‹ค.


๐Ÿง  ๊ธฐ์ค€์„ ์ฐพ๊ธฐ ์œ„ํ•œ 5๊ฐ€์ง€ ์งˆ๋ฌธ๊ณผ ๋‚˜์˜ ๋‹ต

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์—๋Š” ์ •๋‹ต์ด ์—†์ง€๋งŒ, "๋‚˜๋งŒ์˜ ๊ธฐ์ค€"์€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1. ๋‚ด๊ฐ€ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€ ๋‹จ์œ„๋Š” ๋ฌด์—‡์ธ๊ฐ€?

โœ… ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค.

  • ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” UI๋งŒ, ๋˜๋Š” ๋กœ์ง๋งŒ, ๋˜๋Š” ๋‘˜ ๋‹ค ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ = ํ•˜๋‚˜์˜ ํด๋”๋กœ ๋‘๊ณ ,
    index.jsx, UI.jsx, logic.js, style.js์ฒ˜๋Ÿผ ๋‚ด๋ถ€ ๋ถ„๋ฆฌ.

2. ์ƒํƒœ๋Š” ์–ด๋””์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ถ์€๊ฐ€?

โœ… ์ตœ๋Œ€ํ•œ ์ˆœ์ˆ˜ํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ ์ง€ํ•˜๊ณ , ์ƒํƒœ๋Š” ์ƒ์œ„์—์„œ prop์œผ๋กœ๋งŒ ์ „๋‹ฌ.

  • ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“  ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋งˆ์น˜ ๋ ˆ๊ณ  ์กฐ๊ฐ์ฒ˜๋Ÿผ, ์—ฐ๊ฒฐ๋งŒ ํ•ด์ฃผ๋ฉด ์ž˜ ๋™์ž‘ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•œ๋‹ค.

3. ์–ผ๋งˆ๋‚˜ ์žฌ์‚ฌ์šฉํ•  ๊ฒƒ ๊ฐ™์€๊ฐ€?

โœ… ์ง€๊ธˆ์€ ์ž์ฃผ ์žฌ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ,
์ˆœ์ˆ˜ํ•˜๊ฒŒ ์„ค๊ณ„ํ•˜๋ฉด ๋‚˜์ค‘์— ์–ธ์ œ๋“  ์กฐ๋ฆฝํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ๋ž˜์„œ ๋ฌด์กฐ๊ฑด ์ฒ˜์Œ์—” core ํด๋”์— ๋„ฃ๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.

4. ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ดค์„ ๋•Œ ๊ตฌ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•˜๊ธธ ์›ํ•˜๋Š”๊ฐ€?

โœ… ์ „์ฒด ๊ตฌ์กฐ๋Š” ์กฐ๋ฆฝ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.

  • core: ์ง„์งœ ๋ ˆ๊ณ  ๋ถ€ํ’ˆ
  • units: ์กฐ๋ฆฝ๋œ ๊ธฐ๋Šฅ ๋‹จ์œ„
  • views: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์ด๋Š” ์™„์„ฑ ํ™”๋ฉด
  • ๊ตฌ์กฐ ํ๋ฆ„์€ views โ†’ units โ†’ core๋กœ ๋‚ด๋ ค๊ฐ„๋‹ค.

5. ๋‚ด๊ฐ€ ๋‚˜์ค‘์— ๋ด๋„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

โœ… YES.

  • ๋ช…ํ™•ํ•œ ๊ณ„์ธต, ๋ช…ํ™•ํ•œ ์ฑ…์ž„ ๋ถ„๋ฆฌ
  • ์ƒ์œ„ ๊ตฌ์กฐ๋งŒ ๋ณด๋ฉด ํ๋ฆ„์ด ๋ณด์ด๊ณ , ํ•˜์œ„ ๊ตฌ์กฐ๋Š” ๊ทธ ๊ธฐ๋Šฅ์˜ ์„ธ๋ถ€๋กœ๋งŒ ์ง‘์ค‘๋˜์–ด ์žˆ์Œ

โš™๏ธ ์•„ํ‚คํ…์ฒ˜ ์ฒ ํ•™: ์ˆœ์ˆ˜ํ•œ ๋ ˆ๊ณ ๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ๋ฐฉ์‹

ํ•ต์‹ฌ ์›์น™

| ํ•ญ๋ชฉ | ์ฒ ํ•™ |
|------|------|
| ๐ŸŽฏ ๊ธฐ๋ณธ ๋‹จ์œ„ | **๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” core์—์„œ ์‹œ์ž‘** |
| ๐Ÿงผ ์ƒํƒœ ๋ถ„๋ฆฌ | ์ƒํƒœ๋Š” core์—์„œ ๋‹ค๋ฃจ์ง€ ์•Š์Œ |
| ๐Ÿงฉ ์กฐ๋ฆฝ ์›์น™ | `units`์—์„œ `core`๋ฅผ ์กฐํ•ฉํ•ด์„œ ๊ธฐ๋Šฅ ๋ถ€์—ฌ |
| ๐Ÿ”Œ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• | ์ƒ์œ„์—์„œ prop์œผ๋กœ ๋กœ์ง ์ „๋‹ฌ (composition) |
| ๐Ÿ“ ํ™•์žฅ ๊ตฌ์กฐ | ํ•„์š”ํ•  ๊ฒฝ์šฐ core โ†’ units โ†’ views ๋‹จ๊ณ„๋ณ„ ์กฐ๋ฆฝ |

๐Ÿ“ ๊ตฌ์กฐ ์Šค์ผ€์น˜

src/
โ”œโ”€โ”€ core/         # ์ˆœ์ˆ˜ํ•œ ๋ ˆ๊ณ  ๋ถ€ํ’ˆ๋“ค (UI๋งŒ ๋‹ด๋‹น)
โ”œโ”€โ”€ units/        # ๋ ˆ๊ณ  ์กฐํ•ฉํ•œ ์ค‘๊ฐ„ ๊ธฐ๋Šฅ๋“ค
โ”œโ”€โ”€ views/        # ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ hooks/        # ๋กœ์ง์šฉ ์ปค์Šคํ…€ ํ›…
โ”œโ”€โ”€ utils/        # format, ๊ณ„์‚ฐ ๋“ฑ ์œ ํ‹ธ
โ”œโ”€โ”€ constants/    # ์นดํ…Œ๊ณ ๋ฆฌ, ์ƒ‰์ƒ ์ƒ์ˆ˜ ๋“ฑ
โ””โ”€โ”€ main.jsx

๐Ÿ“Œ ํ”ผ๊ทธ๋งˆ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•œ core ์ปดํฌ๋„ŒํŠธ ํ›„๋ณด

  • DateInput, AmountInput, CategorySelect, PaymentSelect
  • SwitchButton, Button, Modal, Dropdown
  • TransactionItemDisplay, AmountText, CategoryTag
  • CalendarCell, StatsRow, MiniBarGraph

โ†’ ์ด๋“ค์€ ๋กœ์ง ์—†์ด UI๋งŒ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ core์— ์œ„์น˜


โœจ ์ด ๊ธฐ๋ก์„ ์™œ ๋‚จ๊ธฐ๋Š”๊ฐ€?

์ด ๋ฌธ์„œ๋Š” ๋‚ด๊ฐ€ ๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค์™€ ํ•ด๊ฒฐ ๊ณผ์ •์˜ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค.

  • ์ฒ˜์Œ์—” ์•„๋ฌด๊ฒƒ๋„ ๋ชฐ๋ž์ง€๋งŒ,
  • ์งˆ๋ฌธํ•˜๊ณ , ์ •๋ฆฌํ•˜๊ณ , ์กฐํ•ฉํ•˜๋ฉฐ
  • ๋‚˜๋งŒ์˜ ๊ธฐ์ค€๊ณผ ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

์–ธ์ œ๋“  ์ด ๊ธฐ์ค€์„ ๋‹ค์‹œ ํ™•์ธํ•˜๋ฉฐ,
๋” ๋‚˜์€ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚ด ์„ค๊ณ„๋ฅผ ๋ฐœ์ „์‹œ์ผœ ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ์ด ๋ฌธ์„œ๋ฅผ ๋‚จ๊ธด๋‹ค.

profile
์•ต๋งน!

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