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

🌈 Chapter 5: ν…ŒμŠ€νŠΈ 주도 개발 주기의 μœ μ§€

πŸ“š 각 κΈ°λŠ₯을 인수 ν…ŒμŠ€νŠΈλ‘œ μ‹œμž‘ν•˜λΌβ€‹

  • 인수 ν…ŒμŠ€νŠΈλŠ” μš°λ¦¬κ°€ μž‘μ„±ν•˜λ €λŠ” κΈ°λŠ₯을 아직 μ‹œνŠΈμ— μ—μ„œ 갖좔지 λͺ»ν–ˆλ‹€λŠ” 사싀을 보여주고 κ·Έ κΈ°λŠ₯이 μ™„μ„±λ˜κΈ°κΉŒμ§€ 진생 상황을 λ°˜μ˜ν•œλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  λ•ŒλŠ” 기반 기술의 μš©μ–΄κ°€ μ•„λ‹Œ μ‘μš© λ„λ©”μΈμ—μ„œ λ‚˜μ˜¨ μš©μ–΄λ§Œ μ΄μš©ν•œλ‹€.
  • 인수 ν…ŒμŠ€νŠΈλŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό 거친 객체λ₯Ό λŒ€μƒμœΌλ‘œ 톡합 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•  뿐 μ•„λ‹ˆλΌ ν”„λ‘œμ²΅νŠΈλ₯Ό μ•žμœΌλ‘œ λ‚˜μ•„κ°€κ²Œ ν•œλ‹€.

πŸ“š νšŒκ·€λ₯Ό ν¬μ°©ν•˜λŠ” ν…ŒμŠ€νŠΈμ™€ 진행 상황을 μΈ‘μ •ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό λΆ„λ¦¬ν•˜λΌβ€‹

  • 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ μ‹ κΈ°λŠ₯을 λ¬˜μ‚¬ν•˜λŠ”λ° κ·Έ κΈ°λŠ₯이 κ΅¬ν˜„λ˜κΈ° 전이라 인수 ν…ŒμŠ€νŠΈλŠ” μ‹€νŒ¨ν•  것이닀. μƒˆ 인수 ν…ŒμŠ€νŠΈλž€ 아직 λ§ˆμΉ˜μ§€ μ•Šμ€ 일을 μ„œμˆ ν•œ 것이기 λ•Œλ¬Έμ΄λ‹€.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό λΉ¨κ°„μƒ‰μ—μ„œ λ…Ήμƒ‰μœΌλ‘œ λ°”κΎΈλŠ” ν™œλ™μ€ νŒ€μ—μ„œλŠ” 진행 μƒνƒœλ₯Ό μΈ‘μ •ν•  수 μžˆλ”°.
  • 인수 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λ©΄ 이제 ν•΄λ‹Ή ν…ŒμŠ€νŠΈλŠ” μ™„λ£Œλœ κΈ°λŠ₯을 λ‚˜νƒ€λ‚΄κ³  λ‹€μ‹œλŠ” μ‹€νŒ¨ν•΄μ„œλŠ” μ•ˆ λœλ‹€.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈλŠ” 개발 νŒ€μ„ λ³΄μ‘°ν•˜κ³  λΉ λ₯΄κ²Œ 싀행돼야 ν•˜λ©°, 항상 톡과해야 ν•œλ‹€.
  • μš”κ΅¬ 사항이 λ°”λ€Œλ©΄ 거기에 영ν–₯을 받은 인수 ν…ŒμŠ€νŠΈλ₯Ό νšŒκ·€ ν…ŒμŠ€νŠΈ κ·Έλ£Ήμ—μ„œ λΉΌλ‚΄μ„œ 진행 쀑인 ν…ŒμŠ€νŠΈ 그룹으둜 읆긴 ν›„ μƒˆ μš”κ΅¬ 사항을 λ°˜μ˜ν† λ‘ μˆ˜μ •ν•œ λ‹€μŒ, ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό λ‹€μ‹œ ν†΅κ³Όν•˜κ²Œλ” μ‹œμŠ€ν…œμ„ λ³€κ²½ν•΄μ•Ό ν•œλ‹€.

