ํ๋ก์ ํธ ์ค๊ณ๋ฅผ ๋ฐ์ ์ํค๋
ํ
์คํธ์ ๋ณธ์ง์ ์ง์ด๋๋ฆด๊ฒ์!
Spring์ ํ
์คํธ๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ผ๋ก ์์ํด, ์ํคํ
์ฒ ๊ฐ์๋ก ๋๋ฉ๋๋ค!
ํ
์คํธ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์๊ฒฌ์ ์ ๋ฌํด ๋๋ฆฌ๋ ค๋ฉด, ๊ฒฐ๊ตญ ์ํคํ
์ฒ๋ก ๋๋์ผ ํ๋ค๋ผ๋ ์๊ฐ์ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
ํ
์คํธ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์ ๋ฐฐ์ฐ๊ณ , Spring(์คํ๋ง)์ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๋ฃ์ด์ผ ํ๋์ง ๋ฐฐ์๋๋ค. ๋ ๋์๊ฐ ์์ฐ์ค๋ฌ์ด ํ
์คํธ๋ฅผ ํ ์ ์๊ฒ ์คํ๋ง ์ค๊ณ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
๊ทธ๋์, ์ด๋ฐ ๋ด์ฉ์ ํ์ตํฉ๋๋ค.
ํ
์คํธ๊ฐ
ํ์ํ ์ด์
ํ
์คํธ์ ๋ํ
๊ธฐ๋ณธ ๊ฐ๋
Spring์
ํ
์คํธ๋ฅผ ๋ฃ๋
๋ฐฉ๋ฒ
Spring ์ค๊ณ๋ฅผ
์งํ์ํค๋
๋ฐฉ๋ฒ
๊ทธ๋ฐ๋ฐ ํน์, ์ด๋ฐ ์๊ฐ์ด ๋ค์ง ์๋์?
ํ
์คํธ์ ๋ํ ๊ณ ๋ฏผ๊ณผ ์คํด๋ค
โํ
์คํธ๋ฅผ ์ ๋ง ๊ฐ์ ํ ๋ฃ์ด๋ณด๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ...โ
๋ค๋ฅธ ํ์ฌ ๋ค๋๋ ์น๊ตฌ๋ ์๋์ ์๊ตฌ์ ๋ฐ๋ง์ถฐ์ ํ
์คํธ๋ฅผ ๊พธ์คํ ๋ฃ์ด๊ฐ๋ฉฐ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฑ์ฅํ๊ณ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ ํ์ฌ๋ ํ
์คํธ๋ฅผ ๋ฃ์ง ์์์. ๋ค์ฒ์ง๊ณ ์ถ์ง ์์ต๋๋ค. ๊ณต๋ถํ ์์ง๋ ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋์ ํ ์ด ๋ ๊ฑฐ์ ์์คํ
์ ํ
์คํธ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ๋ฃ์ด์ผ ํ ์ง ๊ฐ์ด ์ ์ต๋๋ค.
โH2๋ฅผ ์ด์ฉํ ํ
์คํธ์ ์ ๋ฌผ์ด ๋ฉ๋๋ค.โ
H2๋ฅผ ์ด์ฉํ ํ
์คํธ๋ ๋๋ฌด ๋๋ฆฌ๊ณ DB์ ์ง๋์น๊ฒ ์ข
์์ ์
๋๋ค. ๋ชจ๋ ํ
์คํธ๊ฐ H2๋ฅผ ์ด์ฉํ๊ณ ์์ต๋๋ค. ํ
์คํธ๋ฅผ ๋๋ฆฌ๊ธฐ๋ ๋ถ๋ด์ค๋ฝ๊ณ , ํ
์คํธ๋ค์ด h2๋ฅผ ๊ณต์ ํ๋ค ๋ณด๋ ๋ฐ์ดํฐ๊ฐ ๋ค์์ผ์ ์ด๋จ ๋๋ ํ
์คํธ๊ฐ ์ฑ๊ณตํ๊ณ , ๋ ์ด๋จ ๋๋ ์คํจํฉ๋๋ค.
โํ
์คํธ์ ํ์์ฑ์ ๋ชป ๋๋ผ๊ฒ ์ต๋๋ค.โ
์ฐ๋ฆฌ ํ์ ์ฌ๋์ด ๊ทธ๋ ๊ฒ ๋ง์ง๋ ์๊ณ , ๋ฐฐํฌํ๋ฉด์๋ ๊ทธ๋ค์ง ๋ถ์ํจ์ ๋๋ ์ ์ด ์์ต๋๋ค. ์๊ตฌ์ฌํญ์ ์์๊ฐ๊ฐ ๋ณํฉ๋๋ค. ๊ทผ๋ฐ TDD๋ฅผ ์ด๋ป๊ฒ ํ๋์? ํ
์คํธ๋ ๊ฐ๋ฐ ์๋๋ง ๋ฆ์ถ ๋ฟ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํ
์คํธ, ์ ๋ ๊ฐ์ ๊ณ ๋ฏผ์ ํ์ต๋๋ค.
์์ค์ ๋์ ์๋ ํ
์คํธ ๊ด๋ จ ์ฑ
์ด๋ ์ธ๋ฏธ๋๋ฅผ ์ฐพ์๋ณด๋ฉด ๋๋ถ๋ถ ๊ทธ๋ฅ ํ
์คํธ์ ์ฅ์ , ํ
์คํธ ์ฝ๋ ์ง๋ ๋ฒ, JUnit, Mockito ์ ๋๋ง ์๊ธฐํ๊ณ ๋๋ฉ๋๋ค. ์์ ๋ ๋ฑ ์
๋ฌธ์์ ์
๋ง์ ๋ง์ ๋งํผ ๊ฐ๋จํ ์์ ๋ฟ์ด๊ณ ์. ๊ทธ๋์ ๋ง์ง๋ง์ ๊ฐ์ ์ฑ
์ ๋ฎ์ ๋๋ฉด ์ด๋ฐ ์๊ฐ์ด ๋ญ๋๋ค.
- "๋์ฒด ์ด๊ฑธ ํ์
์์ ์ด๋ป๊ฒ ์ฐ๋ผ๋ ๊ฑฐ์ฃ ?"
- "Spring์๋ ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ๋ฃ์ผ๋ผ๋ ๊ฑด๊ฐ์?"
- "์ด๊ฑด ํ๋ ์์ํฌ๊ฐ ์๋ ์ํฉ์์ ๋ฃ๋ ํ
์คํธ๋๊น ์ฝ๊ฒ ๋ฃ์ ์ ์๋ ๊ฑฐ ์๋๊ฐ์?"
ํผ๋์ค๋ฌ์ ์ต๋๋ค. H2๋ฅผ ์ด์ฉํ JPA ํ
์คํธ... ๋ญ ์ข์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ElasticSearch๋ Cassandra์ฒ๋ผ ํ
์คํธ์ฉ DB๊ฐ ์์ผ๋ฉด ์ด๋ป๊ฒ ํ
์คํธํ๋ผ๋ ๊ฑธ๊น์? ๊ฒ๋ค๊ฐ H2๋ฅผ ์ด์ฉํ ํ
์คํธ๋ ์ ๋ง ์น๋ช
์ ์ผ ์ ๋๋ก ๋๋ ธ์ต๋๋ค. ํ๋ฃจ์๋ ์ฌ๋ฌ ๋ฒ ๋๋ฆฌ๊ธฐ ๋ถ๋ด์ค๋ฌ์ ๊ณ ์. ํ
์คํธ๋ ์์ฃผ ๊นจ์ง๊ณ DB ํ
์ด๋ธ์ด๋ผ๋ ๋ณ๊ฒฝ๋๋ ๋ ์๋ ๊ด๋ จ๋ ํ
์คํธ๋ ์น ๋ค ์์ ํด์ผ ํด์ ์๊ฐ ๋ญ๋น ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค๊ธฐ ์ผ์ค์์ต๋๋ค.
TDD๋ฅผ ๊ณต๋ถํ๋ ค๋ฉด, TDD๋ถํฐ ๊ณต๋ถํ๋ฉด ์ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ค ์ ์ ๊ณ ๋ฏผ๋ค์ ์ํคํ
์ฒ์ DDD๋ฅผ ๊ณต๋ถํ๊ธฐ ์์ํ๋ฉด์ ๋ชจ๋ ํด๊ฒฐ๋ฉ๋๋ค. ์๊ณ ์์ต๋๋ค. TDD๋ ํญ์ ํซํ์ฃ . ๊ทธ๋ฐ๋ฐ TDD๋ ์ ๋ง ๋งค๋ ฅ์ ์ด๋ฉด์๋ ์ด๋ ค์ด ๋ฐฉ๋ฒ๋ก ์
๋๋ค. TDD๋ฅผ ํด๋ณธ ์ ์๋ ์กฐ์ง์์ TDD๊ฐ ์ ํ์ด๋ ์ด์ ๋ถํฐ TDD๋ก ๊ฐ๋ฐํ๋ ค๊ณ ํ๋ฉด ๊ทธ๊ฒ ๋ ๊น์? TDD๋ ์๊ฐ๋ณด๋ค ์์ํ๊ธฐ ์ ์ ์์์ผ ํ ์ ์ ์ง์๊ณผ ๊ณต๊ฐ๋๋ฅผ ์ ๋ง๋ก ๋ง์ด ํ์๋ก ํฉ๋๋ค.
๊ทธ๋์ TDD๋ฅผ ๊ณต๋ถํ๋ ค๋ฉด TDD๋ถํฐ ๊ณต๋ถํ๋ฉด ์ ๋ฉ๋๋ค. ํ
์คํธ๋ฅผ ๋จผ์ ๊ณต๋ถํด์ผ ํฉ๋๋ค. ๋ฏธ์ ๋ถ์ ํ๋ ค๋ฉด ๋ฐฉ์ ์๋ถํฐ ๋ค๋ฃฐ ์ค ์์์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ง์
๋๋ค.
ํ
์คํธ์ ๋ํ ์ ์ ์ด์ผ๊ธฐ๋ฅผ ํ์ด๋๋ฆด๊ฒ์!
ํ
์คํธ์ ๋ํ ๊ณ ๋ฏผ์
๋ช
์พํ๊ฒ ํด๊ฒฐํด๋๋ฆด๊ฒ์.
ํ
์คํธ์ ํ์์ฑ์ ๋ชป ๋๋ผ๊ฒ ๋ค๋ฉด
ํ
์คํธ์ ํ์์ฑ์ด ๋๊ปด์ง์ง ์๋๋ค๋ฉด, ์์ง ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ๊ทธ๋ฆฌ ํฌ์ง ์๊ฑฐ๋ ํ
์คํธ๊ฐ ์์ด๋ ๋ ๋งํผ์ ํ๋ฅญํ ๊ฐ๋ฐ ๋ฅ๋ ฅ๊ณผ ๋ฌธํ๋ฅผ ๊ฐ์ถ์ ๊ฒ ๊ฐ์ต๋๋ค. ํ
์คํธ๋ ์ ๋ต์ด ์๋๋๋ค! ํ
์คํธ๊ฐ ์๋ ์์ ์๋ ํ๋ฅญํ ํ๋ก์ ํธ๋ค์ด ๋ง์ด ๊ฐ๋ฐ๋์์ต๋๋ค. ํ
์คํธ๋ ์ข์ ์ํํธ์จ์ด๋ฅผ ์ป๊ธฐ ์ํ ๋๊ตฌ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ์์ฒด๊ฐ ๋ชฉํ๊ฐ ์๋๋๋ค.
ํ
์คํธ๋ก ์ข์ ์ค๊ณ๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด
ํ
์คํธ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์๋ง ๋๋ฌด ์น์คํด์ ๊ณต๋ถํ์ ๊ฒ ๊ฐ์ต๋๋ค. JUnit ์ฌ์ฉ๋ฒ, Mockito ์ฌ์ฉ๋ฒ, h2๋ฅผ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ์ ๊ณต๋ถํ๋ ๊ฒ์ ๋ถ๋ช
์๋ฏธ๊ฐ ์๋ ๊ณต๋ถ์ง๋ง ๊ทธ๊ฒ ํ
์คํธ์ ๋ณธ์ง์ ์๋๋๋ค. ํ
์คํธ๋ฅผ ์ ํด์ผํ๊ณ , ์ด๋ค ๋ชฉํ๊ฐ ์๊ณ ๊ทธ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ์ด๋ป๊ฒ ์ค์ฒํด์ผ ํ๋์ง๋ฅผ ์ตํ์ผ ํฉ๋๋ค
ํ
์คํธ ํ๋ ์์ํฌ ์์ด ํ
์คํธํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ๋ค๋ฉด
ํ
์คํธ ํ๋ ์์ํฌ์ ๋ํ ์ง๋ฌธ ์ญ์ ์ด์ ์ง๋ฌธ๊ณผ ๊ฐ์ ๋๋ต์
๋๋ค. ๋ง์ฝ ์ฌ๋ฌ๋ถ์ด Typescript
+ Nest.js
๋ฅผ ์ฐ๋ ํ๊ฒฝ์ ์๋ค๋ฉด, ์ด๋ป๊ฒ ํ
์คํธํ์ค ๊ฑด๊ฐ์? Mockito, H2 ๊ฐ์ ํ
์คํธ ํ๋ ์์ํฌ ์์ด๋ ํ
์คํธํ๋ ๋ฐฉ๋ฒ์ ์ตํ์ผ ํฉ๋๋ค.
Spring ๊ฐ๋ฐ์์๊ฒ ๊ผญ ํ์ํ
ํ
์คํธ ๋ฃ๋ ๋ฒ์ ๋ฐฐ์์ผ ํฉ๋๋ค.
- โ
์ค๋ฌด์ ๋๋จ์ด์ง ํ
์คํธ ๋ฃ๋ ๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฌ์ง ์์ต๋๋ค.
- โ
Spring ๊ฐ๋ฐ์์๊ฒ ํ์ํ ํ
์คํธ ๋ฃ๋ ๋ฒ์ ์๋ ค๋๋ฆฝ๋๋ค.
- โ
๊ทธ๋ฌ๋ฉด์ ๋์์ ์ ์ด๋ ๊ฒ ํด์ผ ํ๋์ง๋ฅผ ์๋ ค๋๋ฆฝ๋๋ค.
์ด ์๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ง์์ ๋ค๋ฅธ ํ๋ ์์ํฌ์์๋ ํต์ฉ๋๋ ์ง์๋ค์
๋๋ค. Nest.js๋ฅผ ์ฌ์ฉํ์๋, Swing UI๋ฅผ ์ฌ์ฉํ์๋, Gin์ ์ฌ์ฉํ์๋... ์ด๋์์๋ ์ ์ฉ๋ ์ ์๋ ์ง์์ด๋ผ ์๊ฐํฉ๋๋ค.
์ข
์ฅ์ ๊ฐ์๋ ์ค๊ณ์ ๋ํ ๊ฐ์๋ก ์ด์ด์ง๋๋ค. ํ
์คํธ์ ๊ฐ์น๋ฅผ ์ต๋ํ์ผ๋ก ์ค๋ช
ํด ๋๋ฆฌ๊ธฐ ์ํด์ ์ค๊ณ์ ๋ํ ๋ด์ฉ์ด ๋น ์ ธ์ ์ ๋๋ค ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ ์ด๋ ์ ๊ฐ ์ฐพ์๋ณด๊ธฐ๋ก ๊ตญ๋ด์ ์คํ๋ง์ ํ
์คํธ๋ฅผ ๋ฃ๋ ๋ฒ์ ์๋ ค์ฃผ๋ ์ฑ
์ด๋ ๊ฐ์๋ ๋ชป ๋ณธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ชจ๋ @Mock
, @Spy
์ด๋ฐ ์ด๋
ธํ
์ด์
์ ์ด์ฉํ์ฌ mockingํ๊ณ ์์กด์ฑ ์ฃผ์
๋ฐ์ ํ
์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ํ์ง๋ง ๋ง์ฝ ์ด๋ฐ Mock ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ์ง ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ์ด๋ป๊ฒ ํ
์คํธ ํ์ค ๊ฑด๊ฐ์? ๋ณธ์ง์ ์ผ๋ก ์ด๋ฌํ ์ด๋
ธํ
์ด์
์ด ์์ด๋ ํ
์คํธํ๋ ๋ฐฉ๋ฒ์ ์์์ผ ํฉ๋๋ค! ๊ทธ๋ฆฌ๊ณ ํ
์คํธํด์ผ ํ ๋์์ด ๋ฌด์์ธ์ง๋ ๊ตฌ๋ถํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ
์คํธ๋ฅผ ํ
์คํธ๋ต๊ฒ ์ถ๊ฐํ๋
๋ฐฉ๋ฒ์ ์๋ ค๋๋ฆฝ๋๋ค!

