Backend

ν…ŒμŠ€νŠΈ μ½”λ“œ μ™œ μž‘μ„±ν• κΉŒμš”? (TDD?)

μž₯μš©μ„ 2024. 3. 11. 00:47

 

 

πŸ€” ν…ŒμŠ€νŠΈ μ½”λ“œ?

μ†Œν”„νŠΈμ›¨μ–΄μ˜ κΈ°λŠ₯κ³Ό λ™μž‘μ„ ν…ŒμŠ€νŠΈν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ—¬ μ˜ˆμƒλœ κ²°κ³Όκ°€ μ •μƒμ μœΌλ‘œ λ‚˜μ˜€λŠ”μ§€ ν™•μΈν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

E2E(End to End), 톡합 ν…ŒμŠ€νŠΈ(Integration Test), λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test) 와 같은 λ‹€μ–‘ν•œ ν…ŒμŠ€νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

 

 

1. λ‹¨μœ„ ν…ŒμŠ€νŠΈ

ν•˜λ‚˜μ˜ λͺ¨λ“ˆ(κΈ°λŠ₯)이 μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

 

2. 톡합 ν…ŒμŠ€νŠΈ

λ‹¨μœ„ ν…ŒμŠ€νŠΈμ—μ„œ κ²€μ¦λœ κ°œλ³„ λͺ¨λ“ˆ(κΈ°λŠ₯)듀을 κ²°ν•©ν•˜μ—¬ μ˜ˆμƒλŒ€λ‘œ μƒν˜Έμž‘μš©ν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜λŠ” ν…ŒμŠ€νŠΈμž…λ‹ˆλ‹€.

주둜 μ™ΈλΆ€ μ˜μ‘΄μ„±(ex.λ°μ΄ν„°λ² μ΄μŠ€)에 λŒ€ν•΄ ν…ŒμŠ€νŠΈ ν•©λ‹ˆλ‹€.

 

3. E2E(End to End)

μ‹€μ œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” μ‚¬μš©μž μ‹œλ‚˜λ¦¬μ˜€λ₯Ό ν…ŒμŠ€νŠΈν•¨μœΌλ‘œμ¨ μ†Œν”„νŠΈμ›¨μ–΄κ°€ μ˜λ„ν•œ λŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

 

 

πŸ’‘ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ™œ μž‘μ„±ν• κΉŒμš”?

이전 개발 κ³Όμ •μ—μ„œ κ²Œμ‹œκΈ€ 등둝 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  κ·Έ κΈ°λŠ₯을 ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같은 과정을 κ±°μ³€μŠ΅λ‹ˆλ‹€.

 

-> κ²Œμ‹œκΈ€ 등둝 κΈ°λŠ₯κ΅¬ν˜„ 

-> μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

-> 둜그인 ( νšŒμ›λ§Œ μž‘μ„± κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— )

-> κ²Œμ‚¬νŒ 클릭

-> κ²Œμ‹œκΈ€ μž‘μ„±

-> κ²Œμ‹œκΈ€ 등둝

 

μ΄λŸ¬ν•œ 과정을 톡해 κΈ°λŠ₯이 μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κ³  μˆ˜μ •ν•˜κ³ λ₯Ό λ°˜λ³΅ν•˜λ‹€ λ³΄λ‹ˆ λ³΅μž‘ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ±°λ‚˜ μž¦μ€ μˆ˜μ •μ΄ ν•„μš”ν•˜κ²Œ 될 λ•Œλ©΄ 였랜 μ‹œκ°„λ™μ•ˆ ν…ŒμŠ€νŠΈν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

πŸ”Ž 생산성 ν–₯상

ν•˜μ§€λ§Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ μ½”λ“œλ₯Όν†΅ν•΄ κΈ°λŠ₯의 μž‘λ™κ³Ό 였λ₯˜λ₯Ό ν™•μΈν•˜κ³  디버깅에 μ†Œλͺ¨λ˜λŠ” μ‹œκ°„μ„ 쀄여 μ„œλΉ„μŠ€ κ°œλ°œμžκ°€ λΉ„μ¦ˆλ‹ˆμŠ€ κ°œλ°œμ— μ§‘μ€‘ν•˜λ©΄μ„œ 생산성 ν–₯상에 도움을 주게 λ©λ‹ˆλ‹€. 

πŸ”Ž μ•ˆμ •κ° 

λ§Œμ•½ μš”κ΅¬μ‚¬ν•­ λ³€κ²½μ΄λ‚˜ λ¦¬νŒ©ν† λ§μ„ 톡해 μ„œλΉ„μŠ€ λ‘œμ§μ„ λ³€κ²½ν–ˆλ‹€λ©΄ μ΄μ „μ˜ μž‘μ„±ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 톡해 λ³€κ²½μ—λŒ€ν•œ λ‹€λ₯Έ κΈ°λŠ₯λ“€μ˜ 결함을 쑰기에 λ°œκ²¬ν•  수 있고, μ΄λ‘œμΈν•΄ κ°œλ°œμžλŠ” μ’€ 더 μ•ˆμ •κ° μžˆλŠ” κ°œλ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“Œ ν•˜μ§€λ§Œ 단점도 μ‘΄μž¬ν•©λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ κΈ°λŠ₯에 μ—¬λŸ¬κ°€μ§€ 상황을 λͺ¨λ‘ μ—Όλ‘ν•˜μ—¬ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— λ§Žμ€ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ²Œ λ©λ‹ˆλ‹€.