πŸ“š ν…ŒμŠ€νŠΈλ₯Ό κ°€μž₯ κ°„λ‹¨ν•œ 성곡 μΌ€μ΄μŠ€λ‘œ μ‹œμž‘ν•˜λΌβ€‹

  • μš°λ¦¬λŠ” κ°€μž₯ κ°„λ‹¨ν•œ 성곡 μΌ€μ΄μŠ€λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μ‹œμž‘ν•˜κΈΈ μ’‹μ•„ν•œλ‹€. ν•΄λ‹Ή ν…ŒμŠ€νŠΈκ°€ λ™μž‘ν•˜λ©΄ μ†”λ£¨μ…˜μ˜ μ‹€μ œ ꡬ쑰에 κ΄€ν•΄ 더 쒋은 생각이 λ– μ˜€λ₯Ό ν…Œκ³ , κ·Έ κ³Όμ •μ—μ„œ λ°œκ²¬ν•œ λ°œμƒ κ°€λŠ₯ν•œ μ‹€νŒ¨λ₯Ό μ²˜λ¦¬ν•˜λŠ” 것과 μ΄ν›„μ˜ 성곡 μΌ€μ΄μŠ€ μ‚¬μ΄μ—μ„œ μš°μ„ μˆœμœ„λ₯Ό κ°€λŠ ν•΄λ³Ό 수 μžˆλ‹€.
  • μ²˜λ¦¬ν•΄μ•Ό ν•  μ‹€νŒ¨ μΌ€μ΄μŠ€, λ¦¬νŒ©ν„°λ§, 기타 기술적인 μž‘μ—…μ„ λ©”λͺ¨μž₯μ΄λ‚˜ 색인 μΉ΄λ“œμ— 기둝해 두면 도움이 λœλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ„ΈλΆ€ 사항을 λΉ λœ¨λ¦¬μ§€ μ•Šκ³ λ„ λ‹Ήλ©΄ κ³Όμ œμ— 집쀑할 수 μžˆλ‹€. κΈ°λŠ₯은 기둝해둔 λͺ©λ‘μ˜ ν•­λͺ©μ— λͺ¨λ‘ 선을 κ·Έμ–΄μ•Ό λΉ„λ‘œμ†Œ λ§ˆλ¬΄λ¦¬λœλ‹€.

πŸ“š 읽고 μ‹Άμ–΄ ν•  ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λΌβ€‹

  • ν…ŒμŠ€νŠΈκ°€ 잘 읽히면 ν…ŒμŠ€νŠΈλ₯Ό κ·Έ λ‹€μŒμœΌλ‘œ μ§€μ›ν•˜λŠ” 기반 ꡬ쑰λ₯Ό λ§Œλ“ λ‹€.
  • ν…ŒμŠ€νŠΈκ°€ μ–΄λ–»κ²Œ ν•΄μ•Ό 할지 κΈ°μˆ ν•˜λŠ” λͺ…ν™•ν•œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ³΄μ΄λ©΄μ„œ μ˜ˆμƒλŒ€λ‘œ μ‹€νŒ¨ν•˜λ©΄ 보쑰적인 역할을 ν•˜λŠ” μ½”λ“œλ₯Ό μΆ©λΆ„νžˆ κ΅¬ν˜„ν–ˆλ‹€λŠ” 사싀을 μ•Œκ²Œ λœλ‹€. 그러면 ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όμ‹œν‚€λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° μ‹œμž‘ν•˜λ©΄ λœλ‹€.

