Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 27. ์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ

hello_u 2023. 2. 10. 17:20

 

์Šค์ฝ”ํ”„์™€ ํ”„๋ก์‹œ

 

ํ”„๋ก์‹œ ๋ฐฉ์‹์„ ์‚ฌ์šฉ

 

@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๋Š” ๊ผญ ํ•„์š”ํ•œ ๊ณณ์—๋งŒ ์ตœ์†Œํ™”ํ•ด์„œ ์‚ฌ์šฉํ•˜์ž, ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com