본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 1: ν…ŒμŠ€νŠΈ 주도 개발의 핡심은 무엇인가?

πŸ“š ν•™μŠ΅ κ³Όμ •μœΌλ‘œμ„œμ˜ μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œβ€‹

  • ν”„λ‘œμ νŠΈκ°€ 성곡을 거두렀면 거기에 κ΄€λ ¨λœ μ‚¬λžŒλ“€μ΄ 달성해야 ν•  λ°”κ°€ 무엇인지λ₯Ό μ΄ν•΄ν•˜κ³  κ·Έ κ³Όμ •μ—μ„œ 잘λͺ» μ΄ν•΄ν•˜κ³  μžˆλŠ” λ°”λ₯Ό μ‹λ³„ν•˜κ³  ν•΄κ²°ν•˜κ³ μž ν˜‘μ—…ν•΄μ•Ό ν•œλ‹€.
  • λΆˆν™•μ‹€ν•œ λ³€ν™”λ₯Ό μ˜ˆμΈ‘ν•˜λ €λ©΄ κ²½ν—˜μ΄ λŠ˜μ–΄λ‚¨μ— 따라 λΆˆν™•μ‹€μ„±μ„ ν•΄κ²°ν•˜λŠ” 데 도움이 될 ν”„λ‘œμ„ΈμŠ€κ°€ ν•„μš”ν•˜λ‹€.

πŸ“š ν”Όλ“œλ°±μ€ κ°€μž₯ 기본적인 도ꡬ닀​

  • νŒ€μ—λŠ” 반볡적인 ν™œλ™ μ£ΌκΈ°κ°€ ν•„μš”ν•˜λ‹€. 각 μ£ΌκΈ°λ§ˆλ‹€ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ³  이미 μ™„λ£Œν•œ μž‘μ—…μ˜ μ–‘κ³Ό μ§ˆμ— κ΄€ν•œ ν”Όλ“œλ°±μ„ 받은닀.
  • νŒ€μ›λ“€μ€ μž‘μ—…μ„ νƒ€μž„ λ°•μŠ€λ‘œ λ‚˜λˆ„κ³ , 이 μ•ˆμ—μ„œ λ˜λ„λ‘ λ§Žμ€ κΈ°λŠ₯을 뢄석, 섀계, κ΅¬ν˜„, λ°°ν¬ν•œλ‹€.
  • μ™„λ£Œλœ μž‘μ—…μ„ 각 μ£ΌκΈ°λ§ˆλ‹€ νŠΉμ • μ’…λ₯˜μ˜ ν™˜κ²½μ— λ°°ν¬ν•˜λŠ” 일은 μ•„μ£Ό μ€‘μš”ν•˜λ‹€. 그듀은 μ‹€μ œ 진행 사황을 μΈ‘μ •ν•˜κ³ , 였λ₯˜λ₯Ό νƒμ§€ν•˜κ³  μˆ˜μ •ν•˜λ©°, μ§€κΈˆκΉŒμ§€ 배운 바에 따라 ν˜„μž¬ κ³„νšμ„ μ‘°μ •ν•  수 μžˆλ‹€. λ°°ν¬ν•˜μ§€ μ•Šκ³ λŠ” ν”Όλ“œλ°±μ΄ 완전해지지 μ•ŠλŠ”λ‹€.
  • 각 ν”Όλ“œλ°± κ³ λ¦¬λŠ” μ‹œμŠ€ν…œκ³Ό 개발 ν”„λ‘œμ„ΈμŠ€μ˜ λ‹€μ–‘ν•œ 츑면을 닀룬닀. μ•ˆμͺ½ κ³ λ¦¬λŠ” 기술적 μ„ΈλΆ€ 사항에 μ’€ 더 μ§‘μ€‘ν•œλ‹€. λ°”κΉ₯μͺ½ κ³ λ¦¬λŠ” 쑰직과 νŒ€μ— μ’€ 더 μ§‘μ€‘ν•œλ‹€.
  • ν”„λ‘œμ νŠΈμ˜ μ–΄λ– ν•œ 츑면에 λŒ€ν•΄μ„œλ„ ν”Όλ“œλ°±μ„ 일찍 λ°›μ„μˆ˜λ‘ μ’‹λ‹€.

