λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ‘¨‍πŸ’» web.dev/log

TDD 와 ν•¨κ»˜ 사내 μ„œλΉ„μŠ€ κ°œμ„ ν•˜κΈ°

by HandHand 2023. 5. 15.

 

πŸ“Œ TDD λ₯Ό ν™œμš©ν•΄λ³ΌκΉŒ?

μ΄λ²ˆμ— μ‚¬λ‚΄μ—μ„œ μ‚¬μš©ν•˜κ³  μžˆλŠ” 메일 ν…œν”Œλ¦Ώ ν”„λ‘œμ νŠΈλ₯Ό 손볼 κΈ°νšŒκ°€ μƒκ²ΌμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ 메일 배포 방식 적용이 ν•„μš”ν–ˆλŠ”λ°, 이λ₯Ό μœ„ν•΄μ„œλŠ” κΈ°μ‘΄ ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 이해가 ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘­κ²Œ νˆ¬μž…λœ ν”„λ‘œμ νŠΈμ— κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜λŠ” 것은 영ν–₯도에 따라 쉽지 μ•Šμ„ 수 μžˆλŠ” μž‘μ—…μΈλ°,

μ΄λ²ˆμ— 맑은 업무가 ν•΄λ‹Ή μ„œλΉ„μŠ€ μ½”λ“œ μ „λ°˜μ μœΌλ‘œ μˆ˜μ •μ΄ ν•„μš”ν–ˆλ˜ μž‘μ—…μ΄λΌ λ”μš± 고민이 λ§Žμ•˜λ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•ˆμ •μ μΈ μ„œλΉ„μŠ€ 개발 및 λ¦¬νŒ©ν† λ§μ„ μœ„ν•΄ TDD λ₯Ό 적극적으둜 ν™œμš©ν•΄λ³Ό 수 μžˆλŠ” 쒋은 기회둜 보여 적용 및 후기에 κ΄€ν•œ 포슀트λ₯Ό μž‘μ„±ν•΄λ΄€μŠ΅λ‹ˆλ‹€.

πŸ’‘ 이번 ν¬μŠ€νŠΈμ—μ„œ TDD νŒ¨λŸ¬λ‹€μž„μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ„ λ‹€λ£¨μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

 

πŸ€” TDD λž€?

κ°„λ‹¨ν•˜κ²Œ TDD 에 λŒ€ν•΄μ„œ μ‚΄νŽ΄λ³΄κ³  κ°€κ² μŠ΅λ‹ˆλ‹€.

TDDλŠ” ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„± → κΈ°λŠ₯ κ΅¬ν˜„ → ν…ŒμŠ€νŠΈ -> λ¦¬νŒ©ν† λ§ → ν…ŒμŠ€νŠΈ -> ... 의 반볡된 μ‚¬μ΄ν΄λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

각각의 ν…ŒμŠ€νŠΈλŠ” 독립적이고 λΉ λ₯΄κ²Œ μˆ˜ν–‰λ˜μ–΄μ•Όν•˜λ©° 반볡 κ°€λŠ₯ν•˜κ³  자체적으둜 검증이 κ°€λŠ₯ν•΄μ•Όν•©λ‹ˆλ‹€.

그리고 κ°€μž₯ μ€‘μš”ν•œ 것은 ν…ŒμŠ€νŠΈλ₯Ό μ‹€μ œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° 전에 μž‘μ„±ν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ—λŠ” 기쑴에 ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„μ„œ μš°μ„  κΈ°λŠ₯ κ°œλ°œμ„ ν•˜κΈ° 전에 κΈ°μ‘΄ κΈ°λŠ₯듀에 λŒ€ν•œ ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜λŠ” 것뢀터 μ‹œμž‘ν–ˆμŠ΅λ‹ˆλ‹€.

 

πŸ§ͺ λ ˆκ±°μ‹œ μ½”λ“œμ— ν…ŒμŠ€νŠΈμ½”λ“œ μΆ”κ°€ν•˜κΈ°

