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

🌈 Chapter 4: ν…ŒμŠ€νŠΈ 주도 μ£ΌκΈ° μ‹œμž‘

πŸ“š μš°μ„  λ™μž‘ν•˜λŠ” 골격을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈν•˜λΌβ€‹

  • 첫 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³  ν†΅κ³Όν•˜λŠ” 일의 어렀움은, 도ꡬλ₯Ό λ§ˆλ ¨ν•˜κ³  λ™μ‹œμ— κ·Έλ ‡κ²Œ λ§ˆλ ¨ν•œ λ„κ΅¬λ‘œ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λ©΄μ„œ κΈ°λŠ₯κΉŒμ§€ κ΅¬ν˜„ν•˜κΈ°κ°€ μ–΄λ ΅λ‹€λŠ” 데 μžˆλ‹€. μ•ˆμ •μ μ΄μ§€ λͺ»ν•œ 개발 ν™˜κ²½μ˜ 증상 ν•œ κ°€μ§€λŠ” λ­”κ°€κ°€ μ‹€νŒ¨ν–ˆμ„ λ•Œ κ°€μž₯ λ¨Όμ € μ–΄λ””λ₯Ό μ‚΄νŽ΄λ΄μ•Ό 할지 λ§ˆλ•…μΉ˜ μ•Šλ‹€.
  • 이 같은 졜초 κΈ°λŠ₯의 역섀은 규λͺ¨κ°€ μž‘μ€ 두 문제둜 μͺΌκ°œλ©΄ ν•΄κ²°ν•  수 μžˆλ‹€. λ¨Όμ € λ™μž‘ν•˜λŠ” 골격을 λŒ€μƒμœΌλ‘œ λΉŒλ“œ, 배포, ν…ŒμŠ€νŠΈν•˜λŠ” 방법을 νŒŒμ•…ν•œ λ‹€μŒ, κ·Έ 기반 ꡬ쑰λ₯Ό μ΄μš©ν•΄ μœ μ˜λ―Έν•œ 첫 κΈ°λŠ₯에 λŒ€ν•œ 인수 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•œλ‹€. κ·Έ ν›„μ—λŠ” μ‹œμŠ€ν…œμ˜ λ‚˜λ¨Έμ§€ 뢀뢄을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ 진행할 수 있게 λͺ¨λ“  것이 μ œμžλ¦¬μ— 놓일 것이닀.
  • λ™μž‘ν•˜λŠ” κ³¨κ²©μ΄λž€ μ „ ꡬ간을 λŒ€μƒλ‘œ μžλ™ λΉŒλ“œ, 배포, ν…ŒμŠ€νŠΈλ₯Ό ν•  수 μžˆλŠ” μ‹€μ œ κΈ°λŠ₯을 κ°€μž₯ μ•κ²Œ κ΅¬ν˜„ν•œ 쑰각을 λ§ν•œλ‹€.
  • ν…ŒμŠ€νŠΈ 과정에 배포 단계λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 두 가지 μ΄μœ μ—μ„œ ꡉμž₯히 μ€‘μš”ν•˜λ‹€.
    1. 배포 λ‹¨κ³„λŠ” μ†μˆ˜ ν•΄μ„œλŠ” μ•ˆ 될, 였λ₯˜κ°€ λ°œμƒν•˜κΈ° μ‰¬μš΄ ν™œλ™μ΄λ―€λ‘œ μ‹€μ œ ν™˜κ²½μ— 배포해야 ν•  λ•ŒκΉŒμ§€λŠ” 슀크립트λ₯Ό μ² μ €ν•˜κ²Œ 검증해야 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
    2. 배포 λ‹¨κ³„μ—μ„œλŠ” 개발 νŒ€μ΄ 쑰직의 λ‹€λ₯Έ λΆ€λ¬Έκ³Ό μ ‘μ΄‰ν•˜κΈ°λ„ ν•˜λ©°, 운영이 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ λ˜λŠ”μ§€λ„ λ°°μ›Œμ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • μ‹€μ œλ‘œ μ „ ꡬ간을 λŒ€μƒμœΌλ‘œ μˆ˜ν–‰λ˜λŠ” ν…ŒμŠ€νŠΈλŠ” λ‹¬μ„±ν•˜κΈ° μ–΄λ €μšΈ μˆ˜λ„ μžˆμœΌλ―€λ‘œ μ‹€μ œ μ‹œμŠ€ν…œμ—μ„œ μˆ˜ν–‰ν•  κΈ°λŠ₯κ³Ό μ‹œμŠ€ν…œμ΄ μˆ˜ν–‰λ˜λŠ” ν™˜κ²½μ— λŒ€ν•΄ ν˜„μž¬ μ•Œκ³  μžˆλŠ” 사항을 κ΅¬ν˜„ν•œ 기반 κ΅¬μ‘°μ—μ„œ μ‹œμž‘ν•΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ 이 방식은 일을 마치기 μ „κΉŒμ§€λŠ” κ·Έμ € μž„μ‹œλ°©νŽΈμ— λΆˆκ³Όν•˜λ©°, μ‹€μ œλ‘œ μ „ ꡬ간을 λŒ€μƒμœΌλ‘œ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° μ „κΉŒμ§€λŠ” 미처 νŒŒμ•…ν•˜μ§€ λͺ»ν•œ μœ„ν—˜μ΄ 도사리고 μžˆλ‹€.
  • λ™μž‘ν•˜λŠ” 골격과 그것을 λ³΄μ’Œν•˜λŠ” 기반 κ΅¬μ‘°λŠ” ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ μ‹œμž‘ν•˜λŠ” 방법을 도와주기 μœ„ν•΄ μ‘΄μž¬ν•˜λŠ” 것이닀. λ™μž‘ν•˜λŠ” 골격은 μ „ ꡬ간에 걸친 인수 ν…ŒμŠ€νŠΈ μ†”λ£¨μ…˜μ„ μ™„μ„±ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜μ•„κ°€λŠ” 첫 κ±ΈμŒμ— μ§€λ‚˜μ§€ μ•ŠλŠ”λ‹€.

