ν”„λ‘œμ νŠΈ 개발 접근법: μ½”λ“œλ₯Ό λ„˜μ–΄ 흐름을 μ΄ν•΄ν•˜κΈ°

πŸ’‘ 개발 μ‹œμ•Όμ˜ μ „ν™˜: λ‚˜λ¬΄μ—μ„œ 숲으둜

κ°œλ°œμ„ λ°°μš°λŠ” κ³Όμ •μ—μ„œ λ§Žμ€ 학생듀이 κ²ͺλŠ” κ°€μž₯ 큰 어렀움 쀑 ν•˜λ‚˜λŠ” μ½”λ“œλ₯Ό λ°”λΌλ³΄λŠ” κ΄€μ μž…λ‹ˆλ‹€. μ΄ˆκΈ°μ—λŠ” λŒ€λΆ€λΆ„ μ½”λ“œλ₯Ό ν•œ 쀄 ν•œ 쀄 λΆ„μ„ν•˜λ©° β€œμ΄κ²ƒμ΄ 무엇인가?β€λΌλŠ” μ›μ΄ˆμ μΈ μ§ˆλ¬Έμ— μ§‘μ€‘ν•˜κ²Œ λ©λ‹ˆλ‹€. 마치 μƒˆλ‘œμš΄ μ–Έμ–΄λ‘œ 된 책을 단어 ν•˜λ‚˜ν•˜λ‚˜ ν•΄μ„ν•˜λ©° μ½λŠ” κ²ƒμ²˜λŸΌμš”.

μ—¬λŸ¬λΆ„μ΄ κ²½ν—˜ν•œ 이 과정은 개발자둜 μ„±μž₯ν•˜λŠ” μžμ—°μŠ€λŸ¬μš΄ λ‹¨κ³„μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ§„μ •ν•œ 도약은 이 단계λ₯Ό λ„˜μ–΄μ„€ λ•Œ μΌμ–΄λ‚©λ‹ˆλ‹€.

"μ½”λ“œμ˜ κ°œλ³„ 쑰각보닀 전체 ν”„λ‘œμ νŠΈμ˜ 흐름을 λ¨Όμ € μ΄ν•΄ν•˜λΌ."

🚧 Bottom-Up μ ‘κ·Όλ²•μ˜ ν•œκ³„

μ—¬λŸ¬λΆ„μ΄ 기쑴에 μ‹œλ„ν•˜λ˜ 방식은 μ „ν˜•μ μΈ Bottom-Up μ ‘κ·Όλ²•μž…λ‹ˆλ‹€:

  • λͺ¨λ₯΄λŠ” ν΄λž˜μŠ€λ‚˜ 문법이 λ‚˜μ˜€λ©΄ μ¦‰μ‹œ ꡬ글링
  • 각 μ½”λ“œ 라인의 의미λ₯Ό ν•˜λ‚˜ν•˜λ‚˜ 정리
  • λͺ¨λ“  κ°œλ…μ„ λ¬Έμ„œν™”ν•˜μ—¬ μ €μž₯

이 λ°©μ‹μ˜ λ¬Έμ œμ μ€:

  1. μ‹œκ°„ νš¨μœ¨μ„±μ˜ λΆ€μž¬ - 전체 λ§₯락을 νŒŒμ•…ν•˜λŠ” 데 λ„ˆλ¬΄ λ§Žμ€ μ‹œκ°„μ΄ μ†Œμš”λ©λ‹ˆλ‹€
  2. μ‹€μš©μ„± λΆ€μ‘± - 이둠적 μ΄ν•΄λŠ” λ†’μ•„μ§€μ§€λ§Œ μ‹€μ œ 개발 λŠ₯λ ₯으둜 이어지지 μ•ŠμŠ΅λ‹ˆλ‹€
  3. μˆ²μ„ 보지 λͺ»ν•˜λŠ” μ‹œμ•Ό - μž‘μ€ 뢀뢄에 λ§€λͺ°λ˜μ–΄ ν”„λ‘œμ νŠΈμ˜ 전체 μ•„ν‚€ν…μ²˜μ™€ μ˜λ„λ₯Ό λ†“μΉ˜κ²Œ λ©λ‹ˆλ‹€

