๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

BackEnd

[์ปจ๋ฒ„๋Ÿฐ์Šค ๋ฆฌ๋ทฐ] TDD๋Š” ์˜ค๋ธŒ์ ํŠธ ๋””์ž์ธ(๊ฐ์ฒด ์„ค๊ณ„)์— ๋„์›€์ด ๋˜๋Š”๊ฐ€?

๋ฐ˜์‘ํ˜•

๐Ÿš€ DevTernity 2018: Sandro Mancuso - Does TDD Really Lead to Good Design? #devternity - YouTube

TDD๋Š” ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.

์˜ค๋ธŒ์ ํŠธ ๋””์ž์ธ์„ ์œ„ํ•œ ๋„๊ตฌ๋‹ค.

ํ•˜์ง€๋งŒ Red Green Refactor์˜ ๋ฐ˜๋ณต์ด ๋ฐ˜๋“œ์‹œ ์ข‹์€ ์„ค๊ณ„๋ฅผ ๋งŒ๋“ค์–ด๋‚ผ๊นŒ?

 

classical TDD(๋””ํŠธ๋กœ์ดํŠธ ํ•™ํŒŒ TDD)๋Š” in , out์—๋งŒ ์ง‘์ค‘ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํƒ„์ƒํ•˜๋Š” ์„ค๊ณ„๋Š” ์ฐฝ๋ฐœ์ ์ด๋‹ค.

๊ฐ์ฒด์— ์ ์ ˆํ•œ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๋ถ€์—ฌํ•˜๊ณ  ๊ฐ์ฒด ์‚ฌ์ด์— ์˜ฌ๋ฐ”๋ฅธ ํ˜‘๋ ฅ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด์ง€๋Š”๊ฑด ์šฐ์—ฐ์ผ ๋ฟ์ด๋‹ค.

(๋ฌผ๋ก  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์„ค๊ณ„์˜ ์ง€ํ–ฅ์ ์€ ๋ถ„๋ช…ํžˆ ์กด์žฌํ•œ๋‹ค!)

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด - YES24

 

๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด - YES24

ใ€Ž๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ดใ€๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€๋ผ๋Š” ์›๋ก ์ ๋ฉด์„œ๋„ ๋‹ค์†Œ ์œ„ํ—˜ํ•œ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์—ฌ์ง„ ์ฑ…์ด๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ณธ์งˆ์„ ์˜คํ•ดํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ€์žฅ

www.yes24.com

 

ํ•ด๋‹น ์„ธ์…˜์˜ ์—ฐ์‚ฌ๋Š” London style(mockiest) ์Šคํƒ€์ผ์˜ TDD๋ฅผ ์ถ”์ƒํ™”์˜ ๋„๊ตฌ๋กœ ํ™œ์šฉํ•œ๋‹ค.

๋จผ์ € DDD์™€ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ๋“ฑ์˜ ํฐ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆฐ๋‹ค.

๊ทธ ๋‹ค์Œ ์‹œ์Šคํ…œ์˜ ๋ฐ”๊นฅ์—์„œ๋ถ€ํ„ฐ ๋‚ด๋ถ€๋กœ ์ ์ฐจ ๊ตฌํ˜„ํ•ด๋‚˜๊ฐ„๋‹ค.

์ด๋•Œ ์‹œ์Šคํ…œ ๋‚ด๋ถ€์˜ ๋ฐ”์šด๋”๋ฆฌ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ mock์ด๋‹ค

 

์˜ˆ๋ฅผ๋“ค์–ด ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์—…ํ•œ๋‹ค.

  • ์‹œ์Šคํ…œ ์•ˆ์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ํŒŒ์‹ฑ
  • ์„œ๋น„์Šค ๊ณ„์ธต์— ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ์œ„์ž„
  • ์„œ๋น„์Šค ๊ณ„์ธต์˜ ๋ฆฌํ„ด ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉํ•ด ์‘๋‹ต ๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋“ค์–ด 1์ฐจ ์•กํ„ฐ์—๊ฒŒ ์‘๋‹ต.

์ฆ‰, ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋น„์Šค ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์„œ๋น„์Šค ๊ฐ์ฒด๋Š” ์ถ”์ƒํ™”(mocking)์˜ ๋Œ€์ƒ์ด๋‹ค.

 

validator, calculator๋‚˜ ๋•Œ๋•Œ๋กœ ์ฑ…์ž„์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด ๋•Œ๋Š” classical TDD์˜ ์‚ฌ์ดํด๋กœ ์ „ํ™˜ํ•ด ์ฐฝ๋ฐœ์  ์„ค๊ณ„๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

์ด ์ฐฝ๋ฐœ์  ์„ค๊ณ„์—์„œ ์ ์ ˆํ•œ ์ถ”์ƒํ™”๋ฅผ ๋Œ์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด mock์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜, ์ฑ…์ž„์ด ๋ช…ํ™•ํ•˜๋ฉด ๋ฐ”๋กœ mock ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ๋‹ค.

(in, out ๋งŒ์œผ๋กœ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์ˆœ์ˆ˜ํ•œ ์—ฐ์‚ฐ๋งŒ์„ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. + ๋„๋ฉ”์ธ ์„œ๋น„์Šค๋Š” ์ˆœ์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.)

๊ทธ๋ฆผ์ด ์ง€์ €๋ถ„ํ•˜์ง€๋งŒ, ์•ˆ์—์„œ ๋ฐ–์œผ๋กœ ์ ์ฐจ ์ถ”์ƒํ™”๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋ฉฐ TDD๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด,

 

1. ๋จธ๋ฆฟ์†์— ์•„ํ‚คํ…์ฒ˜, ์„ค๊ณ„๊ฐ€ ๋ช…ํ™•ํ•œ ์ƒํƒœ์—์„œ

2. ์‹œ์Šคํ…œ์˜ ๋ฐ–์—์„œ ์•ˆ์ชฝ์œผ๋กœ ์ถ”์ƒํ™”๋ฅผ ๊ตฌ์ฒดํ™”ํ•˜๋ฉฐ TDD๋ฅผ ์‹œ๋„ํ•œ๋‹ค.

3. ์ด๋•Œ ์‹œ์Šคํ…œ์˜ ๋‚ด๋ถ€๋Š” mock ๊ฐ์ฒด๋กœ ์ถ”์ƒํ™”ํ•œ๋‹ค.

4. ์ดˆ๊ธฐ ์„ค๊ณ„์—์„œ ๋ˆ„๋ฝ๋˜๊ฑฐ๋‚˜, ์ฑ…์ž„์„ ์ ์ ˆํ•˜๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์—†์„๊ฒƒ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, classical๋กœ ๋Œ์•„๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด์™€์˜ ํ˜‘๋ ฅ์„ ๋งŒ๋“ ๋‹ค. ํ•ด๋‹น ๊ฐ์ฒด์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์ด ์ ์ ˆํ•˜๊ฒŒ ์ถ”์ƒํ™”๋˜๋ฉด, ๊ทธ๋•Œ๋ถ€ํ„ฐ๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ํ–‰๋™์„ mocking ํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์‹ค๋ ฅ์ด ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก TDD๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

๋ฐ˜์‘ํ˜•