μš°μ„  ν•˜λ‚˜μ˜ μš΄μ˜μ„œλ²„ API_KEY λ₯Ό μ‚¬μš©ν•˜λŠ” 메일링 μ„œλΉ„μŠ€μ΄κΈ° λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈ 격리와 일관성 보μž₯을 μœ„ν•œ API λͺ¨ν‚Ήμ΄ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό μœ„ν•΄ 각각의 ν…ŒμŠ€νŠΈμ—μ„œ ν˜ΈμΆœν•˜λŠ” fetch ν•¨μˆ˜λ₯Ό λͺ¨ν‚Ήν•˜λŠ” λŒ€μ‹  msw λ₯Ό λ„μž…ν•΄μ„œ λͺ¨ν‚Ήμ΄ ν•„μš”ν•œ API ν•Έλ“€λŸ¬λ₯Ό μΆ”κ°€ν•˜λŠ” λ°©ν–₯으둜 μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

μ΄λ ‡κ²Œ ν•˜λ‹ˆ μ€‘λ³΅λœ λͺ¨ν‚Ή 데이터도 제거되고, ν…ŒμŠ€νŠΈ λŒ€μƒ ν•¨μˆ˜μ˜ 좔상화가 μ˜¨μ „νžˆ 보μž₯λ˜μ–΄ ν…ŒμŠ€νŠΈμ½”λ“œ μž‘μ„±μ— μ’€ 더 집쀑할 수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€. πŸ˜„

 

♻️ λ¦¬νŒ©ν† λ§ν•˜κΈ°

κΈ°μ‘΄ μ½”λ“œμ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ° 전에 일뢀 λͺ¨λ“ˆμ—μ„œ μ’€ 더 ν™•μž₯μ„± μžˆλŠ” ꡬ쑰둜 λ³€κ²½ν•  수 μžˆμ„ 것 같은 뢀뢄듀이 λ³΄μ˜€μŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ° 전에 λ¦¬νŒ©ν† λ§μ„ μ§„ν–‰ν–ˆλŠ”λ°, ν…ŒμŠ€νŠΈμ½”λ“œκ°€ μžˆλŠ” μƒνƒœμ—μ„œ μ§„ν–‰ν•˜λ‹ˆ νšŒκ·€λ²„κ·Έμ— λŒ€μ‘ν•  수 μžˆλ‹€λŠ” μ•ˆμ •κ°κ³Ό ν•¨κ»˜ μ½”λ“œ μˆ˜μ •μ΄ κ°€λŠ₯ν–ˆμŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ λ¦¬νŒ©ν† λ§μ„ ν•˜λ‹€κ°€ κΈ°μ‘΄ μ½”λ“œλ₯Ό 잘λͺ» μˆ˜μ •ν•΄μ„œ ν…ŒμŠ€νŠΈκ°€ κΉ¨μ§€λŠ” κ²½μš°κ°€ μ’…μ’… μžˆμ—ˆλŠ”λ°, λ§Œμ•½ ν…ŒμŠ€νŠΈκ°€ μ—†μ—ˆλ‹€λ©΄ λͺ¨λ₯΄κ³  μ§€λ‚˜μ³μ„œ 이후 개발자 ν…ŒμŠ€νŠΈ λ‹¨κ³„λ‚˜ 배포된 이후에 λ°œκ²¬ν•œ λ’€ μˆ˜μ •μ„ ν•˜λŠ” 병λͺ© 및 λ¦¬μŠ€ν¬κ°€ μ‘΄μž¬ν–ˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

 

✨ μ‹ κ·œ κΈ°λŠ₯ μΆ”κ°€ν•˜κΈ°