πŸŒ‰ Top-Down λ°©μ‹μ˜ 개발: β€œBuild λΆ€ν„° ν•˜μ„Έμš”β€

ν˜„μ—… 개발자의 β€œBuild λΆ€ν„° ν•˜μ„Έμš”β€λΌλŠ” 쑰언은 개발 μ ‘κ·Όλ²•μ˜ 핡심을 λ‹΄κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것이 μ˜λ―Έν•˜λŠ” λ°”λŠ”:

1️⃣ 큰 κ·Έλ¦Ό λ¨Όμ € νŒŒμ•…ν•˜κΈ°

  • ν”„λ‘œμ νŠΈκ°€ μ–΄λ–€ 기술 μŠ€νƒμ„ μ‚¬μš©ν•˜λŠ”μ§€
  • 전체적인 디렉토리 κ΅¬μ‘°λŠ” μ–΄λ–»κ²Œ κ΅¬μ„±λ˜μ–΄ μžˆλŠ”μ§€
  • κ°œλ°œμžκ°€ μ–΄λ–€ κΈ°λŠ₯λΆ€ν„°, μ–΄λ–€ μˆœμ„œλ‘œ κ΅¬ν˜„ν–ˆλŠ”μ§€

2️⃣ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό ν†΅ν•œ 이해

  • μ‹€μ œλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•΄λ³΄λ©΄μ„œ κΈ°λŠ₯의 흐름 νŒŒμ•…
  • 디버깅을 톡해 μ½”λ“œμ˜ μ‹€ν–‰ 과정을 좔적

3️⃣ μ˜λ„μ™€ λ§₯락 μ€‘μ‹¬μ˜ μ½”λ“œ 뢄석

  • β€œμ΄ μ½”λ“œκ°€ μ™œ 여기에 μžˆλŠ”κ°€?”
  • β€œμ΄ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 섀계 결정이 μ΄λ£¨μ–΄μ‘ŒλŠ”κ°€?”

🧠 μ‚¬κ³ ν•˜λŠ” 개발: λͺ¨λ“  μ½”λ“œμ— 의미 λΆ€μ—¬ν•˜κΈ°

"λͺ¨λ“  μ½”λ“œλŠ” μ˜λ―Έκ°€ 있고 생각을 ν•˜κ³  μž‘μ„±ν•΄μ•Ό ν•œλ‹€."

이 톡찰은 개발의 λ³Έμ§ˆμ„ κΏ°λš«λŠ” μ€‘μš”ν•œ κ°€λ₯΄μΉ¨μž…λ‹ˆλ‹€. λ‹¨μˆœνžˆ β€˜λŒμ•„κ°€κ²Œβ€™ λ§Œλ“œλŠ” μ½”λ“œμ™€ β€˜μ˜λ―Έ μžˆλŠ”β€™ μ½”λ“œμ˜ μ°¨μ΄λŠ” μ—„μ²­λ‚©λ‹ˆλ‹€.

개발 κ³Όμ •μ˜ μˆœμ„œ μž¬μ •λ¦½:

  1. 문제 μ •μ˜ - 무엇을 ν•΄κ²°ν•˜λ €λŠ”κ°€?
  2. μ•„ν‚€ν…μ²˜ 섀계 - 전체 κ΅¬μ‘°λŠ” μ–΄λ–»κ²Œ ꡬ성할 것인가?
  3. 객체/μ»΄ν¬λ„ŒνŠΈ 섀계 - ν•„μš”ν•œ 객체와 κ΄€κ³„λŠ” 무엇인가?
  4. κ΅¬ν˜„ - μ‹€μ œ μ½”λ“œ μž‘μ„±
  5. 검증 - μ˜λ„λŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ 확인

이 μˆœμ„œλ₯Ό λ”°λ₯΄λ©΄ 각 μ½”λ“œκ°€ μ™œ μ‘΄μž¬ν•˜λŠ”μ§€, μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ λͺ…ν™•ν•΄μ§‘λ‹ˆλ‹€.