πŸ“š λ³€ν™”λ₯Ό λ•λŠ” μ‹€μ²œλ²•β€‹

  • μ‹œμŠ€ν…œ 규λͺ¨λ₯Ό 믿을 수 μžˆλŠ” λ°©μ‹μœΌλ‘œ ν‚€μš°κ³ , 늘 μΌμ–΄λ‚˜λŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ λ³€ν•˜μ— λŒ€μ²˜ν•˜κ³  μ‹Άλ‹€λ©΄ 두 가지 기술적인 ν† λŒ€κ°€ ν•„μš”ν•˜λ‹€.
    1. νšŒκ·€ 였λ₯˜λ₯Ό μž‘μ•„μ€„ κΎΈμ€€ν•œ ν…ŒμŠ€νŠΈκ°€ ν•„μš”ν•˜λ‹€. μˆ˜λ™ ν…ŒμŠ€νŠΈλ₯Ό 자주 ν•˜λŠ” 것은 λΉ„μ‹€μš©μ μ΄λ―€λ‘œ ꡬ좕과 배포, μ‹œμŠ€ν…œ 버전 변경에 λ“œλŠ” λΉ„μš©μ„ 쀄이렀면 λ˜λ„λ‘ ν…ŒμŠ€νŠΈλ₯Ό μžλ™ν™”ν•΄μ•Ό ν•œλ‹€.
    2. λ‹€μŒμœΌλ‘œ μ½”λ“œλ₯Ό κ°€λŠ₯ν•œ ν•œ λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•΄μ•Ό ν•˜λŠ”λ°, κ·Έλ ‡κ²Œ ν•˜λ©΄ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•˜κΈ°κ°€ 더 쉽닀. μ½”λ“œμ˜ 섀계λ₯Ό κ°œμ„ ν•˜κ³  λ‹¨μˆœν™”ν•˜κ³ , 쀑볡을 μ œκ±°ν•˜λ©°, μ½”λ“œκ°€ λͺ…ν™•ν•˜κ²Œ μžμ‹ μ˜ 역할을 ν‘œν˜„ν•˜κ²Œλ” μ½”λ“œλ₯Ό μ‚¬μš©ν•  λ•Œλ§ˆλ‹€ κΎΈμ€€νžˆ μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ν•΄μ•Ό ν•œλ‹€.
  • ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° 전에 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€. μž‘μ—…μ„ μ™„λ£Œν•œ ν›„ μž‘μ—… κ²°κ³Όλ₯Ό κ²€μ¦ν•˜λ €κ³  ν…ŒμŠ€νŠΈλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ•„λ‹ˆλΌ TDDμ—μ„œλŠ” ν…ŒμŠ€νŠΈλ₯Ό 섀계 ν™œλ™μœΌλ‘œ λ°”κΎΌλ‹€. ν…ŒμŠ€νŠΈλ₯Ό μ‚¬μš©ν•΄ μ½”λ“œμ—μ„œ ν•˜κ³  싢은 바에 κ΄€ν•œ 생ㅇ각을 λͺ…ν™•ν•˜κ²Œ ν•œλ‹€.
  • 개발 κ³Όμ • λ‚΄λ‚΄ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€λ©΄ 변경에 λŒ€ν•œ μžμ‹ κ°μ„ μ£ΌλŠ” μžλ™ν™”λœ νšŒκ·€ ν…ŒμŠ€νŠΈλΌλŠ” μ•ˆμ „λ§μ„ ꡬ좕할 수 μžˆλ‹€.

