์คํฐ๋ ์งํ: 2022.12.07
4. ์ํคํ ์ฒ ํน์ฑ ์ ์
์ํคํ ํธ๋ ๊ฐ๋ฐํ๊ณผ ํจ๊ป ๋๋ฉ์ธ ๋๋ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ์ ์ํ ์ ์์ง๋ง, ์ฃผ๋ก ์ํํธ์จ์ด๋ก ์ฒ๋ฆฌํ ์ผ ์ค ๋๋ฉ์ธ ๊ธฐ๋ฅ๊ณผ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ ๋ชจ๋ ๊ฒ๋ค, ์ฆ
์ํคํ ์ฒ ํน์ฑ(Architectural Charateristic)
์ ์ ์, ๋ฐ๊ฒฌ, ๋ถ์ํ๋ ์ผ์ ์ํํ๋ค
์ํคํ ์ฒ ํน์ฑ์ ๋ค์ ์ธ ๊ฐ์ง ๊ธฐ์ค์ ์ถฉ์กฑํ๋ค.
- ๋น๋๋ฉ์ธ(nondomain) ์ค๊ณ ๊ณ ๋ ค ์ฌํญ์ ๋ช
์ํ๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ์ค๊ณ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ์ฒ๋ฆฌํ ์ผ์ ๊ตฌ์ฒด์ ์ธ ์๊ตฌ์ฌํญ์ผ๋กย ์ ๋ฆฌํ๋ค.
- ์ํคํ ์ฒ ํน์ฑ์ ์ด ์๊ตฌ์ฌํญ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ, ์ด๋ค ์ ํ์ ํ๊ฒ ๋ ์ด์ ์ ๊ด๋ จ๋ ์ด์/์ค๊ณ ๊ธฐ์ค์ ๋ช ์ํ๋ค.
- e.g. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ์ ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ค์ํย ์ํคํ ์ฒ ํน์ฑ์ด์ง๋ง, ์๊ตฌ์ฌํญย ์ ์์์๋ ์ ํ์์ง ์๋ ๊ฒฝ์ฐ๊ฐ ํ๋คํ๋ค. => @์ฑ์ง๋์ ํํฐ์ ์ฑ๋ฅ์ ์ํ ์บ์ฑ์ ์ด์ผ๊ธฐ ํ์ฌ
- e.g.2 ์ด๋ ์๊ตฌ์ฌํญ ์ ์์์๋ โ๊ธฐ์ ๋ถ์ฑ๋ฅผ ๋ฐฉ์งํ๋ค'๋ ๋ฌธ๊ตฌ๋ ๋ฐ๋ก ์์ง๋ง, ๊ธฐ์ ๋ถ์ฑ ๋ฐฉ์ง๋ ์ํคํ ํธ์ ๊ฐ๋ฐ์์ ๋น์ฐํ ์ค๊ณ ๊ณ ๋ ค์ฌํญ์ด๋ค.
- ์ค๊ณ์ ๊ตฌ์กฐ์ ์ธก๋ฉด์ ์ํฅ์ ๋ฏธ์น๋ค.
- ํ๋ก์ ํธ ๋ด๋น ์ํคํ ํธ๊ฐ ์ํคํ ์ฒ ํน์ฑ์ ๊ธฐ์ ํ๋ ์ฃผ๋ ์ด์ ๋, โ์ด ์ํคํ ์ฒ ํน์ฑ์ ์ด๋ค ํน๋ณํ ๊ตฌ์กฐ์ ์์๋ฅผ ๊ณ ๋ คํด์ผ ํ๋๊ฐ?โํ๋ ์ค๊ณ ๊ณ ๋ ค ์ฌํญ ๋๋ฌธ์ด๋ค.
- e.g. ๋ณด์์ ์ฌ์ค์ ๋ชจ๋ ํ๋ก์ ํธ์ ์ฃผ์ ๊ด์ฌ์ฌ์ด๊ณ ์ด๋ ์์คํ ์ด๊ฑด ์ค๊ณ, ์ฝ๋ฉ ๋จ๊ณ๋ถํฐ ๊ธฐ๋ณธ ๋ณด์ ์ง์นจ์ ๋ง๋ค์ด ์ค์ํด์ผ ํ์ง๋ง,
- ์ํคํ ํธ๊ฐ ๋ญ๊ฐ ํน๋ณํ ๊ฒ์ ์ค๊ณํด์ผ ํ๋ค๋ฉด ๋ณด์์ ์ํคํ ์ฒ ํน์ฑ ์์ค์ผ๋ก ๊ฒฉ์๋๋ค. ๊ฒฐ์ ์์คํ ์ ๋ง๋ ๋ค๊ณ ํ ๋, ์๋ํํฐ ๊ฒฐ์ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ ๋์ ์ดํ๋ฆฌ์ผ์ด์ ๋ด ๋ด๋ถ ์ฒ๋ฆฌ๋ฅผ ํ ๋ ๋ณด์์ ๋ํ ์ํคํ ์ฒ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฅด๊ฒ ํด์ค์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค.
- ์ดํ๋ฆฌ์ผ์ด์
์ฑ๊ณต์ ์ ๋์ ์ผ๋ก ์ค์ํ๋ค.
- ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ฌด์ํ ๋ง์ ์ํคํ ์ฒ ํน์ฑ์ ์ ๋ถ ๋ค ์ง์ํ๋ฉด ์ฐธ ์ข๊ฒ ์ผ๋, ๊ทธ๋ฌ๋ฉด ์ ๋๋ค.
- ์ง์ํ๋ ์ํคํ ์ฒ ํน์ฑ์ ํ ๊ฐ์ง๋ง ๋๋ ค๋ ๊ทธ๋งํผ ์ค๊ณ ๋ณต์ก๋๋ ๊ฐ์ค๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ๊ธ์ ์ํคํ ์ฒ ํน์ฑ์ ์ ๊ฒ ์ ์ ํ๋ ์ผ๋ ์ํคํ ํธ์ ์ค์ํ ์ฑ ๋ฌด์ด๋ค. => @์น์ฌ๋์ ์คํ์์๋ฅผ ๋ช ์์ ์ผ๋ก ๋ง๋ค๊ณ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ค.
4.1 ์ํคํ ์ฒ ํน์ฑ (์ผ๋ถ) ๋ชฉ๋ก
์ํคํ ์ฒ ํน์ฑ์ ๋ชจ๋์ฑ ๊ฐ์ ์ ์์ค ์ฝ๋์ ํน์ฑ๋ถํฐ ํ์ฅ์ฑ, ํ๋ ฅ์ฑ ๊ฐ์ ๋ณต์กํ ์ด์ ๋ฌธ์ ๊น์ง ์ํํธ์จ์ด ์์คํ ์ ๋์ ๋ฒ์์ ๊ณ ๋ฃจ ์กด์ฌํ๋ค.
4.1.1 ์ด์ ์ํคํ ์ฒ ํน์ฑ
=> @ํจ์ง๋: ํ์ฌ ์ฐ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋๋ฌด ์ ๋ณด์ธ๋ค. ์๋ฌ ๋ฐ์ด๋๋ฆฌ๊ฐ ์ ๋๋ก ๋์ด ์์ง ์์ ๊ฒ ๊ฐ๋ค. => @์น์ฌ๋: ์๋น์ค๋ฅผ ์ด์ํ๊ธฐ ์ํด์ ์ํคํ ์ฒ์ ๋ํ ๋ด์ฉ์ ์ ์๊ณ ์์ด์ผ ํ๋ ๊ฒ ์๋๊ฐ... ์ฒ์์ ์์ ๋ ๋งค๋์ ๋จ์์ ๋๋ฌด ๋ชฐ๋ผ์ ๋๋๋ค. ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ๋ฌถ์ฌ์๋ ๊ฒ ๊ฐ๋ค.
- ๊ฐ์ฉ์ฑ(availability) : ์์คํ ์ด ์ผ๋ง๋ ์ค๋ซ๋์ ์ฌ์ฉ ๊ฐ๋ฅํด์ผ ํ๋?
- ์ฐ์์ฑ(continuity) : ์ฌํด ๋ณต๊ตฌ ๋ฅ๋ ฅ
- ์ฑ๋ฅ(performance) : ์คํธ๋ ์ค ํ ์คํธ, ํผํฌ ๋ถ์, ๊ธฐ๋ฅ์ ์ฌ์ฉ ๋น๋ ๋ถ์, ํ์ ์ฉ๋, ์๋ต ์๊ฐ
- ๋ณต๊ตฌ์ฑ(recoverability) : ๋น์ฆ๋์ค ์ฐ์์ฑ ์๊ตฌ์ฌํญ(e.g. ์ฅ์ ๋ฐ์ ์ ์ผ๋ง๋ ์ ์ํ๊ฒ ์์คํ ์ ์ฌ๊ฐ๋์์ผ์ผ ํ๋?)
- ์ ๋ขฐ์ฑ(reliability)/์์ (safety) : ์์คํ ์ ํ์ผ ์ธ์ดํ(fail-safe, ๊ณ ์ฅ ๋ฌ์ ๋ ์์ ํ ๋ฐฉํฅ์ผ๋ก ํ๋ฌ๊ฐ๋๋ก ํ๋ ์ค๊ณ ๋ฐฉ์)๊ฐ ํ์ํ๊ฐ?
- ๊ฒฌ๊ณ ์ฑ(robustness) : ํ๋ก๊ทธ๋จ ์คํ ์ค ์ธํฐ๋ท ์ ์ ๋๊น, ์ ์ , ํ๋์จ์ด ์คํจ ๋ฑ ์๋ฌ ๋ฐ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ๊ฐ๋นํ๋ ๋ฅ๋ ฅ
- ํ์ฅ์ฑ(scalability) : ์ ์ ์, ์์ฒญ ์๊ฐ ๋์ด๋๋ ์์คํ ์ด ๊ทธ์ ๋ง๋ ์ฑ๋ฅ์ ๋ฐํํ๋ ๋ฅ๋ ฅ
4.1.2 ๊ตฌ์กฐ ์ํคํ ์ฒ ํน์ฑ
- ์ค์ ์ฑ(configurability) : ์ต์ข ์ ์ ๊ฐ (์ฐ๊ธฐ ํธํ ์ธํฐํ์ด์ค๋ฅผ ํตํด) ์ํํธ์จ์ด ์ค์ ์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๋๊ฐ?
- ์ ์ฅ์ฑ(extensibility) : ์๋ก์ด ๊ธฐ๋ฅ์ ์ฝ์ ํ๋ ์ผ์ ์ค์์ฑ
- ์ค์น์ฑ(installability) : ํ์ํ ๋ชจ๋ ํ๋ซํผ์ ์์คํ ์ ์ผ๋ง๋ ์์ฝ๊ฒ ์ค์นํ ์ ์๋?
- ํ์ฉ์ฑ(leverageability)/์ฌ์ฌ์ฉ(reuse) : ๊ณตํต ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ ์ ํ์์ ํ์ฉํ ์ ์๋?
- ์ง์ญ์ฑ(locality) : ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ/์กฐํํ๋ ํ๋ฉด์์ ๋ค๊ตญ์ด๊ฐ ์ง์๋๋๊ฐ? ๋ฑ
- ์ ์ง๋ณด์์ฑ(maintainability) : ์์คํ ์ ์ผ๋ง๋ ์ฝ๊ฒ ๋ณ๊ฒฝ/๊ฐ์ ํ ์ ์๋?
- ์ด์์ฑ(portability) : ํ๋ ์ด์์ ํ๋ซํผ์์ ์์คํ ์ ์คํํ ์ ์๋?
- ์ง์์ฑ(supportability) : ์ดํ๋ฆฌ์ผ์ด์ ์ ์ด๋ ์ ๋์ ๊ธฐ์ ์ง์์ ํ์๋ก ํ๋? ์์คํ ์์ ๋ฐ์ํ ์๋ฌ๋ฅผ ๋๋ฒ๊น ํ๋ ค๋ฉด ๋ก๊น ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ์ด ์ด๋ ์์ค์ผ๋ก ๋ท๋ฐ์นจ ๋์ด์ผ ํ๋?
- ์ ๊ทธ๋ ์ด๋์ฑ(upgradeability) : ์ด ์ดํ๋ฆฌ์ผ์ด์ /์๋ฃจ์ ์ ๊ตฌ ๋ฒ์ ์ ์ ๋ฒ์ ์ผ๋ก ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ ๊ทธ๋ ์ด๋๋ฅผ ํ ์ ์๋๊ฐ?
4.1.3 ์ํคํ ์ฒ ๊ณตํต ํน์ฑ
- ์ ๊ทผ์ฑ(accessability) : ์๋งน, ์ฒญ๊ฐ ์ฅ์ ์ธ ๋ฑ ๋ชจ๋ ์ ์ ๊ฐ ์ ๊ทผํ๋๋ฐ ๋ถํธํจ์ด ์๋?
- ๋ณด๊ด์ฑ(archivability) : ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์์นด์ด๋น ํด์ผ ํ๋, ์๋๋ฉด ์ผ์ ์๊ฐ ๊ฒฝ๊ณผ ํ ์ญ์ ํด์ผ ํ๋?
- ์ธ์ฆ(authentication) : ์ ์ ๊ฐ ๋ณธ์ธ์ด ๋ง๋ค๋ ๊ฒ์ ์ฆ๋ช ํ๊ธฐ ์ํด ํ์ํ ๋ณด์ ์๊ตฌ์ฌํญ
- ์ธ๊ฐ(authorization) : (์ ์ค ์ผ์ด์ค, ์๋ธ ์์คํ , ์น ํ์ด์ง, ๋น์ฆ๋์ค ๊ท์น, ํ๋ ๋ ๋ฒจ ๋ฑ) ์ ์ ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ ํด์ง ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ ์ ์๋๋ก ๊ฐ์ ํ๋ ๋ณด์ ์๊ตฌ์ฌํญ
- ํฉ๋ฒ์ฑ(legal) : ์์คํ ์ด์์ ๋ฒ์ ์ ์ฝ์กฐ๊ฑด์ด ์๋๊ฐ? (๋ฐ์ดํฐ ๋ณดํธ, ์ฌ๋ฒ ์ธ์ค ์ฅ์ฌ๋ฆฌ๋ฒ, GDPR ๋ฑ) ํ์ฌ๋ ์ด๋ค ๊ถ๋ฆฌ๋ฅผ ์ ๋ณด ํด์ผ ํ๋?
- ํ๋ผ์ด๋ฒ์(privacy) : ํ์ฌ ๋ด๋ถ ์์ง์์ ํธ๋์ญ์ ์ ์ธ๋ถ์ ๋๋ฌ๋ด์ง ์๋ ๊ธฐ๋ฅ(e.g. ์ํธํ ํธ๋์ญ์ ์ DBA๋ ๋คํธ์ํฌ ์ํคํ ํธ๋ ํด๋ ์ด ๋ถ๊ฐ)
- ๋ณด์(security) : ๋ฐ์ดํฐ๋ฅผ ์ํธํ ํ ํ DB์ ๋ณด๊ดํด์ผ ํ๋? ๋ด๋ถ ์์คํ ๊ฐ ๋คํธ์ํฌ ํต์ ๋ ์ํธํ ํด์ผ ํ๋? ์๊ฒฉ ์ ์ ์ก์ธ์ค๋ ์ด๋ค ์ข ๋ฅ์ ์ธ์ฆ์ด ํ์ํ๊ฐ?
- ์ฌ์ฉ์ฑ(usability)/์ฑ์ทจ์ฑ(achievability) : ์ ์ ๊ฐ ์ดํ๋ฆฌ์ผ์ด์ /์๋ฃจ์ ์ ์ด์ฉํ์ฌ ์ํ๋ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ํ์ํ ๊ต์ก, ํ๋ จ ์์ค
๋ค์์ ๊ตญ์ ํ์ค ๊ธฐ๊ตฌ(International Organization for Standardization, ISO)๊ฐ ๋ฐํํ ๊ธฐ๋ฅ๋ณ ๋ชฉ๋ก์ด๋ค.
- ์ฑ๋ฅ ํจ์จ(performance efficiency)
- ์๋ ค์ง ์กฐ๊ฑด์์ ๋ฆฌ์์ค ์์ ๋น๋กํ๋ ์ฑ๋ฅ ์ธก์ ๊ฐ, ์๊ฐ ์ธก์ , ๋ฆฌ์์ค ์ฌ์ฉ, ๋ฅ๋ ฅ ๋ฑ์ด ํฌํจ๋๋ค.
- ํธํ์ฑ(compatibility)
- ์ ํ, ์์คํ , ์ปดํฌ๋ํธ๊ฐ ๋ค๋ฅธ ์ ํ, ์์คํ , ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ๊ตํํ๊ณ (ํ๊ฑฐ๋) ๋์ผํ HW/SW ํ๊ฒฝ์ ๊ณต์ ํ๋ฉด์ ํ์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋ ์ ๋.
- ๊ณต์กด(ํ๊ฒฝ๊ณผ ๋ฆฌ์์ค๋ฅผ ๋ค๋ฅธ ์ ํ๊ณผ ๊ณต์ ํ๋ฉด์ ํจ์จ์ ์ผ๋ก ํ์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์์)
- ์ํธ์ด์ฉ์ฑ(๋ ์ด์์ ์์คํ ์ ์ ๋ณด๋ฅผ ๊ตํ, ํ์ฉ ๊ฐ๋ฅํ ์ ๋)์ด ํฌํจ๋๋ค.
- ์ฌ์ฉ์ฑ(usability)
- ์ ์ ๊ฐ ์์คํ ์ ์ํ๋ ๋ชฉ์ ์ ๋ง๊ฒ ํจ๊ณผ์ ์ผ๋ก, ํจ์จ์ ์ผ๋ก, ๋ง์กฑ์ค๋ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ์ ๋
- ์ ํฉ์ฑ ์ธ์ง๋(์ ์ ๊ฐ ์์ ์ ์ฌ์ฉ ๋ชฉ์ ์ ์ํํธ์จ์ด๊ฐ ๋ถํฉํ๋์ง ์ธ์ํ ์ ์์)
- ํ์ต์ฑ(์ ์ ๊ฐ ์ผ๋ง๋ ์ฝ๊ฒ ์ํํธ์จ์ด ์ฌ์ฉ๋ฒ์ ์ตํ๋๊ฐ)
- ์ ์ ์๋ฌ ๋ฐฉ์ง(์ ์ ๊ฐ ์ค์ํ๋ ๊ฒ์ ๋ฐฉ์ง)
- ์ ๊ทผ์ฑ(์ฌ๋๋ค์ด ์ํํธ์จ์ด์ ๊ฐ์ฅ ๋ค์ํ ๋ฅ๋ ฅ๊ณผ ๊ธฐ๋ฅ์ ์ ํ ์ ์๊ฒ ํจ)์ด ํฌํจ๋๋ค.
- ์ ๋ขฐ์ฑ(reliability)
- ์ฃผ์ด์ง ๊ธฐ๊ฐ ๋์ ํน์ ์กฐ๊ฑด์์ ์์คํ ์ด ๊ธฐ๋ฅํ๋ ์ ๋
- ์ฑ์๋(์ ์ ๋์ ์ ์ํํธ์จ์ด๊ฐ ์ํ๋ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋๊ฐ)
- ๊ฐ์ฉ์ฑ(์ํํธ์จ์ด๊ฐ ๊ฐ๋ ์ค์ด๊ณ ์์ธ์ค ๊ฐ๋ฅํ๊ฐ)
- ๋ด๊ณ ์ฅ์ฑ(HW/SW๊ฐ ๊ณ ์ฅ๋๋ SW๊ฐ ์๋ํ ๋๋ก ์๋๋๋)
- ๋ณต๊ตฌ์ฑ(์ํํธ์จ์ด๊ฐ ๊ณ ์ฅ๋๋ ์ํฅ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์ด๋ฆฌ๊ณ ์ํ๋ ์์คํ ์ํ๋ก ๋์๊ฐ ์ ์๋๊ฐ)์ด ํฌํจ๋๋ค.
- ๋ณด์(security)
- ์ฌ๋๋ค, ๋ค๋ฅธ ์ ํ, ์์คํ ์ด ์์ ์ ์ธ์ฆ ๋ ๋ฒจ์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์ค ํ ์ ์๊ฒ๋ ์ํํธ์จ์ด๊ฐ ์ ๋ณด๋ฅผ ๋ณดํธํ๋ ์ ๋.
- ๊ธฐ๋ฐ์ฑ(๋ฐ์ดํฐ๋ ์ธ์ฆ๋ ์ฌ๋๋ง ์ก์ธ์ค ํ ์ ์์)
- ๋ฌด๊ฒฐ์ฑ(๋ฐ์ดํฐ๋ฅผ ํจ๋ถ๋ก ๋ณ์กฐํ์ง ๋ชปํ๊ฒ ์ํํธ์จ์ด๊ฐ ํ๊ฐ๋์ง ์์ ์ก์ธ์ค๋ฅผ ์ฐจ๋จํจ)
- ๋ถ์ธ ๋ฐฉ์ง(์ด๋ค ์ก์ ์ด๋ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์์์ ์ฆ๋ช ํจ)
- ์ฑ ์ ์์ฌ(์ ์ ๊ฐ ์ํํ ์ก์ ์ ์ถ์ )
- ์ง์(์ ์ ์ ์์ ์ฆ๋ช )๊ฐ ํฌํจ๋๋ค.
- ์ ์ง๋ณด์์ฑ(maintainability)
- ๊ฐ๋ฐ์๊ฐ ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ์ํํธ์จ์ด๋ฅผ ๊ณ ์ณ ๊ฐ์ /๋ฐ์ ์ํค๊ณ ๊ณ์ ๋ณํํ๋ ํ๊ฒฝ์ด๋ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ ์ฉํ ์ ์๋๊ฐ
- ๋ชจ๋์ฑ(์ํํธ์จ์ด๋ฅผ ๋ ๋ฆฝ๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑํ ์ ์๋ ์ ๋)
- ์ฌ์ฌ์ฉ์ฑ(๊ฐ๋ฐ์๊ฐ ์ด๋ค ์์ฐ์ ์ฌ๋ฌ ์์คํ ์์, ๋ค๋ฅธ ์์ฐ์ ๊ตฌ์ถํ๋๋ฐ ๋ค์ ์ฌ์ฉํ ์ ์๋ ์ ๋)
- ๋ถ์์ฑ(๊ฐ๋ฐ์๊ฐ ์ผ๋ง๋ ์ฝ๊ฒ ์ํํธ์จ์ด ๋ฉํธ๋ฆญ์ ์ทจํฉํ ์ ์๋)
- ์์ ์ฑ(๊ฐ๋ฐ์๊ฐ ๊ธฐ์กด ์ ํ ํ์ง์ ๋จ์ด๋จ๋ฆฌ์ง ์๊ณ ๋ ์ด๋ ต์ง ์๊ฒ ์ํํธ์จ์ด๋ฅผ ์์ ํ ์ ์๋)
- ์ํ์ฑ(๊ฐ๋ฐ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ผ๋ง๋ ์ฝ๊ฒ ์ํํธ์จ์ด๋ฅผ ํ ์คํธ ํ ์ ์๋)์ด ํฌํจ๋๋ค.
- ์ด์์ฑ(portability)
- ๊ฐ๋ฐ์๊ฐ HW/SW ๋๋ ๋ค๋ฅธ ์ด์ฉ ํ๊ฒฝ์ ์๋ ์์คํ , ์ ํ, ์ปดํฌ๋ํธ๋ฅผ ๋ค๋ฅธ ๊ณณ์ ์ฎ๊ธธ ์ ์๋ ์ ๋.
- ์ ์์ฑ(๊ฐ๋ฐ์๊ฐ ์ํํธ์จ์ด๋ฅผ ๋ค๋ฅธ HW, SW, ๊ธฐํ ์ด์ฉ ํ๊ฒฝ์ ๋ง๊ฒ ์ ์ฉ์ํฌ ์ ์๋)
- ์ค์น์ฑ(์ํํธ์จ์ด๋ฅผ ์ฃผ์ด์ง ํ๊ฒฝ์ ์ค์น/์ญ์ ํ ์ ์๋)
- ๊ต์ฒด์ฑ(๊ฐ๋ฐ์๊ฐ ์ผ๋ง๋ ์ฝ๊ฒ ๋ค๋ฅธ ์ํํธ์จ์ด๋ก ๊ธฐ๋ฅ์ ๊ต์ฒดํ ์ ์๋๊ฐ)์ด ํฌํจ๋๋ค.
4.2 ํธ๋ ์ด๋ ์คํ ๋ฐ ๋์ ๊ฒ ์ค์์ ์ ์ผ ๋์ ์ํคํ ์ฒ
์์คํ ์ ์ค๊ณํ๋ฉฐ ๋ชจ๋ ์ํคํ ์ฒ ํน์ฑ์ ๋น ์ง์์ด ์ต์์ผ๋ก ๋ฐ์ํ๊ธฐ๋ ๋ถ๊ฐ๋ฅ์ ๊ฐ๊น๋ค.ย ์ต๊ณ ์ ์ํคํ ์ฒ๋ฅผ ๊ณ ์งํ์ง ๋ง๊ณ ๋์ ๊ฒ ์ค์์ ์ ์ผ ๋์ ์ํคํ ์ฒ๋ฅผ ์ ํํ๋ผ.ย ์ํคํ ์ฒ ํน์ฑ์ ๋๋ฌด ์์ฌ๋ด๋ฉด ๋ชจ๋ ๋น์ฆ๋์ค ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ์๋ํ๋ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ด ๋์ด ๋ฒ๋ฆฐ๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ฐ ์ํคํ ์ฒ๋ ์ค๊ณํ๊ธฐ๊ฐ ๋๋จํ ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ ์คํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ๋ค.
์ํคํ ํธ๋ ๊ฐ๋ฅํ ํ ์ํคํ ์ฒ ์ค๊ณ๋ฅผ ๊พธ์คํ ์กฐ๊ธ์ฉ ๋ฐ๋ณตํด ๋ณด๋ ๊ฒ์ด ์ข๋ค. ๋ฐ๋ณต์ ๊ฐ์น๋ ์ ์์ผ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๋ ๊ฐ์ฅ ์ค์ํ ๊ตํ ์ค ํ๋๋ก, ์ํคํ ์ฒ ๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋ ๋ฒจ์ ์ํํธ์จ์ด ๊ฐ๋ฐ์๋ ์ ์ฉ๋๋ค.
5. ์ํคํ ์ฒ ํน์ฑ ์๋ณ
5.1 ๋๋ฉ์ธ ๊ด์ฌ์ฌ์์ ์ํคํ ์ฒ ํน์ฑ ๋์ถ
์ํคํ ํธ๋ ๋๋ฉ์ธ ๊ด์ฌ์ฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํด์ํ์ฌ ์ ํํ ์ํคํ ์ฒ ํน์ฑ์ ์๋ณํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ฅ์ฑ, ๋ด๊ณ ์ฅ์ฑ, ๋ณด์, ์ฑ๋ฅ ์ค ์ด๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํ ๊ด์ฌ์ฌ์ผ๊น? ๋ค ๊ฐ์ง ๋ชจ๋ ์์คํ ์ ํ์ํ ํน์ฑ์ด์ง๋ง,ย ์ํคํ ํธ๋ ๋๋ฉ์ธ์ ํต์ฌ ๋ชฉํ์ ํ์ฌ ์ํฉ์ ๊ณ ๋ คํด์ ๋๋ฉ์ธ ๊ด์ฌ์ฌ๋ฅผ โ~์ฑ'์ผ๋ก ํด์ํ ํ, ๊ทธ์ ๋ฐ๋ผ ์ ํํ๊ณ ํฉ๋ฆฌ์ ์ธ ์ํคํ ์ฒ ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํ๋ค.
๋๋ฉ์ธ ์ดํด๊ด๊ณ์์ ํ๋ ฅํด์ ์ฃผ์ ์ํคํ ์ฒ ํน์ฑ์ ์ ์ํ๋ ํ ๊ฐ์ง ํ์,์ต์ข ๋ชฉ๋ก์ ๊ฐ๋ฅํ ํ ์งง๊ฒ ํ๋ผ๋ ๊ฒ์ด๋ค. ์ํคํ ์ฒ์์ ๊ฐ์ฅ ํํ ์ํฐํจํด ์ค ํ๋๊ฐ, ๋ชจ๋ ์ํคํ ์ฒ ํน์ฑ์ ์ง์ํ๋ ์ ๋ค๋ฆญ ์ํคํ ์ฒ(generic architecture)๋ฅผ ์ค๊ณํ๋ ค๋ ๊ฒ์ด๋ค. ์ํคํ ์ฒ ํน์ฑ์ ๊ฐ์์ ์ฐ์ฐํ์ง ๋ง๊ณ ๊ฐ๊ธ์ ์ค๊ณ๋ฅผ ๋จ์ํํ๋๊ฒ ์ข๋ค.
๋๋ถ๋ถ์ ์ํคํ ์ฒ ํน์ฑ์ ํต์ฌ ๋๋ฉ์ธ ์ดํด๊ด๊ณ์๋ค์ ์๊ฒฌ์ ๋ฃ๊ณ ๋๋ฉ์ธ ๊ด์ ์์ ๋ฌด์์ด ์ค์ํ์ง ์๊ฒฌ์ ๊ตํํ๋ฉด์ ์ ๋ฆฌ๋๋ค.ย ์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ํคํ ํธ์ ๋๋ฉ์ธ ์ดํด๊ด๊ณ์๋ค์ด ์๋ก ๋ค๋ฅธ ์ธ์ด๋ก ๋ง์ ํ๋ค๋ ๊ฒ์ด๋ค.ย ์๋ฅผ ๋ค์ด, ์ํคํ ํธ๋ ํ์ฅ์ฑ, ์ํธ์ด์ฉ์ฑ, ๋ด๊ณ ์ฅ์ฑ, ํ์ต์ฑ, ๊ฐ์ฉ์ฑ์ ์ด์ดํ๋๋ฐ, ๋๋ฉ์ธ ์ดํด๊ด๊ณ์๋ ์ธ์ ๋ณํฉ, ๊ณ ๊ฐ ๋ง์กฑ, ์ถ์ ์์ , ๊ฒฝ์ ์ฐ์๋ฅผ ๋ ผํ๋ ์์ด๋ค. ์๋ก ๋ง์ด ์ ํตํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์๋๋ฐฉ์ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
์๋ฅผ ๋ค์ด, ๋๋ฉ์ธ ์ดํด๊ด๊ณ์๊ฐ โ๋น์ผ ํ๋ ์ข ๊ฐ๋ ๋ฌด์จ ์ผ์ด ์์ด๋ ์ ์๊ฐ์ ๋ง๊ฐ๋ผ์ผ ํ๋คโ๋ ์๊ตฌ์ฌํญ์ ์ ์ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๋ง์ฝ ์ด ๋ง์ ๋ค์ ์ํคํ ์ฒ๊ฐ ์ค๋ก์ง ์ฑ๋ฅ์ด ์ค์ํ ๊ฒ์ด๋ผ ์ฐฉ๊ฐํ๊ณ ์ฑ๋ฅ์๋ง ์ง์คํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์คํจํ ๊ฒ์ด๋ค.
- ํ์ํ ์์ ์์ ์์คํ ์ ์ฌ์ฉํ ์ ์๋ค๋ฉด ์ผ๋ง๋ ๋น ๋ฅธ ์ง๋ ์ค์ํ์ง ์๋ค.
- ๋๋ฉ์ธ์ด ๋ ์ปค์ง๊ณ ํ๋๊ฐ ๋ง์ด ์ ์ ๋๋ฉด ์ ์๊ฐ์ ์ข ๊ฐ ๊ณ์ฐ์ ๋ง์น ์ ์๋๋ก ์์คํ ๊ท๋ชจ๋ฅผ ํ์ฅํ ์ ์์ด์ผ ํ๋ค.
- ์์คํ ์ ๊ฐ์ฉ์ฑ๊ณผ ๋๋ถ์ด ํ๋ ์ข ๊ฐ ๊ณ์ฐ ๋์ค ์์คํ ์ด ๋ฉ๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ์ง ์๋๋ก ์์ ์ฑ๋ ๋ณด์ฅ๋์ด์ผ ํ๋ค.
- ํ๋ ์ข ๊ฐ ๊ณ์ฐ์ด ์ฝ 85% ์๋ฃ๋ ์ํ์์ ์์คํ ์ด ๋ค์ด๋๋ฉด? ์ฆ์ ์์คํ ์ ๋ณต๊ตฌํด์ ๊ฐ์ฅ ๋ง์ง๋ง์ ํ๋ ์ข ๊ฐ๊ฐ ๊ณ์ฐ๋ ์์ ๋ถํฐ ๋ค์ ์คํํด์ผ ํ๋ค.
- ์์คํ ์ ๋น ๋ฅธ ๊ฒ๋ ์ค์ํ์ง๋ง ํ๋ ์ข ๊ฐ๋ ์ ํํ๊ฒ ๊ณ์ฐ๋์ด์ผ ํ๋ค.
5.2 ์๊ตฌ์ฌํญ์์ ์ํคํ ์ฒ ํน์ฑ ๋์ถ
์์ ์ ์ ์์ ๊ทธ์ ๋ฐ๋ฅธ ํ์ฅ ๋ฌธ์ ๋ ๋ณดํต ๋๋ฉ์ธ ๊ด์ฌ์ฌ์์ ๋น ์ง์ง ์๋ ๋จ๊ณจ ์๋์ด๋ค. ์ํคํ ํธ๊ฐ ์๊ณ ์๋ ๋๋ฉ์ธ ์ง์์์ ๋์ถ๋๋ ํน์ฑ๋ค๋ ์๋๋ฐ, ์ด๊ฒ์ด ์ํคํ ํธ๊ฐ ๋๋ฉ์ธ ์ง์์ ๊ฐ๊ณ ์์ผ๋ฉด ์ด๋ก์ด ์ด์ ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ ์ํคํ ํธ๊ฐ ๋ํ๊ต ํ์ฌ ๊ด๋ฆฌ ์์คํ ์์ ์๊ฐ ๋ฑ๋ก์ ์ฒ๋ฆฌํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ๋ค๊ณ ๊ฐ์ ํ์. ๊ณ์ฐ ํธ์์, ์ด ํ์ ์๋ 1,000๋ช ์ด๊ณ ํ์ ์ผ์ธ ๋น 10์๊ฐ์ ์๊ฐ ์ ์ฒญ์ ํ๋ค๊ณ ๋ณด๋ฉด, ๋ฑ๋ก ๊ธฐ๊ฐ ์ค ํ์๋ค์ ์์คํ ์ด์ฉ ์๊ฐ์ด ๊ณ ๋ฃจ ๋ถ์ฐ๋๋ฆฌ๋ผ๋ ์ ์ ํ์ ์์คํ ๊ท๋ชจ๋ฅผ ์ผ์ ํ๊ฒ ์ค๊ณํด์ผ ํ๋๊ฐ? ์๋๋ฉด, ๋ณดํต ๋ํ์๋ค์ ์ฑํฅ๊ณผ ์ต๊ด์ ๋ํ ์ง์์ ๋ฐํ์ผ๋ก ๋ง๊ฐ 10๋ถ ์ ๋ถํฐ 1,000๋ช ์ ํ์ ๋ชจ๋๊ฐ ์๊ฐ ์ ์ฒญ์ ํ๋ ค๊ณ ๋ฌ๋ ค๋ค์ด๋ ๋ฌธ์ ์๋ ์์คํ ์ ์ค๊ณํด์ผ ํ๋๊ฐ? ํ์๋ค์ ์ฑํฅ์ ์๋ค๋ฉด ๋ต์ ๋๋ฌด ์ฝ๋ค
6.1 ์ํคํ ์ฒ ํน์ฑ ์ธก์
์ํคํ ์ฒ ํน์ฑ์ ์ ์ํ ๋ ํํ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ๋ค.
- ๋ฌผ๋ฆฌํ์ด ์๋๋ค : ์ํคํ ์ฒ ํน์ฑ์ ๋๋ถ๋ถ ์๋ฏธ๊ฐ ๋ชจํธํ๋ค.
- ์ ์๊ฐ ๋๋ฌด ๋ค์ํ๋ค : ๋ถ์๋ง๋ค ์ ์๋ฅผ ํต์ผํ๊ธฐ ์ ๊น์ง๋ ์ํํ ์ํต์ด ์ด๋ ต๋ค.
- ๋๋ฌด ๋ณตํฉ์ ์ด๋ค : ๋ฐ๋์งํ ์ํคํ ์ฒ ํน์ฑ์ ๋๋ถ๋ถ ๋ ์์ ๋ค๋ฅธ ์ฌ๋ฌ ํน์ฑ๋ค๋ก ๊ตฌ์ฑ๋๋ค.
์ด ์ธ๊ฐ์ง ๋ฌธ์ ๋ค์ ์ํคํ ์ฒ ํน์ฑ์ ๊ฐ๊ด์ ์ผ๋ก ์ ์ํ๋ฉด ๋ชจ๋ ํด๊ฒฐ๋๋ค.
6.1.1 ์ด์์ ํน์ฑ
์ํคํ ์ฒ ํน์ฑ์ ์ฑ๋ฅ, ํ์ฅ์ฑ์ฒ๋ผ ๋น๊ต์ ์ ํํ๊ฒ ์ธก์ ํ ์ ์๋ ๊ฒ๋ ๋ง์ง๋ง, ํ ๋ชฉํ์ ๋ฐ๋ผ ๊ทธ์ ๋ฐ๋ฅธ ํด์์ ๋ฏธ๋ฌํ๊ฒ ๊ฐ๋ฆด ๋๊ฐ ๋ง๋ค. ์๋ฅผ ๋ค์ด ํน์ ์์ฒญ์ ๋ํ ํ๊ท ์๋ต ์๊ฐ์ ์ธก์ ํ ๊ฒฝ์ฐ, ์ด๋ค ๊ฒฝ๊ณ ์กฐ๊ฑด ๋๋ฌธ์ 1%์ ์์ฒญ์ด ๋ค๋ฅธ ์์ฒญ๋ณด๋ค ์ฒ๋ฆฌ ์๊ฐ์ด 10๋ฐฐ ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์ฌ๋ด ๋คํธ์ํฌ ๋ฆฌ์์ค๊ฐ ์ถฉ๋ถํ๋ค๋ฉด ํน์ด์ (outlier)์ ๋ํ๋์ง ์์ ์ ์์ผ๋ ์ต๋ ์๋ต ์๊ฐ๋ ํจ๊ป ์ธก์ ํด์ผ ํน์ด์ ๊น์ง ์ก์๋ผ ์ ์์ ๊ฒ์ด๋ค.
๐ ์ฑ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ง ๋ง(flavor)
๋๋ถ๋ถ์ ํ๋ก์ ํธ๋ (์น ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ/์๋ต ์๊ฐ์ ์ฌ๋ ๊ฒ์ฒ๋ผ) ์ผ๋ฐ์ ์ธ ์ฑ๋ฅ์ ์ดํด๋ณด์ง๋ง, ์ํคํ ํธ์ ๋ฐ๋ธ์ต์ค ์์ง๋์ด๋ ์ฑ๋ฅ ์์ฐ์ ์ฑ ์ ํ๋ ๋ฐ ๋ง์ ์์ ์ ํ๋ค.
์๋ฅผ ๋ค์ด, ์ ์ ํ๋ ํจํด์ ๋ถ์ํ ๊ฒฐ๊ณผ ์ฒซ ํ์ด์ง์ (๋ธ๋ผ์ฐ์ ๋๋ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ์นํ์ด์ง๊ฐ ๋จ๊ธฐ ์์ํ๋ ๊ฐ์์ ์ธ ๊ฒฐ๊ณผ๊ฐ ์ฒ์ ๋ํ๋๋) ๋ ๋๋ง ์๊ฐ์ 500ms, ์ฆ 0.5s๊ฐ ์ต์ ์ด๋ผ๋ ๊ฒฐ๋ก ์ ์ป์๋ค. ์ดํ๋ฆฌ์ผ์ด์ ์ ๋๋ถ๋ถ ์ด ์๊ฐ์ด ๋ ์๋ฆฌ์ ๋ฐ๋ฆฌ์ด ์ ๋์ง๋ง, ๊ฐ๋ฅํ ๋ง์ ์ ์ ๋ฅผ ํ๋ณดํ๋ ค๋ ์์ฆ ์ฌ์ดํธ์์ ์ต์ด ๋ ๋๋ง ์๊ฐ์ ์ค์ํ ๋ฉํธ๋ฆญ์ด๋ฏ๋ก ์ด์ํ์ ๋งค์ฐ ์ฌ์ธํ ์ธก์ ์ฒด๊ณ๋ฅผ ๊ตฌ์ถํ๋ค.
๋ง์ ์ ๋์ ์ธ ํ์ฌ๋ค์ ํ์ด์ง ๋ค์ด๋ก๋์ K-๊ฐ์ค์น ์์ฐ(K-weight budget, ํน์ ํ์ด์ง์ ํ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ต๋ ๋ฐ์ดํธ ์)์ ์ค์ ํ๋ค. ์ด๊ฒ์ ๋ฌผ๋ฆฌํ์ ์ ์ฝ์กฐ๊ฑด์์ ํ์๋ ์ฌ์, ์ฆ ํ ๋ฒ์ ๋คํธ์ํฌ๋ฅผ ํตํด ์ด๋ํ ์ ์๋ ๋ฐ์ดํธ ์๋ ์ ํ์ ์ด๋ผ๋ ์๊ฐ์ ๊ธฐ๋ฐํ๋ค. ํนํ, ๋ ์ดํด์๊ฐ ์๋์ ์ผ๋ก ํฐ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ผ๋ฉด ๋์ฑ ๊ทธ๋ ๋ค.
์์ค ๋์ ํ์ ๋ฌ์ฑํ๊ธฐ ์ด๋ ค์ด ์ฑ๋ฅ ์์น๋ฅผ ์ ํ๋ ๋์ , ํต๊ณ ๋ถ์ ๊ฒฐ๊ณผ๋ก ์ป์ ๋๋ฆ๋๋ก์ ์ ์์ ๊ธฐ๋ฐํ๋ค. ์๋ฅผ ๋ค์ด, ํ์ฅ์ฑ์ ๋ชจ๋ํฐ๋งํ๋ ๋น๋์ค ์คํธ๋ฆฌ๋ฐ ์๋น์ค ์ ์ฒด๊ฐ ์๋ค๊ณ ํ์. ์์ง๋์ด๋ ์๋ฌด ์์น๋ ๋์ถฉ ๋ชฉํ๋ก ์ผ๋ ๊ฒ์ด ์๋๋ผ, ์๊ฐ์ ๋ฐ๋ผ ์ด๋ค ์ถ์ด๋ฅผ ๋ณด์ด๋์ง ์ธก์ ํ๊ณ ํต๊ณ ๋ชจ๋ธ์ ์๋ฆฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์๊ฐ ์์งํ ๋ฉํธ๋ฆญ์ด ์์ธก ๋ชจ๋ธ์์ ๋ฒ์ด๋ ๊ฒฝ์ฐ์๋ ์๋ฆผ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค. ๋ง์ฝ ์ด ๊ณผ์ ์ด ์ํฌ๋ก ๋์๊ฐ๋ค๋ฉด ์์ธ์ ๋ชจ๋ธ ์์ฒด๊ฐ ๋ถ์ ํํ๊ฑฐ๋(ํ์ด ์๊ณ ์ถ์ดํ๋ ๊ฒ), ๋ญ๊ฐ๊ฐ ์๋ชป๋์๊ฑฐ๋(์ญ์ ํ์ด ์๊ณ ์ถ์ดํ๋ ๊ฒ) ๋ ๊ฐ์ง ์ค ํ๋์ด๋ค.
๋๊ตฌ๊ฐ ๋ฐ์ ํ๊ณ ์ดํด๋๊ฐ ๋์์ง๋ฉด์ ํ์ด ์ธก์ ํ ์ ์๋ ์ํคํ
์ฒ ํน์ฑ์ ๋น ๋ฅด๊ฒ ์งํํ๊ณ ์๋ค. ์๋ฅผ ๋ค์ด ์์ฆ์ย ์ต์ด ์ฝํ
์ธ ๋ ๋๋ง(First Contentful Paint)
๊ณผย ์ต์ด CPU ์ ํด(First CPU idle)
๊ฐ์ ๋ฉํธ๋ฆญ์ ์ฑ๋ฅ ์์ฐ์ ์ง์คํด์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ๋ก ์ ์ํ ์ ์ ์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋น์ค์๊ฒ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ๋ ๋ง๋ค.
6.1.2 ๊ตฌ์กฐ์ ํน์ฑ
์ฑ๋ฅ์ฒ๋ผ ๋ชฉํ์น๊ฐ ํ์คํ์ง ์์ ๋ฉํธ๋ฆญ๋ ์๋ค. ์ ์ ์๋ ๋ชจ๋์ฑ์ฒ๋ผ ๋ด๋ถ ๊ตฌ์กฐ์ ๊ดํ ํน์ฑ๋ ๊ทธ๋ ๋ค. ์์ง ๋ด๋ถ ์ฝ๋ ํ์ง์ ๋ํ ์ข ํฉ์ ์ธ ๋ฉํธ๋ฆญ์ ์์ง๋ง, ์ํคํ ํธ๋ ๋ค๋ฅธ ๋ฉํธ๋ฆญ๊ณผ ๊ณตํต ๋๊ตฌ๋ฅผ ์ด์ฉํด์ ์ฝ๋ ๊ตฌ์กฐ์ ๊ดํ ์ค์ํ ๋ถ๋ถ์ ๋ค์ฌ๋ค ๋ณผ ์ ์๋ค.
์ฝ๋์ ๋ณต์ก๋๋ย ์ํ ๋ณต์ก๋(cyclomatic complexity, CC)
๋ผ๋ ๋ฉํธ๋ฆญ์ ํตํด ๋ช
์พํ๊ฒ ์ธก์ ํ ์ ์๋ค. ์ํ ๋ณต์ก๋๋ ํจ์/๋ฉ์๋, ํด๋์ค, ๋๋ ์ดํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ์์ ์ฝ๋ ๋ณต์ก๋๋ฅผ ๊ฐ๊ด์ ์ผ๋ก ๋ํ๋ด๋ ์งํ์ด๋ค. CC๋ ์ฝ๋์ ๊ทธ๋ํ ์ด๋ก ์ ์ ์ฉํ์ฌ ๊ณ์ฐํ๋ค. ์ข ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋งํ๋ฉด, ์์ดํ ์คํ ๊ฒฝ๋ก(execution path)๋ฅผ ์ ๋ฐํ๋ ๊ฒฐ์ ์ (decision path)์ ์ด์ฉํ๋ค.
์๋ฅผ ๋ค์ด, ์ด๋ค ํจ์์ (if๋ฌธ ๊ฐ์) ๊ฒฐ์ ๋ฌธ(decision statement)์ด ํ๋๋ ์๋ค๋ฉด, CC = 1 ์ด๊ณ , ์กฐ๊ฑด ๋ถ๊ธฐ๊ฐ ํ๋ ์์ผ๋ฉด, ์คํ ๊ฒฝ๋ก๋ ๋ ๊ฐ๋๋ก ๊ฐ๋ผ์ง๋ฏ๋ก CC = 2์ด๋ค. ํ๋์ ํจ์๋ ๋ฉ์๋์์ CC๋ฅผ ๊ตฌํ๋ ๊ณต์์ CC = E - N + 2 ์ด๋ค. ์ฌ๊ธฐ์ N์ ๋ ธ๋(node, ์ฝ๋ ๋ผ์ธ), E๋ ๊ฐ์ (edge, ๊ฐ๋ฅํ ๊ฒฐ์ )์ ๋๋ค. ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค. ์์ธ ๊ฐ๋จ๊ตฌ ํ ํค๋๋ก 133 ํ๊ตญํ์ด์ด๋น๋ฉ
public void decision(int c1, int c2) {
if (c1 < 100)
return 0;
else if (c1 + c2 > 500)
return -1;
else
return 1;
}
์์ ์ฝ๋์ ์ํ ๋ณต์ก๋๋ฅผ ๊ตฌํ๋ฉด 5 - 4 + 2 = 3 ์ด๋ค.
์ํ ๋ณต์ก๋ ๊ณต์ ๋๋ถ๋ถ์ ์๋ 2๋ ๋จ์ผ ํจ์/๋ฉ์๋๋ฅผ ๋จ์ํ ํ ๊ฐ์ด๋ค. ๋ค๋ฅธ ๋ฉ์๋๋ ํธ์ถํ๋ ๊ฒฝ์ฐ(๊ทธ๋ํ ์ด๋ก ์์๋ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ๋ผ๊ณ ํจ)๊น์ง ๊ณ ๋ คํ ์ผ๋ฐ ๊ณต์์ CC = E - N + 2P(P๋ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ ์) ์ด๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ ๋นํ CC ๊ฐ์ด ์ผ๋ง๋ ๋๋๊ณ ๋ฌผ์์ ๋, ๋ฌผ๋ก ์ ๋ต์ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ๋ฌธ์ ์์ญ์ ๋ณต์ก๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค. ์๊ณ ๋ฆฌ์ฆ์ด ๋ณต์กํ ๋ฌธ์ ๋ ๊ทธ ์๋ฃจ์ ์๋ ๋ณต์กํ ํจ์๊ฐ ๋ง์ด ๋ฑ์ฅํ ๊ฒ์ด๋ค. ํจ์๊ฐ ๋ณต์กํ ์ด์ ๊ฐ ๋ฌธ์ ์์ญ ๋๋ฌธ์ธ๊ฐ, ์ฝ๋ฉ ํ์ง์ด ๋ฎ์์ ๊ทธ๋ฐ ๊ฑด๊ฐ? ์๋๋ฉด ์ฝ๋ ๋ถํ ์ด ์ ๋๋ก ์ ๋ผ์? ๋ง์ฝ ๊ทธ๋ ๋ค๋ฉด, ํฐ ๋ฉ์๋๋ฅผ ๋ ์์ ๋ก์ง ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด ๋ ์ง์์ ์๋ ์ฌ๋ฌ ๋ฉ์๋์ ์์ ์ ๋ถ๋ฐฐํ ์๋ ์๋์ง ์ดํด๋ณด์์ผ ํ๋ค.
๋๋ฉ์ธ ์์ฒด์ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ์ง ์์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก 10 ์ดํ์ CC๋ ๊ด์ฐฎ๋ค๊ณ ๋ณด๋ ๊ฒ์ด ์ ๊ณ ๊ธฐ์ค์ด์ง๋ง, ์ฐ๋ฆฌ๋ ์ด ์๊ณ์น๊ฐ ๋๋ฌด ๋๊ณ 5 ์ดํ๋ก ๋์์ผ ์์ง๋๊ฐ ๊ด์ฐฎ์ ์ง์์ ์๋ ์ฝ๋๋ผ๊ณ ์๊ฐํ๋ค.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) ๊ฐ์ ์์ง๋์ด๋ง ํ๋ํฐ์ค๋ ์ฃผ์ด์ง ๋ฌธ์ ์์ญ์์ ๋์ฒด๋ก ๋ ์๊ณ ๋ ๋ณต์กํ ๋ฉ์๋๋ฅผ ์์ฑํ๋, ๋ถ์์ ์ธ(๊ทธ๋ฌ๋ ๊ธ์ ์ ์ธ) ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค. TDD๋ฅผ ์ค์ฒํ๋ ๊ฐ๋ฐ์๋ ๋จผ์ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ์์ฑํ ๋ค์, ํ ์คํธ๋ฅผ ํต๊ณผ์ํค๋ ๊ฐ์ฅ ์ ์ ์์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ๋ค. ์ด์ฒ๋ผย ๊ตฌ์ฒด์ ์ธ ๋์๊ณผ ๋ช ํํ ํ ์คํธ ๊ฒฝ๊ณ์ ์ง์คํ๋ฉด ์ง์์ ์๊ณ ๊ณ ๋๋ก ์์ง๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ฐํ ์ ์์ผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ CC ๊ฐ๋ ๋ฎ๊ฒ ๋์จ๋ค.
6.1.3 ํ๋ก์ธ์ค ์ธก์
์ํ์ฑ์ ๊ฑฐ์ ๋ชจ๋ ํ๋ซํผ์์ ํ ์คํธ์ ์์ ์ฑ์ ํ๊ฐํ๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ก ์ธก์ ํ ์ ์๋ค. ๋ฌผ๋ก , ์ํํธ์จ์ด ์ฒดํฌ๊ฐ ๋ค ๊ทธ๋ ๋ฏ์ด ์ํ์ฑ๋ ์ฌ๊ณ (thinking)์ ์๋(intent)๋ฅผ ๋์ฒดํ ์ ์๋ค. ๊ฐ๋ น, ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ 100%๋ก ๋์ค์ง๋ง, ์ฝ๋์ ์ ํ์ฑ์ ์ ๋ขฐ๊ฐ์ ๋ถ์ฌํ๋ ์ด์ค์ (assertion)์ด ํํธ์๋ ์ฝ๋๋ฒ ์ด์ค๋ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฐฐํฌ์ฑ ์ญ์ ์คํจ ๋๋น ๋ฐฐํฌ ์ฑ๊ณต๋ฅ (%), ๋ฐฐํฌ ์์ ์๊ฐ, ๋ฐฐํฌ ์ ๋ฐ์ํ ์ด์/๋ฒ๊ทธ ๋ฑ ๋ค์ํ ๋ฉํธ๋ฆญ์ผ๋ก ์ธก์ ๋๋ค. ์๊ณผ ์ง ๋ชจ๋ ๋ฉด์์ ์กฐ์ง์ ์ ์ฉํ ๋ฐ์ดํฐ๋ฅผ ํฌ์ฐฉํ ์ ์๋ ์ธก์ ์ธํธ๋ ๊ฐ ํ๋ณ๋ก ์ค๋น๋ฅผ ํด์ผ ํ๋ฉฐ ์ด๋ ๊ฒ ์ธก์ ํ ๋ฉํธ๋ฆญ์ ์ค์ ๋ก ๋๋ถ๋ถ ํ์ ์ฐ์ ์์, ๋ชฉํ๊ฐ ๋๋ค.
๋ฏผ์ฒฉ์ฑ๊ณผ ์ด์ ๊ด๋ จ๋ ๋ถ๋ถ์ ๋ถ๋ช ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ์ฐ๊ด์ด ์์ง๋ง, ์ด ํ๋ก์ธ์ค๋ ์ํคํ ์ฒ ๊ตฌ์กฐ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฐฐํฌ ์ฉ์ด์ฑ๊ณผ ์ํ์ฑ์ด ์ต์ฐ์ ํญ๋ชฉ์ด๋ผ๋ฉด ์ํคํ ํธ๋ ์ํคํ ์ฒ ์์ค์์ ๋ชจ๋์ฑ, ๊ฒฉ๋ฆฌ์ฑ์ ๋์ด๋๋ฐ ์ฃผ๋ ฅํ๋ค.
6.2 ๊ฑฐ๋ฒ๋์ค์ ํผํธ๋์ค ํจ์
6.2.1 ์ํคํ ์ฒ ํน์ฑ ๊ด๋ฆฌ
์ํคํ ์ฒ ๊ฑฐ๋ฒ๋์ค(architecture governance)๋ ์ํคํ ํธ๊ฐ ์ํฅ๋ ฅ์ ํ์ฌํ๋ ค๋ ๋ชจ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ํฌ๊ดํ๋ค.
6.2.2 ํผํธ๋์ค ํจ์
๊ฐ๋ฐ์๊ฐ ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ์ฌ ์ ์ตํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๋ฉด ๊ฒฐ๊ณผ์ ํ์ง์ ๊ฐ๊ด์ ์ผ๋ก ์ธก์ ํ๋ฉด์ ์ด ์๊ณ ๋ฆฌ์ฆ์ ํต์ ํ ์ ์์ด์ผ ํ๋ค. ์ด์ฒ๋ผย **๊ฒฐ๊ณผ๊ฐ ๋ชฉํ์ ์ผ๋ง๋ ๊ทผ์ ํ๋์ง๋ฅผ ๋ํ๋ด๋ ๋ชฉํ ํจ์๊ฐ ํผํธ๋์ค ํจ์(fitness function)**์ด๋ค.
์๋ฅผ ๋ค์ด, ๋จธ์ ๋ฌ๋์ ๊ธฐ์ด์ธ ์ธํ์ ๋ฌธ์ ๋ฅผ ํ๋ ค๋ ๊ฐ๋ฐ์๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์ ๋, ์ด ๋ฌธ์ ๋ฅผ ์ ์ ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํ๋ฉด ๊ทธ๋ฅ ์ด๋ ๊ฒฝ๋ก์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด์ ๊ทธ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ์ต์ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ํผํธ๋์ค ํจ์๋ฅผ ์๊ฐํด ๋ณผ ์ ์๋ค. ์๋๋ฉด, ์ด๋ ๊ฒฝ๋ก์ ๋ฐ์ํ๋ ์ ์ฒด ๋น์ฉ์ ์ต์ํํ๋ ํผํธ๋์ค ํจ์๋ ๊ฐ๋ฅํ๊ณ , ์ธํ์์ด ๋ ๋ ์๊ฐ์ ๊ณ์ฐํด ์ ์ฒด ์ฌํ ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ผ๋ก ์ต์ ํ ํ๋ ํผํธ๋์ค ํจ์๋ ์์ ๊ฒ์ด๋ค.
์ํคํ ์ฒ ํผํธ๋์ค ํจ์ : ์ด๋ค ์ํคํ ์ฒ ํน์ฑ(๋๋ ๊ทธ๋ฐ ํน์ฑ๋ค์ ์กฐํฉ)์ ๊ฐ๊ด์ ์ธ ๋ฌด๊ฒฐ์ฑ์ ํ๊ฐํ๋ ๋ชจ๋ ๋ฉ์ปค๋์ฆ
์๋์์๋ ๋ชจ๋์ฑ์ ๋ค์ํ ์ธก๋ฉด์ ํ ์คํธํ๋ ํผํธ๋์ค ํจ์๋ฅผ ์๊ฐํ๋ค.
์ํ ์์กด์ฑ
๋ชจ๋์ฑ์ ๋๋ถ๋ถ์ ์ํคํ ํธ๊ฐ ๊ด์ฌ์ ๊ธฐ์ธ์ด๋ ์๋ฌต์ ์ธ ์ํคํ ์ฒ ํน์ฑ์ด๋ค. ๋ชจ๋์ฑ์ด ์ ๋๋ก ์ ์ง๋์ง ๋ชปํ๋ฉด, ์ฝ๋๋ฒ ์ด์ค ๊ตฌ์กฐ์ ํด๋ฅผ ๋ผ์น๋ฏ๋ก ์ฐ์ ์์๋ฅผ ๋๊ฒ ๋์ด ๊ด๋ฆฌํ ์๋ฐ์ ์๋ค.
์๋ฅผ ๋ค์ด, ์๋ฐ๋ ๋ท๋ท IDE์์ ์๋์ผ๋ก ์ฐธ์กฐํ ํด๋์ค๋ฅผ ์ํฌํธ ํ๊ฒ ํ๋ ๊ธฐ๋ฅ์ด ์๋๋ฐ, ์ด๊ฑธ ์์ฃผ ์ต์ํ๊ฒ ์ฐ๋ค ๋ณด๋ฉด, ์๋ ์ํฌํฐ ๊ด์ฑ์ ๋น ์ง๊ฒ ๋๋ค. ์ด๋ ๋ชจ๋์ฑ ๊ด์ ์์ ๋ฐ๋ผ๋ณผ ๋ ์ข์ง ์๋ค.
์์ ๊ทธ๋ฆผ์์ ๊ฐ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๋ค. ์ด๋ฐ ์์ผ๋ก ์ปดํฌ๋ํธ ๋ง์ด ํ์ฑ๋๋ฉด ๊ฐ๋ฐ์๊ฐ ํจ๊ป ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก ๋ชจ๋์ฑ์ด ๋จ์ด์ง๋ค. ๋ํ ์ปดํฌ๋ํธ ๊ฐ์ ์ปคํ๋ง์ด ์ฆ๊ฐํ ์๋ก ์ํคํ ์ฒ๋ ์ ์ ์ํฐํจํด์ผ๋ก ๊ฐ๊ฒ ๋๋ค. ์ด ๋ฌธ์ ๋ ์๋ ์์ ์ฝ๋์ฒ๋ผ ํผํธ๋์ค ํจ์๋ก ์ํ ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ๋ฐ๊ฒฌํจ์ผ๋ก์จ ํด๊ฒฐํ ์ ์๋ค.
public class CycleTest {
private JDepend jdepend;
@BeforeEach
void init() {
jdepend = new JDepend();
jdepend.addDirectory("/path/to/project/persistence/classes");
jdepend.addDirectory("/path/to/project/web/classes");
jdepend.addDirectory("/path/to/project/thirdpartyjars");
}
@Test
void testAllPackages() {
Collection packages = jdepend.analyze();
assertEquals("Cycles exist", false, jdepend.containsCycles());
}
}
์ํคํ ํธ๋ JDepend๋ผ๋ ๋ฉํธ๋ฆญ ๋๊ตฌ๋ก ํจํค์ง ๊ฐ ์์กด์ฑ์ ์ฒดํฌํ๋ค. ์ด ๋๊ตฌ๋ ์๋ฐ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์๊ณ ์๊ณ ์ํ ์ฐธ์กฐ๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ํ ์คํธ๋ ์คํจํ๋ค. ์ํคํ ํธ๋ ์ด ํ ์คํธ๋ฅผ ํ๋ก์ ํธ์ ์ง์์ ๋น๋์ ์ผ๋ถ๋ก ์ฅ์นํจ์ผ๋ก์จ ๊ฐ๋ฐ์ ๋๋ฌธ์ ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ์ง ์์๊น, ํ๋ ์ผ๋ ค๋ฅผ ๋ ์ ์๋ค.
โ๋ฉ์ธ ์ํ์ค๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ' ํผํธ๋์ค ํจ์
์ด์ ์ฑํฐ 3์์ ๋ค๋ฃจ์๋ โ๋ฉ์ธ ์ํ์ค์ ๊ฑฐ๋ฆฌ' ๋ฉํธ๋ฆญ๋ ํผํธ๋์ค ํจ์๋ฅผ ์ด์ฉํด ํ์ธํ ์ ์๋ค.
@Test
void AllPackages() {
double ideal = 0.0;
double tolerance = 0.5; // ํ๋ก์ ํธ๋ง๋ค ๊ฐ์ด ๋ค๋ฆ
Collection packages = jdepend.analyze();
Iterator iter = packages.iterator();
while (iter.hasNext()) {
JavaPackage p = (JavaPackage)iter.next();
assertEquals("Distance exceeded: " + p.getName(), ideal, p.distance(), tolerance);
}
}
์์ ์ฝ๋๋ JDepend๋ก ์์ฉ ๊ฐ๋ฅํ ์๊ณ์น๋ฅผ ์ค์ ํ๊ณ ํด๋์ค๊ฐ ์ด ๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด ํ ์คํธ๋ฅผ ์คํจ์ฒ๋ฆฌํ๋ ์ฝ๋์ด๋ค.
์ต๊ทผ ์๋ ๊ฐ ํผํธ๋์ค ํจ์ ๋๊ตฌ๋ ์ ์ ๋ ์ ๊ตํด์ก๊ณ ๋ชฉ์ ์ ๋ฐ๋ผ ํนํ๋ ๊ฒ๋ ์๋ค. JUnit์ ์ํฅ์ ๋ฐ์ ํ์ํ ArchUnit์ JUnit ์ฒด๊ณ์ ์ผ๋ถ๋ฅผ ํ์ฉํ ์๋ฐ ํ ์คํธ ํ๋ ์์ํฌ์ด๋ค. ArchUnit์ ๋จ์ ํ ์คํธ๋ก ์ฝ๋ํํ ์ฌ์ ์ ์๋ ๊ฑฐ๋ฒ๋์ค ๊ท์น์ ํ์ฑํ๊ฒ ์ ๊ณตํ๋ฏ๋ก, ์ํคํ ํธ๋ ๋ชจ๋์ฑ์ ํนํ๋ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค.
์์ ๊ฐ์ ๋ ์ด์ด๋ ์ํคํ ์ฒ(layered architecture)๋ฅผ ์๊ฐํด ๋ณด์.
์ด ๊ทธ๋ฆผ์ฒ๋ผ ๋ ์ด์ด๋ ๋ชจ๋๋ฆฌ์ค๋ฅผ ์ค๊ณํ ๋, ์ํคํ ํธ๋ ์ ๋นํ ์ฌ์ ๋ฅผ ๋ด์ธ์ ๋ ์ด์ด๋ฅผ ์ ์ํ์ง๋ง ์ด๋ ๊ฒ ์ ์ํ ๋ ์ด์ด๋ฅผ ๊ฐ๋ฐ์๋ค์ด ๊ณผ์ฐ ์ ์งํฌ ์ ์์๊น? ํจํด์ ์ค์์ฑ์ ๋ชจ๋ฅด๊ฑฐ๋, ๊ฐ๊ณผํ๋ ๊ฐ๋ฐ์๋ ๋ถ๋ช ํ ์์ ๊ฒ์ด๋ค. ๋ง์ฝ ๊ตฌํํ๋ ์ฌ๋๋ค์ด ์ํคํ ์ฒ ๊ทผ๋ณธ์ ์นจํดํด๋ ์๋ฌด๋ฐ ์กฐ์น๋ ์ทจํ์ง ์์ผ๋ฉด ์ฅ๊ธฐ์ ์ผ๋ก ์ํคํ ์ฒ์ ๊ฑด์ ์ฑ์ ํด์น๊ฒ ๋ ์๊ฐ ์๋ค.
์ด ๋ฌธ์ ๋ ArchUnit ํผํธ๋์ค ํจ์๋ก ํด๊ฒฐํ ์ ์๋ค. ์๋ ์์ ์ฝ๋๋ ๋ ์ด์ด ๊ฐ์ ์ฌ๋ฐ๋ฅธ ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ ์ด๋ฅผ ์ค์ฒํ๋ ๊ฒ์ฆ ํผํธ๋์ค ํจ์ ์ฝ๋์ด๋ค.(๋ ์ด์ด ์์กด์ฑ์ ํ์ธ)