[์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] - 27. ์ค์ฝํ์ ํ๋ก์
์ค์ฝํ์ ํ๋ก์
ํ๋ก์ ๋ฐฉ์์ ์ฌ์ฉ
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {
์ ์ฉ ๋์์ด ์ธํฐํ์ด์ค๊ฐ ์๋ ํด๋์ค๋ฉด TARGET_CLASS ๋ฅผ ์ ํ
์ ์ฉ ๋์์ด ์ธํฐํ์ด์ค๋ฉด INTERFACES ๋ฅผ ์ ํ
์ด๋ ๊ฒ ํ๋ฉด MyLogger์ ๊ฐ์ง ํ๋ก์ ํด๋์ค๋ฅผ ๋ง๋ค์ด๋๊ณ
HTTP request์ ์๊ด ์์ด ๊ฐ์ง ํ๋ก์ํด๋์ค๋ฅผ ๋ค๋ฅธ ๋น์ ๋ฏธ๋ฆฌ ์ฃผ์ ํด ๋ ์ ์๋ค.
์น ์ค์ฝํ์ ํ๋ก์ ๋์ ์๋ฆฌ
์ง์ง myLogger ๊ฐ ์๋ ๊ฐ์ง(๊ป๋ฐ๊ธฐ,ํ๋ก์) myLogger ๋ฅผ ์์ฑํ์ฌ ์ปจํ ์ด๋์ ์ง์ด ๋ฃ์ด๋๋ค
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ด๊ฐ ๊ธฐ๋ฅ์ ์ค์ ํธ์ถํ๋ ์์ ์ ์ง์ง๋ฅผ ์ฐพ์์ ๋์ํ๋ค (๋ง์น Provider ๋์ฐฉ์ฒ๋ผ)
CGLIB๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ด ํด๋์ค๋ฅผ ์์ ๋ฐ์ ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฃผ์ ํ๋ค.
@Scope ์ proxyMode = ScopedProxyMode.TARGET_CLASS) ๋ฅผ ์ค์ ํ๋ฉด
์คํ๋ง ์ปจํ ์ด๋๋ CGLIB ๋ผ๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์กฐ์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์
MyLogger๋ฅผ ์์๋ฐ์ ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
System.out.println("myLogger = " + myLogger);

๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณด๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ฑ๋กํ ์์ํ MyLogger ํด๋์ค๊ฐ ์๋๋ผ
MyLogger$ $EnhancerBySpringCGLIB ์ด๋ผ๋ ํด๋์ค๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๊ฐ ๋์ ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๊ทธ๋ฆฌ๊ณ ์คํ๋ง ์ปจํ ์ด๋์ "myLogger"๋ผ๋ ์ด๋ฆ์ผ๋ก ์ง์ง ๋์ ์ ์ด ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํ๋ค.
ac.getBean("myLogger", MyLogger.class) ๋ก ์กฐํํด๋ ํ๋ก์ ๊ฐ์ฒด๊ฐ ์กฐํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋์ ์์กด๊ด๊ณ ์ฃผ์
๋ ์ด ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๊ฐ ์ฃผ์
๋๋ค.
๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ ์์ฒญ์ด ์ค๋ฉด ๊ทธ๋ ๋ด๋ถ์์ ์ง์ง ๋น์ ์์ฒญํ๋ ์์ ๋ก์ง์ด ๋ค์ด์๋ค.
ํด๋ผ์ด์ธํธ๊ฐ myLogger.logic() ์ ํธ์ถํ๋ฉด ์ฌ์ค์ ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒ์ด๋ค.
๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ request ์ค์ฝํ์ ์ง์ง myLogger.logic() ๋ฅผ ํธ์ถํ๋ค.
๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ ์๋ณธ ํด๋์ค๋ฅผ ์์ ๋ฐ์์ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์
์ด ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ ์ ์ฅ์์๋ ์ฌ์ค ์๋ณธ์ธ์ง ์๋์ง๋ ๋ชจ๋ฅด๊ฒ, ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค(๋คํ์ฑ)
๋์ ์ ๋ฆฌ
CGLIB๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ด ํด๋์ค๋ฅผ ์์ ๋ฐ์ ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ์ฃผ์ ํ๋ค.
์ด ๊ฐ์ง ํ๋ก์ ๊ฐ์ฒด๋ ์ค์ ์์ฒญ์ด ์ค๋ฉด ๊ทธ๋ ๋ด๋ถ์์ ์ค์ ๋น์ ์์ฒญํ๋ ์์ ๋ก์ง์ด ๋ค์ด์๋ค.
์ฌ์ค Provider๋ฅผ ์ฌ์ฉํ๋ , ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ํต์ฌ ์์ด๋์ด๋ ์ง์ง ๊ฐ์ฒด ์กฐํ๋ฅผ ๊ผญ ํ์ํ ์์ ๊น์ง ์ง์ฐ์ฒ๋ฆฌ ํ๋ค๋ ์ ์ด๋ค.
๋จ์ง ์ ๋ ธํ ์ด์ ์ค์ ๋ณ๊ฒฝ๋ง์ผ๋ก ์๋ณธ ๊ฐ์ฒด๋ฅผ ํ๋ก์ ๊ฐ์ฒด๋ก ๋์ฒดํ ์ ์๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋คํ์ฑ๊ณผ DI ์ปจํ ์ด๋๊ฐ ๊ฐ์ง ํฐ ๊ฐ์ ์ด๋ค.
๊ผญ ์น ์ค์ฝํ๊ฐ ์๋์ด๋ ํ๋ก์๋ ์ฌ์ฉํ ์ ์๋ค.
์ฃผ์์
๋ง์น ์ฑ๊ธํค์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๋ฐ ํน๋ณํ scope๋ ๊ผญ ํ์ํ ๊ณณ์๋ง ์ต์ํํด์ ์ฌ์ฉํ์, ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด ์ ์ง๋ณด์ํ๊ธฐ ์ด๋ ค์์ง๋ค.
์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์
์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., - ๊ฐ์ ์๊ฐ | ์ธํ๋ฐ...
www.inflearn.com