[Spring] Spring Advice๋ก ์ปค์คํ ์ด๋๋ฐ์ด์ค ๋ง๋ค๊ธฐ
์ด๋ฒ ํฌ์คํธ๋ถํฐ๋ Spring AOP ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ์ฌ ์ค์ Advice๋ฅผ ๋ง๋ค์ด๋ณด๊ณ , ์๋นํ๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๊ฒ ์ต๋๋ค.
Advice Interface
Advice์ ๋ํด ๋ค์ ๋ณต์ตํด๋ณด์๋ฉด Advice๋ ํน์ ์กฐ์ธํฌ์ธํธ ์ฆ, ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ์์ ์ ์คํํ ์ฝ๋๋ฅผ ์ ์ํ ๊ฒ์ ๋๋ค. ProxyFactory ํด๋์ค์์ addAdvice ๋ฉ์๋๋ฅผ ์ด์ฉํด ์ด๋๋ฐ์ด์ค๋ฅผ ์ง์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ๊ณผ Advisor ๊ตฌํ์ฒด๋ฅผ addAdvice์ ์ ๋ฌํ์ฌ ๊ฐ์ ์ ์ผ๋ก ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ด ์์์ฃ .
๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค๋ฉด ์ด๋๋ฐ์ด์ค์ ๋ฌ๋ฆฌ Advisor๋ ๊ด๋ จ PointCut๊ณผ ํจ๊ป ์ด๋๋ฐ์ด์ค๋ฅผ ์ ๋ฌํ๋ค๋ ์ ์ด ์์ต๋๋ค. PointCut์ ์ค์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ธ์ ์คํํ ์ง๋ฅผ ์ ํ๋ AOP ์ฉ์ด๋ก ์ด๋๋ฐ์ด์ค๋ฅผ ์คํํ ์ง์ ์ ์์ธํ๊ฒ ์ง์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์ ์ด๋ฏธ์ง๋ Spring Advice์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ ๊ฒ์ ๋๋ค. Spring Advice์ ๊ณ์ธต ๊ตฌ์กฐ๋ ํ์ค AOP ์ผ๋ผ์ด์ธ์ค ์ธํฐํ์ด์ค์ ๋์ผํ ๊ตฌ์กฐ๋ก ๋์ด ์์ผ๋ฉฐ ProxyFactory ํด๋์ค๋ฅผ ์์ ํ์ง ์๋๋ผ๋ ์๋ก์ด ์ด๋๋ฐ์ด์ค ํ์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ ๊ตฌ์กฐ๋ก ๋์ด ์์ต๋๋ค.
Before Advice
Before Advice๋ ์ด๋ฆ ๊ทธ๋๋ก Target ํด๋์ค์ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ๋ฐ์ํ ์ด๋ฒคํธ ์ด๋๋ฐ์ด์ค๋ฅผ Before Advice๋ผ ํฉ๋๋ค. Spring Advice์์๋ ์ด๋ฅผ MethodBeforeAdvice๋ก ์ ์ํ์ฌ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋๋ฐ์.
์๋ฅผ ๋ค๋ฉด, ์ฐ๋ฆฌ๊ฐ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ํธ์ถ์ ํ๋ ๋์(Caller)์ด ์ถฉ๋ถํ ๊ถํ์ด ์๋์ง ํ์ธํด์ผ ํ๋ค๋ฉด ์ด Advice๊ฐ ์ข์ ๊ฒ์ ๋๋ค.
๋จผ์ ์ฌ์ฉ์๋ฅผ ์๋ณํ ์ ์๋ UserInfo ๋ผ๋ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
ํ์ฌ ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๊ด๋ฆฌํ๋ SecurityManager ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
Advice๋ฅผ ์ ์ฉํ Target ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์๊ฒ๋ง ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ๋ฉ์๋์ธ print๋ฅผ ๋ง๋ค์ด๋ดค์ต๋๋ค.
Target ํด๋์ค์ ์ ์ฉํ Advice๋ฅผ ๋ง๋ค์ด์ค๋๋ค. ์ด ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ ์๋ ์ ์ ์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ด๋๋ฐ์ด์ค๊ฐ ์ ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด Bean ๊ฐ์ฒด๋ฅผ ProxyFactory ํด๋์ค๋ฅผ ์ด์ฉํด ํ๋ก์ ๊ฐ์ฒด๋ก ๋ง๋ค๊ณ , Advice๋ฅผ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด UserInfo๊ฐ ์์ ๋์ ์์ ๋ ์ ํํ๊ฒ ์ ๋์ค๊ณ ์์์ ์ ์ ์์ต๋๋ค.
ํํ ๋ง์ด๋ค ์๊ฐํ๋ ์ง๋ฌธ์ผ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์ฃผ์๊น๊ฒ ๋ด์ผํ ๊ฒ์ SecurityManager ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ UserInfo๋ ThreadLocal์ด๋ผ๋ ์ ์ ๋๋ค. ThreadLocal์ ํ๋์ ์ค๋ ๋์์ ์คํ๋๋ ์ฝ๋๊ฐ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋๋ฐ, ์ด ๋๋ new ์ฐ์ฐ์๋ฅผ ์ด์ฉํด ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค ํ๋๋ผ๋ ๊ฐ์ ์ค๋ ๋์์ ์ด๋ค์ง๋ ์ฝ๋๋ ํญ์ ๋์ผํ ๊ฐ์ฒด๋ก ์คํ๋๋ค๋ ํน์ง์ด ์์ต๋๋ค.
์ด์ ๋ํ์ ์ธ ์์๊ฐ ๋ฐ๋ก Spring Security์์ ์ ๊ณตํ๋ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด(Principal)์ ๋๋ค.
์ด ์ธ์๋ BeforeAdvice๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์ธ์ ๋ฑ์ ์์ ์ด๋ ๋ฐ์ดํฐ ์ ์ ์๋ ์ ์ฉํ๊ฒ ์ธ ์ ์์ต๋๋ค.
AfterReturning Advice
AfterReturning Advice๋ JoinPoint์์ ๋ฉ์๋ ํธ์ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ ๋๋ง ๋์ํ๋ ์ด๋๋ฐ์ด์ค์ ๋๋ค. Before Advice์ ๋ฌ๋ฆฌ ๋ฉ์๋๊ฐ ์ด๋ฏธ ์คํํ๊ณ ๋ ๋ค ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ์ธ์๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ๋ฑ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
์ด ์ด๋๋ฐ์ด์ค๋ฅผ ๊ฐ์ฅ ์ ์ฉํ๊ฒ ์ธ ์ ์๋ ๋ฐฉ๋ฒ์๋ Target ๋ก์ง์ ๊ฒฐ๊ด๊ฐ์ ๋ํ ๊ฒ์ฆ์ ์ฌ์ฉํด ๋ณผ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ์ํธํ ํค ์์ฑ์ ํ๋ ๋ก์ง์ด ์์ ๋ ํด๋น ์ํธํ ํค ๊ธธ์ด๊ฐ ์งง์ผ๋ฉด ํด๋น ํค๊ฐ ์ทจ์ฝํ๋ค๋ ๊ฒ์ ์๋ ค์ฃผ๋ ๊ฒ์ด์ฃ .
๊ฐ๋จํ๊ฒ 3 seed๋ฅผ ์ฃผ๊ณ 1์ด ๋์์ ๋ ์ฝํ ํค๋ฅผ ์ถ๋ ฅํด์ฃผ๋ Target ํด๋์ค๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
์ด๋ฅผ ๊ฒ์ฌํ๋ Advice๋ฅผ ๋ง๋ค์ด์ค๋๋ค. AfterAdvice๋ฅผ ๋ง๋ค ๋๋ Target ํด๋์ค์ ํด๋นํ๋ ๋ฉ์๋๊ฐ ์ฝ์๋ ๊ฒ์ธ์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ณณ์ Advice๋ฅผ ๋ฃ๊ณ ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์์ ๊ฒฝ์ฐ ์๋ฑํ ๊ฐ์ ๋์กฐํ์ฌ ์์ธ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด 10๋ฒ์ ์๋ํ์ฌ ์ด๋๋ฐ์ด์ค๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
๋ณด๋ค์ํผ 1์ด ๋์์ ๋๋ ๋ณด์์ ์ทจ์ฝํ ํค๋ฅผ ์ถ๋ ฅํ๋ SecurityException์ ๋ฐ์ํ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ STRONG_KEY๊ฐ ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
AroundAdvice (MethodInterceptor)
Spring AOP์์ Around๋ ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ๋ฐ์ํ๋ ์ด๋๋ฐ์ด์ค์ ๋๋ค. Before + After๋ฅผ ์กฐํฉํ ์ด๋๋ฐ์ด์ค์ ๋น์ทํ๋ฐ, ๋ค๋ฅธ ์ ์ด ์๋ค๋ฉด ๋ฐํ ๊ฐ์ ์์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๋ฟ๋ง ์๋๋ผ ํน์ ์กฐ๊ฑด์ ํตํด ์ค์ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ์คํํ์ง ์ ๋๋ก ํ ์๋ ์์ต๋๋ค.
์ฆ, Around ์ด๋๋ฐ์ด์ค๊ฐ ์ค์ ๊ฐ์ฒด ๋ฉ์๋๋ฅผ ์ข์ง์ฐ์งํ๋ฉฐ ์ ์ฒด ๊ตฌํ์ ์๋ก์ด ์ฝ๋๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๊ธฐ๋ ํฉ๋๋ค. ์ค์ ๋ก Spring ์ปดํฌ๋ํธ ๋๋ถ๋ถ์ด ๋ฐ๋ก ์ด Around Advice๋ฅผ ์ฌ์ฉํ๋๋ฐ์. ํนํ ์๊ฒฉ ํ๋ก์ ์ง์ ๊ธฐ๋ฅ์ด๋ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ๋ค์ด ์ฌ๊ธฐ์ ํฌํจ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ํ์ ์ธ ์์๋ ํธ์ถํ ๋ฉ์๋์ ์ฑ๋ฅ์ ์ธก์ ํ ์ ์๋ ํ๋กํ์ผ๋ง์ด ์์ต๋๋ค.
WorkerBean์ ์ด๋ค ํน์ ํ ์๊ณ ๋ฆฌ์ฆ ํจ์๋ฅผ ์ ์ํ๊ณ Spring Framework์์ ์ ๊ณตํ๋ StopWatch ํด๋์ค๋ฅผ ์ฌ์ฉํด ๋ฉ์๋๊ฐ ์คํ๋ ์๊ฐ์ ์ธก์ ํ๋ ์ฝ๋์ ๋๋ค.
์ค์ ๋ก main ํจ์์ ์ฝ๋์๋ Results๋ง ์ถ๋ ฅํ๋๋ก ํ์ง๋ง ProfilingInterceptor์ ์ํด ์คํ ์๊ฐ๊ณผ Target ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ๋ถ๋ถ๊น์ง ์คํ ๊ฒฐ๊ณผ๋ก ๋์ค๊ณ ์์ต๋๋ค.
ThrowAdvice
๋ง์ง๋ง์ผ๋ก ThrowAdvice๋ ํญ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ JoinPoint ์ดํ์ ์คํ๋๋ค๋ ์ ์์ AfterReturningAdvice์ ์ ์ฌํ์ง๋ง ๋ฉ์๋๊ฐ ์์ธ๋ฅผ ๋์ง ๋๋ง ์คํ๋๋ ์ด๋๋ฐ์ด์ค์ ๋๋ค.
ThrowAdvice๋ AfterRetruningAdvice์ ๊ฐ์ด AfterAdvice๋ฅผ ์์๋ฐ๊ณ ์์ด ํ๋ก๊ทธ๋จ ์คํ์ ๊ฑฐ์ ์ ์ดํ ์ ์์ต๋๋ค. ๋ค๋ง ์์ธ๋ ํ์คํ๊ฒ ์ ์ดํ ์ ์๋๋ฐ, ํ๋ก๊ทธ๋จ์์ ๋ฐ์ํ ์์ธ๋ฅผ ๋ฌด์ํ๊ณ ์์ธ์ ํ์ ๋ง์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ช ํํ๊ฒ ์ ์๋์ง ์์ ๋ฐฐ์ด ์์ธ๋ฅผ ๋์ง๊ณ ์๋ API๊ฐ ์๋ค๊ณ ํ์ ๋, ThrowAdvice๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น API์ ๋ชจ๋ ํด๋์ค์ ์ด๋๋ฐ์ด์ค๋ฅผ ์ ์ฉํด ์์ธ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ข ๋ ๋ช ํํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ค์ ์ ์ํ ์ ์์ต๋๋ค.
์ค๋ก์ฐ ์ด๋๋ฐ์ด์ค๊ฐ ๋ค๋ฅธ ์ด๋๋ฐ์ด์ค์ ์ฐจ์ด์ ์ด ์๋ค๋ฉด ํ์๋ก ๊ตฌํํด์ผ ํ ๋ฉ์๋๊ฐ ์๋ค๋ ์ ์ ๋๋ค. ๋ฐ๋ผ์ ์ฒ์ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ด๋ป๊ฒ ๊ตฌํํด์ผ ํ๋์ง ์ ๋ชจ๋ฅด๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
ThrowAdvice๊ฐ ์ฒซ ๋ฒ์งธ๋ก ์ฐพ๋ ๊ฒ์ ๋ฐ๋ก ํ๋ ์ด์์ afterThrowing() public ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ ์๋ฏธ ์๋ ๊ฐ์ ๋ฐํํ ์ ์์ด ๋ฐํ ํ์ ์ผ๋ก void๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ง๋ง, ๋ฉ์๋์ ๋ฐํ ํ์ ์ ์ฌ์ค ์ค์ํ์ง ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ afterThrowing ๋ฉ์๋๋ฅผ ๋ณด๋ฉด Java์ ๋ชจ๋ Exception ํ์ ์ ์ธ์๋ก ์ง์ ํ๋๋ฐ, ์ด๊ฒ์ ๋ชจ๋ ์์ธ ์ผ์ด์ค์ ํด๋น ๋ฉ์๋๋ฅผ ์ ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ๋ฉ์๋์ ๊ฐ์ฅ ํฐ ์ฐ์ ์์๋ ์์ธ ํ์ ์ ์ธ์๋ก ๋ฐ๋ afterThrowing ๋ฉ์๋๊ฐ ์์ ๋ ๋์ํฉ๋๋ค.
๋ ๋ฒ์จฐ afterThrowing ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ์์ธ๋ฅผ ๋์ง ๋ฉ์๋(method), ๋ฉ์๋์ ์ ๋ฌ๋ ์ธ์(args), ๋ฉ์๋ ํธ์ถ ๋์(target), ์ก์๋ผ ์์ธ ํ์ (ex)์ 4๊ฐ์ง ์ธ์๋ฅผ ์ ์ธํ์ต๋๋ค. ์์์ ๋งํ๋๋ก ์ง์ ๋ ์์ธ ํ์ ์ ์ธ์๋ก ๋ฐ๋ afterThrowing ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ IllegalArgumentException์ ๊ฒฝ์ฐ์๋ ์ฒซ ๋ฒ์จฐ ๋ฉ์๋๊ฐ ์๋ ๋ ๋ฒ์จฐ ๋ฉ์๋๊ฐ ์คํ๋๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋๋ฐ์ด์ค๋ฅผ ๊ฐ์ฅ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์๋ ๋ฐ๋ก Exception Logging์ธ๋ฐ์. ์ ์ฒด Exception ํ์ ๋ง์ ์ฃผ๊ณ , loggingํ๋ ๋ก์ง์ ๋ฃ๋๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ Exception Logging์ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณ๋๋ก ์์ ํ์ง ์๊ณ ๋ Logging ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์ด ๋งค์ฐ ์ ์ฉํ์ง์.
๋ง์น๋ฉฐ...
Spring์์ ๋ค๋ฃฐ ์ ์๋ ์ด๋๋ฐ์ด์ค๋ฅผ ์์๋ณด๊ณ , ๊ฐ๋จํ ์ฌ์ฉ๋ฒ๊ณผ ํ์ ๋ํด ์์๋ดค์ต๋๋ค. ์ด๋๋ฐ์ด์ค์ ์ข ๋ฅ๋ฅผ ์ ํํ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ์ด๋๋ฐ์ด์ค ํ์ ์ ์ ํํ ์๋ ์๊ฒ ์ง๋ง ์์ ์ ํ์์ ๋ฐ๋ผ์๋ ๋ง์ถ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋จ์ฐ ์๊ตฌ์ฌํญ ์ถฉ์กฑ๋ง์ด ์๋ ์๋น์ค์ ์ ์ง๋ณด์ ์ฐจ์์์๋ ์ฐ์ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋ฆฌํ์๋ฉด BeforeAdvice๋ง์ผ๋ก ํด๊ฒฐํ ์ ์๋ค๋ฉด ๊ตณ์ด AroundAdvice๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ๋ฌผ๋ก ์ฐจํ๋ฅผ ๋๋นํ๊ธฐ ์ํด AroundAdvice๋ฅผ ์ฌ์ฉํ๋ค๊ฐ ์ฝ๊ฒ AfterAdvice๋ฅผ ๊ตฌํํ ์ ์๋๋ก ํ ์ ์๊ฒ ์ง๋ง ์ฝ๋ ๋ฆฌ๋ฉ์ ํ๋ ๋ค์ ์ฌ๋์ ์ํด ์ด ์ฝ๋๊ฐ ์ด๋ค ์ญํ ์ธ์ง ๋งน๋ชฉ์ ์ผ๋ก ์ ์ ์๋๋ก ํ์ ์ด์์ ์ฝ๋ ๊ตฌํ์ ์์ ํด์ผ ํฉ๋๋ค.
๊ฐ๋ น ์๋ฅผ ๋ค๋ฉด BeforeAdvice์์ ๋ฉ์๋๋ฅผ ํธ์ถํ ํ์๋ฅผ ์ธ๊ณ ์ ํ ๋ BeforeAdvice๋ง ์ฌ์ฉํ๋ค๋ฉด Couter ์ฝ๋๋ง ์์ฑํ๋ฉด ๋ฉ๋๋ค. ํ์ง๋ง AroundAdvice๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ํธ์ถ์์๊ฒ ๊ฐ์ ๋ฐํํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋๋ฐ, ๊ฒฐ๊ตญ ์ด๋ฌํ ํ์ ์ด์์ ์ฝ๋๋ ๋ถํ์ํ ์ค๋ฅ๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ์์ํค๋ ์์ธ์ด ๋ ์๋ ์์ต๋๋ค.
๋ฐ๋ฆฌ์ ์ด๋๋ฐ์ด์ค๋ ์๊ตฌ์ฌํญ๊ณผ ํ์์ ๋ง์ถฐ ์ ๋นํ ์ฐ๋ ๊ทธ ์ด์์ ์ฌ์ฉ์ ์์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.