πŸ“š ν…ŒμŠ€νŠΈκ°€ μ‹€νŒ¨ν•˜λŠ” 것을 μ§€μΌœλ³΄λΌβ€‹

  • ν…ŒμŠ€νŠΈκ°€ μ˜ˆμƒκ³Ό λ‹€λ₯Έ μ‹μœΌλ‘œ μ‹€νŒ¨ν•˜λ©΄ λ­”κ°€λ₯Ό 잘λͺ» μ΄ν•΄ν–ˆκ±°λ‚˜ μ½”λ“œκ°€ μ™„μ„±λ˜μ§€ μ•Šμ•˜λ‹€λŠ” 뜻으둜 λΆ€μ‘±ν•œ 뢀뢄을 κ³ μΉœλ‹€. μš°λ¦¬λŠ” μ λ‹Ήν•œ μ‹€νŒ¨λ₯Ό λ§Œλ‚˜λ©΄ 진단 정보가 도움이 λ˜λŠ”μ§€ ν™•μΈν•œλ‹€. μ‹€νŒ¨μ— λŒ€ν•œ μ„€λͺ…이 λͺ…ν™•ν•˜μ§€ μ•ŠμœΌλ©΄ μ½”λ“œκ°€ λͺ‡ μ£Όκ°„ 망가져 μžˆμ„ λ™μ•ˆ λˆ„κ΅°κ°€ 고생해야 ν•  것이닀. 였λ₯˜ λ©”μ‹œμ§€κ°€ μ½”λ“œμ™€ κ΄€λ ¨λœ 문제둜 우리λ₯Ό 이끌 λ•ŒκΉŒμ§€ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ‘°μ •ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό μž¬μ‹€ν–‰ν•œλ‹€.
  • 였λ₯˜ λ©”μ‹œμ§€λ₯Ό 검사해야 ν•˜λŠ” 이유
    1. 였λ₯˜ λ©”μ‹œμ§€λŠ” ν˜„μž¬ μž‘μ—… 쀑인 μ½”λ“œμ— λŒ€ν•œ 가정을 ν™•μΈν•œλ‹€.
    2. μ˜λ„μ— λŒ€ν•œ ν‘œν˜„μ„ κ°•μ‘°ν•˜λŠ” 것은 μ‹ λ’°μ„± 있고 μœ μ§€ν•˜κΈ° μ‰¬μš΄ μ‹œμŠ€ν…œμ„ κ°œλ°œν•˜λŠ” 데 ν•„μˆ˜κ³ , ν…ŒμŠ€νŠΈμ™€ μ‹€νŒ¨ λ©”μ‹œμ§€κ°€ 여기에 ν•΄λ‹Ήν•œλ‹€. μœ μš©ν•œ 진단 정보λ₯Ό μƒμ„±ν•˜λŠ” 고생을 κ°λ‚΄ν•˜λ©΄ ν…ŒμŠ€νŠΈ, μ½”λ“œμ—μ„œ ν•΄μ•Ό ν•  일이 뭔지 λΆ„λͺ…ν•˜κ²Œ ν•˜λŠ” 데 도움이 λœλ‹€.

πŸ“š μž…λ ₯μ—μ„œ 좜λ ₯ μˆœμ„œλ‘œ κ°œλ°œν•˜λΌβ€‹

  • κΈ°λŠ₯에 λŒ€ν•œ μ „ ꡬ간 ν…ŒμŠ€νŠΈλŠ” μƒˆλ‘œμš΄ ν–‰μœ„λ₯Ό μΌμœΌν‚€κ²Œ ν•˜λŠ” μ΄λ²€νŠΈκ°€ λ„μ°©ν•˜λŠ” 것을 흉내 λ‚Ό 것이닀. μ‹œμŠ€ν…œ κ²½κ³„μ—μ„œλŠ” 이 이벀트λ₯Ό λ‹€λ£¨κ³ μž 객체λ₯Ό μ—¬λŸ¬ 개 μž‘μ„±ν•΄μ•Ό ν•  것이닀. 그럴 λ•Œ 이 객체듀이 자기 μ±…μž„μ„ μˆ˜ν–‰ν•˜κ³ μž μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 μ‘΄μž¬ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό 지원할 ν•„μš”κ°€ μžˆμŒμ„ μ•Œκ²Œ 됐닀. μš°λ¦¬λŠ” 더 λ§Žμ€ 객체λ₯Ό μž‘μ„±ν•΄ μ΄λŸ¬ν•œ μ„œλΉ„μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ³  μƒˆ 객체에 ν•„μš”ν•œ μ„œλΉ„μŠ€κ°€ 뭔지 νŒŒμ•…ν•œλ‹€.
  • 이런 μ‹μœΌλ‘œ μ‹œμŠ€ν…œμ„ μ²˜μŒλΆ€ν„° λκΉŒμ§€ λ§Œλ“€μ–΄ λ‚˜κ°„λ‹€.
    1. μ™ΈλΆ€ 이벀트λ₯Ό λ°›λŠ” κ°μ²΄μ—μ„œ 쀑간 계측을 거쳐 쀑심 도메인 λͺ¨λΈλ‘œ λ‚˜μ•„κ°„λ‹€.
    2. μ™ΈλΆ€μ—μ„œ 확인 κ°€λŠ₯ν•œ 응닡을 μƒμ„±ν•˜λŠ” λ‹€λ₯Έ 경계에 μœ„μΉ˜ν•œ κ°μ²΄μ—κΉŒμ§€ 이λ₯Έλ‹€.