λ˜ν•œ κΈ°λŠ₯이 λ³€κ²½λœλ‹€λ©΄ ν…ŒμŠ€νŠΈ μ½”λ“œλ˜ν•œ λ³€κ²½ν•΄μ•Ό ν•˜κΈ°μ— 개발 μ‹œκ°„κ³Ό μœ μ§€λ³΄μˆ˜ λΉ„μš©μ΄ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€.

 

 

βœ” TDD(Test-Driven Development)?

μ†Œν”„νŠΈμ›¨μ–΄ 개발 방법둠 μ€‘μ˜ ν•˜λ‚˜λ‘œ, μ„  ν…ŒμŠ€νŠΈ ν›„ 개발 방식을 λ§ν•©λ‹ˆλ‹€.

즉, λ¨Όμ € ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•œ ν›„ ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•œ μ½”λ“œλ₯Ό κ°œλ°œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

 

λΉ¨κ°• : μ‹€νŒ¨ν•˜λŠ” μž‘μ€ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

초둝 :  κ°€λŠ₯ν•œ 빨리 ν…ŒμŠ€νŠΈκ°€ ν†΅κ³Όν•˜κ²Œλ” λ§Œλ“­λ‹ˆλ‹€.

λ¦¬νŒ©ν„°λ§ : 초둝 λ‹¨κ³„μ—μ„œ 일단 ν†΅κ³Όν•˜κ²Œλ§Œ μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ™„μ „ν•œ ν˜•νƒœλ‘œ λ¦¬νŒ©ν„°λ§ ν•©λ‹ˆλ‹€.

 

μœ„μ™€κ°™μ€ ν…ŒμŠ€νŠΈ -> κΈ°λŠ₯κ΅¬ν˜„ -> λ¦¬νŒ©ν† λ§μ˜ μ‚¬μ΄ν΄λ‘œ κ°œλ°œμ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

이 과정을 톡해 μžμ—°μŠ€λŸ½κ²Œ κΈ°λŠ₯ κ΅¬ν˜„ 및 μ½”λ“œ μˆ˜μ •μ— λŒ€ν•œ κ·Όκ±°λ₯Ό 얻을 수 μžˆκ²Œλ©λ‹ˆλ‹€.

 

객체 μ§€ν–₯적인 μ½”λ“œ 생산

디버깅 μ‹œκ°„μ˜ 단좕

ν…ŒμŠ€νŠΈ λ¬Έμ„œμ˜ λŒ€μ²΄ κΈ°λŠ₯

μΆ”κ°€ κ΅¬ν˜„μ˜ μš©μ˜ν•¨

 

이처럼 λ‹€μ–‘ν•œ μž₯점듀이 μžˆμ§€λ§Œ μ΄λŸ¬ν•œ κ°œλ°œλ°©μ‹μ€ μ–΄λ ΅κ²Œλ§Œ λŠκ»΄μ§‘λ‹ˆλ‹€.😭

 

κ°œλ°œμ€ 섀계(Design)이후에 μ΄λ£¨μ–΄μ§€λŠ” μž‘μ—…μœΌλ‘œ, 섀계가 μ œλŒ€λ‘œ 이루어지지 μ•ŠλŠ”λ‹€λ©΄ 개발이 νž˜λ“€μ–΄μ§€λŠ” 것은 λ‹Ήμ—°ν• ν•  λΏλ”λŸ¬ TDD방법둠을 μ μš©ν•˜κΈ°λ„ μ–΄λ €μšΈ κ²ƒμž…λ‹ˆλ‹€.

 

일반적인 ν…ŒμŠ€νŠΈ 방법은 κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κ³  κ·Έ κΈ°λŠ₯에 λŒ€ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±ν•©λ‹ˆλ‹€, μ΄λŠ” 맀우 μ§κ΄€μ μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ²Œ λœλ‹€λ©΄ κ΅¬ν˜„ν•  κΈ°λŠ₯을 μƒκ°ν•˜λ©° μ „μ²΄μ μœΌλ‘œ μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό ν•  κ²ƒμž…λ‹ˆλ‹€.

즉, 잘 짜인 섀계λ₯Ό 기반으둜 섀계에 λŒ€ν•œ 이해가 ν•„μš”ν•  κ²ƒμž…λ‹ˆλ‹€.

 

 

πŸ“Œ ν•˜μ§€λ§Œ TDDκ°€ 무쑰건 μ’‹λ‹€κ³  ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ λ°λ“œλΌμΈμ΄ 있고 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λΉ„μš©μ΄ 더 λ§Žλ‹€κ³  νŒλ‹¨λœλ‹€λ©΄ λ‹€λ₯Έ 방법을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.

개발 ν™˜κ²½μ€ λ‹€μ–‘ν•˜κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ 방법둠인 TDDλ₯Ό μ–΄λ–€ 상황에 μ μš©ν•  것인지 κ³ λ―Όν•΄ λ³Ό ν•„μš”κ°€ μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

 

 

 


 

πŸ“š Reference

https://itstory1592.tistory.com/108

https://www.startupcode.kr/company/blog/archives/17

https://tech.inflab.com/20230404-test-code/