Xtring's Blog

๐Ÿค˜๐Ÿป Welcome to my Tech Blog

์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ ์ •์˜

2022-01-02

์Šคํ„ฐ๋”” ์ง„ํ–‰: 2022.12.07

4. ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ ์ •์˜

์•„ํ‚คํ…ํŠธ๋Š” ๊ฐœ๋ฐœํŒ€๊ณผ ํ•จ๊ป˜ ๋„๋ฉ”์ธ ๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ฃผ๋กœ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ์ฒ˜๋ฆฌํ•  ์ผ ์ค‘ ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†๋Š” ๋ชจ๋“  ๊ฒƒ๋“ค, ์ฆ‰ ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ(Architectural Charateristic)์„ ์ •์˜, ๋ฐœ๊ฒฌ, ๋ถ„์„ํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค

์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์€ ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•œ๋‹ค.

  1. ๋น„๋„๋ฉ”์ธ(nondomain) ์„ค๊ณ„ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ๋ช…์‹œํ•œ๋‹ค.
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ์‹œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ผ์€ ๊ตฌ์ฒด์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœย ์ •๋ฆฌํ•œ๋‹ค.
    • ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์€ ์ด ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•, ์–ด๋–ค ์„ ํƒ์„ ํ•˜๊ฒŒ ๋œ ์ด์œ ์™€ ๊ด€๋ จ๋œ ์šด์˜/์„ค๊ณ„ ๊ธฐ์ค€์„ ๋ช…์‹œํ•œ๋‹ค.
    • e.g. ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด๋Š ์ •๋„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์€ ์ค‘์š”ํ•œย ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์ด์ง€๋งŒ, ์š”๊ตฌ์‚ฌํ•ญย ์ •์˜์„œ์—๋Š” ์ ํ˜€์žˆ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ—ˆ๋‹คํ•˜๋‹ค. => @์„ฑ์ง„๋‹˜์€ ํ•„ํ„ฐ์˜ ์„ฑ๋Šฅ์„ ์œ„ํ•œ ์บ์‹ฑ์„ ์ด์•ผ๊ธฐ ํ•˜์‹ฌ
    • e.g.2 ์–ด๋Š ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์„œ์—๋„ โ€˜๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค'๋Š” ๋ฌธ๊ตฌ๋Š” ๋”ฐ๋กœ ์—†์ง€๋งŒ, ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ฐฉ์ง€๋Š” ์•„ํ‚คํ…ํŠธ์™€ ๊ฐœ๋ฐœ์ž์˜ ๋‹น์—ฐํ•œ ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ์ด๋‹ค.
  2. ์„ค๊ณ„์˜ ๊ตฌ์กฐ์  ์ธก๋ฉด์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค.
    • ํ”„๋กœ์ ํŠธ ๋‹ด๋‹น ์•„ํ‚คํ…ํŠธ๊ฐ€ ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์„ ๊ธฐ์ˆ ํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š”, โ€˜์ด ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์€ ์–ด๋–ค ํŠน๋ณ„ํ•œ ๊ตฌ์กฐ์  ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š”๊ฐ€?โ€™ํ•˜๋Š” ์„ค๊ณ„ ๊ณ ๋ ค ์‚ฌํ•ญ ๋•Œ๋ฌธ์ด๋‹ค.
    • e.g. ๋ณด์•ˆ์€ ์‚ฌ์‹ค์ƒ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ์ด๊ณ  ์–ด๋Š ์‹œ์Šคํ…œ์ด๊ฑด ์„ค๊ณ„, ์ฝ”๋”ฉ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๊ธฐ๋ณธ ๋ณด์•ˆ ์ง€์นจ์„ ๋งŒ๋“ค์–ด ์ค€์ˆ˜ํ•ด์•ผ ํ•˜์ง€๋งŒ,
    • ์•„ํ‚คํ…ํŠธ๊ฐ€ ๋ญ”๊ฐ€ ํŠน๋ณ„ํ•œ ๊ฒƒ์„ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ณด์•ˆ์€ ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ ์ˆ˜์ค€์œผ๋กœ ๊ฒฉ์ƒ๋œ๋‹ค. ๊ฒฐ์ œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ•  ๋•Œ, ์„œ๋“œํŒŒํ‹ฐ ๊ฒฐ์ œ ํ”„๋กœ์„ธ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ๋ณด์•ˆ์— ๋Œ€ํ•œ ์•„ํ‚คํ…์ฒ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ด๋‹ค.
  3. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๊ณต์— ์ ˆ๋Œ€์ ์œผ๋กœ ์ค‘์š”ํ•˜๋‹ค.
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์„ ์ „๋ถ€ ๋‹ค ์ง€์›ํ•˜๋ฉด ์ฐธ ์ข‹๊ฒ ์œผ๋‚˜, ๊ทธ๋Ÿฌ๋ฉด ์•ˆ ๋œ๋‹ค.
    • ์ง€์›ํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์„ ํ•œ ๊ฐ€์ง€๋งŒ ๋Š˜๋ ค๋„ ๊ทธ๋งŒํผ ์„ค๊ณ„ ๋ณต์žก๋„๋Š” ๊ฐ€์ค‘๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ๊ฐ€๊ธ‰์  ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์„ ์ ๊ฒŒ ์„ ์ •ํ•˜๋Š” ์ผ๋„ ์•„ํ‚คํ…ํŠธ์˜ ์ค‘์š”ํ•œ ์ฑ…๋ฌด์ด๋‹ค. => @์Šน์žฌ๋‹˜์€ ์‹คํ–‰์š”์†Œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•œ๋‹ค.

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)๋ฅผ ์„ค๊ณ„ํ•˜๋ ค๋Š” ๊ฒƒ์ด๋‹ค. ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์˜ ๊ฐœ์ˆ˜์— ์—ฐ์—ฐํ•˜์ง€ ๋ง๊ณ  ๊ฐ€๊ธ‰์  ์„ค๊ณ„๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์•„ํ‚คํ…์ฒ˜ ํŠน์„ฑ์€ ํ•ต์‹ฌ ๋„๋ฉ”์ธ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ๋„๋ฉ”์ธ ๊ด€์ ์—์„œ ๋ฌด์—‡์ด ์ค‘์š”ํ•œ์ง€ ์˜๊ฒฌ์„ ๊ตํ™˜ํ•˜๋ฉด์„œ ์ •๋ฆฌ๋œ๋‹ค.ย ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์•„ํ‚คํ…ํŠธ์™€ ๋„๋ฉ”์ธ ์ดํ•ด๊ด€๊ณ„์ž๋“ค์ด ์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ง์„ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.ย ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„ํ‚คํ…ํŠธ๋Š” ํ™•์žฅ์„ฑ, ์ƒํ˜ธ์šด์šฉ์„ฑ, ๋‚ด๊ณ ์žฅ์„ฑ, ํ•™์Šต์„ฑ, ๊ฐ€์šฉ์„ฑ์„ ์šด์šดํ•˜๋Š”๋ฐ, ๋„๋ฉ”์ธ ์ดํ•ด๊ด€๊ณ„์ž๋Š” ์ธ์ˆ˜ ๋ณ‘ํ•ฉ, ๊ณ ๊ฐ ๋งŒ์กฑ, ์ถœ์‹œ ์‹œ์ , ๊ฒฝ์Ÿ ์šฐ์œ„๋ฅผ ๋…ผํ•˜๋Š” ์‹์ด๋‹ค. ์„œ๋กœ ๋ง์ด ์•ˆ ํ†ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ž ์ƒ๋Œ€๋ฐฉ์„ ์ดํ•ดํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„๋ฉ”์ธ ์ดํ•ด๊ด€๊ณ„์ž๊ฐ€ โ€˜๋‹น์ผ ํŽ€๋“œ ์ข…๊ฐ€๋Š” ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ์ œ์‹œ๊ฐ„์— ๋งˆ๊ฐ๋ผ์•ผ ํ•œ๋‹คโ€™๋Š” ์š”๊ตฌ์‚ฌํ•ญ์„ ์ œ์‹œํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋งŒ์•ฝ ์ด ๋ง์„ ๋“ค์€ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์˜ค๋กœ์ง€ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒƒ์ด๋ผ ์ฐฉ๊ฐํ•˜๊ณ  ์„ฑ๋Šฅ์—๋งŒ ์ง‘์ค‘ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค.

  1. ํ•„์š”ํ•œ ์‹œ์ ์—์„œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ ์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.
  2. ๋„๋ฉ”์ธ์ด ๋” ์ปค์ง€๊ณ  ํŽ€๋“œ๊ฐ€ ๋งŽ์ด ์œ ์ž…๋˜๋ฉด ์ œ์‹œ๊ฐ„์— ์ข…๊ฐ€ ๊ณ„์‚ฐ์„ ๋งˆ์น  ์ˆ˜ ์žˆ๋„๋ก ์‹œ์Šคํ…œ ๊ทœ๋ชจ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ์‹œ์Šคํ…œ์€ ๊ฐ€์šฉ์„ฑ๊ณผ ๋”๋ถˆ์–ด ํŽ€๋“œ ์ข…๊ฐ€ ๊ณ„์‚ฐ ๋„์ค‘ ์‹œ์Šคํ…œ์ด ๋ฉŽ๋Š” ๋ถˆ์ƒ์‚ฌ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์•ˆ์ •์„ฑ๋„ ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.
  4. ํŽ€๋“œ ์ข…๊ฐ€ ๊ณ„์‚ฐ์ด ์•ฝ 85% ์™„๋ฃŒ๋œ ์ƒํƒœ์—์„œ ์‹œ์Šคํ…œ์ด ๋‹ค์šด๋˜๋ฉด? ์ฆ‰์‹œ ์‹œ์Šคํ…œ์„ ๋ณต๊ตฌํ•ด์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํŽ€๋“œ ์ข…๊ฐ€๊ฐ€ ๊ณ„์‚ฐ๋œ ์‹œ์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  5. ์‹œ์Šคํ…œ์€ ๋น ๋ฅธ ๊ฒƒ๋„ ์ค‘์š”ํ•˜์ง€๋งŒ ํŽ€๋“œ ์ข…๊ฐ€๋Š” ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐ๋˜์–ด์•ผ ํ•œ๋‹ค.

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 ํ”ผํŠธ๋‹ˆ์Šค ํ•จ์ˆ˜๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๋ ˆ์ด์–ด ๊ฐ„์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ์‹ค์ฒœํ•˜๋Š” ๊ฒ€์ฆ ํ”ผํŠธ๋‹ˆ์Šค ํ•จ์ˆ˜ ์ฝ”๋“œ์ด๋‹ค.(๋ ˆ์ด์–ด ์˜์กด์„ฑ์„ ํ™•์ธ)