πŸ“š ν…ŒμŠ€νŠΈ 주도 개발 간단 정리​

  • TDD의 핡심 μ£ΌκΈ°λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν•΄λ‹Ή ν…ŒμŠ€νŠΈκ°€ λ™μž‘ν•˜κ²Œ λ§Œλ“€ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€. μ½”λ“œλ₯Ό 가급적 ν…ŒμŠ€νŠΈν•œ κΈ°λŠ₯의 λ‹¨μˆœν•œ κ΅¬ν˜„μœΌλ‘œ λ¦¬νŒ©ν„°λ§ν•œλ‹€. μ΄λŸ¬ν•œ 과정을 λ°˜λ³΅ν•œλ‹€.
  • λ‹€μŒμ€ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν–ˆμ„ λ•Œμ˜ μž₯점이닀.
    • λ‹€μŒ μž‘μ—…μ— λŒ€ν•œ 인수 쑰건이 λͺ…확해진닀.
    • λŠμŠ¨ν•˜κ²Œ κ²°ν•©λœ ꡬ성 μš”μ†Œλ₯Ό μž‘μ„±ν•  수 있게 λ˜μ–΄ 격리된 μƒνƒœμ—μ„œ, 더 높은 μˆ˜μ€€μœΌλ‘œ, λͺ¨λ‘ κ²°ν•©λœ μƒνƒœλ‘œ ꡬ성 μš”μ†Œλ₯Ό μ†μ‰½κ²Œ ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.
    • μ½”λ“œκ°€ ν•˜λŠ” 일에 λŒ€ν•œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ„€λͺ…이 더해진닀.
    • μ™„μ „ν•œ νšŒκ·€ μŠ€μœ„νŠΈκ°€ λŠ˜μ–΄λ‚œλ‹€.
  • λ‹€μŒμ€ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œμ˜ μž₯점이닀.
    • μ½˜ν…μŠ€νŠΈλ₯Ό μ„ λͺ…ν•˜κ²Œ μΈμ§€ν•˜λŠ” λ™μ•ˆ 였λ₯˜λ₯Ό νƒμ§€ν•œλ‹€.
    • μ–Έμ œ μž‘μ—…μ΄ μΆ©λΆ„νžˆ μ™„λ£ŒλλŠ”μ§€ μ•Œκ²Œ λ˜μ–΄ κ³Όλ„ν•œ μ΅œμ ν™”λ₯Ό ν•˜κ±°λ‚˜ λΆˆν•„μš”ν•œ κΈ°λŠ₯을 λ”ν•˜μ§€ μ•Šκ²Œ λœλ‹€.

μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μ—†μ΄λŠ” μƒˆ κΈ°λŠ₯을 μž‘μ„±ν•˜μ§€ 말라.

πŸ“š μ’€ 더 큰 그림​

  • μ–΄λ–€ κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œ 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμœΌλ‘œ μ‹œμž‘ν•œλ‹€. 인수 ν…ŒμŠ€νŠΈλŠ” 그것이 μ‹€νŒ¨ν•˜λŠ” λ™μ•ˆ μ‹œμŠ€ν…œμ΄ μ•„μ§κΉŒμ§€ κ·Έ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 사싀을 보여쀀닀. 인수 ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν•˜λ©΄ μž‘μ—…μ΄ λλ‚œλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλŠ” 보톡 ν˜„μž¬ μž‘μ—… 쀑인 인수 ν…ŒμŠ€νŠΈμ™€ μž‘μ—…μ„ 마친 κΈ°λŠ₯에 λŒ€ν•œ 인수 ν…ŒμŠ€νŠΈλ₯Ό κ΅¬λΆ„ν•œλ‹€.
  • λ‹¨μœˆ ν…ŒμŠ€νŠΈλŠ” μ½”λ“œ ν’ˆμ§ˆμ„ μœ μ§€ν•˜λŠ” 데 도움이 되고 μž‘μ„±ν•œ ν›„μ—λŠ” λ°”λ‘œ 톡화해야 ν•œλ‹€. μ‹€νŒ¨ν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” μ†ŒμŠ€ μ €μž₯μ†Œμ— μ ˆλŒ€ μ»€λ°‹ν•΄μ„œλŠ” μ•ˆ λœλ‹€.

