2 minute read

ํด๋ฆฐ ์ฝ”๋“œ

์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹ 

์ €์ž: ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด

11. ์‹œ์Šคํ…œ

โ€œ๋ณต์žก์„ฑ์€ ์ฃฝ์Œ์ด๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ์„œ ์ƒ๊ธฐ๋ฅผ ์•—์•„๊ฐ€๋ฉฐ, ์ œํ’ˆ์„ ๊ณ„ํšํ•˜๊ณ  ์ œ์ž‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.โ€

  • Ray Ozzie, MS CTO

๋„์‹œ๋ฅผ ์„ธ์šด๋‹ค๋ฉด?

๋„์‹œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ์ ์ ˆํ•œ ์ถ”์ƒํ™”์™€ ๋ชจ๋“ˆํ™” ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํฐ ๊ทธ๋ฆผ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ• ์ง€๋ผ๋„ ๊ฐœ์ธ๊ณผ ๊ฐœ์ธ์ด ๊ด€๋ฆฌํ•˜๋Š” โ€˜๊ตฌ์„ฑ์š”์†Œโ€™๋Š” ํšจ์œจ์ ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

ํ”ํžˆ ์†Œํ”„ํŠธ์›จ์–ด ํŒ€๋„ ๋„์‹œ์ฒ˜๋Ÿผ ๊ตฌ์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ง‰์ƒ ํŒ€์ด ์ œ์ž‘ํ•˜๋Š” ์‹œ์Šคํ…œ์€ ๋น„์Šทํ•œ ์ˆ˜์ค€์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜ ์ถ”์ƒํ™”๋ฅผ ์ด๋ค„๋‚ด์ง€ ๋ชปํ•œ๋‹ค. ๊นจ๋—ํ•œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋‚ฎ์€ ์ถ”์ƒํ™” ์ˆ˜์ค€์—์„œ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๋†’์€ ์ถ”์ƒํ™” ์ˆ˜์ค€, ์ฆ‰ ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ๋„ ๊นจ๋—ํ•จ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณธ๋‹ค.

์‹œ์Šคํ…œ ์ œ์ž‘๊ณผ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋ผ

์ œ์ž‘construction๊ณผ ์‚ฌ์šฉuse๋Š” ์•„์ฃผ ๋‹ค๋ฅด๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์€ (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์˜์กด์„ฑ์„ ์„œ๋กœ โ€˜์—ฐ๊ฒฐโ€™ํ•˜๋Š”) ์ค€๋น„ ๊ณผ์ •๊ณผ (์ค€๋น„ ๊ณผ์ • ์ดํ›„์— ์ด์–ด์ง€๋Š”) ๋Ÿฐํƒ€์ž„ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์‹œ์ž‘ ๋‹จ๊ณ„๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ’€์–ด์•ผ ํ•  ๊ด€์‹ฌ์‚ฌconcern๋‹ค. ์ด๊ฒƒ์ด ์ด ์žฅ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งจ ์ฒ˜์Œ ์‚ดํŽด๋ณผ ๊ด€์‹ฌ์‚ฌ๋‹ค. ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋Š” ์šฐ๋ฆฌ ๋ถ„์•ผ์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋Œ€๋‹ค์ˆ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹œ์ž‘ ๋‹จ๊ณ„๋ผ๋Š” ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ฒด๊ณ„์ ์ด๊ณ  ํƒ„ํƒ„ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ํ”ํžˆ ์“ฐ๋Š” ์ข€์Šค๋Ÿฝ๊ณ  ์†์‰ฌ์šด ๊ธฐ๋ฒ•์œผ๋กœ ๋ชจ๋“ˆ์„ฑ์„ ๊นจ์„œ๋Š” ์ ˆ๋Œ€๋กœ ์•ˆ๋œ๋‹ค.

Main ๋ถ„๋ฆฌ

์‹œ์Šคํ…œ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ƒ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ main์ด๋‚˜ main์ด ํ˜ธ์ถœํ•˜๋Š” ๋ชจ๋“ˆ๋กœ ์˜ฎ๊ธฐ๊ณ , ๋‚˜๋จธ์ง€ ์‹œ์Šคํ…œ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๊ณ  ๋ชจ๋“  ์˜์กด์„ฑ์ด ์—ฐ๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

ํŒฉํ† ๋ฆฌ

๋•Œ๋กœ๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๊ฒฐ์ •ํ•  ํ•„์š”๋„ ์ƒ๊ธด๋‹ค.

์˜์กด์„ฑ ์ฃผ์ž…

์‚ฌ์šฉ๊ณผ ์ œ์ž‘์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•˜๋‚˜๊ฐ€ ์˜์กด์„ฑ ์ฃผ์ž…Dependency Injection์ด๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž…์€ ์ œ์–ด ์—ญ์ „Inversion of Control ๊ธฐ๋ฒ•์„ ์˜์กด์„ฑ ๊ด€๋ฆฌ์— ์ ์šฉํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค.

ํ™•์žฅ

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

ํšก๋‹จ(cross-cutting) ๊ด€์‹ฌ์‚ฌ

์ž๋ฐ” ํ”„๋ก์‹œ

์ˆœ์ˆ˜ ์ž๋ฐ” AOP ํ”„๋ ˆ์ž„์›Œํฌ

AspectJ ๊ด€์ 

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์ถ•

์˜์‚ฌ ๊ฒฐ์ •์„ ์ตœ์ ํ™”ํ•˜๋ผ

๋ช…๋ฐฑํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๋•Œ ํ‘œ์ค€์„ ํ˜„๋ช…ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ผ

ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ด๋””์–ด์™€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ์ ์ ˆํ•œ ๊ฒฝํ—˜์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์„ ๊ตฌํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉฐ, ์ข‹์€ ์•„์ด๋””์–ด๋ฅผ ์บก์Šํ™”ํ•˜๊ธฐ ์‰ฝ๊ณ , ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฎ๊ธฐ ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ ๋–„๋กœ๋Š” ํ‘œ์ค€์„ ๋งŒ๋“œ๋Š” ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ ค ์—…๊ณ„๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ๋ชปํ•œ๋‹ค. ์–ด๋–ค ํ‘œ์ค€์€ ์›๋ž˜ ํ‘œ์ค€์„ ์ œ์ •ํ•œ ๋ชฉ์ ์„ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

์‹œ์Šคํ…œ์€ ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค

๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด(Domain-Specific Language, DSL)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ ์ฐจ์› ์ •์ฑ…์—์„œ ์ €์ฐจ์› ์„ธ๋ถ€์‚ฌํ•ญ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ์ถ”์ƒํ™” ์ˆ˜์ค€๊ณผ ๋ชจ๋“  ๋„๋ฉ”์ธ์„ POJOPlain Old Java Object๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก 

๊นจ๋—ํ•˜์ง€ ๋ชปํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ํ๋ฆฌ๋ฉฐ ๊ธฐ๋ฏผ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆฐ๋‹ค. ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๊ฐ€ ํ๋ ค์ง€๋ฉด ์ œํ’ˆ ํ’ˆ์งˆ์ด ๋–จ์–ด์ง„๋‹ค. ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๋“  ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์„ ์„ค๊ณ„ํ•˜๋“ , ์‹ค์ œ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•˜์ž.