JavaScript AOP ๋ง›๋ณด๊ธฐ

์ด ๊ธ€์€ ์—ฌ๊ธฐ์—์„œ๋„ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ์ฃผ, ๋™๋ฃŒ๊ฐ€ ๋ฒˆ์—ญํ•œ ES6 Proxy์— ๋Œ€ํ•œ ๊ธ€์„ ์ฝ์—ˆ๋‹ค. ์ดํ›„ย JavaScriptย AOP(Aspect Oriented Programming๋ผ๋Š”ย ์•„์ด๋””์–ด๊ฐ€ ๋– ์˜ฌ๋ž๋‹ค. ์Œ.. ๋ˆ„๊ฐ€ย JavaScriptย AOP์— ๋Œ€ํ•œ ์–˜๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ ๋“ค์–ด๋ณธ ์ ์ด ์žˆ๋˜๊ฐ€? ์žˆ๊ธฐ๋Š”ย ํ•œ ๊ฑด๊ฐ€?ย ์ด ๊ธ€์€ย JavaScriptย AOP ๊ทธ๋ฆฌ๊ณ  ES6 Proxy๊ฐ€ ์–ด๋–ป๊ฒŒ AOP์™€ย ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.

์‚ฌ์‹ค AOP๋Š”ย JavaScriptย ์„ธ์ƒ์—์„œ๋Š” ๋”ฑํžˆ ์ด์Šˆ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋…€์„์ด๋‹ค. ์ ์–ด๋„ ์ง€๊ธˆ์€ ๋ง์ด๋‹ค. ์Œ.. ๊ทธ๋ฆฌ๊ณ  ์ด ๊ธ€์„ ์ฝ๋Š” ๋งŽ์€ย JavaScript๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š”ย ์ต์ˆ™์ง€ย ์•Š์€ ๊ฒƒ์ผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆย JavaScript๋Š”ย ๋–ผ๊ณ , AOP๊ฐ€ย ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐย ์•Œ์•„๋ณด์ž.

AOP(Aspect Oriented Programming)์ด ๋ญ”๋ฐ?

์—ฌ๋Ÿฌ๋ถ„์ด AOP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ตฌ๊ธ€์— ๊ฒ€์ƒ‰ํ•  ๋•Œ๋งˆ๋‹ค, Cross-cutting Concern์ด ๋งค๋ฒˆ ๊ฐ™์ด ๋ฆฌ์ŠคํŒ… ๋  ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ ๋ฒˆ์—ญํ•˜๋ฉดย “ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ”์ธ๋ฐ,ย ์—ฌ์ „ํžˆ ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค. ๋” ์‰ฝ๊ฒŒ๋Š” “์—ฌ๊ธฐ, ์ €๊ธฐ, ๊ทธ๋ฆฌ๊ณ ย ์ €~๊ธฐ์— ๋‚˜์„œ๋Š”๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์•ผ๊ฒ ๊ตฐ”ย ๊ณผ๊ฐ™์ด,ย ์—ฌ๋Ÿฌ ๊ณณ์„ย ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๊ณตํ†ต์˜ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋œปํ•œ๋‹ค.

์•„๋ž˜์˜ ์˜ˆ์ œ๋Š” AOP ๋ฒ„์ „ “Hello world”์ด๋‹ค. ์ด๊ฒƒ์€BookCollection์—์„œbook name์„ISBN์œผ๋กœ ์ฐพ์•„์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค.

์ด์ œ ์ด ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋ ค ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งค๋ฒˆ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ  ์บ์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋” ๋‚˜์•„์งˆ ๊ฒƒ์ด๋‹ค. ์•„! ๊ทธ๋ฆฌ๊ณ  ISBN ์ž…๋ ฅ๊ฐ’๋„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผย ํ•ด์•ผ ํ•œ๋‹ค.ย ์šฐ๋ฆฌ ๊ฐœ๋ฐœ์ž์˜ ์ผ์€ ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํžˆ ๋๋‚  ๋ฆฌ ์—†๋‹ค. ์ด๋Ÿฌํ•œ ์ผ๋“ค์„ ํฌํ•จํ•œ ํ›„ ์œ„์˜ ์ฝ”๋“œ๋Š” ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๊ฒŒ ๋ ๊นŒ?

์œ„์˜ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Š” ์ฝ”๋“œ์—์„œย ๋ช‡ ๊ฐœ์˜then().then().then()์ด ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ๋Š” ์ ์  ๋ชป์ƒ๊ฒจ์ง€๊ณ , ๋…ธํŠธ๋ถ ์•ž์— ์•‰์•„ ๊ทธ๊ฒƒ์„ ๋ณด๊ณ  ์žˆ๋Š” ๋‚ด ํ‘œ์ •๋„ ๋ฉ์ฒญํ•ด์ง„๋‹ค. ์ด ์ผ์ด ์ด๋ ‡๊ฒŒ ๋ณต์žกํ•œ ์ผ์ด๋˜๊ฐ€? ๋‚˜๋Š” ๊ทธ์ € BookCollection์—์„œ ์ด๋ฆ„์„ ํ•˜๋‚˜ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ด๋‹ค.

Find one reason to change and take everything else out of the class. The Principles Of OOD – Robert C. Martin

๋ฐฅ ์•„์ €์”จ๋Š” ์ด๋Ÿด ๋•Œ ํด๋ž˜์Šค๋ฅผ ๋‚˜๋ˆ„๋ผ๊ณ  ํ–ˆ์œผ๋‹ˆ ๋”ฐ๋ผ ํ•ด๋ณธ๋‹ค.

์Œ.. ์กฐ๊ธˆ ๋‚˜์•„์กŒ๋„ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒƒ์ด ์ •๋ง ์ตœ์„ ์ผ๊นŒ? ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ๋ž‘ํ•˜๋Š” OOP๋ผ๋ฉด ์šฐ๋ฆฌ๋ฅผ ๊ตฌ์›ํ•ด์ค„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ? ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ ๊ธธ๊ณ  ๊ธด ์ด๋ฆ„์˜ ํด๋ž˜์Šค๋“ค์ดย ๋ช‡ ๊ฐœย ๋Š˜์–ด๋‚ฌ๊ณ , ์—ฌ์ „ํžˆ getNameByISBN์—๋Š” ์›๋ž˜์˜ ์ผ๊ณผ๋Š”ย ์ƒ๊ด€์—†๋Š”ย ์ฝ”๋“œ๋“ค์ด ๋ณด์ธ๋‹ค.

AOP๋ฅผ ์“ฐ๋ฉด ์กฐ๊ธˆ ๋‚˜์•„์ง€๋‚˜?

์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” aspect.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์ œ์ด๋‹ค. ์•„๋ž˜์˜ ๋ชจ์–‘์ƒˆ๊ฐ€ย ์ต์ˆ™์ง€ย ์•Š๋”๋ผ๋„ ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค. ์ง€๊ธˆ์€ ๊ทธ์ € “์•„! BookCollection.getNameByISBN ํ˜ธ์ถœ ์ดํ›„ ๋กœ๊ทธ๋ฅผ ํ•˜๋Š” ๋ชจ์–‘์ด๊ตฐ!” ํ•˜๊ณ ๋งŒ ์ดํ•ดํ•ด๋„ ๋œ๋‹ค. ์ด ๊ธ€์€ aspect.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผย ์„ค๋ช…ํ•˜๊ณ ์ž ํ•˜๋Š”ย ๊ฒƒ์ด ์•„๋‹ˆ๋ฏ€๋กœ, ์ด๋ ‡์— ๋ถ„๋ฆฌ๋˜์–ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์ž.

getNameByISBN์—์„œ ๋กœ๊ทธ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค. ์ด์ œย ์บ์‹œ๋„ย ๋ถ„๋ฆฌํ•ด๋ณด๊ธฐ๋กœ ํ•˜์ž.

์•„ํ•˜! BookCollection๊ณผ ๋ฌด๊ด€ํ•œ ์ฝ”๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜๊ณ , ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์กŒ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ Aspect๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉฐ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. ์–ผ๋งˆ๋‚˜ ๋งŽ์€ Aspect๊ฐ€ ๋Š˜์–ด๋‚˜๋”๋ผ๋„, BookCollection์€ ๋ณธ๋ž˜์˜ ์ผ๋งŒ ํ•˜๋„๋ก ๋‚จ๊ฒจ์งˆ ๊ฒƒ์ด๋‹ค.

์ด๋ฏธ ์•Œ์•„์ฑˆ ๋ถ„๋„ ์žˆ๊ฒ ์ง€๋งŒ, Aspect์˜ ํŒจํ„ด์€ /^get.*/์ฒ˜๋Ÿผย ์ •๊ทœ์‹์œผ๋กœ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰ Aspect๋Š” ์—ฌ๋Ÿฌ ์ƒํ™ฉ์— ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

AOP๋ฅผ ์•Œ์•„๋ณด๊ธฐ๋กœ ํ–ˆ๋˜ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€ ๋‹ค์‹œ ์„ค๋ช…ํ•ด๋ณธ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋กœ๊ทธ,ย ์บ์‹œ์ฒ˜๋Ÿผย Cross-cutting Concern์— ํ•ด๋‹นํ•˜๋Š” Aspect๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜์˜€๋‹ค. ์ด์ฏค์—์„œ ์ด๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์ •๋ง ๋™์ž‘ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด aspect.js์˜ ์˜ˆ์ œ๋ฅผ ๋ณด๊ณ ย ๋”ฐ๋ผ ํ•ด๋ณด์•„๋„์ข‹๊ฒ ๋‹ค.

ํ•˜์ง€๋งŒ Decorators๋ผ๋‹ˆ!

Decorators๋Š” ES7 ํ‘œ์ค€์œผ๋กœ ์ค€๋น„ ์ค‘์ด๋‹ค. ์ด๋ฏธ ์œ„์˜ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด์„œ ๋ถˆํ‰ํ–ˆ๊ฒ ์ง€๋งŒ, ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์•„์ง ํ‘œ์ค€์ด ์ •ํ•ด์ง€์ง€ ์•Š์€ Decorators์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค(TC39 Notes, July 28 2016,ย Implement new decorator proposal when finalized).ย Babel Legacy Decorator plugin์„ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์ œ๋ฅผ ๋”ฐ๋ผ ํ•ด ๋ณผ ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์‹ค์ œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ์šฉ๊ฐํ•œ ์‚ฌ๋žŒ์€ ์—†์œผ๋ฆฌ๋ผ ๋ฏฟ๋Š”๋‹ค. ๋ฌผ๋ก ย aspect.js์ด์™ธ์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋ณด์ด๊ธด ํ–ˆ์ง€๋งŒ, ์„ค๋ช…์ด ์šฉ์ดํ•˜๊ณ , ๊ฐœ๋…์„ ์ถฉ์‹คํžˆ ๊ตฌํ˜„ํ•œ ๊ฒƒ์œผ๋กœ ์ฐพ๋‹ค๋ณด๋‹ˆ aspect.js๊ฐ€ ์„ ํƒ๋˜์—ˆ๋‹ค. ์ง€๊ธˆ ๋ฐ”๋กœ ๋ฌด์–ธ๊ฐ€์— ์ ์šฉํ•ด ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉดย meld๋‚˜ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ฐพ์•„ ๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  meld๋ฅผ ํฌํ•จํ•œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๋„ ์žˆ๋‹ค. ๋‹ค๋งŒ ์ด๋ฒˆ์— AOP ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ฐพ์•„๋ณด๋ฉฐ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์ง€ ์•Š์€ ์˜ต์…˜์— ์•ฝ๊ฐ„ ์‹ค๋งํ•œ ๊ฒƒ๋„ ์‚ฌ์‹ค์ด๋‹ค.

์ง์ ‘ ์งœ๋ณผ๊นŒ?

์ด ์งง์€ ๊ธ€๋กœ ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•˜๊ธฐ๋Š” ํž˜๋“œ๋‹ˆ Proxy + Decorator๊ฐ€ ์–ด๋–ป๊ฒŒ AOP๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์งง๋ง‰ํžˆ ํžŒํŠธ๊ฐ€ ๋  ์ฝ”๋“œ๋งŒ ์ ์–ด๋ณธ๋‹ค. ๋จผ์ € ๋งจ ์•ž์—์„œ AOP๊ฐ€ Proxy์˜ ์—ฐ๊ด€์ฃผ์ œ๋ผ๊ณ  ํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š”๊ฐ€? ์•„๋ž˜๋Š”ย AOP Advice(์‹ค์ œ ๋™์ž‘๋  ์ฝ”๋“œ)๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ Proxy๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ‰๋‚ด๋‚ด๋Š” ์ฝ”๋“œ์ด๋‹ค. Proxy์™€ Class๋Š” ํ˜„์‹œ์ ์—์„œ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ตฌํ˜„๋˜์–ด์žˆ์œผ๋ฏ€๋กœ ์•„๋ž˜ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด๋ด๋„ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.(๋˜ ๋‹ค๋ฅธ ํžŒํŠธ๋ฅผ ์ฃผ์ž๋ฉด IE๋Š” ์•ˆ๋œ๋‹ค.)

์œ„์˜ ์ฝ”๋“œ๋Š”ย BookCollectionํ”„๋กœํ† ํƒ€์ž…์— Proxy๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์–ด์ง„ ํŒจํ„ด์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๊ฒฝ์šฐ์—๋งŒ ๋กœ๊ทธ๋ฅผ ๊ฐ™์ด ์‹คํ–‰ํ•˜๋Š” ๋™์ž‘์„ ํ•œ๋‹ค.ย ์ง€๋‚œ ์ฃผ Proxy์ฃผ์ œ์˜ ์œ„ํด๋ฆฌ๋ฅผ ์ฝ๊ณ ์˜จ ๋…์ž๋ผ๋ฉด ์ถฉ๋ถ„ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ๋ณธ๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ Decorators๋ฅผ ์‚ฌ์šฉํ•ด์„œ Logger๋ฅผ ๋ฌถ์–ด๋ณด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ”๋ณด์ž.

@woveย Decorators์— ๋‹นํ™ฉํ•˜์ง€ ๋ง์ž. ์œ„์˜ย @wove๋Š” ์•„๋ž˜์˜ ์ฝ”๋“œ์™€ ์™„๋ฒฝํžˆ ๋™์ผํ•œ ์ฝ”๋“œ์ด๋‹ค.

์กฐ๊ธˆ ๋” Descriptors์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ์‹ถ๋‹ค๋ฉดย Decorators,ย Decorators and functionsย ๋ฅผ ์ฝ์–ด๋ณด์ž. Decorators๋Š” Stage2 Draft๋‹จ๊ณ„์ด๋ฉฐ, ํ˜„์žฌ์˜ ํ‘œ์ค€์—๋„ ์ด๊ฒฌ์ด ์ด์–ด์ง€๊ณ  ์žˆ๋Š”๋งŒํผ ์ถ”ํ›„ ๋ฐ”๋€” ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ์•ˆํ•˜๊ณ  ๋ณด์ž. ๋ฌผ๋ก  aspect.js๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„์˜ ์ฝ”๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ๊นŒ์ง€์˜ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•œ๋‹ค๋ฉด AOP๋ฅผ ์†Œ๊ฐœํ•˜๋ฉฐ ์†Œ๊ฐœํ–ˆ๋˜ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š”์ง€ ์ƒ์ƒํ•ด๋ณด๋Š”๋ฐ๋Š” ์ถฉ๋ถ„ํ•˜๋ฆฌ๋ผ ๋ณธ๋‹ค.

๋งˆ์น˜๋ฉฐ

์ž๋ฐ” ์„ธ์ƒ์—์„œ AOP๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋‹จ์–ด๋กœ Black Magic ์ด๋ผ๋Š” ๋ง์ด ์žˆ๋‹ค. ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง์€ย eWeek๊ณผ์˜ ์ธํ„ฐ๋ทฐ์—์„œ โ€œ์œ„ํ—˜ํ•œโ€, โ€œ๋ฌธ์ œ๋ฉ์–ด๋ฆฌโ€, ๊ทธ๋ฆฌ๊ณ ย โ€œ์„ค๋ช…์„œ ์—†์ด ์ „๊ธฐํ†ฑ์„ ์ฅ์—ฌ์ฃผ๋Š” ์ง“โ€์ด๋ผ๊ณ  ๋งํ•œ ๋ฐ” ์žˆ๋‹ค. ์ด๋Š” OOP๋กœ ๊ผผ๊ผผํ•˜๊ฒŒ ์งœ์ธ ์ž๋ฐ” ์„ธ์ƒ์˜ ๋Œ€์›์น™์„ ๋ฌด์‹œํ•˜๊ณ  AOP์ฝ”๋“œ๋“ค์ด ์‹น๋‘‘ ์ž˜๋ผ ๋“ค์–ด์˜ค๋Š”(๋ง ๊ทธ๋Œ€๋กœ Cross-cuttingํ•˜๋Š”)๊ฒƒ ์ฒ˜๋Ÿผ ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ AOP์—ญ์‹œ ํ‘๋งˆ๋ฒ•๊ฐ™์€ ์กด์žฌ๊ฐ€ ๋ ๊นŒ? ๊ฐ€๋งŒํžˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์šฐ๋ฆฌ๋Š” ๊ฑฐ์ฐฝํ•˜๊ฒŒ AOP๋ผ๋Š” ๋ง์„ ์“ฐ์ง€ ์•Š์•„๋„, AspectJ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ์—†์–ด๋„, ์ด๋ฏธ ๋” ๋ฌด์ง€๋ง‰์ง€ํ•œ ๋ ˆ์ด์ € ๋ธ”๋ ˆ์ด๋ฅผ ํœ˜๋‘๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋ฏธ ์งœ์ธ ์ฝ”๋“œ์— Aspect๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด AspectJ๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ์ผ์„ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„๋ž˜์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋Š” ์ฐธ ์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.(์ด๋Ÿฌ๋ฉด ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐ ํ• ์ง€๋ผ๋„)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ES6, ES7 ํ‘œ์ค€์˜ ๋ฐฉํ–ฅ์ด๋‚˜ Typescript์˜ ์ธ๊ธฐ ๋“ฑ ์ ์ฐจ ์šฐ๋ฆฌ์—๊ฒŒ ์ต์ˆ™ํ•œ ๋„๊ตฌ์ธ OOP๋Œ€๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ชจ์–‘์ƒˆ๋ฅผ ๊ฐ–์ถฐ๊ฐ€๊ณ  ์žˆ๋‹ค. ๊ทธ์— ๋”ฐ๋ผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋ฅผ ๋ณด์™„ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” AOP์— ๋„๊ตฌ๋„ ๋” ๋‚˜์•„์ง€๊ณ  ์ด์— ๋Œ€ํ•œ ์–˜๊ธฐ๋„ ๋” ๋‚˜์˜ค๊ฒŒ ๋˜์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•ด๋ณธ๋‹ค. ์ด๋ฒˆ์—๋Š” Proxy๋ณต์Šต๊ฒธ, AOP๋ณต์Šต๊ฒธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‘˜๋Ÿฌ๋ณด๋Š” ์ •๋„๋กœ ๋งˆ๋ฌด๋ฆฌ๋ฅผ ํ•œ๋‹ค. ์ด ๊ธ€์€ ์†Œ๊ฐœ ์ •๋„์—์„œ ๋งˆ์น˜๋ฏ€๋กœ, ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ƒ๊ฐ์ด ์žˆ๋‹ค๋ฉด ์˜๊ฒฌ์„ ๋‚˜๋ˆ„์–ด ์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค. ํ•„์ž๋„ ์กฐ๊ธˆ ๋” ๊ณ ๋ฏผํ•ด๋ณด๊ณ  ๋‹ค๋ฅธ ์ƒ๊ฐ์ด ๋“ค๋ฉด ๋‹ค์‹œ ์ƒ๊ฐ์„ ๊ณต์œ ํ•ด ๋ณด๊ธฐ๋กœ ํ•˜๊ฒ ๋‹ค.

์ฐธ๊ณ ๊ธ€

KyuWoo Choi
Full Stack Engineer(CoE) at GS SHOP(์ง€์—์Šค์ƒต)
Full Stack Engineer Skilled in OpenSource and JavaScript. Experienced in Web, Mobile, Game development with Java, C# languages as well. Please check my current works on GitHub.

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ

This site uses Akismet to reduce spam. Learn how your comment data is processed.