ํ
์คํธ์ ํ์์ฑ์ ์๊ฒ ๋ฉ๋๋ค.

ํ๋ ์์ํฌ ์์ด๋ ์คํ๋ง์ ํ
์คํธ๋ฅผ ๋ฃ๋ ๋ฒ์ ์๊ฒ ๋ฉ๋๋ค.

์คํ๋ง์ ์ฌ์ฉํ๋ ๋ ๋์ ๋ฐฉ๋ฒ์ ์๊ฒ ๋ฉ๋๋ค.

๋ ์ด์ด๋ ์ํคํ
์ฒ์์ ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๊ฒ ๋ฉ๋๋ค.
์ค๋ฆฌ์ํ
์ด์
ํ
์คํธ๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ ์กฐ์ง์์ TDD๋ฅผ ๋์
ํ ๋ ์คํจํ๋ ์ด์ ๋ฅผ ์ดํด๋ด
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ด๊ฐ ํ๋ TDD๋ ์ ์คํจํ๋์ง ์ดํด๋ด
๋๋ค. ํ
์คํธ์ ๋ํ ์ ๋๋ก ๋ ์ดํด ์์ด ํ
์คํธ๋ฅผ ๋ฌด์์ ๋ฃ๊ธฐ ์์ํ์ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ค์ ๊ฐ์ด ์ดํด๋ด
๋๋ค.
ํ
์คํธ์ ๋ํ ์ด๋ก
๊ธฐ๋ณธ์ ์ธ ํ
์คํธ ์ง์์ ๊ณต๋ถํฉ๋๋ค. ํ
์คํธ์ ํ์์ฑ์ ๋ํด ๊ณต๊ฐํ๊ณ ํ
์คํธ์ ์ค๊ณ์ ์๊ด๊ด๊ณ๋ฅผ ํ์
ํฉ๋๋ค. ํ
์คํธ๋ฅผ ๋ง๋ค๋ฉด์ ๊ฐ๋ฐ์๋ ์ด๋ค ๊ณ ๋ฏผ์ ํด์ผํ๋์ง ์ดํดํฉ๋๋ค. ์ต์ข
์ ์ผ๋ก ์์ฐ์ค๋ฌ์ด ํ
์คํธ๋ฅผ ์ํด Testability๋ฅผ ๋์ด๋ ์์
์ ๋ํด ๊ฐ์ด ์ดํด๋ด
๋๋ค.
1๋ถ - ํ ์ดํ๋ก์ ํธ ๊ธฐ๋ฐ ํ
์คํธ ์ ์ฉ
์์ผ๋ก ์ฌ์ฉํ ํ ์ด ํ๋ก์ ํธ๋ฅผ ๊ฐ์ด ์ดํด๋ด
๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์ด ํ๋ก์ ํธ์ ์ด๊ฑฐ์ง๋ก ํ
์คํธ๋ฅผ ๋ฃ์ด๋ณด๋ฉฐ ์ต๋ํ ํ
์คํธ๋ฅผ ๋ฃ์ด ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํด๋ด
๋๋ค. ์ด ๊ณผ์ ์์ h2, MockMvc, PowerMock๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉํฉ๋๋ค.
์ต์ข
์ ์ผ๋ก ๋ง๋ค์ด์ง ํ
์คํธ๋ค์ ๊ฐ์ด ์ดํด๋ณด๋ฉฐ ํ๊ท ๋ฒ๊ทธ๋ง์ ์ปค๋ฒํ๊ธฐ ์ํ ํ
์คํธ์๋ ์ด๋ค ๋ฌธ์ ๊ฐ ์๋์ง ์ดํด๋ด
๋๋ค.
๋ฐฉํฅ์ฑ ํ์
์ฐ๋ฆฌ์ ํ ์ด ํ๋ก์ ํธ์ ํ
์คํธ๋ฅผ ๋ฃ์ ๊ฒ ๊ทธ๋ค์ง ์ข์ ๋ฐฉํฅ์ด ์๋ ์ด์ ๋ฅผ ๊ฐ์ด ์ดํด๋ด
๋๋ค. ๋๋ถ์ด ์ ํต์ ์ธ ๋ ์ด์ด๋ ์ํคํ
์ฒ์ ๋ฌธ์ ์ ์ ๋ํด ๊ฐ์ด ์ดํด๋ด
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์์ผ๋ก ๊ฐ์ ํ ๊ฒ์ธ์ง, ๊ฐ์ฐ์์ ์๊ฒฌ์ ๋ค์ด๋ด
๋๋ค.
1๋ถ ์ค๊ธฐ์์ ๋ฌด์์ ํ
์คํธ๋ฅผ ๋ฃ๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๋ค๋ฉด, 2๋ถ์์๋ Mockito ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด๋ ์์ฐ์ค๋ฝ๊ฒ Mockํ๋ ๋ฐฉ๋ฒ์ ์ตํ๋๋ค. 2๋ถ ์ค๊ธฐ๋ฅผ ์ํด ๋ฏธ๋ฆฌ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ง ๊ฐ์ด ์ดํด๋ด
๋๋ค.
2๋ถ - ํ ์ดํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ ๊ฐ์
์์ ๋ฐฉํฅ์ฑ ํ์์ ํตํด ์ป์ ์ธ์ฌ์ดํธ๋ฅผ ์ฐ๋ฆฌ์ ํ ์ด ํ๋ก์ ํธ์ ๋์
ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ตฌ์กฐ์ ์ธ ๋ณํ๋ฅผ ์ค๊ฐ๋ฉฐ ์ค๊ณ๋ฅผ ๊ฐ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ณผ์ ์์ ์๋์ ๊ฐ์ ๊ธฐ๋ฒ๋ค์ด ์ฌ์ฉ๋ฉ๋๋ค.
- ํจํค์ง ๊ตฌ์กฐ ๊ฐ์
- ๋๋ฉ์ธ๊ณผ ์์์ฑ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถํ๊ธฐ
- ์๋น์ค ๋ก์ง์ ๋๋ฉ์ธ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ
- ์ธ๋ถ ์ฐ๋์ ์์กด์ฑ ์ญ์ ํ๊ธฐ
- ํ
์คํธ๋ฅผ ์ํ ํ
์คํธ๋ก ๋ง๋ค๊ธฐ
์งํํ๋ ์ํคํ
์ฒ
ํ
์คํธ์ ์ค๊ณ์ ์๊ด๊ด๊ณ๋ฅผ ํตํด ์ํคํ
์ฒ๋ฅผ ์งํ์ํค๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ฐ์ด ์ดํด๋ด
๋๋ค. ๋ ์ด์ด๋ ์ํคํ
์ฒ๊ฐ ์ด๋ป๊ฒ ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ๋ก ๋ณํ๋์ง ์ดํด๋ด
๋๋ค. ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด์ ๊ฐ๋ฐ์๊ฐ ๋๋ฉ์ธ์ ์ง์คํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
๊ฐ๋ฐ์๋ก ์ฑ์ฅํ๋ ๋ฐ
๋์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค!
์๋
ํ์ธ์, ๊น์ฐ๊ทผ์
๋๋ค! ๐
ํ์ฌ ์นด์นด์ค์์ ์ผํ๊ณ ์๊ณ , ๋ง๋๋ ๊ฒ์ ์ข์ํด์ ํด๊ทผ ํ์๋ ํญ์ ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. "๊ฑฐ์ธ์ ์ด๊นจ ์์ ์ ๋์์ด"๋ผ๋ ๋ง์ด ์์ต๋๋ค. ์ ์ญ์ ํ๋ฑ ์์ ๋์์ด์ผ ๋ฟ์ด์ง๋ง, ์ฌ๋ผํ ๊ฑฐ์ธ์ ์ฑ์ฅ์ ๋์์ด ๋ ์ ์๋๋ก ์ง์์ ๋๋ฌผ๋ฆผ์ ์ํด ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๋ค์์ ์ฃผ๋์ด ๊ฐ๋ฐ์ ๋ถ๋ค์ ๋ฉํ ๋งํ ๊ฒฝํ์ด ์์ด์ ์ฌ๋ฌ๋ถ์ ์ฑ์ฅ์ ๋์์ค ์ ์์ ๊ฑฐ์์.
Q&A ๐ฌ
Q. JUnit์ด๋ Mockito ์ฌ์ฉ๋ฒ์ ์ ์๋ ค์ฃผ์๋์?
๋ค, ์์ฝ๊ฒ๋ ํด๋น ๊ฐ์๋ JUnit๊ณผ Mockito ์ฌ์ฉ๋ฒ์ ๋ํ ๋ด์ฉ์ ๋ค๋ฃจ์ง ์์ต๋๋ค. ์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค.
Context) ์๊ฐ์ ๊ฐ์ธ๋ง๋ค ์ฒํ ์ํฉ์ด ๋ค๋ฆ
๋๋ค. ์ด๋ฏธ ๋ช ๋ฒ ํ
์คํธ๋ฅผ ์ง๋ณธ ์ฌ๋์ด ์๋ค๋ฉด, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ์๋ จ๋๊ฐ ๋ค๋ฅผ ์ ์์ต๋๋ค. ํ์ฌ์์ ์ฌ์ฉํ๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ JUnit์ด๋ Mockito๊ฐ ์๋ ์๋ ์๊ณ . ๋ฒ์ ์ด ๋ฌ๋ผ์ ์ ๊ณตํ์ง ์๋ ์ธํฐํ์ด์ค๊ฐ ์กด์ฌํ ์๋ ์์ต๋๋ค. ๋ํ์ ์ธ ์๋ก JUnit4์์๋ @ParameterizedTest๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์์ ์ธ๊ธ ๋๋ฆฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ฌ์ฉ๋ฒ์ด ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์๊ณ ๊ด๋ จ๋ ์ข์ ์๋ฃ๊ฐ ์ด๋ฏธ ๋๋ฌด ๋ง์ต๋๋ค. ํ๋ค๋ชปํด Github README ํ์ผ์ ์ฝ๊ฑฐ๋ ๊ณต์ ๊ฐ์ด๋๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ์ฌ์ฉ๋ฒ์ ์ตํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ๋ฒ์ ์ค์ํ ๋ด์ฉ์ด ์๋๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
Test Design) ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ํน์ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ํ
์คํธํ๋ ๋ฒ์ ์ตํ๋ ๊ฒ์ ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ผ๋ฉด ํด๋น ํ
์คํธ๋ฅผ ํ ์ ์๋ค๋ ์๋ฏธ์
๋๋ค. ๋๊ตฌ๋ ํ๋ ์์ํฌ๋ณด๋ค ํ
์คํธ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ๊ณ , ์ด๋ป๊ฒ ํ
์คํธ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ๋ฐ๊พธ๋์ง๊ฐ ๋ ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ฐ์๋ ๋๊ตฌ์ ์ง์คํ์ง ์์ต๋๋ค. ํ
์คํธ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ ๋ถ๋ถ์
๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๊ตฌ์ฌํญ ๋ถ์, ์ค๊ณ ๋ฐ ๋ฐฐ์น, ์ ์ง๋ณด์ ๊ฐ์ ๋งฅ๋ฝ์์ ๊ณ ๋ ค๋์ด์ผ ํ ์ ์ ์ ๊ฒํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
Q. ์ด์ ๊ฐ์์์ ์ฐจ์ด์ ์ ์ด๋ค ๊ฒ์ด ์๋์?
์ปค๋ฆฌํ๋ผ์ ๋ณด์๋ฉด ์์๊ฒ ์ง๋ง, ์ด์ ๊ฐ์์ ์ค๋ณต๋๋ ๋ด์ฉ์ด ๋ค์ ์์ต๋๋ค. ์ด๋์ผ ํ๋ค๋ ๊ฒ๋ง ๋ฉ๊ทธ๋ฌ๋ ์ค๋ช
ํด ๋๋ฆฌ๊ธฐ์๋ ์ค๋๋ ฅ๋ ๋ถ์กฑํ๊ณ ๋งฅ๋ฝ์ ์ดํด์์ผ๋๋ฆฌ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ๋
๋ฆฝ์ ์ผ๋ก ํด๋น ๊ฐ์๋ ์๊ฐํ ์ ์๋๋ก ๊ฐ์๋ฅผ ๊ตฌ์ฑํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋์ ๋ชฉ์ฐจ๋ฅผ ํ์ธํด๋ณด์๊ณ ๊ฒน์น๋ ๋ด์ฉ์ด ์๋์ง ํ์ธํด ๋ด์ฃผ์ธ์.
์์งํ ์ด์ผ๊ธฐ๋ก ์ด์ ๊ฐ์๋ฅผ ์ ๋๋ก ์ดํดํ์
จ๋ค๋ฉด ๊ตณ์ด ์ค๋ณตํด์ ์๊ฐํ ํ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ๊ฐ์๊ฐ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ด๋ ๊ฒ ๋์ด์ผ ํ๋์ง๋ฅผ ์ค๋ช
ํ๋ ๊ฐ์์๋ค๋ฉด, ์ด๋ฒ ๊ฐ์๋ ์ค์ ๋ก ์ฝ๋ ๋ ๋ฒจ์์ ์ด๋ป๊ฒ ํ๋ฆฌ๋์ง๋ฅผ ๋ค๋ฃจ๋ ๊ฐ์๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
Q. ์๊ฐ ์ ์์์ผ ํ ์ฌํญ์ด ์๋์?
ํด๋น ๊ฐ์๋ ์คํ๋ง์ด๋ JPA๋ฅผ ์๋ ค๋๋ฆฌ๋ ๊ฐ์๋ ์๋๋๋ค. ์๊ฐ์๊ฐ ๋๋ต์ ์ธ Spring๊ณผ JPA๋ฅผ ๋ค๋ฃฐ ์ ์๋ค๋ ๊ฒ์ ์ ์ ๋ก ๊ฐ์๋ฅผ ์งํํฉ๋๋ค. ์์ธ๋ฌ ์คํ๋ง์ ํ
์คํธ๋ฅผ ๋ฃ๋ ๋ฒ์ ์๋ ค๋๋ฆฌ๊ณ ์์ง๋ง ๋ณธ์ง์ ์ผ๋ก๋ ์์กด์ฑ์ ์ด๋ป๊ฒ ํ์ด๋ด๋์ง์ ๋ํด ์ด์ ์ ๋ง์ถฐ ์งํํ์๊ณ , ๊ผญ ์ธ์ด๋ ํ๋ ์์ํฌ์ ๊ตฌ์ ๋ฐ๋ ๋ด์ฉ์ ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ง๋ถ์ฌ, ์ ๊ณต ์ง์์ ํ์๋ก ํ์ง ์์ต๋๋ค :)
๐พ ์๊ฐ ์ ํ์ธํด์ฃผ์ธ์!
- ๊ฐ์ ๋ด ์ค์ต ๋ด์ฉ์ ๊ฐ๊ธ์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ IDE, ์ฌ์์ ์์กด์ ์ด์ง ์๊ฒ ๊ตฌ์ฑํ์์ต๋๋ค. ํน์ ๋ฒ์ ์ ์๋ ํน์ ๊ธฐ๋ฅ์ ํ์ฉํ ๊ฐ์๊ฐ ๋์ง ์๋๋ก ๋
ธ๋ ฅํ์ต๋๋ค. ๊ทธ๋๋ ํน์ ๋ชจ๋ฅด๋ ๊ฐ์ฐ์์ ๋ฉํ ๊ตฌ์ฑ์ด ์๋์ ๊ฐ์ ํ๊ฒฝ์์ ์๋ ค๋๋ฆฝ๋๋ค.
- PC ์ฌ์ ๋ฐ ์ด์์ฒด์ : MacBook Pro (16-inch, 2019) ๋ฐ macOS Monterey 12.6
- IDE: IntelliJ IDEA 2021.3.2
- Java 17, Spring Boot 3.0.1, JUnit 4.13.2, AssertJ 3.23.1
- ์๊ฐ์์๊ฒ๋ 40ํ์ด์ง ๋ด์ธ์ PPT ์๋ฃ 12๊ฐ๋ฅผ ํจ๊ป ์ ๊ณตํฉ๋๋ค.
- ์ด ๊ฐ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์คํ๋ง์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ๋ฑ์ ๋ํด ๋ค๋ฃจ์ง ์์ต๋๋ค.
- Spring ๋ฐ Spring Data JPA๋ฅผ ํ ๋ฒ์ด๋ผ๋ ๋ค๋ค๋ณธ ์ฌ์ฉ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ช
ํฉ๋๋ค.
- Controller, Service, Repository์ ๋ํด ์๊ณ ๊ณ์ ๋ค๋ ์ ์ ๋ก ์ค๋ช
ํฉ๋๋ค.
- ๊ฐ์์ ์ฌ์ฉํ ํ ์ด ํ๋ก์ ํธ๋ฅผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์์
์ผ๋ก ํ์ด๋์์ต๋๋ค. ํ์ธํด๋ณด์๊ณ ์ดํดํ ์ ์๋ ์ ๋๋ฉด ๊ด์ฐฎ์ต๋๋ค.
- PPT ์ผ๋ถ๋ฅผ ์บก์ฒํด์ ๊ณต๋ถํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ฌ๋ฆฌ๋ ๊ฒ์ ํ์ฉํ๋ ์๋ฃ ์ ์ฒด๋ฅผ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ๊ณต์ ํ๋ ๊ฑด ๊ธํฉ๋๋ค. ์ํด ๋ถํ๋๋ฆฝ๋๋ค!
- ์ด์ ๊ฐ์์ ์ค๋ณต๋๋ ๋ด์ฉ์ด ๋ค์ ์์ต๋๋ค. ๋ชฉ์ฐจ๋ฅผ ํ์ธํด๋ณด์๊ณ ๊ฒน์น๋ ๋ด์ฉ ์๋์ง ํ์ธํด ๋ด์ฃผ์ธ์.
- ๋ฐ๋ชจ ํ๋ก์ ํธ๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.