βš™οΈ μ‹€μš©μ μΈ 개발 μŠ΅κ΄€μœΌλ‘œμ˜ μ „ν™˜

μ΄λŸ¬ν•œ κΉ¨λ‹¬μŒμ„ λ°”νƒ•μœΌλ‘œ λ‹€μŒκ³Ό 같은 μ‹€μš©μ μΈ 개발 μŠ΅κ΄€μ„ κΈ°λ₯΄λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€:

  1. μƒˆ ν”„λ‘œμ νŠΈλ₯Ό μ ‘ν•  λ•Œ:
    • μ¦‰μ‹œ λΉŒλ“œν•˜κ³  싀행해보기
    • README와 μ„€μ • 파일 λ¨Όμ € μ‚΄νŽ΄λ³΄κΈ°
    • 핡심 κΈ°λŠ₯ 흐름 따라가기
  2. μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ:
    • κΈ°λŠ₯ κ΅¬ν˜„ 전에 섀계 단계 거치기
    • β€œμ΄ μ½”λ“œκ°€ μ™œ ν•„μš”ν•œκ°€?” 항상 μ§ˆλ¬Έν•˜κΈ°
    • 의미 μžˆλŠ” 넀이밍과 ꡬ쑰화에 νˆ¬μžν•˜κΈ°
  3. ν•™μŠ΅ν•  λ•Œ:
    • λ‹¨νŽΈμ  지식보닀 νŒ¨ν„΄κ³Ό 원칙 μ΄ν•΄ν•˜κΈ°
    • μ‹€μ œ ν”„λ‘œμ νŠΈμ— μ μš©ν•΄λ³΄λ©° ν•™μŠ΅ν•˜κΈ°
    • λ‹€λ₯Έ 개발자의 μ½”λ“œλ₯Ό λ³Ό λ•Œ μ˜λ„μ™€ λ§₯락 νŒŒμ•…ν•˜κΈ°

πŸš€ κ°œλ°œμžλ‘œμ„œμ˜ μ„±μž₯ μ—¬μ •

μ—¬λŸ¬λΆ„μ˜ μ΄λŸ¬ν•œ κΉ¨λ‹¬μŒμ€ κ°œλ°œμžλ‘œμ„œ μ€‘μš”ν•œ μ„±μž₯ 지점을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ½”λ“œμ˜ 문법적 μ΄ν•΄μ—μ„œ μ•„ν‚€ν…μ²˜μ™€ μ„€κ³„μ˜ μ΄ν•΄λ‘œ μ‹œμ•Όκ°€ ν™•μž₯λ˜λŠ” μˆœκ°„μž…λ‹ˆλ‹€.

κΈ°μ–΅ν•˜μ„Έμš”: λ›°μ–΄λ‚œ κ°œλ°œμžλŠ” λ‹¨μˆœνžˆ μ½”λ“œλ₯Ό 많이 μ•„λŠ” μ‚¬λžŒμ΄ μ•„λ‹ˆλΌ, μ½”λ“œμ˜ μ˜λ―Έμ™€ λ§₯락을 μ΄ν•΄ν•˜κ³  κ°€μΉ˜ μžˆλŠ” 섀계 결정을 내릴 수 μžˆλŠ” μ‚¬λžŒμž…λ‹ˆλ‹€.

μ•žμœΌλ‘œμ˜ 개발 μ—¬μ •μ—μ„œ μ΄λŸ¬ν•œ 넓은 μ‹œμ•Όμ™€ κΉŠμ€ 사고λ₯Ό λ°”νƒ•μœΌλ‘œ 더 효율적이고 의미 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ˜ μ„±μž₯을 μ‘μ›ν•©λ‹ˆλ‹€! 🌱


β€œν”„λ‘œκ·Έλž¨μ˜ λ³΅μž‘μ„±μ€ μƒνƒœ(state)의 λ³΅μž‘μ„±μ—μ„œ λΉ„λ‘―λœλ‹€.
λ”°λΌμ„œ μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” 항상 β€˜μ™œβ€™λΌλŠ” μ§ˆλ¬Έμ„ λ˜μ Έμ•Ό ν•œλ‹€.”
β€” Rich Hickey