์์ฆ ๋๋ถ๋ถ์ ์๋น์ค ํ์ฌ๋ ํ ์คํธ ์ฝ๋์ ๊ดํด ์๊ตฌํ๊ณ ์๋ค๊ณ ํฉ๋๋ค.
์์ฆ ์ ๋งํ๋ ์๋น์ค ํ์ฌ์ ์ทจ์ ๊ณผ ์ด์ง์ ํ๊ธฐ ์ํด์๋ ํ ์คํธ ์ฝ๋๋ ์ ๋ ๋น ์ง ์ ์๋ ์์์ ๋๋ค.
์์ผ๋ก ์งํํ ํ๋ก์ ํธ์์ ๊ฐ์ฅ ์ค์ํ ํ ์คํธ ์ฝ๋ ์์ฑ์ ๊ธฐ๋ณธ์ ๋ฐฐ์๋ด ์๋ค.
2.1 ํ ์คํธ ์ฝ๋ ์๊ฐ
TDD๋ ํ ์คํธ๊ฐ ์ฃผ๋ํ๋ ๊ฐ๋ฐ์ ์ด์ผ๊ธฐํฉ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค.
- TDD : RED -> GREEN -> REFACTOR
RED : ํญ์ ์คํจํ๋ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ
GREEN : ํ ์คํธ๊ฐ ํต๊ณผํ๋ ํ๋ก๋์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ
REFACTOR : ํ ์คํธ๊ฐ ํต๊ณผํ๋ฉด ํ๋ก๋์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํฉ๋๋ค
๋จ์ ํ ์คํธ๋ TDD์ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ธ ๊ธฐ๋ฅ ๋จ์์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ด์ผ๊ธฐํฉ๋๋ค. TDD์ ๋ฌ๋ฆฌ ํ ์คํธ ์ฝ๋๋ฅผ ๊ผญ ๋จผ์ ์์ฑํด์ผ ํ๋ ๊ฒ๋ ์๋๊ณ , ๋ฆฌํฉํ ๋ง๋ ํฌํจ๋์ง ์์ต๋๋ค. ์์ํ๊ฒ ํ ์คํธ ์ฝ๋๋ง ์์ฑํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ด๋ฒ ์ฅ์์๋ TDD๊ฐ ์๋ ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ๋ฐฐ์๋๋ค.
ํ ์คํธ ์ฝ๋๋ ์ ์์ฑํด์ผ ํ ๊น์?
- ๋จ์ ํ ์คํธ๋ ๊ฐ๋ฐ๋จ๊ณ ์ด๊ธฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ฒ ๋์์ค๋๋ค
- ๋จ์ ํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ๋์ค์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ทธ๋ ์ด๋ ๋ฑ์์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค
- ๋จ์ ํ ์คํธ๋ ๊ธฐ๋ฅ์ ๋ํ ๋ถํ์ค์ฑ์ ๊ฐ์์ํฌ ์ ์์ต๋๋ค
- ๋จ์ ํ ์คํธ๋ ์์คํ ์ ๋ํ ์ค์ ๋ฌธ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฆ, ๋จ์ ํ ์คํธ ์์ฒด๊ฐ ๋ฌธ์๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค
- ๋น ๋ฅธ ํผ๋๋ฐฑ
- ์ ๊ณ์ ํฐ์บฃ์ ๋ด๋ ธ๋ค๊ฐ ๋ค์ ์คํํ๋ ์ผ์ ๋ฐ๋ณตํ ๊น์? -> ์ด๋ ํ ์คํธ ์ฝ๋๊ฐ ์๋ค ๋ณด๋ ๋๊ณผ ์์ผ๋ก ์ง์ ์์ ๋ ๊ธฐ๋ฅ์ ํ์ธํ ์๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ด๋ฐ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ฏ๋ก ๊ตณ์ด ์์ผ๋ก ์ง์ ํฐ์บฃ์ ๊ณ์ ์ฌ๋ ธ๋ค ๋ด๋ ธ๋ค ํ ํ์๊ฐ ์์ต๋๋ค.
- System.out.println() ์ ํตํด ๋์ผ๋ก ๊ฒ์ฆํด์ผ ํ๋ ๋ฌธ์ -> ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ ์ฌ๋์ ๋์ผ๋ก ๊ฒ์ฆํ์ง ์๊ฒ ์๋๊ฒ์ฆ์ด ๊ฐ๋ฅํจ. ์๋๊ฒ์ฆ์ ํ์์๊ฒ ๋จ
- ๊ฐ๋ฐ์๊ฐ ๋ง๋ ๊ธฐ๋ฅ์ ์์ ํ๊ฒ ๋ณดํธํด ์ค
์๋ฅผ ๋ค์ด B๋ผ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ํ ์คํธํฉ๋๋ค. B๊ธฐ๋ฅ์ด ์ ๋์ด ์คํํ๋๋ ๊ธฐ์กด์ ์๋๋ A๊ธฐ๋ฅ์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ ๋ฐ๊ฒฌํฉ๋๋ค. ํ๋์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ง๋ค ๋๋ฌด๋~
-> ์ด๋ ๊ฒ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋, ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์๋๋๋ ๊ฒ์ ๋ณด์ฅํด ์ฃผ๋ ๊ฒ์ด ํ ์คํธ ์ฝ๋์ ๋๋ค. ~
ํ ์คํธ ์ฝ๋ ์์ฑ์ ๋์์ฃผ๋ ํ๋ ์์ํฌ๋ค์ด ์์ต๋๋ค
๊ฐ์ฅ ๋์ค์ ์ธ ํ ์คํธ ํ๋ ์์ํฌ๋ก๋ xUnit์ด ์๋๋ฐ ๊ฐ๋ฐํ๊ฒฝ(x)์ ๋ฐ๋ผ Unit ํ ์คํธ๋ฅผ ๋์์ฃผ๋ ๋๊ตฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋ํ์ ์ธ xUnit ํ๋ ์์ํฌ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
JUnit - Java
DBUnit - DB
CppUnit - C++
NUnit - .net
์ด ์ค์์ ์๋ฐ์ฉ์ธ JUnit์ ์์ผ๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
2.2 Hello Controller ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ
๋ฐฉ๊ธ ์์ฑํ Application ํด๋์ค๋ ์์ผ๋ก ๋ง๋ค ํ๋ก์ ํธ์ ๋ฉ์ธ ํด๋์ค๊ฐ ๋ฉ๋๋ค.
@SpringBootApplication์ผ๋ก ์ธํด ์คํ๋ง ๋ถํธ์ ์๋ ์ค์ , ์คํ๋ง Bean ์ฝ๊ธฐ์ ์์ฑ์ ๋ชจ๋ ์๋์ผ๋ก ์ค์ ๋ฉ๋๋ค.
ํนํ๋ @SpringBootApplication์ด ์๋ ์์น๋ถํฐ ์ค์ ์ ์ฝ์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์ด ํด๋์ค๋ ํญ์ ํ๋ก์ ํธ์ ์ต์๋จ์ ์์นํด์ผ๋ง ํฉ๋๋ค.
~ ์ค๋ช
Application ํด๋์ค์ ๋ํ ์ค๋ช ์ด ๋๋ฌ์ผ๋, ํ ์คํธ๋ฅผ ์ํ Controller๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฒ์๋ ํ์ฌ ํจํค์ง ํ์์ web์ด๋ ํจํค์ง๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์์ผ๋ก ์ปจํธ๋กค๋ฌ์ ๊ด๋ จ๋ ํด๋์ค๋ค์ ๋ชจ๋ ์ด ํจํค์ง์ ๋ด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ ์คํธํด๋ณผ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
์์ฑ๋์ผ๋ฉด ๊ฐ๋จํ API๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
์ค๋ช
1. @RestController
์ปจํธ๋กค๋ฌ๋ฅผ JSON์ ๋ฐํํ๋ ์ปจํธ๋กค๋ฌ๋ก ๋ง๋ค์ด ์ค๋๋ค
2. @GetMapping
HTTP Method์ธ Get์ ์์ฒญ์ ๋ฐ์ ์ ์๋ API๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
์์ฑํ ์ฝ๋๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ ์คํธ๋ฅผ ํ๊ฒ ์ต๋๋ค. WAS๋ฅผ ์คํํ์ง ์๊ณ , ํ ์คํธ ์ฝ๋๋ก ๊ฒ์ฆํด ๋ณด๊ฒ ์ต๋๋ค.