πŸ“š λ™μž‘ν•˜λŠ” 골격의 μ™Έν˜• 결정​

  • λ™μž‘ν•˜λŠ” 골격을 κ°œλ°œν•œλ‹€λŠ” 것은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κ°œκ΄„μ μΈ ꡬ쑰λ₯Ό κ²°μ •ν•˜κΈ° μ‹œμž‘ν•œλ‹€λŠ” μ˜λ―Έλ‹€. ꡬ체적일 ν•„μš”κ°€ μ—†μ§€λ§Œ κ³„νšν•œ 첫 μΆœμ‹œλ₯Ό λ‹¬μ„±ν•˜λŠ” 데 μ£Όμš” μ‹œμŠ€ν…œ μ»΄ν¬λ„ŒνŠΈμ™€ κ·ΈλŸ¬ν•œ μ»΄ν¬λ„ŒνŠΈμ˜ μƒν˜Έ μž‘μš© 방식에 λŒ€ν•œ λŒ€λž΅μ μΈ 그림이 ν•„μš”ν•˜λ‹€.
  • 이 같은 초기 ꡬ쑰λ₯Ό μ„€κ³„ν•˜λ €λ©΄ μ‹œμŠ€ν…œμ˜ λͺ©μ μ„ μ–΄λŠ 정도 이해해야 ν•œλ‹€. (ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”κ΅¬ 사항)
  • λ™μž‘ν•˜λŠ” 골격의 핡심은 νŒ€μ—μ„œ μžμ‹ λ“€μ˜ 해법(νŒ€μ—μ„œ μ½”λ“œ μž‘μ„±μ„ μ‹œμž‘ν•˜κΈ° 전에 λ°˜λ“œμ‹œ μ·¨ν•΄μ•Ό ν•  ν•„μˆ˜μ μΈ μ˜μ‚¬ κ²°μ •)을 μ „μ²΄μ μœΌλ‘œ μ‘°λ§ν•˜λŠ” 데 μ΄λ°”μ§€ν•˜κ²Œλ” 첫 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 과정을 ν™œμš©ν•΄ ν”„λ‘œμ νŠΈμ˜ λ§₯락을 μ§šμ–΄λ‚΄λŠ” 데 μžˆλ‹€.