πŸ“š λ©”μ„œλ“œκ°€ μ•„λ‹Œ ν–‰μœ„λ₯Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈν•˜λΌβ€‹

  • TDDλ₯Ό λ„μž…ν•˜λŠ” λ§Žμ€ κ°œλ°œμžκ°€ μ΄ˆκΈ°μ— μž‘μ„±ν•œ ν…ŒμŠ€νŠΈλ₯Ό λ‚˜μ€‘μ— λ˜λŒμ•„λ΄€μ„ λ•Œ μ΄ν•΄ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 사싀을 λ°œκ²¬ν•˜λŠ”λ°, ν”νžˆ 저지λ₯΄λŠ” μ‹€μˆ˜ ν•œ κ°€μ§€λŠ” λ°”λ‘œ λ©”μ„œλ“œ ν…ŒμŠ€νŠΈλ₯Ό μƒκ°ν•œλ‹€λŠ” 데 μžˆλ‹€.
  • ν…ŒμŠ€νŠΈ λŒ€μƒ κ°μ²΄μ—μ„œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯에 집쀑할 λ•Œ 더 μž˜ν•  수 있으며, 각각은 이웃 κ°μ²΄μ™€μ˜ ν˜‘μ—…μ΄λ‚˜ μ—¬λŸ¬ λ©”μ„œλ“œ 호좜이 ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€. ν•΄λ‹Ή 클래슀의 μ½”λ“œλ₯Ό 톡해 λͺ¨λ“  μ‹€ν–‰ 경둜λ₯Ό μ‹œν—˜ν•˜λŠ” 방법이 μ•„λ‹ˆλΌ κ·Έ 클래슀둜 λͺ©μ μ„ λ‹¬μ„±ν•˜λŠ” 방법을 μ•Œμ•„μ•Ό ν•œλ‹€.
  • ν…ŒμŠ€νŠΈ 이름을 지을 λ•ŒλŠ” ν…ŒμŠ€νŠΈ 쀑인 μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 객체가 μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ„€λͺ…ν•˜λŠ” 이름을 μ„ νƒν•˜λŠ” 것이 도움이 λœλ‹€.

πŸ“š ν…ŒμŠ€νŠΈμ— κ·€λ₯Ό κΈ°μšΈμ΄λΌβ€‹

  • ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ 주둜 섀계 κ°œμ„ μ΄ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ§€κΈˆ λ‹Ήμž₯ μ½”λ“œλ₯Ό ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“œλŠ” ꡬ쑰 λ•Œλ¬Έμ— λ‚˜μ€‘μ—λ„ μ½”λ“œλ₯Ό λ³€κ²½ν•˜κΈ° μ–΄λ €μšΈ 것이닀. μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λ³€κ²½ν•˜κΈ°κ°€ 더 μ–΄λ €μšΈ 텐데 μ½”λ“œλ₯Ό μž‘μ„±ν•  λ•Œ 무슨 생각을 ν–ˆλŠ”μ§€ μžŠμ–΄λ²„λ¦¬κΈ° λ•Œλ¬Έμ΄λ‹€.
  • 이 경우 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 과정을 잠재적인 μœ μ§€ 보수 문제λ₯Ό 쑰기에 μ•Œλ €μ£ΌλŠ” κ·€μ€‘ν•œ 경고둜 μ—¬κΈ°κ³  κ·Έ νžŒγ„·νŠΈλ₯Ό μ΄μš©ν•΄ 아직 μ‹¬κ°ν•˜μ§€ μ•Šμ„ λ•Œ 문제λ₯Ό ν•΄κ²°ν•œλ‹€. λ•Œλ¬Έμ— μ‹€νŒ¨ν•œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κΈ° μ–΄λ ΅λ‹€λ©΄ μ œν’ˆμ˜ μ½”λ“œμ˜ 섀계λ₯Ό λ‹€μ‹œ μ‚΄νŽ΄λ³΄κ³  μ•žμœΌλ‘œ λ‚˜μ•„κ°€κΈ° 전에 λ¦¬νŒ©ν„°λ§ν•œλ‹€.

