์ด ๊ธ์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํ๋ ๊ณผ์ ๊ณผ ๊ทธ ๊ณผ์ ์์ ๋๋ ์ ์ ๊ธฐ๋กํ ๊ธ์ ๋๋ค.
๐ 1. ๊ณ๊ธฐ
์๋ 2๊ฐ์ง ์ด์ ์ ํจ๊ป 'ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํด ๋ณด์!'๋ผ๋ ๋ชฉํ๊ฐ ์๊ฒผ๋ค.
๐ 1. ๋ก๋ฒํธ C. ๋งํด(a.k.a Uncle Bob)์ ํด๋ฆฐ ์ฝ๋
ํด๋ฆฐ ์ฝ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ด ์๋ค.
์ผ๋ง๋งํผ์ ์ฝ๋๋ฅผ ์๋ํํ ๋จ์ ํ ์คํธ๋ก ๊ณ์ฐํด์ผ ํ ๊น?
๋๋ตํ ํ์์กฐ์ฐจ ์๋ค. ๋ชจ์กฐ๋ฆฌ ๋ค ํด์ผ ํ๋ค. ๋ชจ. ์กฐ. ๋ฆฌ!
100% ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ถ์ฅํ๋๊ณ ?
๊ถ์ฅ์ด ์๋๋ผ ๊ฐ๋ ฅํ ์๊ตฌํ๋ค. ์์ฑํ ์ฝ๋๋ ํ ์ค๋ ๋น ์ง์์ด ์ ๋ถ ํ ์คํธํด์ผ ํ๋ค.
๊ตฐ๋ง์ ํ์ ์๋ค.
- ํด๋ฆฐ ์ฝ๋ (๋ก๋ฒํธ C. ๋งํด ์ ) -
๊ฐ๋ฐ์๊ฐ ์๋ ์ฌ๋์ด ์์ ๋ด์ฉ์ ๋ณธ๋ค๋ฉด '๋๋ฌด ๋น์ฐํ ๊ฑฐ ์๋์ผ?'๋ผ๊ณ ์๊ฐํ ๊ฑฐ ๊ฐ๋ค. ํ์ง๋ง, ๊ฐ๋ฐ์๊ฐ ํด๋น ๋ด์ฉ์ ๋ณธ๋ค๋ฉด '๊ถ์ฅ์ด ์๋๋ผ ํ์๋ผ๊ณ ?' ์๊ฐํ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋๋ผ์๊ณผ ํจ๊ป ๋ฐ๋ก ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%์ ๋์ ํ ๊ฒ์ ์๋์ง๋ง, ๊ณ์ํด์ ๊ทธ ์ค์์ฑ์ ๋ํด์๋ ์๊ฐํ๊ณ ์์๋ค.
๐ 2. ํ ์ค ์ ํ๋ธ
๋ ๋ฒ์งธ ๊ณ๊ธฐ๋ ํ ์คใ ฃSLASH 21 - ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ค.
์์์์๋ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํ๊ณ ์ ์งํ๋ฉด์ ๋ฐฐ์ด ๊ฒ๋ค(๋์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ์ด์ , ํ ์คํธ ์ฝ๋ ์์ฑ์์์ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ์ฑ ,...)์ ๋ํด์ ์๊ฐํ๊ณ ์๋ค. ์ฝ 2๋ ์ด๋ผ๋ ์๊ฐ ๋์์ ๊ธฐ๋ก์ด๊ธฐ ๋๋ฌธ์ ๋ด์ฉ ์์ฒด๊ฐ ์์ฐจ๊ณ ์ฌ๋ฐ์๋ค.
์์์ ๋ค ๋ณด๊ณ ๋ ํ, 'ํ ์ค๋ผ๋ ํฐ ํ์ฌ์์๋ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํ๋๋ฐ ๋ด๊ฐ ํ๋ ํ๋ก์ ํธ์์๋ ์ถฉ๋ถํ ํ ์ ์์ง ์์๊น?'๋ผ๋ ์๊ฐ์ ํ์๋ค. ๊ทธ๋ ๊ฒ 'ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100% ๋ฌ์ฑ'์ด๋ผ๋ ์ฌ์ ์ด ์์๋์๋ค.๐ซ
๐ 2. ์ค๋น
'ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํด ๋ณด์!'๋ผ๋ ์๊ฐ๊ณผ ํจ๊ป ์๋ 3๊ฐ์ง๋ฅผ ์ค๋นํ์๋ค.
๐ 1. ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ ํ์ต
์ฒซ ๋ฒ์งธ ์ค๋น๋ ํ ์คํธ ์์ฑ๋ฒ์ ํ์ตํ๋ ๊ฒ์ด๋ค.
TDD, BDD ๋ฑ์ ๋ํ ๊ฐ๋ ์ ์๊ณ ์์์ง๋ง, ํ๋ก์ ํธ์์ ์ ๋๋ก ๋ ํ ์คํธ๋ฅผ ์์ฑํด ๋ณธ ๊ฒฝํ์ด ์์์ ๋ฟ๋ง ์๋๋ผ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๊ณต๋ถํ ์ ์ด ์์๋ค. ๊ทธ๋์ ๋ฐ์ฐ๋น ๋์ 'Practical Testing: ์ค์ฉ์ ์ธ ํ ์คํธ ๊ฐ์ด๋' ๊ฐ์๋ฅผ ํตํ์ฌ ํ ์คํธ ์์ฑ๋ฒ์ ํ์ตํ์๋ค.
Practical Testing: ์ค์ฉ์ ์ธ ํ ์คํธ ๊ฐ์ด๋ - ์ธํ๋ฐ | ๊ฐ์
์ด ๊ฐ์๋ฅผ ํตํด ์ค๋ฌด์์ ๊ฐ๋ฐํ๋ ๋ฐฉ์ ๊ทธ๋๋ก, ๊น๋ํ๊ณ ๋ช ๋ฃํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ๋ฉ๋๋ค. ํ ์คํธ ์ฝ๋๊ฐ ์ ํ์ํ์ง, ์ข์ ํ ์คํธ ์ฝ๋๋ ๋ฌด์์ธ์ง ๊ถ๊ธํ์ ๋ชจ๋ ๋ถ์ ์ํ ๊ฐ
www.inflearn.com
๊ฐ์๋ฅผ ํตํด
- ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ์ฝ๋ ์์ฑ๋ฒ
- TDD
- BDD
- ๋ ์ด์ด๋ ์ํคํ ์ฒ์์์ ํ ์คํธ ์์ฑ๋ฒ
- Mock ์ฌ์ฉ๋ฒ
- ์๋๋ฆฌ์ค ํ ์คํธ
๋ฑ์ ํ์ตํ ์ ์์๋ค.
๊ฐ์์์ ๋ค์ํ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ๋ฟ๋ง ์๋๋ผ ํ ์คํธ ์์ฑ ์ ์ ์ฉํ ํ๋ ๋ง์ผ๋ฏ๋ก ํน์๋ ํ ์คํธ ๊ฐ์ด๋์ ๋ํด์ ์๊ณ ์ถ๋ค๋ฉด ์ด ๊ฐ์๋ฅผ ์ ๊ทน ์ถ์ฒํ๋ค!!
๐ 2. JaCoCo ์ธํ
๋ ๋ฒ์งธ ์ค๋น๋ JaCoCo ์ธํ ์ด๋ค. JaCoCo๋ Java ์ฝ๋์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฒดํฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
JaCoCo๋ฅผ ํ์ฉํ๋ค๋ฉด ํ ์คํธ๋ฅผ ํ์ง ์์ ๋ถ๋ถ ๋๋ ํ ์คํธ ์์ฑ ์ ๋์น ๋ถ๋ถ์ ์์ ๊ฐ์ด ์์ฝ๊ฒ ํ์ธํ ์ ์๋ค.
๋ํ, JaCoCo๋ฅผ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ค์ ๋ค์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ์ด ์ํ๋ ํํ๋ก ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ ์ ์๋ค.
- ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฒดํฌํ ๋จ์(ํด๋์ค, ๋ฉ์๋, ํจํค์ง,...)
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ธก์ ํ ๋ ์ฌ์ฉ๋๋ ์งํ(์ฝ๋ ๋ผ์ธ ์, ์กฐ๊ฑด๋ฌธ ๋ฑ์ ๋ถ๊ธฐ ์, ํด๋์ค ์, ๋ฉ์๋ ์,...)
- ํ
์คํธ ์คํ ์ ์๋์ผ๋ก JaCoCo ์คํ
- ํ
์คํธ์์ ์ ์ธํ ํด๋์ค ์ค์
-...
์๋์ ๊ธ์ ์ฐธ๊ณ ํ๋ค๋ฉด Gradle ํ๋ก์ ํธ์์ JaCoCo ์ธํ ์ ์์ฝ๊ฒ ํ ์ ์์ ๊ฒ์ด๋ค.
Gradle ํ๋ก์ ํธ์ JaCoCo ์ค์ ํ๊ธฐ | ์ฐ์ํํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ
{{item.name}} ์๋ ํ์ธ์. ์ํ์์คํ ํ์์ ์๋ฒ ๊ฐ๋ฐ(..์๋ฐ)์ ํ๊ณ ์๋ ์ฐ์ฒ ์ ๋๋ค. ํ๋ก์ ํธ ์ธํ ์ค์ ์ฐพ์๋ณด๊ณ ์ฝ์งํ๋ ๋ด์ฉ๋ค์ด ๋์์ด ๋ ๊น ํ์ฌ ๋จ๊น๋๋ค. JaCoCo๋ Java ์ฝ๋์ ์ปค๋ฒ๋ฆฌ์ง
techblog.woowahan.com
๐ 3. ํ๋ก์ ํธ ์ค๋น
ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด ํ๋ก์ ํธ๊ฐ ํ์ํ๋ค. ํ๋ก์ ํธ๋ SSAFY์์ ์งํํ ๊ณตํต ํ๋ก์ ํธ๋ฅผ ํ์ฉํ์๋ค. ๊ฐ๋ฐ ๊ธฐ๊ฐ์ ์ฝ 4์ฃผ ์ ๋์์ผ๋ฉฐ, ์ธ์คํธ๋ญ์ (instruction, ์๋ฐ ๋ฐ์ดํธ์ฝ๋ ๋ช ๋ น ์)์ด ์ฝ 3,300๊ฐ ์ ๋์ธ ํ๋ก์ ํธ๋ค.
๐ 4. ๋ค์ง
๋ง์ง๋ง์ผ๋ก ์ค๋นํ ๊ฒ์ ๋ค์ง์ด๋ค. ์์ํ๊ธฐ ์ ์ ์ด๋ ์ ๋ ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ์์์ ํ์๋ค.
์... ํ๊ณ ๋ฅผ ์ ๊ณ ์๋ ์ด ์์ ์ ๋ค์ ํ๋ฒ ์๊ฐํด ๋ณธ๋ค๋ฉด, 'ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ด๋ ค์'๋ฟ๋ง ์๋๋ผ 'ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ํ ์๊ฐ, ๋ ธ๋ ฅ, ์ฅ์ธ์ ์ '์ ๋ํด์๋ ํ๋ฒ ์๊ฐํด ๋ดค์ผ๋ฉด ์ด๋ ์๊น ์ถ๋ค. ๐
๐ 3. ๋ฌธ์ ์
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํ๋ ๊ณผ์ ์์ ๊ฒช์ ์ด๋ ค์์ ๋ค์๊ณผ ๊ฐ๋ค.
๐ 1. ํ ์คํธ ์ฝ๋ ์์ฑ ์์ฒด์ ์ด๋ ค์
๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋๊ฐ ํญ์ ๊น๋ํ ๊ฒ์ ์๋์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฌํ ๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์๋ ์ด๋ ค์์ด ์์๋ค.
๋๋ฅผ ํฌํจํ์ฌ 3๋ช ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ๋ฐฐ์ฐ๊ณ ์๋ ์ ์ฅ์ด๋ผ์ ์ข์ ๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋๋ฅผ ํญ์ ์งค ์ ์๋ ๊ฒ์ ์๋์๋ค. ์๊ณ ์๋ ๋ฒ์์์ ์ต๋ํ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ์์ง๋ง, ์ฌ์ ํ ๋ฎ์ ์์ง๋์ ๋์ ๊ฒฐํฉ๋๋ฅผ ๊ฐ์ง ์ฝ๋๋ค์ด ๋ง์๋ค. ๐ฅ
๊ทธ๋ ๊ฒ ์ค๋ ฅ์์ ์ค๋ ์์ฌ์๊ณผ ํจ๊ป ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์๋ค. ๋๋ถ๋ถ์ ์ฝ๋์ ๋ํด์๋ ์ด๋ ์ ๋ ๊น๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๋ค. ํ์ง๋ง, ์กฐ๊ธ์ด๋ผ๋ ๋ฌธ์ ์ ์ด ์๋ ์ฝ๋์ ๋ํด์๋ ๊ธฐ๋ฅ์ ๋จ์๊ฐ ์๋์ ์ผ๋ก ๋๋ฌด ์ปค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ๋ค์ด๊ฐ๋ค.
๋ฌผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌํฉํ ๋ง๋ ์งํํ์๋ค. ๋ฆฌํฉํ ๋ง์ ํ๋ฉด์ ๋ฉ์๋๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ทธ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์์ง๋ง ์ฌ์ ํ ๋ถ์กฑํจ์ด ์์๋ค. ์ด ๋ถ๋ถ์ด ์ ์ผ ์์ฝ๊ณ ์์ํ ๋ถ๋ถ์ด์์ง๋ง, ๋ ์ด์ฌํ ๊ณต๋ถํด์ผ๊ฒ ๋ค๋ ์์ง๋ฅผ ๋ถํ์ด ์๊ฐ์ด๊ธฐ๋ ํ๋ค.๐ฅ
๐ 2. ํ ์คํธ ์ฝ๋ ์์ฑ์ ๋ํ ๊ฒฝํ ๋ถ์กฑ
๋ฐ์ฐ๋น ๋์ ํ ์คํธ ์ฝ๋ ๊ฐ์๋ฅผ ํตํด 'Presenatation Layer ํ ์คํธ, Business Layer ํ ์คํธ, Persistance Layer ํ ์คํธ, Mock ์ฌ์ฉ๋ฒ' ๋ฑ ๋ค์ํ ํ ์คํธ ๋ฐฉ๋ฒ์ ํ์ตํ์๋ค.
๊ทธ๋ฌ๋ ์ค์ ํ ์คํธ๋ฅผ ํ๋ ๊ณผ์ ์์ 'Spring Security'์ ๊ด๋ จ๋ ์ค์ ํด์ผ ํ๋ ๋ฑ ๋ ๋ค์ํ ์ํฉ๋ค์ด ๋ง์๋ค. ํ๋ํ๋ ์ฐพ์๋ณด๋ฉด์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ์์ง๋ง, ์๋ฌด๋๋ ์ฒ์์ด๋ผ์ ๊ทธ๋ฐ์ง ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค.
๐ 3. ์ ์ง์ ์ด๋ ค์
์ด์ด์ง๋ ๋ด์ฉ์์ ํ์ธํ ์ ์๋ฏ์ด ์ผ๋จ์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๋ฌ์ฑํ๊ธด ํ๋ค. ํ์ง๋ง, ๊ณ์ํด์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ์ ์งํ ์ ์๋์ง์ ๋ํด์๋ ์๋ฌธ์ด ๋ ๋ค.
๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋๋ฅผ ์์ฑํ ์ฌ๋์ด ๊ทธ์ ํด๋นํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฌ๋ ๋๋ก๋ ๋ถ์กฑํ ๋ถ๋ถ(์ปค๋ฒ๋ฆฌ์ง๊ฐ ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ)์ ๋ํด์ ๋ค๋ฅธ ์ฌ๋์ด ํ ์คํธ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋ ์ํฉ์ด ์๊ธฐ๊ธฐ๋ ํ๋ค. ํ์ง๋ง, ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ๋ ๋์๊ฐ์ ํ ์คํธ ์ฝ๋ ์์ฑํ๊ธฐ ์ํด์๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ๋ง์ด ๋ค์ด๊ฐ๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
์์ ์์๋ฟ๋ง ์๋๋ผ ๋์ฑ ๋ค์ํ ์ํฉ ์์์ ๊ณผ์ฐ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ๊ณ์ ์ ์งํ ์ ์์๊น๋ผ๋ ์๊ฐ์ด ๋ ๋ค. ๋ฌผ๋ก ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๊ฐ ์๋๋ฉด ๋ฐฐํฌ ์์ฒด๊ฐ ์๋๋๋ก ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ํตํด ์์คํ ์ ์ ์งํ ์ ์๊ฒ ์ง๋ง, ๊ทธ๊ฒ์ด ์ข์ ํด๊ฒฐ์ฑ ์ ์๋๋ผ๊ณ ์๊ฐํ๋ค.
๊ฐ์ธ์ ์ผ๋ก ๊ทธ๋ฆฌ๊ณ ํ์ ์ผ๋ก ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ฅผ ์ ์งํ๊ธฐ ์ํ ๋๊ธฐ์ ๊ท์น์ด ์กด์ฌํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
๐ 4. ์ฑ๊ณผ (์ป์ ์ )
๐ 1. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100% ๋ฌ์ฑ
๊ฐ์ฅ ํฐ ์ฑ๊ณผ๋ ์๋ฌด๋๋ 'ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100% ๋ฌ์ฑ'์ด๋ค.
100%๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด 231๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์๋ค.
๋ง์ฝ์ 90%๋ผ๋ ๋ชฉํ๋ฅผ ์ธ์ ๋ค๋ฉด ํ ์คํธํ๊ธฐ ์ฌ์ด ๊ฒ๋ค ์์ฃผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ์ฌ 90%๋ฅผ ๋ฌ์ฑํ์์ ๊ฒ์ด๋ค. ํ์ง๋ง, 100%๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด์ ํ ์คํธํ๊ธฐ ์ด๋ ต๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ ๊ฒ๋ค๊น์ง ๋ชจ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์์ ๋ค์ํ ์ํฉ์์์ ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฐฉ๋ฒ์ ์ตํ ์ ์์๋ค. ๋ํ, ์ฑ ์์๋ง ๋ณด๋ ์ค์ฉ์ฃผ์ ์ฒ ํ(์ค์ฉ์ฃผ์ ํ๋ก๊ทธ๋๋จธ - ๋ฐ์ด๋น๋ ํ ๋จธ์ค, ์ค๋๋ฅ ํํธ ์ง์)์ ์กฐ๊ธ์ด๋๋ง ์ค์ฒํด ๋ณผ ์ ์๋ ์ข์ ๊ธฐํ์๋ค.
๐ 2. ํด๋ฆฐ์ฝ๋ ์์ฑ
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด์ ์กฐ๊ธ ๋ ๋์ ์ฝ๋๋ค์ ์์ฑํ ์ ์์๋ค.
๋ ๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํด์ ๋ ์ ๊ฒฝ์ ์จ์ ๊ธฐ๋ฅ ๊ตฌํ ์ฝ๋๋ฅผ ์์ฑํ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฆฌํฉํ ๋ง์ ์งํํ์ฌ ํ๋ฒ ๋ ์ฝ๋๋ฅผ ๊ฐ์ ํ์๋ค. ์ด๋ฌํ ์์ ์ ํตํด ์ด์ ๊น์ง ํ๋ ํ๋ก์ ํธ์ ๋ฌ๋ฆฌ ์กฐ๊ธ ๋ ๊ฐ์ ๋ ์ฝ๋๋ค์ ์์ฑํ ์ ์๋ ์๊ฐ์ด์๋ค.
๐ 3. ์ค์ ๋ก ์ฒด๊ฐํ ๊ฐ๋ฐ ์๋ ํฅ์
'ํ ์คํธ๊ฐ ๊ฐ๋ฅํ ์์ ํ ํ๊ฒฝ์์ ๊ฐ๋ฐ์ ์งํํ๋ฉด ๊ฐ๋ฐ ์๋๊ฐ ์ฆ๊ฐํ๋ค.'๋ผ๋ ๋ง์ ๋ค์ด๋ณธ ์ ์ด ์์ ๊ฒ์ด๋ค. ํ์ง๋ง, ํ๋ก์ ํธ๋ฅผ ํด๋ณด๋ฉด ์๊ฒ ์ง๋ง ๊ธฐ๋ฅ ๊ตฌํ์ ๊ธ๊ธํด์ ํ ์คํธ ์ฝ๋๋ฅผ ๊พธ์คํ ์์ฑํ๋ ๊ฒ ์ฝ์ง๋ง์ ์๋ค.
(๋จ์ํ ๊ท์ฐฎ์์๋ผ๊ธฐ๋ณด๋ค๋ ์ผ์ ์ด๋ ๊ฒ ์๊ณ ๋ฌธ์ ๊ฐ ๊ณ์ ์๊ธฐ๋ ์ํฉ์์ ํญ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ๋ง ์ด๋ ค์ด ๊ฑฐ ๊ฐ๋ค... ๋ฌผ๋ก ์ค๋ ฅ์ ๋ ์์์ ์ด๋ฌํ ๊ฒ๋ ๋ค ๊ด๋ฆฌํด์ผ ํ ๊ฒ์ด๋ค!!)
ํ์ง๋ง, ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๊ตณ๊ฒ ๋ง์์ ๋จน๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ๋ฐ์ ํ์๋ค. ์ด๋ฐ์๋ ํ ์คํธ ์ฝ๋ ์์ฑ ๋๋ฌธ์ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค. ํ์ง๋ง ํ๋ฐ์ผ๋ก ๊ฐ์๋ก ์์ ํ ํ๊ฒฝ์์์ ๊ณผ๊ฐํ ๊ธฐ๋ฅ๊ตฌํ๊ณผ ๋ฆฌํฉํ ๋ง ๋๋ถ์ ๋์ฑ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ์งํํ ์ ์์๋ค.
(๋ฌผ๋ก ํ ์คํธ๋ฅผ ๊ณผํ๊ฒ ์์ฑํ๋ค๋ฉด ๊ฐ๋ฐ ์๋๊ฐ ๋๋ ค์ง๊ธฐ๋ ํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก๋ ํ ์คํธ๊ฐ ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ๋ณด๋ค๋ ๋๋ฌด ์ ์ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ง๋ค๊ณ ํ๋ค.)
๐ 5. ๋๋ ์
๐ "ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๊ฐ ์์ ์ฑ์ ๋ณด์ฅํ์ง๋ ์๋๋ค."
100%๋ผ๋ ์ซ์๋ฅผ ๋ณด๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ์๋ฌธ์ ์ด ์์๋ค.
- ์ด๊ฒ ์ ๋ง ์์ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๊ฐ?
- 100%๊ฐ ์๋ฏธํ๋ ๊ฒ ์ ํํ ๋ฌด์์ด์ง?
์ฒซ ๋ฒ์งธ ์๋ฌธ์ ๋ํ ๋ต์ 'NO'๋ค. ๋ ๋ฒ์งธ ์๋ฌธ์ ๋ํ ๋ต์ '100%๋ ๋ด๊ฐ ๋ง๋ ํ๋ฅ '์ด๋ผ๋ ๊ฒ์ด๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง 100%๋ '๋ด๊ฐ ๋ง๋ ์ํฉ์ ๋ํด์ ๋ด๊ฐ ๋ง๋ ๋์ฒ ๋ฐฉ๋ฒ์ด ์ ์๋ํ๋์ง์ ๋ํ ๊ฒ'์ด๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด ์์ ์ด ๊ฐ์ง ์์ฌ๋ฃ๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ ์๋ ค์ฃผ๋ ๊ธฐ๋ฅ์ด ์๋ค๊ณ ํด๋ณด์.
public class FoodIngredient {
private Enum foodIngredientCategory;
// ์๋น๊ธฐํ
private LocalDate expirationDate;
...
}
public Food getFoodBy(List<Ingredient> foodIngredients) {
...
// ๋ง๋ค ์ ์๋ ์์์ด ์๋ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ
if(...) {
throw new Exception("๋ง๋ค ์ ์๋ ์์์ด ์์ต๋๋ค.");
}
return foodMadeFromIngredients;
}
ํ ์คํธ ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
- ์์ฌ๋ฃ๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ ์๋ ค์ค๋ค.
- ์์ฌ๋ฃ๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ด ์์ ์ ์๋ค.
์ด๋ ๊ฒ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ ๋ํด์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ 100%๊ฐ ๋์ฌ ๊ฒ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์์ ํ ์๋น์ค์ผ๊น? ๊ผญ ๊ทธ๋ฐ ๊ฒ๋ง์ ์๋๋ค.
์์ฌ๋ฃ์ ์๋น๊ธฐํ์ ํ์ธํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ํ ์์์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ด ์์ฌ๋ฃ์ ์๋น๊ธฐํ์ ํ์ธํ๋ค๋ฉด ๋ ์์ ํ ์๋น์ค๊ฐ ๋ ๊ฒ์ด๋ค.
public Food getFoodBy(List<Ingredient> foodIngredients) {
...
// ์์ฌ๋ฃ๋ค์ ์๋น๊ธฐํ ํ์ธ
checkExpirationDate(foodIngredients)
// ๋ง๋ค ์ ์๋ ์์์ด ์๋ ๊ฒฝ์ฐ ์์ธ ์ฒ๋ฆฌ
if(...) {
throw new Exception("๋ง๋ค ์ ์๋ ์์์ด ์์ต๋๋ค.");
}
return foodMadeFromIngredients;
}
์์ ๋ ํ ์คํธ ์ผ์ด์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ์์ฌ๋ฃ๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ ์๋ ค์ค๋ค.
- ์์ฌ๋ฃ๋ค์ ์ด์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์์์ด ์์ ์ ์๋ค.
- ์์ฌ๋ฃ์ ์๋น๊ธฐํ์ด ์ง๋ฌ๋ค๋ฉด ์์์ ๋ง๋ค ์ ์๋ค.
์ด์ฒ๋ผ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๊ฐ 100%๋ผ๋ ์์ ํ ์๋น์ค๊ฐ ์๋ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ ์์ ํ๊ณ ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๊ทธ ๋ต์ ๋ก๊ทธ์ ๋ชจ๋ํฐ๋ง์ ์๋ค๊ณ ์๊ฐํ๋ค.
๋ค์ ํธ์ ๊ณ์... (์ค๋ ฅ์ ๋ ์์์ ์ค๊ฒ ์ต๋๋ค๐)
'๐ ํ๊ธฐ > 2023๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ผ์คํฑ์์น(Elasticsearch) ์ ์ฉ ํ๊ธฐ (0) | 2023.12.08 |
---|---|
ํ์ดํ๋ก๊ทธ๋๋ฐ(Pair Programming) ํ๊ธฐ (0) | 2023.05.28 |