Java์ ๋จ์ ํ ์คํธ: ์ ๋ต ๋ฐ ๋๊ตฌ
ํจ์จ์ ์ธ ํ ์คํธ์ ๋ ๋์ ์ฝ๋ ํ์ง๋ก ์ด์ด์ง ์ ๋ต, ๊ธฐ์ ๋ฐ ๋๊ตฌ์ ์ค์ ์ ๋๊ณ Java ๋จ์ ํ ์คํธ์ ์ธ๊ณ๋ฅผ ํํํด ๋ณด์ธ์.

๋จ์ ํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ์ ํ์ฑ, ์ ๋ขฐ์ฑ ๋ฐ ํจ์จ์ฑ์ ๋ณด์ฅํ ์ ์๋๋ก ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. Java ์์ ๋จ์ ํ ์คํธ๋ ๋ฉ์๋, ํด๋์ค ๋๋ ๊ด๋ จ ๋ฉ์๋๋ ํด๋์ค์ ์๊ท๋ชจ ๊ทธ๋ฃน๊ณผ ๊ฐ์ ๊ฐ๋ณ ์ฝ๋ ๋จ์์ ๋์์ ํ์ธํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ฃผ์ ๋ชฉํ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ณ ์ต์ข ์ ํ์ ๋ฒ๊ทธ ์๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ณ ์ฅ์น๋ฅผ ํ ์คํธํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ง์ ์ด์ ์ด ์์ต๋๋ค.
- ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ์ฌ ์์ ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ์ ํ์ฑ์ ๋ณด์ฅํ๊ณ ํ๊ท๋ฅผ ๋ฐฉ์งํ์ฌ ์ฝ๋ ํ์ง์ ํฅ์ํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์์ธ๊ณผ ์ํคํ ์ฒ๋ฅผ ๊ฒ์ฆํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ฝ๋์ ๋ํ ๊ฐ๋ฐ์์ ์ ๋ขฐ๋๋ฅผ ๋์ ๋๋ค.
- ์ฝ๋ ์ ์ง ๊ด๋ฆฌ ๋ฐ ๋ฆฌํฉํฐ๋ง์ ๋์ฑ ํจ์จ์ ์ผ๋ก ๋ง๋ญ๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ํ๋ก์ธ์ค ์๋๋ฅผ ๋์ ๋๋ค.
Java ๋จ์ ํ ์คํธ๋ ํ ์คํธ ์์ฑ ๋ฐ ์คํ์ ๋จ์ํํ๊ณ ๋์ ์์ค์ ์ฝ๋ ํ์ง์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ ํ๋ ์์ํฌ, ๋๊ตฌ ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ๋จ์ ํ ์คํธ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ๋ ผ์ํ๊ณ ํจ์จ์ ์ธ Java ๋จ์ ํ ์คํธ๋ฅผ ์ํ ์ค์ฉ์ ์ธ ์ ๋ต๊ณผ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค.
๋จ์ ํ ์คํธ์ ๊ธฐ๋ณธ ๊ฐ๋
Java์์ ๋จ์ ํ ์คํธ๋ฅผ ์์ํ๋ ค๋ฉด ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํ ์คํธ ์ผ์ด์ค
ํ ์คํธ ์ผ์ด์ค๋ ๋จ์ผ ์ ๋ ฅ(ํจ์ ์ธ์, ๋ฉ์๋ ํธ์ถ ๋ฑ)์ ์ด์ ์ ๋ง์ถ๊ณ ํด๋น ์ถ๋ ฅ(๋ฐํ ๊ฐ, ์์ธ ๋ฑ)์ ํ ์คํธํ๋ ํ ์คํธ ๋ชจ์์ ๊ฐ์ฅ ์์ ์์ ๋ถ๋ถ์ ๋๋ค. ํ ์คํธ ์ฌ๋ก๋ ์ฝ๋๊ฐ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๊ธฐ ์ํด ์์๋๋ ๊ฒฐ๊ณผ๊ฐ ํฌํจ๋ ํน์ ์ ๋ ฅ ์๋๋ฆฌ์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ํ ์คํธ ์ค์ํธ
ํ ์คํธ ์ค์ํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ๋จ์, ๊ตฌ์ฑ ์์ ๋๋ ๊ธฐ๋ฅ์ ํ ์คํธํ๋๋ก ์ค๊ณ๋ ํ ์คํธ ์ฌ๋ก ๋ชจ์์ ๋๋ค. ํ ์คํธ ์ค์ํธ์ ๋ชฉ์ ์ ํ ์คํธ๋ ๊ตฌ์ฑ ์์์ ์ ์ฒด ๋ฒ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ณ ์คํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
ํ ์คํธ๋ฌ๋
ํ ์คํธ ๋ฌ๋๋ ํ ์คํธ ์ฌ๋ก๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๋ ๋๊ตฌ ๋๋ ๊ตฌ์ฑ ์์์ ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ ์คํธ ์คํ๊ธฐ๋ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ์ ์ผ๋ถ์ด๋ฉฐ ๊ตฌ์กฐํ๋๊ณ ์ ์ด๋๋ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ ์ข ์ข CI/CD ํ์ดํ๋ผ์ธ ๋๋ IDE์ ํตํฉ๋ฉ๋๋ค.
์ฃผ์ฅ
์ด์ค์ ์ ์ฝ๋ ๋จ์(๋ฉ์๋, ํจ์ ๋ฑ)์ ์ค์ ์ถ๋ ฅ์ ์์ ๊ฒฐ๊ณผ์ ๋น๊ตํ๋ ๋ฌธ์ ๋๋ค. ์ด์ค์ ์ ํ ์คํธ ์ฌ๋ก๊ฐ ํต๊ณผํ๋์ง ์คํจํ๋์ง ํ์ธํ๋ ๊ฒ์ฆ ๋ฉ์ปค๋์ฆ ์ญํ ์ ํ์ฌ ์ฝ๋๊ฐ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
ํ ์คํธ ๋๋ธ
ํ ์คํธ ๋๋ธ์ ํ ์คํธ ์ค์ธ ์ฅ์น์ ์ข ์์ฑ์ ๋์ฒดํ์ฌ ์ด๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ํ ์คํธ๋ฅผ ์ํ ์ ์ด๋ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ ๋๋ค. ํ ์คํธ ๋๋ธ์ ๋ชจ์(Mock), ์คํ (Stub), ๋๋ฏธ(Dummies), ํ์ดํฌ(Fake), ์คํ์ด(Spy)๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค. ์ด๋ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ๋ณด๋ค ํจ๊ณผ์ ์ด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋๋ ๋ฐ ํ์์ ์ ๋๋ค.

