ํ ์คํธ ์ฝ๋ ์์ฑ์ด ๋ง์ค์ฌ์ง์๋์? ์ด ๊ฐ์๋ฅผ ํตํด ์คํ๋ง ํ๊ฒฝ ํ ์คํธ์ A to Z๋ฅผ ๊ฒฝํํด๋ณด์ธ์!
JUnit5๋ฅผ ํ์ฉํ ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ
mockito๋ฅผ ์ด์ฉํ Mocking, Slice ํ ์คํธ
์ปจํ ์ด๋๋ฅผ ํ์ฉํ ํตํฉ ํ ์คํธ ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
์ ์ ์ฝ๋ ๋ถ์์ ํตํ ์ํคํ ์ฒ ๋ฐ ์คํ์ผ ํ ์คํธ
Git๊ณผ GitHub์ ์ด์ฉํ ํ ์คํธ ์๋ํ
ํ
์คํธ์ ์์์ ํ๊ฒฝ ๊ตฌ์ถ๋ถํฐ!
ํ์
์์ ์ฐ์ด๋ ์คํ๋ง ํ
์คํธ๋ฅผ ๋ฐฐ์๋ณด์ธ์ ๐ฅ
โ
๊ธฐ์ด๋ถํฐ ํ์
์์ค ํ
์คํธ๊น์ง ๋ค๋ฃจ๋ฉด์, ์ด๋ ต์ง ์๊ฒ ๋ฐ๋ผ์ค์ค ์ ์๋๋ก ์ ์ํ์ต๋๋ค.
โ
์งง์ ์๊ฐ์ ์ต๋ ํจ์จ! ๊ฐ ์ค์ต ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ ๊ฒ์ํ๋ฉด์, ์ค์ต์ ๋น ๋ฅด๊ฒ ์๋ฃํ ์ ์๋๋ก ์ค๊ณํ์ต๋๋ค.
โ
๋
ธ์
์ถ๊ฐ ๊ฐ์ ์๋ฃ ์ ๊ณต! ์๊ฐํ์ ์ดํ์ ๋
ธ์
์ ์ฐธ๊ณ ํ์๋ฉด์ ์ํ์๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ค ์ ์๋๋ก ์ ๋ฆฌํด ๋์์ต๋๋ค.
๋๋ถ๋ถ์ ํ ์คํธ ๊ฐ์์์๋ ํ ์คํธ ์ฝ๋๋ฅผ "์์ฑ"ํ๋ ๋ฐ๋ง ์ง์ค๋์ด ์์ต๋๋ค. ํ์ง๋ง ์ค์ ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด ๋ณธ ๋ถ๋ค์ ์์ค ๊ฑฐ์์. ํ ์คํธ ํ๊ฒฝ์ "๊ตฌ์ถ"ํ๋ ๊ฒ์ด ์ ํ๋์ง ์์ผ๋ฉด, ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ ์ํฉ์ ๋ถ๋ชํ๋ค๋ ๊ฒ์์. ํ์ ์์๋ ๋จนํ ๋งํ ์ง์ง ํ ์คํธ๋ฅผ ์์ฑํด ๋ณด๊ณ ์ถ์ง ์์ผ์ ๊ฐ์? ์ด ๊ฐ์๋ฅผ ํตํด ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฒฝํํด ๋ณด์ธ์!
๋ฐ๊ฐ์ต๋๋ค ๐ ์ ๋์ฝ ๊ธฐ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ผํ๊ณ ์๋ ์ฅฌ์ฅฌ์ ๋๋ค!
๋ ํํ ๋ ๊ฒช๋ ์ฝ์ง(!)์ ์ด๋ ค์์ ์ ์๊ณ ์์ต๋๋ค. ์ ์ญ์ C์ธ์ด๋ถํฐ ์์ํด ์ ๋์ฝ ๊ธฐ์ ์์ ์คํ๋ง ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ์ผํ๊ธฐ๊น์ง ์ ๋ง ๋ง์ ๊ธธ์ ๋์๊ฐ๋ ๊ฒฝํ์ด ์์ด์. ์๊ฐ์ ์ฌ๋ฌ๋ถ์ ์ ์ฒ๋ผ ํค๋งค์ง ์๊ณ ์ง๋ฆ๊ธธ๋ก๋ง ํ์ตํ์ จ์ผ๋ฉด ํ๋ ๋ฐ๋์ผ๋ก ๊ฐ์๋ฅผ ๋ง๋ค์์ต๋๋ค ๐
๐ ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ฒ์์ด์ ๊ฐ์? ์ผ๋ฐ์ ์ผ๋ก ํ ์คํธ ์ฝ๋ ์์ฑ์ JUnit๊ณผ Mockito๋ฅผ ํ์ตํ๋ ๊ฒ๋ถํฐ ์์ํฉ๋๋ค! ์ ๊ฐ์์์๋ ์ ๋ด์ฉ์ ๋ค๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์, ์๊ฐํ์ ์ดํ์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝํ์ ํด๋ณด์ค ์ ์์ผ์ค ๊ฑฐ์์!
๐ ํ์ ์์ ํ ์คํธ ์ฝ๋ ์์ฑ์ด ์ํํ ๋์ง ์๋ ์ด์ ์ ๋๋ถ๋ถ์ ํตํฉํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ ์ด๋ ค์์ ๊ฒช๋ ๊ฒ ๊ฐ์ต๋๋ค! ์ค์ ๋ก ํ์ ์์๋ ๋ค์ํ ๋ฐ์ดํฐ์์ค์ ์ธํ๋ผ๋ฅผ ํ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฐ์๋ฅผ ๋ค์ผ์ ์ดํ์๋ ์ ์ง์ ์ผ๋ก ์ด๋ฌํ ๊ฒ๋ค์ ์ ๊ฒฉ๋ฆฌํ๊ณ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๊ณ Mocking์ ํ์ฉํ๋ค๋ฉด, ํ์ ์์๋ ์ถฉ๋ถํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ค ์ ์์ผ์ค ๊ฑฐ์์!
ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ์์ฑ ๋ฐฉ๋ฒ์ ํ์ตํ๊ณ ์ถ์ผ์ ๋ถ์ด๋ผ๋ฉด ๐
ํ ์คํธ๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋์ง ์๊ฒ ๋ผ์!
์งง์ ์๊ฐ์ ์์ค ๋์ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ ๊ฒฝํํ๊ณ ์ถ์ผ์ ๋ถ์ด๋ผ๋ฉด ๐ซข
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋๋ผ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ ๋๋ ต์ง ์์์ ธ์!
๋ฐฑ์๋ ์ด๋ ฅ์์ ํ ์คํธ ๊ฒฝํ์ ์์ฑํ๊ณ ์ถ์ผ์ ์ทจ์ค์์ด๋ผ๋ฉด ๐
์ค๋ฌด ์์ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ผ์!
ํ์ ์์ ํ ์คํธ ํ๊ฒฝ์ ๊ฐ์ถ๊ณ ์ถ์ผ์ ๋ถ์ด๋ผ๋ฉด ๐
๊ฐ๋ฐํ๊ณ ์๋ ์ฝ๋๊ฐ ์ข์์ง ํ๋จํ ์ ์๋ ์งํ๊ฐ ์๊ฒจ์!
โ JUnit5๋ฅผ ํ์ฉํ ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ
โ mockito๋ฅผ ์ด์ฉํ Mocking, Slice ํ ์คํธ
โ docker-compose, testcontainers์ flyway๋ฅผ ํ์ฉํ RDBMS ํตํฉ ํ ์คํธ
โ localstack์ ์ด์ฉํ AWS ํ ์คํธ
โ kraft mode kafka container๋ฅผ ํ์ฉํ ์นดํ์นด ํ ์คํธ
โ spotless์ git hook์ ํ์ฉํ ์ฝ๋ ์คํ์ผ ํ ์คํธ
โ Arhcunit์ ํ์ฉํ ์ํคํ ์ฒ ํ ์คํธ
โ sonarqube๋ฅผ ํ์ฉํ ์ ์ ์ฝ๋ ๋ถ์
โ Github Action์ ํ์ฉํ ํ ์คํธ ์๋ํ
Q. ๊ฐ์ ๋ฃ๊ธฐ ์ ์ค๋นํด์ผ ํ ๊ฒ์ด ์๋์?
ํ์ ์ํํธ์จ์ด ์ค์น๋ง ํด๋์ผ์๋ฉด ๋ฉ๋๋ค! ๋ ธ์ ์ ์ค์นํด์ผ ํ ์ํํธ์จ์ด ๋ชฉ๋ก๊ณผ ์ ์ค์น๋์๋์ง ํ์ธํ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ์์ฑํด ๋์์ต๋๋ค.
Q. ํ ์คํธ ์ฝ๋๋ฅผ ํ ๋ฒ๋ ์์ฑํด ๋ณด์ง ์์๋๋ฐ ๋ค์ ์ ์์๊น์?
์คํ๋ง์ ์ด์ฉํด ๋จ์ํ CRUD ์ ํ๋ฆฌ์ผ์ด์ (ํฌ๋ ๋ฆฌ์คํธ, ๊ฒ์ํ ๋ฑ)์ ๊ฐ๋ฐํด ๋ณด์ จ๋ค๋ฉด ์ด๋ ต์ง ์๊ฒ ๋ค์ผ์ค ์ ์๋ ๊ฐ์์ ๋๋ค! Redis, Kafka, AWS ๋ฑ์ ์ด์ฉํด ๋ณด์ง ์์๋๋ผ๋ ๊ด์ฐฎ์ต๋๋ค! ์๋ง์ ๋ฐ๋ณต๊ณผ์ ์ ๊ฑฐ์น๋ฉด์, ๊ฐ์๋ฅผ ๋ฐ๋ผ๋ง ํ์๋ฉด ๋๊ฐ์ด ๋์ํ๋๋ก ์ ๊ฒฝ ์จ์ ์ ์ํ์ต๋๋ค!
Q. macOS ๋์ Windows ํ๊ฒฝ์ผ๋ก ์ค์ตํด๋ ๊ด์ฐฎ์๊น์?
์๋ฐ๋ ํฌ๋ก์คํ๋ซํผ ์ธ์ด๋ก ์๋์ฐ/๋งฅ ๋ชจ๋ ์ํํ ๋์ํฉ๋๋ค! ๋ค๋ง, Docker์ ๊ฒฝ์ฐ ์๋์ฐ๋ wsl ๋ฑ์ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค! ๋ค๋ง ์ ๊ฐ ์ง์ ์ค์นํด ๋ณด๋, ์๋์ฐ ๋์ปค ๋ฐ์คํฌํ ์ฑ์ ์ด์ฉํ๋ฉด ์์ฝ๊ฒ ์ค์นํ ์ ์์์ต๋๋ค. ์๋์ฐ ์๊ฐ์๋ถ๋ค์ ๋์ปค ์ค์น ์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์ง๋ฌธ ๋จ๊ฒจ์ฃผ์๋ฉด ํด๊ฒฐํด ๋๋ฆฌ๊ฒ ์ต๋๋ค!
Q. ์์ ๋ด์ฉ์ ์ด๋ ์์ค๊น์ง ๋ค๋ฃจ๋์?
๋งค์ฐ ๊ธฐ์ด์ ์ธ ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ๋ถํฐ, ํ์ ์์๋ ์ฐ์ผ ์์ค์ ํ๊ฒฝ ๊ตฌ์ถ๊น์ง ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ก ๊ฐ์๋ฅผ ์ ์ํ์ต๋๋ค. DevOps Enginner๋ผ๋ฉด ์ด ๊ฐ์ ๋ด์ฉ๋ณด๋ค ๋์ฑ ๋ง์ ๊ฒ์ ๊ณต๋ถํด์ผ ํ์ง๋ง, ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋ชฉํ์ด์๋ผ๋ฉด ์ด ๊ฐ์ ํ๋๋ก ๋ฐฑ์๋ ํ ์คํธ์ A to Z๋ฅผ ๊ฒฝํํ์ค ์ ์์ต๋๋ค!
Q. ์๊ฐํ ์ดํ์๋ ์ด๋ค ๊ฒ์ ํด์ผ ํ ๊น์?
์ด ๊ฐ์์์๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฒฝํ์ ํ๋ ๊ฒ์ ๋ชฉ์ ์ด ์์ต๋๋ค. ์ค์ ๋ก ํ์ ์์๋ ํจ์จ์ ์ธ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์์ค ์ฝ๋๋ฅผ ์ ๊ฐ๋ฐํ๋ ๋ฐ ๋ ์ง์คํฉ๋๋ค. ์ ๊ฒฉ๋ฆฌ๋ ์์ค์ ํ๊ฒฝ์์ ๋ ์ข์ ํ ์คํธ ์ฝ๋๊ฐ ๋์ฌ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ตํ์ จ๋ค๋ฉด ๊ทธ ์ดํ์๋, ์ํคํ ์ฒ์ ๋์์ธ ํจํด์ ๊ณต๋ถํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค!
Q. ํ์ฌ ํ์ ์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ์ค๋ฌด์์ ๊ฐ์ ๋ด์ฉ์ RDBMS ํตํฉ ํ ์คํธ๋ฅผ ์ ์ฉํด ๋ณด๊ณ ์ถ์๋ฐ, ์ด๋ป๊ฒ ์ ๊ทผํ๋ฉด ๋ ๊น์?
์ด๋ฏธ ์ด์ฉ ์ค์ธ ํ๋ก๋์ ํ๊ฒฝ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ค๋ฉด, ์ด๋์๋ถํฐ ์ ๊ทผํด์ผ ํ ์ง ๋ง๋งํ ์ ์์ต๋๋ค. ์ฐ์ ํ ์คํธ ํ๊ฒฝ์์ JPA auto-ddl: validate ์ต์ ์ ์ ์ฉ์ํจ ์ํ๋ก, ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Schema Dump๋ฅผ ํตํด DDL์ ์ถ์ถํ๊ณ ๊ฐ์๋ด์ฉ์ฒ๋ผ ํ ์คํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๊ธฐํํด ๋ณด์ธ์! ํตํฉ ํ ์คํธ์ ์ฒซ๊ฑธ์์ด ๋์ค ์ ์์ต๋๋ค.
๐ข ์๊ฐ ์ ํ์ธํด ์ฃผ์ธ์.
ํ์ต ๋์์
๋๊ตฌ์ผ๊น์?
์งง์ ์๊ฐ์ ์์ค ๋์ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ ๊ฒฝํํ๊ณ ์ถ์ผ์ ๋ถ
๋ฐฑ์๋ ์ทจ์ ์ค๋น ์ ์ด๋ ฅ์์ ํ ์คํธ ๊ฒฝํ์ ์์ฑํ๊ณ ์ถ์ผ์ ๋ถ
ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ฑ ๋ฐ ์์ฑ ๋ฐฉ๋ฒ์ ํ์ตํ๊ณ ์ถ์ผ์ ๋ถ
ํ์ ์์ ์์ค ๋์ ํ ์คํธ ํ๊ฒฝ์ ๊ฐ์ถ๊ณ ์ถ์ผ์ ๋ถ
์ ์ ์ง์,
ํ์ํ ๊น์?
JAVA
์คํ๋ง
461
๋ช
์๊ฐ์
36
๊ฐ
์๊ฐํ
41
๊ฐ
๋ต๋ณ
4.9
์
๊ฐ์ ํ์
2
๊ฐ
๊ฐ์
์๋ ํ์ธ์ ! ์ง์๊ณต์ ์ ์ฅฌ์ฅฌ์ ๋๋ค. ์ ๋ ํ์ฌ ์ ๋์ฝ ๊ธฐ์ ์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก ๊ทผ๋ฌดํ๊ณ ์์ต๋๋ค. ์คํ๋ง ํ๋ ์์ํฌ ๊ธฐ๋ฐ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์ฃผ ์ ๋ฌด์ด๋ฉฐ, ๋ค์ํ ๊ฒฝํ์ ์ข์ํด ์ธํ๋ผ ์์ ๊ณผ ๋ฐ์ดํฐ ์์ ๋ ๋ง์ดํด์! ์ ๊ณต์์ด์ง๋ง, C์ธ์ด๋ถํฐ ๋๋ถ๋ถ ๋ ํ์ผ๋ก๋ง ๊ณต๋ถํด์ค๋ฉฐ ๋๋ฌด ๋ง์ ์ฝ์ง์ ํด์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ๋ถ๋ค์ ํค๋งค์ง ์๊ณ ์ง๋ฆ๊ธธ๋ก๋ง ํ์ตํ์ จ์ผ๋ฉด ํ๋ ๋ฐ๋์ผ๋ก ์ง์ ๊ณต์ ๋ฅผ ์์ํ์ต๋๋ค!
(ํ)์ ๋์ฝ ๊ธฐ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์
์ ์ฒด
29๊ฐ โ (5์๊ฐ 18๋ถ)