문제 이해 -> λŒ€λž΅μ μΈ 섀계(μ•„ν‚€ν…μ²˜) -> μžλ™ν™”(λΉŒλ“œ, 배포, μ „ ꡬ간 ν…ŒμŠ€νŠΈ) -> TDD

  • μ‹€μ œ ν”Όλ“œλ°±μ„ ν† λŒ€λ‘œ 배우고 κ°œμ„ ν•΄ λ‚˜κ°€λŠ” 과정을 μ‹œμž‘ν•  수 있게 TDD μ£ΌκΈ°λ₯Ό μ‹œμž‘ν•˜λŠ” 데 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ μ˜μ‚¬ 결정을 λ‚΄λ¦°λ‹€.

πŸ“š ν”Όλ“œλ°± μ†ŒμŠ€ κ΅¬μΆœβ€‹

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계에 λŒ€ν•΄ λ‚΄λ¦° μ˜μ‚¬ κ²°μ •μ΄λ‚˜, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계가 κ·Όκ±°ν•˜λŠ” κ°€μ •μ˜ 옳고 그름에 λŒ€ν•΄μ„œλŠ” 아무것도 보μž₯ν•  수 μ—†λ‹€. κ·Έμ € μ΅œμ„ μ„ λ‹€ν•  뿐이며 ν˜„μž¬ 밟고 μžˆλŠ” μ ˆμ°¨μ— ν”Όλ“œλ°±μ„ μ μš©ν•΄ μ΅œλŒ€ν•œ 빨리 μ˜μ‚¬ κ²°μ •μ΄λ‚˜ 가정을 κ²€μ¦ν•˜λŠ” 데 μ˜μ§€ν•  뿐이닀. λ™μž‘ν•˜λŠ” 골격을 κ΅¬ν˜„ν•˜κ³ μž μ œμž‘ν•œ λ„κ΅¬λŠ” μ΄λŸ¬ν•œ ν•™μŠ΅ 과정을 λ³΄μ‘°ν•˜κΈ° μœ„ν•΄ μ‘΄μž¬ν•œλ‹€.
  • 이상적인 μƒνƒœλŠ” νŒ€μ—μ„œ μ •κΈ°μ μœΌλ‘œ 운영 μ‹œμŠ€ν…œμ— λ¦΄λ¦¬μ¦ˆν•  λ•Œλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ‹œμŠ€ν…œμ˜ μ΄ν•΄κ΄€κ³„μžλ“€μ΄ μ‹œμŠ€ν…œμ΄ μžμ‹ λ“€μ˜ μš”κ΅¬μ— μ–Όλ§ˆλ‚˜ λΆ€ν•©ν•˜λŠ”μ§€μ— λ°˜μ‘ν•  수 있고, λ™μ‹œμ— μš°λ¦¬λŠ” μ‹œμŠ€ν…œ κ΅¬ν˜„μ„ 평가할 수 μžˆλ‹€.
  • μš°λ¦¬λŠ” λΉŒλ“œ 및 ν…ŒμŠ€νŠΈ μžλ™ν™”λ₯Ό ν™œμš©ν•΄ μ‹œμŠ€ν…œ ν’ˆμ§ˆμ— κ΄€ν•œ ν”Όλ“œλ°±μ„ λ°›λŠ”λ‹€.
  • κ°€μž₯ 큰 ν˜œνƒμ€ 뭘 λ°°μš°λ“  거기에 맞좰 μ‹œμŠ€ν…œμ„ λ³€κ²½ν•  수 μžˆμœΌλ¦¬λΌλŠ” 점이닀. 뭐든 ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•œλ‹€λŠ” 것은 μ² μ €ν•œ νšŒκ·€ ν…ŒμŠ€νŠΈ λͺ¨μŒμ„ κ°–κ²Œ λœλ‹€λŠ” 것을 μ˜λ―Έν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. μ–΄λ–€ ν…ŒμŠ€νŠΈλ„ μ™„λ²½ν•˜μ§€ μ•Šμ§€λ§Œ κ²¬κ³ ν•œ ν…ŒμŠ€νŠΈ λͺ¨μŒμ΄ 있으면 μ€‘λŒ€ν•œ 변경을 μ•ˆμ „ν•˜κ²Œ ν•  수 μžˆλ‹€.