ํจ์จ์ ์ธ Java ๋จ์ ํ ์คํธ๋ฅผ ์ํ ์ ๋ต ๋ฐ ๊ธฐ์
ํจ์จ์ ์ธ Java ๋จ์ ํ ์คํธ๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ ํฌ๊ด์ ์ธ ํ ์คํธ ๋ฒ์๋ฅผ ๋ณด์ฅํ๋ ํจ๊ณผ์ ์ธ ์ ๋ต๊ณผ ๊ธฐ์ ์ ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์์ ํ ์คํธ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ ํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์ ์ ์ฌํญ์ ๋๋ค.
์ค์ํ ๊ฒฝ๋ก ํ ์คํธ์ ์ง์ค
์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์ค์ํ ๊ฒฝ๋ก๋ฅผ ์๋ณํ๊ณ ํด๋น ์์ญ ํ ์คํธ์ ์ฐ์ ์์๋ฅผ ์ง์ ํฉ๋๋ค. ์ค์ ๊ฒฝ๋ก๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฐ๋ฅธ ์๋์ ์ํ, ๋ณต์ก์ฑ ๋๋ ์ค์์ฑ์ด ๋์ ์ฝ๋ ์์ญ์ ๋๋ค. ์ด๋ฌํ ์์ญ์ ์ง์คํ๋ฉด ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ด ์์ ์ ์ด๊ณ ๋ฒ๊ทธ ์์ด ์ ์ง๋ฉ๋๋ค.
์ ์ ํ ์ด์ค์ ์ ์ ํํ์ธ์.
ํ ์คํธ ์ค์ธ ์ฝ๋์ ์๊ตฌ ์ฌํญ ๋ฐ ์์ ๊ฒฐ๊ณผ์ ์ผ์นํ๋ ์ ์ ํ ์ด์ค์ ์ ์ฌ์ฉํ์ธ์. ์๋ฅผ ๋ค์ด ๋ฉ์๋๊ฐ ํญ์ ์์๋ฅผ ๋ฐํํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ฐํ ๊ฐ์ด 0๋ณด๋ค ํฌ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด์ค์ ์ ๊ตฌ์ฒด์ ์ผ๋ก ์ง์ ํ๋ฉด ํ ์คํธ๊ฐ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์์ ์ ์ด๊ฒ ๋ฉ๋๋ค.
ํ ์คํธ ์ค์ธ ์ฅ์น๋ฅผ ๋ถ๋ฆฌํฉ๋๋ค.
์ฅ์น๋ฅผ ํ ์คํธํ ๋ ํด๋น ๋์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋๋ ๊ธฐํ ์์คํ ๊ตฌ์ฑ ์์์ ๊ฐ์ ์ธ๋ถ ์ข ์์ฑ๊ณผ ๊ฒฉ๋ฆฌ๋์ด ์๋์ง ํ์ธํ์ธ์. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ณด๋ค ์์ ์ ์ด๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํจ์จ์ ์ธ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ธ๋ถ ์์ธ์ผ๋ก ์ธํด ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํจ๊ณผ์ ์ผ๋ก ํ ์คํธ ์ผ์ด์ค ๊ตฌ์ฑ ๋ฐ ์ด๋ฆ ์ง์
ํ ์คํธ ์ค์ธ ์ฝ๋ ๊ตฌ์ฑ ์์ ๋๋ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์ฌ๋ก๋ฅผ ๋ ผ๋ฆฌ์ ์ ํ๊ตฐ์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ๋ํ ํ ์คํธ ์ผ์ด์ค์ ๋ฉ์๋์ ๋ํด ๋ช ํํ๊ณ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ํ ์คํธ ๋ชฉ์ ๊ณผ ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋๋ฃ ๊ฐ๋ฐ์๊ฐ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ํฅํ ํ ์คํธ ์ค์ํธ๋ฅผ ์ ์ง ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๊นจ๋ํ๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ํ ์คํธ ์ฝ๋ ์์ฑ
ํ๋ก๋์ ์ฝ๋๋งํผ ์ฃผ์ ๊น๊ฒ ํ ์คํธ ์ฝ๋๋ฅผ ๋ค๋ฃจ์ญ์์ค. ์ดํดํ๊ณ , ์ ์ง ๊ด๋ฆฌํ๊ณ , ๋ฆฌํฉํ ๋งํ๊ธฐ ์ฌ์ด ๊น๋ํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ์ฒด๊ณ์ ์ธ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ธ์. ํ ์คํธ ์ฝ๋ ํ์ง์ ๋๊ฒ ์ ์งํ๋ฉด ๋ณด๋ค ํจ๊ณผ์ ์ด๊ณ ํจ์จ์ ์ธ ๋จ์ ํ ์คํธ ๋ฐ ์ฝ๋ ํ์ง์ ๊ธฐ์ฌํฉ๋๋ค.
๊ฐ๋ฅํ ๊ฒฝ์ฐ ํ ์คํธ ์๋ํ
๋ฐ๋ณต์ ์ด๊ณ ์ผ์์ ์ธ ํ ์คํธ ์์ ์ ์๋ํํ์ฌ ์๊ฐ์ ์ ์ฝํ๊ณ ์ธ์ ์ค๋ฅ๋ฅผ ์ค์ ๋๋ค. ์๋ํ๋ ํ ์คํธ ์ค์ํธ๋ ์ง์์ ์ธ ํตํฉ ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์คํ๋๊ฑฐ๋ ์ฝ๋ ํ์ง ๋ฐ ์ ํ์ฑ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋๋ก ์์ฝ๋ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ค๋ฅ๋ฅผ ๋ ์ฝ๊ฒ ํฌ์ฐฉํ๊ณ ์์ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ ๋ต๊ณผ ๊ธฐ์ ์ ๊ตฌํํ๋ฉด ๋์ฑ ํจ์จ์ ์ด๊ณ ํจ๊ณผ์ ์ธ Java ๋จ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํด์ง๋ฉฐ, ์ฝ๋ ํ์ง์ด ํฅ์๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ฑ ์์ ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๊ฒ ๋ฉ๋๋ค.
Java์ฉ ์ธ๊ธฐ ๋จ์ ํ ์คํธ ๋๊ตฌ
Java ๊ฐ๋ฐ์๊ฐ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ฐ์ํํ๊ธฐ ์ํด ์ฌ๋ฌ ๋จ์ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๊ฐ๋ณ ๋จ์ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ณ , ํ ์คํธ ์ค์ํธ, ๋ชจ์ ๊ฐ์ฒด ๋ฑ์ ์์ฑํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JUnit: JUnit์ Java ํ๋ก์ ํธ์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. ๋จ์ ํ ์คํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์คํํ๊ธฐ ์ํ ๋ค์ํ ์ฃผ์, ์ด์ค์ ๋ฐ ๊ตฌ์ฑ ์ ํ ์ฌํญ์ ์ ๊ณตํฉ๋๋ค.
- TestNG: TestNG๋ JUnit ๋ฐ NUnit์์ ์๊ฐ์ ๋ฐ์ ๋ ๋ค๋ฅธ ํ ์คํธ ํ๋ ์์ํฌ์ด์ง๋ง ๋ณ๋ ฌ ํ ์คํธ ์คํ, ์ ์ฐํ ํ ์คํธ ๊ตฌ์ฑ, ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํ ์คํธ ์ง์๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์์ต๋๋ค.
- Mockito: Mockito ๋จ์ ํ ์คํธ๋ฅผ ์ํด ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑ, ๊ตฌ์ฑ ๋ฐ ์ ์ดํ๋ โโํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๋ ์ธ๊ธฐ ์๋ Java ๋ชจ์ ํ๋ ์์ํฌ์ ๋๋ค.
- PowerMock: PowerMock์ Mockito ๋ฐ EasyMock๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋ชจ์ ํ๋ ์์ํฌ์ ํ์ฅ์ผ๋ก, ๋ชจ์ ์ ์ ๋ฉ์๋, ์์ฑ์, ์ต์ข ํด๋์ค ๋ฐ ๋ฉ์๋๋ฅผ ํฌํจํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- AssertJ: AssertJ๋ ํํ์ ์ด๊ณ ์ค๋ช ์ ์ธ ํ ์คํธ ์ด์ค์ ์ ์์ฑํ๊ธฐ ์ํ ์ ์ฐํ API๋ฅผ ์ ๊ณตํ๋ ์คํ ์์ค ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Spock: Spock์ Groovy์์ ์๊ฐ์ ๋ฐ์ ๋ช ํํ๊ณ ํํ๋ ฅ์ด ํ๋ถํ ์ฌ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํ ์คํธ ๋ฐ ๋ชจํน๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Java ๋ฐ Groovy ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ํ ์คํธ ๋ฐ ์ฌ์ ํ๋ ์์ํฌ์ ๋๋ค.
๋ง์ Java ๊ฐ๋ฐ์์ ํ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ์ ํธ ์ฌํญ์ ๋ง๋ ๋๊ตฌ ์กฐํฉ์ ์ ํํ๊ณ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๋ฉฐ ์์ ์ ์ธ ๊ณ ํ์ง ์ฝ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
JUnit - ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ Java ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ
JUnit์ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฌ ์ฑํ๋ ํ ์คํธ ํ๋ ์์ํฌ๋ก, ๋จ์ ํ ์คํธ๋ฅผ ์์ฑ, ๊ตฌ์ฑ ๋ฐ ์คํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ง์์ ์ธ ์ ๋ฐ์ดํธ์ ๋๊ท๋ชจ ์ง์ ์ปค๋ฎค๋ํฐ๋ฅผ ํตํด JUnit์ Java ๊ฐ๋ฐ์๋ฅผ ์ํ ์ฌ์ค์์ ํ์ค์ผ๋ก ๋จ์ ์์ต๋๋ค.
JUnit์ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ฐ๋จํ๋ฉด์๋ ๊ฐ๋ ฅํ ์ฃผ์ ๊ธฐ๋ฐ ๊ตฌ๋ฌธ์ ๋๋ค. ์ด๋ฌํ ์ฃผ์์ ํตํด ๊ฐ๋ฐ์๋ ์ ์ํ๊ฒ ํ ์คํธ ๋ฐฉ๋ฒ์ ์ ์ํ๊ณ , ํ ์คํธ ์ปจํ ์คํธ๋ฅผ ์ค์ ๋ฐ ํด์ ํ๊ณ , ํ ์คํธ ์ค์ํธ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ JUnit ์ฃผ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Test: ๋ฉ์๋๋ฅผ ๋จ์ ํ ์คํธ๋ก ์ ์ํฉ๋๋ค.@BeforeEach: ํด๋์ค์ ๊ฐ ํ ์คํธ ๋ฉ์๋ ์ ์ ์คํ๋ ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค. ํ ์คํธ ํ๊ฒฝ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.@AfterEach: ํด๋์ค์ ๊ฐ ํ ์คํธ ๋ฉ์๋ ํ์ ์คํ๋ ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค. ์ฒญ์ ์์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.@BeforeAll: ์ผ๋ฐ์ ์ผ๋ก ๊ณต์ ๋ฆฌ์์ค๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด ํด๋์ค์ ๋ชจ๋ ํ ์คํธ ์ ์ ํ ๋ฒ ์คํ๋ ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค.@AfterAll: ์ผ๋ฐ์ ์ผ๋ก ๊ณต์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ธฐ ์ํด ํด๋์ค์ ๋ชจ๋ ํ ์คํธ ํ์ ํ ๋ฒ ์คํ๋ ๋ฉ์๋๋ฅผ ์ง์ ํฉ๋๋ค.@DisplayName: ํ ์คํธ ๋ฉ์๋ ๋๋ ํ ์คํธ ํด๋์ค์ ๋ํด ์ฌ๋์ด ์ฝ์ ์ ์๋ ์ฌ์ฉ์ ์ ์ ์ด๋ฆ์ ์ ๊ณตํฉ๋๋ค.@Nested: ์ค์ฒฉ ํด๋์ค์ ์ถ๊ฐ ํ ์คํธ ์ฌ๋ก๊ฐ ํฌํจ๋์ด ์์์ ๋ํ๋ ๋๋ค. ์ค์ฒฉ๋ ํ ์คํธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ ์ฌ๋ก๋ฅผ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
JUnit์ ์์๋๋ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์ด์ค์
(์: assertEquals , assertTrue , assertNull ๋ ์ ๊ณตํฉ๋๋ค. ๋ํ, assertThrows ๋ฉ์๋๋ ์์๋๋ ์์ธ์ ๋ํ ํ
์คํธ๋ฅผ ๋จ์ํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์์ ์์ธ ์ฌ๋ก๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋๋ก ๋ณด์ฅํฉ๋๋ค.

Java ๋จ์ ํ ์คํธ์ ๋ชจ์ ๋ฐ ์คํฐ๋น
๋ชจ์ ๋ฐ ์คํฐ๋น์ ํ ์คํธ ์ค์ธ ์ฝ๋๋ฅผ ํด๋น ์ข ์์ฑ์์ ๋ถ๋ฆฌํ๊ณ ์ ์ด๋ ํ๊ฒฝ์์ ์ค์ ๊ฐ์ฒด์ ๋์์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํ ๋จ์ ํ ์คํธ์ ํ์ ๊ธฐ์ ์ ๋๋ค. ํนํ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฌํ ๊ฒฉ๋ฆฌ๋ฅผ ํตํด ํ ์คํธ๋ ์ธ๋ถ ์ข ์์ฑ์ด ์๋ ํ ์คํธ ์ค์ธ ์ฅ์น์ ๊ธฐ๋ฅ์๋ง ์ง์ค๋ฉ๋๋ค.
Mockito ๋ฐ PowerMock๊ณผ ๊ฐ์ ๋ชจ์ ํ๋ ์์ํฌ๋ Java ๋จ์ ํ ์คํธ์์ ๋ชจ์ โโ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ ์์ํฌ๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์ ๋ชจ์ ๊ตฌํ ํด๋์ค๋ฅผ ์์ฑํ ํ์ ์์ด ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.
- ์คํ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๋ชจ์ ๋ฉ์๋์ ๋ํ ์ฌ์ฉ์ ์ง์ ๋ฐํ ๊ฐ์ด๋ ์์ธ๋ฅผ ์ ์ํฉ๋๋ค.
- ํ ์คํธ ์ค์ธ ์ฅ์น์ ํด๋น ์ข ์์ฑ ๊ฐ์ ์ํธ ์์ฉ์ ํ์ธํฉ๋๋ค(์: ํน์ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋์๋์ง ํ์ธ).
Mockito๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊น๋ํ๊ณ ๊ฐ๋จํ API๋ฅผ ์ ๊ณตํ๋ ์ธ๊ธฐ ์๋ Java ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Mockito๋ ์ธํฐํ์ด์ค ๋ฐ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋ํ ๋ชจ์ ๊ฐ์ฒด ์์ฑ์ ์ง์ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ๊ตฌ๋ฌธ์ผ๋ก ๋ฉ์๋ ์คํฐ๋น ๋ฐ ๊ฒ์ฆ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, Mockito๋ฅผ ํ๋ก์ ํธ๋ก ๊ฐ์ ธ์จ ํ ๊ฐ๋ฐ์๋ ๋ค์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
MyService myServiceMock = Mockito.mock(MyService.class);
Mockito์ Stubbing ๋ฉ์๋ ํธ์ถ์ when ๋ฐ thenReturn ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํฉ๋๋ค.
Mockito.when(myServiceMock.doSomething(arg)).thenReturn(someResult);
Mockito์ verify ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋์ ๋ชจ์ ๊ฐ์ฒด ๊ฐ์ ์ํธ ์์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
Mockito.verify(myServiceMock).doSomething(arg);
๋ ๋ค๋ฅธ Java ๋ชจ์ ํ๋ ์์ํฌ์ธ PowerMock์ Mockito ๋ฐ EasyMock ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฅํ๊ณ ์ ์ ๋ฉ์๋, ์์ฑ์, ์ต์ข ํด๋์ค ๋ฐ ๋ฉ์๋๋ฅผ ๋ชจ์ํ๊ธฐ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ํ์ฅ๋ ๊ธฐ๋ฅ์ Mockito์ ๊ฐ์ ๊ธฐ๋ณธ ๋ชจ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ API์ ์ต์ํจ์ ์ ์งํ๋ฉด์ ๋ ๊ฑฐ์ ๋๋ ํ ์คํธํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๋ฅผ ํ ์คํธํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
Java ๋จ์ ํ ์คํธ์์ ๋ชจํน ๋ฐ ์คํฐ๋น์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ํ ์คํธ ์ค์ธ ๋จ์์ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ์ ์ง์คํ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ ์ ์์ต๋๋ค.
Java์ TDD(ํ ์คํธ ์ค์ฌ ๊ฐ๋ฐ)
TDD(ํ ์คํธ ์ค์ฌ ๊ฐ๋ฐ)๋ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์คํธ ์์ฑ์ ๊ฐ์กฐํ๋ ์ธ๊ธฐ ์๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ ๋์ ์ฝ๋ ํ์ง, ์์ฌ์ด ๋ฆฌํฉํ ๋ง, ๋ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋ ๋ฑ ์ฌ๋ฌ ๊ฐ์ง ์ฅ์ ์ด ์์ต๋๋ค. TDD ํ๋ก์ธ์ค๋ Red-Green-Refactor๋ผ๊ณ ๋ ํ๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์คํจํ ํ ์คํธ ์์ฑ(๋นจ๊ฐ์) : ์ํ๋ ๊ธฐ๋ฅ์ ์ ์ํ๋ ์ ๋จ์ ํ ์คํธ๋ฅผ ๋ง๋ญ๋๋ค. ํ์ํ ์ฝ๋๊ฐ ์์ง ๊ตฌํ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ฒ์์๋ ํ ์คํธ๊ฐ ์คํจํด์ผ ํฉ๋๋ค.
- ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ฝ๋ ์์ฑ(๋ น์) : ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ฐ ํ์ํ ์ฝ๋๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด ๋จ๊ณ๋ ๊ฒฐ๊ณผ ๊ตฌํ์ด ์ต์ ์ด ์๋๊ฑฐ๋ ์์ ํ์ง ์๋๋ผ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
- ์ฝ๋ ๋ฆฌํฉํฐ๋ง(Refactor) : ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ ๋ฆฌํ๊ณ ํ์ํ ์ฌํญ์ ๊ฐ์ ํฉ๋๋ค. ๋ฆฌํฉํ ๋ง ํ์๋ ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํ์ธ์. ์ด ๋จ๊ณ๋ ํ ์คํธ๋ฅผ ์นํ๊ฒฝ์ ์ผ๋ก ์ ์งํ๋ฉด์ ์ฝ๋ ํ์ง์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ด ์ฃผ๊ธฐ๋ ๋ชจ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํด ๋ฐ๋ณต๋์ด ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ํ ์ฒด๊ณ์ ์ด๊ณ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค. TDD ํ๋ก์ธ์ค๋ Java ๊ฐ๋ฐ์์๊ฒ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ํฅ์๋ ์ฝ๋ ํ์ง : ํ ์คํธ๋ ์ค์ ์ฝ๋๋ณด๋ค ๋จผ์ ์์ฑ๋๋ฏ๋ก ๊ฐ๋ฐ์๋ ์ถฉ์กฑํด์ผ ํ๋ ์๊ตฌ ์ฌํญ์ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค. ์ด ํ๋ก์ธ์ค๋ ๋ฒ๊ทธ์ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋์ฑ ์ฌ์์ง ๋ฆฌํฉํ ๋ง : ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ํ๊ท๋ฅผ ํฌ์ฐฉํ ์ ์๋ ํ ์คํธ ๋ชจ์์ ๋ณด์ ํ๊ณ ์์ผ๋ฏ๋ก ๋ฏธ๋ฆฌ ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ฑ ์์ ํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ ์ฝ๋ : ์์ ๊ธฐ๋ฅ ๋จ์๋ ๊ฐ๋ณ์ ์ผ๋ก ํ ์คํธํ ์ ์์ด์ผ ํ๋ฏ๋ก TDD๋ ๊ฐ๋ฐ์ ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํฉ๋๋ค. ์ด๋ก ์ธํด ์ผ๋ฐ์ ์ผ๋ก ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฉ์ดํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ TDD๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด JUnit๊ณผ ๊ฐ์ ์ต์ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ํ์ํฉ๋๋ค. TestNG ๋ฐ Mockito์ ๊ฐ์ ๊ธฐํ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ ์คํธ ํ๋ ์์ํฌ ๋ฐ ๋๊ตฌ๋ฅผ JUnit๊ณผ ํตํฉํ์ฌ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
Java์ ์ง์์ ์ธ ํตํฉ ๋ฐ ๋จ์ ํ ์คํธ
CI(์ง์์ ํตํฉ)๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณต์ ์ ์ฅ์์ ์์ฃผ ํตํฉํ๋๋ก ๊ถ์ฅํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ์์ ๋๋ค. CI ์๋ฒ๋ ์ ์ฝ๋๋ฅผ ์๋์ผ๋ก ๊ตฌ์ถ, ํ ์คํธ ๋ฐ ๊ฒ์ฆํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง๊ณผ ์์ ์ฑ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. Java ๋จ์ ํ ์คํธ๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ด์ ์ด ์์ต๋๋ค.
- ์ฝ๋ ํ์ง์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ : ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ์ ๋ํ ์๋ํ๋ ํ ์คํธ๋ฅผ ํตํด ๊ฐ๋ฐ ํ๋ก์ธ์ค ์ด๊ธฐ์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ ์ ์์ต๋๋ค. ์ด ํผ๋๋ฐฑ ๋ฃจํ๋ ๊ฐ๋ฐ์๊ฐ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋๋ฏ๋ก ์์ฐ ์ ๊ฒฐํจ์ด ์ค์ด๋ญ๋๋ค.
- ์ถ์ ์๊ฐ ๋จ์ถ : CI๋ ๋น๋ ๋ฐ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํจ์ผ๋ก์จ ์ง์์ ์ธ ์ ๊ณต์ ์ฅ๋ คํ๊ณ ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ๊ณ ํ๋ก๋์ ์ ๊ฐ์ ์ฌํญ์ ์ ์ฉํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ํฅ์๋ ํ์ : CI ํ์ดํ๋ผ์ธ์ ์ฝ๋ ํ์ง๊ณผ ์์ ์ฑ์ ์ํ ๋จ์ผ ์ง์ค ์์ค๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์, ํ ์คํฐ ๋ฐ ๊ธฐํ ์ดํด๊ด๊ณ์ ๊ฐ์ ๋ ๋์ ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ํ์ ์ ์ด์งํฉ๋๋ค.
Jenkins, GitLab CI ๋ฐ CircleCI์ ๊ฐ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ CI ๋๊ตฌ๋ JUnit ๋ฐ TestNG์ ๊ฐ์ Java ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ์ ์ํํ ํตํฉ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ CI ํ์ดํ๋ผ์ธ์ ์ค์ ํ๋ ๊ฒ์ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌ์ฑํ๊ณ ์คํํ ํ ์คํธ ์ฌ๋ก๋ฅผ ์ง์ ํ๋ ๊ฒ๋งํผ ๊ฐ๋จํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ๋ฐ์๋ ์ฝ๋ ์์ฑ์ ์ง์คํ๊ณ CI ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ์์ ํ์ง์ ๋ํ ํผ๋๋ฐฑ์ ์๋์ผ๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
Java ๊ฐ๋ฐ์๋ฅผ ์ํ ๋จ์ ํ ์คํธ ๋ชจ๋ฒ ์ฌ๋ก
๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ ๊ฒ์ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๊ณต์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ Java ๊ฐ๋ฐ์๊ฐ ํจ์จ์ ์ด๊ณ ์์ ์ ์ด๋ฉฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๋จ์ ํ ์คํธ๋ฅผ ๋ง๋๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ํ ์คํธ ์ผ์ด์ค ์์ฑ : ํ ์คํธ ์ผ์ด์ค๋ ๊ฐ๋จํ๊ณ ์ฝ๊ธฐ ์ฌ์์ผ ํ๋ฉฐ ์ฝ๋์ ๋จ์ผ ์ธก๋ฉด์ ํ ์คํธํ๋ ๋ฐ ์ค์ ์ ๋์ด์ผ ํฉ๋๋ค. ์ง๋์น๊ฒ ๋ณต์กํ ํ ์คํธ ์ฌ๋ก๋ฅผ ์์ฑํ์ง ๋ง์ธ์. ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ดํด๊ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
- ํ ์คํธ ์ค์ ๊ฒฝ๋ก : ํ ์คํธ ์ฌ๋ก๊ฐ ์ฑ๊ณต ์๋๋ฆฌ์ค, ์ฃ์ง ์ฌ๋ก, ์คํจ ์๋๋ฆฌ์ค ๋ฑ ์ฝ๋๋ฅผ ํตํด ํ์ ๊ฒฝ๋ก๋ฅผ ํฌํจํ๋์ง ํ์ธํ์ธ์. ํฌ๊ด์ ์ธ ํ ์คํธ ๋ฒ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ ผ๋ฆฌ๋ฅผ ๊ฒ์ฆํ๊ณ ๊ฒฌ๊ณ ์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ ์ ํ ์ด์ค์ ์ฌ์ฉ : ๊ฐ ํ ์คํธ ์ฌ๋ก์ ์ ํฉํ ์ด์ค์ ์ ์ ํํ๊ณ ์คํจํ ๊ฒฝ์ฐ ์๋ฏธ ์๋ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ์๊ฐ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ํ๊ฒ ํ๊ฐํ๊ณ ๋ฌด์์ด ์๋ชป๋์๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ํ ์คํธ ์ค์ธ ๋จ์ ๊ฒฉ๋ฆฌ : ๋ชจ์ ๋ฐ ์คํฐ๋น๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ํ ์คํธ ์ค์ธ ๋จ์๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ์ธ๋ถ ์ข ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ์ข ์์ฑ์ ๋์์ด ์๋ ํ ์คํธ ์ค์ธ ์ฅ์น์ ๋์์ ์ ํํ๊ฒ ๋ฐ์ํ๋๋ก ๋ณด์ฅ๋ฉ๋๋ค.
- ํ ์คํธ ์ผ์ด์ค ๊ตฌ์ฑ ๋ฐ ์ด๋ฆ ์ง์ : ํจํค์ง์์ ํ ์คํธ๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๊ณ ์ค๋ช ์ ์ธ ํ ์คํธ ๋ฉ์๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋ฑ ํ ์คํธ ์ผ์ด์ค์ ๋ํ ์ผ๊ด๋ ๋ช ๋ช ๊ท์น์ ๋ฐ๋ฆ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ด๋ จ ํ ์คํธ๋ฅผ ๋ ์ฝ๊ฒ ์ฐพ๊ณ ์คํํ ์ ์์ต๋๋ค.
- TDD(ํ ์คํธ ์ค์ฌ ๊ฐ๋ฐ) ์ฌ์ฉ : TDD๋ฅผ ์ฑํํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์ ํ ์คํธ๋ฅผ ์์ฑํ๋๋ก ๊ถ์ฅ๋ฉ๋๋ค. ์ด ๋ฐฉ๋ฒ๋ก ์ ๋ ๋์ ์ฝ๋ ํ์ง, ๋ชจ๋์ ์ค๊ณ ๋ฐ ๋ฆฌํฉํ ๋ง ์ฉ์ด์ฑ์ ์ด์งํฉ๋๋ค.
- ์ง์์ ์ธ ํตํฉ ํ์ดํ๋ผ์ธ์ ๋จ์ ํ ์คํธ ํตํฉ : ๋จ์ ํ ์คํธ๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํ๋ฉด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ถ๋ ๋๋ง๋ค ํ ์คํธ๊ฐ ์๋์ผ๋ก ์คํ๋ฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ฝ๋ ํ์ง์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด Java ๊ฐ๋ฐ์๋ ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ด์ด์ง๋ ํจ์จ์ ์ด๊ณ ์์ ์ ์ธ ๊ณ ํ์ง ๋จ์ ํ ์คํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋จ์ ํ ์คํธ๋ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ํํธ์จ์ด์ ๋์์ธ๊ณผ ํ์ง์ ํฅ์์ํค๋ ๊ฒ์ด๊ธฐ๋ ํฉ๋๋ค. ๋ณด๋ค ํจ๊ณผ์ ์ธ Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํ์ ๋ถ๋ถ์ผ๋ก ๋จ์ ํ ์คํธ๋ฅผ ํฌํจํฉ๋๋ค.
๊ฒฐ๋ก
๋จ์ ํ ์คํธ๋ ์ฝ๋ ํ์ง๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๋ Java ๊ฐ๋ฐ์ ์ค์ํ ์ธก๋ฉด์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ฒ๊ทธ๋ฅผ ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ ์์ ํ ์ ์์ด ๋์ฑ ๊ฐ๋ ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๋ต, ๊ธฐ์ ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด Java ๊ฐ๋ฐ์๋ ๋จ์ ํ ์คํธ ํ๋ก์ธ์ค์ ํจ์จ์ฑ๊ณผ ํจ๊ณผ๋ฅผ ๊ทน๋ํํ ์ ์์ต๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ํ ์คํธ ๊ฒฉ๋ฆฌ, ์ ํํ ์ด์ค์ , TDD(ํ ์คํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ) ์์ฉ ๋ฑ Java ๋จ์ ํ ์คํธ๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ ๋ค์ํ ์ ๋ต๊ณผ ๊ธฐ์ ์ ์ดํด๋ณด์์ต๋๋ค.
๋ํ ํ ์คํธ ์์ฑ ๋ฐ ์คํ์ ๋ณด๋ค ์ฝ๊ฒ โโ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ JUnit, Mockito, TestNG ๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ Java ๋จ์ ํ ์คํธ ๋๊ตฌ๋ ์กฐ์ฌํ์ต๋๋ค. Java์ ๋จ์ ํ ์คํธ๋ ์ฒ์์๋ ๋ณต์กํด ๋ณด์ผ ์ ์์ง๋ง ๋ชจ๋ฒ ์ฌ๋ก์ ์ค์ ์ ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ์ ํ ์๊ตฌ ์ฌํญ์ ์ดํดํ๋ฉด ์ํ๋ ์์ค์ ํ ์คํธ ์ฑ๊ณต์ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์ง์์ ์ธ ํตํฉ ํ๋ก์ธ์ค๋ฅผ ๊ตฌํํ๊ณ ๊ฐ๋ฐ ์์ ํ๋ฆ์ ์ผ๋ถ๋ก ํ ์คํธ๋ฅผ ํตํฉํ๋ฉด ์ง์์ ์ผ๋ก ์ฝ๋ ํ์ง์ ํฅ์์ํค์ธ์.
๋ํ AppMaster ์ ๊ฐ์ ์ฝ๋ ์๋ ํ๋ซํผ์ REST API ๋ฐ ๊ธฐํ ํตํฉ ๋ฐฉ๋ฒ์ ํตํด Java ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์์ฉํ ์ ์์ผ๋ฏ๋ก ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ค์ํ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ค์ํ ์ธก๋ฉด์ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํตํฉํจ์ผ๋ก์จ ์๊ฐ์ ํ ์คํธ๋ฅผ ๊ฒฌ๋ ์ ์๋ ๊ณ ํ์ง Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
Java ๋จ์ ํ ์คํธ์ ์ธ๊ณ๋ ๋ค์ํ๋ฉฐ ๋ค์ํ ๊ฐ๋ฐ ์๊ตฌ ์ฌํญ์ ๋ง๋ ๋ค์ํ ๋๊ตฌ์ ๋ฐฉ๋ฒ๋ก ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ ์ด๊ณ ์ ์ง ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ์ํํธ์จ์ด ์ ๊ณ๊ฐ ์ง๋ฉดํ ๊ณผ์ ์ ์ง๋ฉดํ ์ค๋น๊ฐ ๋์ด ์์์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
์์ฃผ ๋ฌป๋ ์ง๋ฌธ
Java์ ๋จ์ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํ์ฑ, ์ ๋ขฐ์ฑ ๋ฐ ํจ์จ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ฉ์๋ ๋๋ ์๊ท๋ชจ ๋ฉ์๋ ๊ทธ๋ฃน๊ณผ ๊ฐ์ ๊ฐ๋ณ ์ฝ๋ ๋จ์์ ์ด์ ์ ๋ง์ถ ํ ์คํธ ๋ฐฉ๋ฒ๋ก ์ ๋ํ๋ ๋๋ค. ๋จ์ ํ ์คํธ์ ๋ชฉ์ ์ ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๊ณ ์์ ํ์ฌ ์ดํ ๋จ๊ณ์์ ๋ฒ๊ทธ๋ฅผ ์ต์ํํ๋ ๊ฒ์ ๋๋ค.
JUnit์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ Java ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. ํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๊ณ ์คํํ๋ ๋ฐ ๋์์ด ๋๋ ๋ง์ ์ฃผ์, ์ด์ค์ ๋ฐ ๊ตฌ์ฑ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. JUnit์ ๋จ์ ํ ์คํธ ์์ฑ ๋ฐ ์คํ์ ์ํ Java ์ํ๊ณ์ ์ฌ์ค์ ํ์ค์ ๋๋ค.
TDD(ํ ์คํธ ์ค์ฌ ๊ฐ๋ฐ)๋ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ํ ์คํธ ์์ฑ์ ๊ฐ์กฐํ๋ ๋ฏผ์ฒฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ ๋๋ค. TDD์์ ๊ฐ๋ฐ์๋ ์ํ๋ ๊ธฐ๋ฅ์ ๋ํ ๋จ์ ํ ์คํธ๋ฅผ ๋ง๋ ๋ค์ ํด๋น ํ ์คํธ๋ฅผ ์ํํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ํ ์คํธ ๋ฒ์๋ฅผ ๋ณด์ฅํ๊ณ , ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ฉฐ, ๊ฐ๋ฐ ์์ ์ ๋จ์ํํฉ๋๋ค.
๋ชจ์ ๋ฐ ์คํฐ๋น์ ํ ์คํธ๋ฅผ ์ํด ํต์ ๋ ํ๊ฒฝ์์ ์ค์ ๊ฐ์ฒด์ ๋์์ ์๋ฎฌ๋ ์ด์ ํ๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ ํ ์คํธ ์ค์ธ ์ฅ์น๋ฅผ ์ข ์์ฑ์ผ๋ก๋ถํฐ ๊ฒฉ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจํน์ ๋ฏธ๋ฆฌ ๊ฒฐ์ ๋ ๋์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๋ฐ๋ฉด, ์คํ ์ ๊ฐ์ฒด ๊ตฌํ์ ์ผ๋ถ๋ฅผ ๋จ์ํ๋ ๋ถ๋ถ์ผ๋ก ๋์ฒดํฉ๋๋ค.
CI(์ง์์ ํตํฉ)๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณต์ ์ ์ฅ์์ ์์ฃผ ํตํฉํ๋๋ก ๊ถ์ฅํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ์์ ๋๋ค. CI ์๋ฒ๋ ์ ์ฝ๋์ ๋ํด ์๋์ผ๋ก ๋จ์ ํ ์คํธ๋ฅผ ์คํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง๊ณผ ์์ ์ฑ์ ๋ํ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. Java ๊ฐ๋ฐ์๋ ์ํํ๊ณ ์๋ํ๋ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์ํด ๋จ์ ํ ์คํธ๋ฅผ CI ํ์ดํ๋ผ์ธ์ ํตํฉํ ์ ์์ต๋๋ค.
์ผ๋ถ Java ๋จ์ ํ ์คํธ ๋ชจ๋ฒ ์ฌ๋ก์๋ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ํ ์คํธ ์ฌ๋ก ์์ฑ, ์ค์ ๊ฒฝ๋ก ํ ์คํธ, ์ ์ ํ ์ด์ค์ ์ฌ์ฉ, ํ ์คํธ ์ค์ธ ๋จ์ ๊ฒฉ๋ฆฌ, ํ ์คํธ ์ฌ๋ก ๊ตฌ์ฑ ๋ฐ ์ด๋ฆ ์ง์ , TDD(ํ ์คํธ ๊ธฐ๋ฐ ๊ฐ๋ฐ) ์ฑํ, ๋จ์ ํ ์คํธ๋ฅผ ์ฐ์ ํตํฉ ํ์ดํ๋ผ์ธ์ ํตํฉ, ์ ์ ํ ๋๊ตฌ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๋ฆฌ ์ฌ์ฉ๋๋ Java์ฉ ๋จ์ ํ ์คํธ ๋๊ตฌ๋ก๋ JUnit, Mockito, TestNG, Spock, PowerMock ๋ฐ AssertJ ๋ฑ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ๊ณ , ๋ชจ์ ๋ฐ ์คํฐ๋น์ ์ฉ์ดํ๊ฒ ํ๋ฉฐ, ์ฝ๋ ์ ํ์ฑ๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๊ด๋ฒ์ํ ์ด์ค์ ์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
AppMaster Go(golang)์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ , Vue3์ ์น ์ ํ๋ฆฌ์ผ์ด์ , Kotlin ๋ฐ SwiftUI ์ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๋ฐ ์ค์ ์ ๋๊ณ ์์ง๋ง AppMaster์ ๊ฐ๋ ฅํ no-code ํ๋ซํผ์ REST API ๋ฐ ๊ธฐํ ์๋จ์ ํตํด Java ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์์ฉํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํตํฉ์. AppMaster ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ์ํฐํ๋ผ์ด์ฆ ์์ค์ Java ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค.