πŸ“š μ „ ꡬ간 ν…ŒμŠ€νŠΈβ€‹

  • μ „ ꡬ간 ν…ŒμŠ€νŠΈλŠ” μ™ΈλΆ€μ—μ„œ μœ μž…λ˜λŠ” μ‹œμŠ€ν…œν•˜κ³ λ§Œ μƒν˜Έ μž‘μš©ν•œλ‹€.
  • 이미 μ•ˆμ •μ μΈ μ „ ꡬ간 ν…ŒμŠ€νŠΈλ₯Ό ν™•λ³΄ν–ˆκ³  개발 속도 ν–₯상이 정말 ν•„μš”ν•˜μ§€ μ•Šλ‹€λ©΄ μ‹œμŠ€ν…œ λ‚΄λΆ€ 객체λ₯Ό μ‹œν—˜ν•˜κΈ°λ§Œ ν•˜λŠ” 인수 ν…ŒμŠ€νŠΈλ₯Ό ν”Όν•˜λ €κ³  λ…Έλ ₯ν•œλ‹€.
  • μ „ ꡬ간 ν…ŒμŠ€νŠΈμ—μ„œ μ‹œμŠ€ν…œκ³Ό ν•΄λ‹Ή μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜κ³  λ°°ν¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό λͺ¨λ‘ μ‹œν—˜ν•˜λŠ” 방식을 μ„ ν˜Έν•œλ‹€.
  • μ‹œμŠ€ν…œμ€ 인수 ν…ŒμŠ€νŠΈκ°€ λͺ¨λ‘ 톡과할 λ•Œ 배포할 수 μžˆλŠ”λ°, 인수 ν…ŒμŠ€νŠΈκ°€ λͺ¨λ“  것이 λ™μž‘ν•˜κ³  μžˆλ‹€λŠ” μΆ©λΆ„ν•œ μžμ‹ κ°μ„ λΆˆμ–΄λ„£μ–΄μ£ΌκΈ° λ•Œλ¬Έμ΄λ‹€.

πŸ“š ν…ŒμŠ€νŠΈμ˜ μˆ˜μ€€β€‹

  • 인수 ν…ŒμŠ€νŠΈ: 전체 μ‹œμŠ€ν…œμ΄ λ™μž‘ν•˜λŠ”κ°€?
  • 톡합 ν…ŒμŠ€νŠΈ: λ³€κ²½ν•  수 μ—†λŠ” μ½”λ“œλ₯Ό λŒ€μƒμœΌλ‘œ μ½”λ“œκ°€ λ™μž‘ν•˜λŠ”κ°€?
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ: 객체가 μ œλŒ€λ‘œ λ™μž‘ν•˜λŠ”κ°€? 객체λ₯Ό μ΄μš©ν•˜κΈ°κ°€ νŽΈλ¦¬ν•œκ°€?
  • 인수 ν…ŒμŠ€νŠΈμ˜ μ—­ν•  κ΅¬ν˜„μ€ μ „ ꡬ간 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” κ²ƒμœΌλ‘œ, μ•Œλ‹€μ‹œν”Ό μ „ ꡬ간 ν…ŒμŠ€νŠΈλŠ” κ°€λŠ₯ν•œ ν•œ μ „ ꡬ간에 걸쳐 이뀄져야 ν•œλ‹€.
  • 일뢀 μ½”λ“œκ°€ λ³€κ²½ν•  수 μ—†λŠ” νŒ€ λ°”κΉ₯의 μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μ΄μš©ν• μ§€ κ²€μ‚¬ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό 가리킬 λ•Œ 톡합 ν…ŒμŠ€νŠΈλΌλŠ” μš©μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€. μ΄λŸ¬ν•œ μ½”λ“œλŠ” 곡용 ν”„λ ˆμž„μ›Œν¬λ‚˜ 쑰직 λ‚΄ λ‹€λ₯Έ νŒ€μ—μ„œ κ°œλ°œν•œ λΌμ΄λΈŒλŸ¬λ¦¬μΌμ§€λ„ λͺ¨λ₯Έλ‹€. 톡합 ν…ŒμŠ€νŠΈκ°€ νƒμ›”ν•œ 뢀뢄은 μ„œλ“œ νŒŒν‹° μ½”λ“œλ₯Ό λŒ€μƒμœΌλ‘œ λ§Œλ“  좔상화가 κΈ°λŒ€ν•œ λŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” 데 μžˆλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈ 기법은 ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌμ— 따라 달라지며, λ”°λΌμ„œ κ·ΈλŸ¬ν•œ 접근법을 μ·¨ν•˜λŠ” λͺ¨λ“  μ‹œμŠ€ν…œμ— κ³΅ν†΅μœΌλ‘œ μ μš©λœλ‹€.