πŸ“š λΆˆν™•μ‹€μ„±μ€ 일찍 λ“œλŸ¬λ‚΄λΌβ€‹

  • 톡합을 λ‚˜μ€‘μ— ν•˜λŠ” λ°©μ‹μ˜ 경우 μ–΄λ–€ 일이 일어날지 μ˜ˆμΈ‘ν•˜κΈ°κ°€ λΆˆκ°€λŠ₯ν•œλ°, νŒ€μ—μ„œ μ—„μ²­λ‚˜κ²Œ λ§Žμ€ 각 뢀뢄을 μ œν•œλœ μ‹œκ°„μ— μ§œλ§žμΆ°μ•Ό ν•˜κ³  μ‹€νŒ¨ν•œ 뢀뢄을 κ³ μΉ˜λŠ” 일도 κ°μ•ˆν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • λ°˜λ©΄μ— 점진적인 κ°œλ°œμ„ 잘 μš΄μ˜ν•˜λ©΄ μ²˜μŒμ—λŠ” λΆˆμ•ˆμ •ν•œ μƒνƒœλ‘œ μ‹œμž‘ν•˜μ§€λ§Œ 일뢀 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  ν”„λ‘œμ νŠΈ μžλ™ν™”κ°€ κ΅¬μΆ•λ˜κ³  λ‚˜λ©΄ 반볡적인 κ³Όμ •μœΌλ‘œ μ•ˆμ •ν™”λœλ‹€. ν”„λ‘œμ νŠΈκ°€ 인도 단계에 μ ‘μ–΄λ“€λ©΄ κ²°κ΅­ κΎΈμ€€νžˆ κΈ°λŠ₯이 λ§Œλ“€μ–΄μ§ˆ ν…Œκ³  μ•„λ§ˆ 처음으둜 μΆœμ‹œν•˜κΈ° μ „μ—λŠ” ν™œλ™λŸ‰μ΄ ꡉμž₯히 λ§Žμ„ 것이닀. 배포와 μ—…κ·Έλ ˆμ΄λ“œμ²˜λŸΌ ν‰λ²”ν•˜μ§€λ§Œ 깨지기 μ‰¬μš΄ μž‘μ—…μ€ λͺ¨λ‘ μžλ™ν™”λ˜μ–΄ μ•Œμ•„μ„œ ꡴러갈 것이닀.
  • ν…ŒμŠ€νŠΈ 주도 개발의 이 같은 츑면은 λ‹€λ₯Έ μΈ‘λ©΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 직관적이지 μ•Šκ²Œ 보일지도 λͺ¨λ₯΄κ² μ§€λ§Œ μ§€κΈˆκΉŒμ§€ 늘 μΆ©λΆ„ν•œ μ‹œκ°„μ„ λ“€μ—¬ μ‹œμŠ€ν…œ κΈ°λ°˜μ„ λŒ€μƒμœΌλ‘œ ꡬ쑰λ₯Ό 작고 μžλ™ν™”ν•  λ§Œν•œ κ°€μΉ˜κ°€ μžˆλ‹€.