πŸ“š 주기의 λ―Έμ„Έ 쑰정​

  • λ„ˆλ¬΄ 큰 λ‹¨μœ„λ‘œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜λ©΄ μ½”λ“œμ˜ λͺ¨λ“  κ°€λŠ₯ν•œ 경둜λ₯Ό μ‹œλ„ν•˜λŠ” μ‘°ν•© 폭발 ν˜„μƒμœΌλ‘œ 개발이 쀑단될 것이닀.
  • 반면 ν…ŒμŠ€νŠΈ λ‹¨μœ„λ₯Ό λ„ˆλ¬΄ μ„Έλ°€ν•˜κ²Œ 작으면 ν…ŒμŠ€νŠΈν•˜κΈ°λŠ” μ‰½μ§€λ§Œ ν•¨κ»˜ λ™μž‘ν•˜μ§€ μ•ŠλŠ” κ°μ²΄μ—μ„œ μœ λž˜ν•˜λŠ” 문제λ₯Ό λ†“μΉ˜κ³  말 것이닀.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈμ™€ 톡합 ν…ŒμŠ€νŠΈ 사이에 μ–Όλ§ˆλ‚˜ ν•΄μ•Ό 할지에 λŒ€ν•œ 닡은 νŒ€μ΄ μ²˜ν•œ 상황과 νŒ€μ— λ‘˜λ €μ‹Ό ν™˜κ²½μ— 따라 달라진닀. TDD의 ν…ŒμŠ€νŠΈ λΆ€λΆ„μ—μ„œ 얻을 수 μžˆλŠ” 졜고의 ν˜œνƒμ€ μ½”λ“œλ₯Ό λ§κ°€λœ¨λ¦¬μ§€ μ•Šκ³ λ„ λ³€κ²½ν•  수 μžˆλ‹€λŠ” μžμ‹ κ°μ΄λ‹€. κΉŒλ‹€λ‘œμš΄ 뢀뢄은 κ·ΈλŸ¬ν•œ μžμ‹ κ°μ΄ μ •λ‹Ήν•œμ§€ ν™•μΈν•˜λŠ” 것이닀.
  • κ·Έλž˜μ„œ μš°λ¦¬λŠ” 주기적으둜 TDDκ°€ μ–Όλ§ˆλ‚˜ 도움이 λ˜λŠ”μ§€ λ˜μ§šμ–΄λ³΄κ³  μ·¨μ•½ν•œ 뢀뢄을 찾아보며, ν…ŒμŠ€νŠΈ μ „λž΅μ„ μ‘°μ •ν•œλ‹€. λ‘œμ§μ—μ„œ μ„±κ°€μ‹  λΆ€λΆ„μ—λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ 더 ν•„μš”ν•  μˆ˜λ„ μžˆλ‹€. μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ μ˜ˆμ™Έμ—λŠ” 톡합 μˆ˜μ€€μ˜ ν…ŒμŠ€νŠΈκ°€ 더 ν•„μš”ν• μ§€λ„ λͺ¨λ₯Έλ‹€. 그리고 μ˜ˆμƒμΉ˜ λͺ»ν•œ μ‹œμŠ€ν…œ μ‹€νŒ¨μ—λŠ” 쑰사가 더 ν•„μš”ν•˜κ±°λ‚˜ μ–΄μ©Œλ©΄ ν…ŒμŠ€νŠΈλ₯Ό 더 μ² μ €ν•˜κ²Œ ν•΄μ•Ό ν•  것이닀.