Skip to content

πŸ”¨ Refactor : ν…ŒμŠ€νŠΈ μ½”λ“œ 폴더 ꡬ쑰 κ°œμ„ Β #278

@jjinheeWorld

Description

@jjinheeWorld

πŸ€ μ–΄λ–€ κΈ°λŠ₯μΈκ°€μš”?

ν˜„μž¬ ν…ŒμŠ€νŠΈ μ½”λ“œ 폴더 ꡬ쑰가 unit 폴더 μ•„λž˜μ— ν›…, μ»΄ν¬λ„ŒνŠΈ, νŽ˜μ΄μ§€ ν…ŒμŠ€νŠΈκ°€ ν˜Όμž¬λ˜μ–΄ μ—­ν• κ³Ό 기쀀이 λͺ¨ν˜Έν•œ μƒνƒœ
ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ„ μœ„ν•΄ 폴더 ꡬ쑰λ₯Ό κΈ°λŠ₯ λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜κ³  μž¬μ •λΉ„ν•¨

βœ… μž‘μ—… 상세 λ‚΄μš©

ν˜„μž¬ 문제점

ν˜„μž¬ ν…ŒμŠ€νŠΈ 폴더 κ΅¬μ‘°λŠ” λ‹€μŒκ³Ό 같이 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

tests/
  unit/
    auth/useLogout.test.tsx      # ν›… ν…ŒμŠ€νŠΈ
    dashboard/dashboard.test.tsx   # μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ
    goals/goals.test.tsx         # μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ

이 κ΅¬μ‘°μ—μ„œ λ°œμƒν•˜λŠ” λ¬Έμ œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • unitμ΄λΌλŠ” 폴더λͺ…이 μ§€λ‚˜μΉ˜κ²Œ 포괄적

    • μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈλ„ unit?
    • ν›… ν…ŒμŠ€νŠΈλ„ unit?
    • νŽ˜μ΄μ§€ ν…ŒμŠ€νŠΈλ„ unit?
  • ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ μ—­ν• κ³Ό μ’…λ₯˜κ°€ λͺ…ν™•ν•˜κ²Œ κ΅¬λΆ„λ˜μ§€ μ•ŠμŒ

    • κΈ°λŠ₯ λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ°ΎκΈ° 어렀움
    • ν…ŒμŠ€νŠΈ μ½”λ“œ μœ„μΉ˜μ— λŒ€ν•œ 기쀀이 λͺ¨ν˜Έν•¨
  • μœ„μ™€ 같은 이유둜 μƒˆλ‘œμš΄ νŒ€μ›μ΄ ν•©λ₯˜ν–ˆμ„ λ•Œ ν…ŒμŠ€νŠΈ νŒŒμΌμ„ 어디에 μž‘μ„±ν•΄μ•Ό ν• μ§€ νŒλ‹¨ν•˜κΈ° 어렀움

  • ν…ŒμŠ€νŠΈ 파일 넀이밍 μ»¨λ²€μ…˜μ΄ μΌκ΄€λ˜μ§€ μ•ŠμŒ

    • μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ 파일λͺ…이 파슀칼 μΌ€μ΄μŠ€μ™€ 카멜 μΌ€μ΄μŠ€κ°€ 혼재
    • 파일λͺ…λ§ŒμœΌλ‘œ ν…ŒμŠ€νŠΈ λŒ€μƒμ΄ 무엇인지 μ§κ΄€μ μœΌλ‘œ νŒŒμ•…ν•˜κΈ° 어렀움
    • μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ 파일λͺ…은 파슀칼 μΌ€μ΄μŠ€λ‘œ 톡일 ν•„μš”

κ°œμ„  λͺ©ν‘œ

  • ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ 역할에 맞게 폴더 ꡬ쑰λ₯Ό λͺ…ν™•νžˆ 뢄리
  • κΈ°λŠ₯(feature) λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ²΄κ³„μ μœΌλ‘œ 관리
  • ν…ŒμŠ€νŠΈ μ½”λ“œ ν™•μž₯ μ‹œμ—λ„ μΌκ΄€λœ ꡬ쑰 μœ μ§€
  • μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ 파일 넀이밍 μ»¨λ²€μ…˜μ„ 파슀칼 μΌ€μ΄μŠ€λ‘œ 톡일

λ³€κ²½ μ˜ˆμ • 폴더 ꡬ쑰

tests/
  β”œβ”€ components/
  β”‚  β”œβ”€ common/                          # 곡톡 μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ
  β”‚  β”‚
  β”‚  └─ features/                        # κΈ°λŠ₯별 ν…ŒμŠ€νŠΈ (μ»΄ν¬λ„ŒνŠΈ + 톡합)
  β”‚     β”œβ”€ dashboard/
  β”‚     β”œβ”€ goals/
  β”‚     β”œβ”€ navigation/
  β”‚     β”œβ”€ notes/
  β”‚     β”‚  β”œβ”€ NoteList.test.tsx          # μ»΄ν¬λ„ŒνŠΈ ν…ŒμŠ€νŠΈ
  β”‚     β”‚  └─ NotesPage.test.tsx         # 톡합 ν…ŒμŠ€νŠΈ
  β”‚     └─ todos/
  β”‚
  β”œβ”€ hooks/                              # μ»€μŠ€ν…€ ν›… ν…ŒμŠ€νŠΈ
  β”‚  └─ auth/
  β”‚     └─ useLogout.test.ts
  β”‚
  β”œβ”€ utils/                              # 순수 ν•¨μˆ˜ ν…ŒμŠ€νŠΈ
  β”‚  └─ validation/
  β”‚
  β”œβ”€ mocks/                              # ν…ŒμŠ€νŠΈμš© mock λͺ¨λ“ˆ
  β”‚
  └─ test-utils.tsx                      # ν…ŒμŠ€νŠΈ 곡톡 μœ ν‹Έλ¦¬ν‹°

파일 이동 및 넀이밍 λ³€κ²½

- list β†’ /components/common

- progress β†’ /components/common
  - progressView.test.tsx β†’ Progress.test.tsx

- dashboard β†’ /components/features
  - dashboard.test.tsx β†’ DashboardPage.test.tsx

- goals β†’ /components/features
  - goals.test.tsx β†’ GoalsPage.test.tsx

- todos β†’ /components/features
  - todos.test.tsx β†’ TodosPage.test.tsx
  - todoFormFile.test.tsx β†’ AttachmentSection.test.tsx
  - todoFormModal.test.tsx β†’ TodoFormContent.test.tsx

- navigation β†’ /components/features
  - navigationLogout.test.tsx β†’ NavigationLogout.test.tsx

πŸ“Œ ETC

μΆ”κ°€μ μœΌλ‘œ μ°Έκ³ ν•΄μ•Ό ν•  사항이 있으면 μž‘μ„±ν•΄μ£Όμ„Έμš”.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions