๐ DevTernity 2018: Sandro Mancuso - Does TDD Really Lead to Good Design? #devternity - YouTube
TDD๋ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ์ด ์๋๋ค.
์ค๋ธ์ ํธ ๋์์ธ์ ์ํ ๋๊ตฌ๋ค.
ํ์ง๋ง Red Green Refactor์ ๋ฐ๋ณต์ด ๋ฐ๋์ ์ข์ ์ค๊ณ๋ฅผ ๋ง๋ค์ด๋ผ๊น?
classical TDD(๋ํธ๋ก์ดํธ ํํ TDD)๋ in , out์๋ง ์ง์คํ๋ค.
ํ ์คํธ๋ฅผ ํตํด ํ์ํ๋ ์ค๊ณ๋ ์ฐฝ๋ฐ์ ์ด๋ค.
๊ฐ์ฒด์ ์ ์ ํ ์ญํ ๊ณผ ์ฑ ์์ ๋ถ์ฌํ๊ณ ๊ฐ์ฒด ์ฌ์ด์ ์ฌ๋ฐ๋ฅธ ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋ง๋ค์ด์ง๋๊ฑด ์ฐ์ฐ์ผ ๋ฟ์ด๋ค.
(๋ฌผ๋ก ๊ทธ๋ ์ง ์๋ค. ์ค๊ณ์ ์งํฅ์ ์ ๋ถ๋ช ํ ์กด์ฌํ๋ค!)
๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด - YES24
ํด๋น ์ธ์ ์ ์ฐ์ฌ๋ London style(mockiest) ์คํ์ผ์ TDD๋ฅผ ์ถ์ํ์ ๋๊ตฌ๋ก ํ์ฉํ๋ค.
๋จผ์ DDD์ ํฅ์ฌ๊ณ ๋ ์ํคํ ์ฒ ๋ฑ์ ํฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค.
๊ทธ ๋ค์ ์์คํ ์ ๋ฐ๊นฅ์์๋ถํฐ ๋ด๋ถ๋ก ์ ์ฐจ ๊ตฌํํด๋๊ฐ๋ค.
์ด๋ ์์คํ ๋ด๋ถ์ ๋ฐ์ด๋๋ฆฌ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก mock์ด๋ค
์๋ฅผ๋ค์ด ์ปจํธ๋กค๋ฌ๋ ์๋์ ๊ฐ์ด ์์ ํ๋ค.
- ์์คํ ์์ผ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ํ์ฑ
- ์๋น์ค ๊ณ์ธต์ ์ค์ผ์คํธ๋ ์ด์ ์ ์์
- ์๋น์ค ๊ณ์ธต์ ๋ฆฌํด ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด ์๋ต ๋ฉ์ธ์ง๋ฅผ ๋ง๋ค์ด 1์ฐจ ์กํฐ์๊ฒ ์๋ต.
์ฆ, ์ปจํธ๋กค๋ฌ๋ ์๋น์ค ๊ฐ์ฒด์ ํ๋ ฅํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์๋น์ค ๊ฐ์ฒด๋ ์ถ์ํ(mocking)์ ๋์์ด๋ค.
validator, calculator๋ ๋๋๋ก ์ฑ ์์ด ๋ช ํํ์ง ์์ ๊ฐ์ฒด๊ฐ ํ์ํ ๋๊ฐ ์๋ค.
์ด ๋๋ classical TDD์ ์ฌ์ดํด๋ก ์ ํํด ์ฐฝ๋ฐ์ ์ค๊ณ๋ฅผ ์๋ํ๋ค.
์ด ์ฐฝ๋ฐ์ ์ค๊ณ์์ ์ ์ ํ ์ถ์ํ๋ฅผ ๋์ด๋ผ ์ ์์ผ๋ฉด mock์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ ํํ๊ฑฐ๋, ์ฑ ์์ด ๋ช ํํ๋ฉด ๋ฐ๋ก mock ๊ฐ์ฒด๋ฅผ ํ์ฉํ๋ค.
(in, out ๋ง์ผ๋ก ๊ฒ์ฆํ ์ ์๋ค๋ ๊ฒ์ ํด๋น ๊ฐ์ฒด๊ฐ ์์ํ ์ฐ์ฐ๋ง์ ํฌํจํ๋ค๋ ๊ฒ์ด๋ค. + ๋๋ฉ์ธ ์๋น์ค๋ ์์ํด์ผ ํ๋ค.)
์ ๋ฆฌํ์๋ฉด,
1. ๋จธ๋ฆฟ์์ ์ํคํ ์ฒ, ์ค๊ณ๊ฐ ๋ช ํํ ์ํ์์
2. ์์คํ ์ ๋ฐ์์ ์์ชฝ์ผ๋ก ์ถ์ํ๋ฅผ ๊ตฌ์ฒดํํ๋ฉฐ TDD๋ฅผ ์๋ํ๋ค.
3. ์ด๋ ์์คํ ์ ๋ด๋ถ๋ mock ๊ฐ์ฒด๋ก ์ถ์ํํ๋ค.
4. ์ด๊ธฐ ์ค๊ณ์์ ๋๋ฝ๋๊ฑฐ๋, ์ฑ ์์ ์ ์ ํ๊ฒ ํ ๋นํ ์ ์์๊ฒ ๊ฐ์ ๊ฐ์ฒด๊ฐ ํ์ํ๋ค๋ฉด, classical๋ก ๋์๊ฐ ํด๋น ๊ฐ์ฒด์์ ํ๋ ฅ์ ๋ง๋ ๋ค. ํด๋น ๊ฐ์ฒด์ ์ญํ ๊ณผ ์ฑ ์์ด ์ ์ ํ๊ฒ ์ถ์ํ๋๋ฉด, ๊ทธ๋๋ถํฐ๋ ํด๋น ๊ฐ์ฒด์ ํ๋์ mocking ํ ์ ์๋ค.
5. ๊ฐ์ฒด ์งํฅ ์ค๊ณ ์ค๋ ฅ์ด ์ฌ๋ผ๊ฐ์๋ก TDD๊ฐ ์ฌ์์ง๋ค.
'BackEnd' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ค๋ธ์ ํธ 5์ฅ. ์ฑ ์ ํ ๋นํ๊ธฐ (0) | 2021.12.17 |
---|---|
์ค๋ธ์ ํธ 4์ฅ ์ค๊ณ ํ์ง๊ณผ ํธ๋ ์ด๋์คํ ์ ๋ฆฌ (0) | 2021.12.17 |
์ค๋ธ์ ํธ 3์ฅ ์ญํ , ์ฑ ์, ํ๋ ฅ ์ ๋ฆฌ (0) | 2021.12.17 |
์ค๋ธ์ ํธ 2์ฅ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฆฌ (0) | 2021.12.17 |
์ค๋ธ์ ํธ 1์ฅ ๊ฐ์ฒด, ์ค๊ณ ๋ด์ฉ ์ ๋ฆฌ (0) | 2021.12.15 |