πŸ“š μ™ΈλΆ€ ν’ˆμ§ˆκ³Ό λ‚΄λΆ€ ν’ˆμ§ˆβ€‹

  • μ™ΈλΆ€ ν’ˆμ§ˆμ€ μ‹œμŠ€ν…œμ΄ 고객과 μ‚¬μš©μžμ˜ μš”κ΅¬λ₯Ό μ–Όλ§ˆλ‚˜ 잘 μΆ©μ‘±ν•˜λŠ”κ°€μ΄λ©°(κΈ°λŠ₯, κ°€μš©μ„±, μ‹ λ’°μ„± λ“±), λ‚΄λΆ€ ν’ˆμ§ˆμ€ μ‹œμŠ€ν…œμ΄ κ°œλ°œμžμ™€ κ΄€λ¦¬μžμ˜ μš”κ΅¬λ₯Ό μ–Όλ§ˆλ‚˜ 잘 μΆ©μ‘±ν•˜λŠ”κ°€μ΄λ‹€.(μ΄ν•΄ν•˜κΈ° μ‰¬μš΄κ°€, λ³€κ²½ν•˜κΈ° μ‰¬μš΄κ°€ λ“±)
  • μ™ΈλΆ€ ν’ˆμ§ˆμ€ 보톡 κ³„μ•½μ˜ 일뢀닀.
  • λ‚΄λΆ€ ν’ˆμ§ˆμ€ λ‹¬μ„±ν•˜κΈ°κ°€ 더 μ–΄λ €μšΈ λ•Œκ°€ μžˆλ‹€. λ‚΄λΆ€ ν’ˆμ§ˆμ€ κ±°λ“­λ˜κ³  μ˜ˆμƒν•  수 μ—†λŠ” 변경에 λŒ€μ²˜ν•˜κ²Œ ν•˜λŠ” 것이닀. μ˜ˆμƒ κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ°”κΏ€ 수 있게 λ§Œλ“œλŠ” 것이닀.
  • μ „ ꡬ간 ν…ŒμŠ€νŠΈλ₯Ό 싀행해보면 μ‹œμŠ€ν…œμ˜ μ™ΈλΆ€ ν’ˆμ§ˆμ„ μ•Œ 수 있으며, μ „ ꡬ간 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄ 도메인을 μ–Όλ§ˆλ‚˜ 잘 μ΄ν•΄ν•˜λŠ”μ§€ μ•Œ 수 μžˆλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄ μ½”λ“œ ν’ˆμ§ˆμ— κ΄€ν•œ ν”Όλ“œλ°±μ„ μƒλ‹Ήνžˆ 많이 얻을 수 있으며, λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ©΄ 깨진 ν΄λž˜μŠ€κ°€ μ—†λŠ”μ§€ νŒŒμ•…ν•  수 μžˆλ‹€.
  • μ² μ €ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” λ‚΄λΆ€ ν’ˆμ§ˆμ„ κ°œμ„ ν•˜λŠ” 데 도움이 λ˜λŠ”λ°, λ‹¨μœ„λ₯Ό ν…ŒμŠ€νŠΈν•˜λ €λ©΄ ν…ŒμŠ€νŠΈ ν”½μŠ€μ²˜μ—μ„œ ν•΄λ‹Ή λ‹¨μœ„λ₯Ό μ‹œμŠ€ν…œ λ°”κΉ₯μ—μ„œ μ‹€ν–‰ν•  수 있게 ꡬ쑰화해야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 클래슀λ₯Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜λ €λ©΄ ν΄λž˜μŠ€κ°€ λŒ€μ²΄ν•  수 μžˆλŠ” λͺ…μ‹œμ μΈ μ˜μ‘΄μ„±κ³Ό ν˜ΈμΆœν•˜κ³  검증할 수 μžˆλŠ” λͺ…ν™•ν•œ μ±…μž„μ„ 지녀야 ν•œλ‹€. 즉, λ°˜λ“œμ‹œ λŠμŠ¨ν•˜κ²Œ 결합돼야 ν•˜κ³  응집λ ₯이 λ†’μ•„μ•Ό ν•œλ‹€. λ‹€λ₯Έ λ§λ‘œλŠ” 잘 섀계돼 μžˆμ–΄μ•Ό ν•œλ‹€.
  • 섀계λ₯Ό 잘λͺ»ν•˜λ©΄ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 사싀을 μ•Œκ²Œ 됐닀. λ”°λΌμ„œ ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜λ©΄ 섀계에 κ΄€ν•œ κ·€μ€‘ν•˜κ³  즉각적인 ν”Όλ“œλ°±μ„ 얻을 수 μžˆλ‹€.