μ‹ κ·œ κΈ°λŠ₯을 μΆ”κ°€ν• λ•Œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  λͺ¨λ“ˆμ„ κ΅¬ν˜„ν–ˆλŠ”λ°, κ·Έ κ²°κ³Ό μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ”κ²Œ 쒋을 지 고민을 더 많이 ν•˜κ²Œ 된 것 κ°™μŠ΅λ‹ˆλ‹€.

클린 μ½”λ“œ μ €μ„œμ—λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ •μ˜ν•˜κΈ° μ–΄λ €μš΄ ν•¨μˆ˜λŠ” μ•…μ·¨κ°€ λ‚˜λŠ” ν•¨μˆ˜ λΌλŠ” ꡬ절이 μžˆμŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μž‘μ„±μ΄ 쉽도둝 더 μž‘μ€ λ‹¨μœ„λ‘œ λͺ¨λ“ˆν™”ν•˜κ³ , λΆˆν•„μš”ν•œ μ˜μ‘΄μ„±μ€ μ œκ±°ν•˜λŠ” λ“± 좔상화가 잘 된 ꡬ쑰둜 κ³ λ―Όν•΄λ³΄κ²Œ λ˜λŠ” 계기가 된 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

μ‹€μ œλ‘œ 이 λ°©μ‹μœΌλ‘œ μ§„ν–‰ν•˜λ‹ˆ 개발 ν›„ E2E ν…ŒμŠ€νŠΈμ‹œμ— 별닀λ₯Έ μ΄μŠˆκ°€ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

λ˜ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μžμ²΄κ°€ ν•¨μˆ˜μ— λŒ€ν•œ ν•˜λ‚˜μ˜ κΈ°λŠ₯λͺ…μ„Έμ„œ 와 같은 역할을 ν•˜κΈ°μ— PR 을 λ¦¬λ·°ν• λ•Œλ„, 그리고 좔후에 λ‹€λ₯Έ κ°œλ°œμžκ°€ 이 ν”„λ‘œμ νŠΈλ₯Ό μˆ˜μ •ν•  일이 생겼을 λ•Œμ—λ„ μ–΄λ–€ λͺ©μ μœΌλ‘œ 이 λͺ¨λ“ˆμ΄ μΆ”κ°€λœ 것인지 λͺ…ν™•ν•˜κ²Œ μ•Œ 수 μžˆμ–΄μ„œ μœ μ§€λ³΄μˆ˜μ— λ”μš± μš©μ΄ν•  κ²ƒμ΄λΌλŠ” 생각이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

πŸ’¬ λŠλ‚€μ  및 마무리

TDD 와 ν•¨κ»˜ ν˜„μž¬ μš΄μ˜μ€‘μΈ μ„œλΉ„μŠ€ λ¦¬νŒ©ν† λ§ 및 κΈ°λŠ₯ κ°œλ°œμ„ 진행해본 κ²°κ³Ό, ν™•μ‹€νžˆ μ•ˆμ •μ μœΌλ‘œ κ°œλ°œν•˜λŠ”λ° 도움이 많이 된 것 κ°™μŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ 덕뢄에 side-effect 걱정없이 κ³Όκ°ν•œ λ³€ν™”κ°€ κ°€λŠ₯ν–ˆκ³  μž‘μ—… 도쀑에 λ†“μΉœ edge-case 듀도 μžκ°€κ²€μ¦ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ λΆˆν•„μš”ν•˜κ²Œ μ€‘λ³΅λœ κΈ°λŠ₯을 κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μΆ”κ°€ν•˜μ§€ μ•Šλ„λ‘ μ£Όμ˜ν•  ν•„μš”κ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

ν…ŒμŠ€νŠΈ μ½”λ“œλ„ 결ꡭ은 μ½”λ“œ 이기 λ•Œλ¬Έμ—, μ½”λ“œμ— μ•…μ·¨κ°€ λ‚˜μ§€ μ•Šλ„λ‘ μ‹ κ²½μ¨μ£ΌλŠ” 것이 μ€‘μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€