๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ 

5. IoC ์ปจํ…Œ์ด๋„ˆ 5๋ถ€ : ๋นˆ์˜ ์Šค์ฝ”ํ”„

2020. 6. 23. 23:26
๋ฐ˜์‘ํ˜•

์Šค์ฝ”ํ”„

  • ์‹ฑ๊ธ€ํ†ค ( ๊ธฐ๋ณธ๊ฐ’ ) : ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค
  • ํ”„๋กœํ† ํƒ€์ž… ( @Scope("prototype") ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•จ. ) : ๋งค๋ฒˆ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด
    • Request
    • Session
    • WebSocket
    • ...

 

์‹ฑ๊ธ€ํ†ค

Single ,  Proto ํด๋ž˜์Šค

 

proto ๋Š” AppRunner๊ฐ€ ์ฃผ์ž…๋ฐ›์€ ์ธ์Šคํ„ด์Šค์ด๊ณ , single.getProto() ๋Š” Singleํด๋ž˜์Šค์—์„œ ์ง์ ‘ ์ฃผ์ž… ์‹œ์ผœ์ค€ ์ธ์Šคํ„ด์Šค์ด๋‹ค.

 

๊ฒฐ๊ณผ

๊ฒฐ๊ณผ๋Š” ๋‹น์—ฐํžˆ ์‹ฑ๊ธ€ํ†ค์ด๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€(๋˜‘๊ฐ™์€ ๊ฐ์ฒด๊ฐ€) ์ฐํžŒ๋‹ค.

 

 

 


 

ํ”„๋กœํ† ํƒ€์ž…

@Scope("prototype")์„ ์ง€์ •ํ•ด์ฃผ๊ณ 

 

Proto ๊ฐ์ฒด์™€ Single ๊ฐ์ฒด ๋ฅผ ๊ฐ๊ฐ 3๋ฒˆ ์ถœ๋ ฅํ•ด๋ณด์•˜๋‹ค.

๊ฒฐ๊ณผ๋Š” ์—ญ์‹œ ์‹ฑ๊ธ€ํ†ค์€ ๋งค๋ฒˆ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฐ˜๋ฉด, ํ”„๋กœํ† ํƒ€์ž…์€ ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ค๋Š”๊ฑธ ์•Œ์ˆ˜์žˆ๋‹ค. 

 

 


 

 

ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์ด ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ์ฐธ์กฐํ•˜๋ฉด?

  • ์•„๋ฌด ๋ฌธ์ œ ์—†์Œ.

 

 

์‹ฑ๊ธ€ํ†ค ๋นˆ์ด ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์„ ์ฐธ์กฐํ•˜๋ฉด?

  • ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์ด ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋œ๋‹ค

์ถœ๋ ฅ๋ฌธ : ๊ฒฐ๊ณผ

์‹ฑ๊ธ€ํ†ค์—์„œ๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ์—…๋ฐ์ดํŠธ ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด
    • scope-proxy
    • Object-Provider
    • Provider(ํ‘œ์ค€)

proxyMode = ScopedProxyMode.TARGET_CLASS๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์—…๋ฐ์ดํŠธ ๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ• 1 )  proxyMode = ScopeProxyMode.TARGET_CLASS (๊ธฐ๋ณธ๊ฐ’ : DEFAULT)

 

 

 

 

์–ด๋–ค ์›๋ฆฌ ์ผ๊นŒ?

ํ”„๋ก์‹œ๋ฅผ ๊ฑฐ์ณ์„œ ํ”„๋กœํ†  ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค. ์™œ? ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ค„ ์—ฌ์ง€๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—.. ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ”„๋ก์‹œ๋กœ ํ”„๋กœํ† ๋ฅผ ๊ฐ์‹ธ์ฃผ๋ฉด ๋œ๋‹ค.

 

@Component
public class Single{
	@AutoWired
    Proto proto; //์—ฌ๊ธฐ์„œ proto๊ฐ€ ์•„๋‹Œ proxy ๋นˆ์ด ์ฃผ์ž…์ด ๋œ๋‹ค.
    
    public Proto getProto(){
    	return proto;
    }
}

์‹ค์งˆ์ ์œผ๋ก  ํ”„๋ก์‹œ๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜๊ณ , proto์—๋Š” ํ”„๋ก์‹œ ๋นˆ์ด ์ฃผ์ž…์ด ๋œ๋‹ค.

 

 


 

 

์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ์‚ฌ์šฉ์‹œ ์ฃผ์˜ํ•  ์ 

  • ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ณต์œ .
@Component
public class Single{
	int value = 0; //์ด ๊ฐ’์€ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•œ๋‹ค.
}

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ๋•Œ, value๊ฐ’์ด ์„œ๋กœ ๊ณต์œ ๊ฐ€ ๋œ๋‹ค. ์ฝ”๋”ฉํ• ๋•Œ ThreadSafetyํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค.

 

  • ApplicationContext ์ดˆ๊ธฐ ๊ตฌ๋™์‹œ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ.
    • ๋ชจ๋“  ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„์˜ ๋นˆ๋“ค์€ ApplicationContext๊ฐ€ ๋นˆ์„ ๋งŒ๋“ค๋•Œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ์ด ๋œ๋‹ค. (๊ทธ๋ž˜์„œ ์ฒ˜์Œ ๊ตฌ๋™์‹œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด์ˆ˜ ์žˆ๋‹ค.)
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • 7. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 2๋ถ€. ํ”„๋กœํผํ‹ฐ
  • 6. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 1๋ถ€. ํ”„๋กœํŒŒ์ผ
  • 2. IoC ์ปจํ…Œ์ด๋„ˆ 2๋ถ€ : ApplicationContext์™€ ๋‹ค์–‘ํ•œ ๋นˆ ์„ค์ • ๋ฐฉ๋ฒ•
  • 1. IoC ์ปจํ…Œ์ด๋„ˆ 1๋ถ€ : ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์™€ ๋นˆ
iseunghan
iseunghan
๊พธ์ค€ํ•˜๊ฒŒ ์—ด์‹ฌํžˆ..
iseunghan
iseunghan

๊ณต์ง€์‚ฌํ•ญ

  • ์–ด์ œ๋ณด๋‹ค ๋‚˜์€ ์˜ค๋Š˜์ด ๋˜๊ธฐ ์œ„ํ•ด ๐Ÿ”ฅ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (261)
    • ๐Ÿ’ Spring (14)
      • ๊ฐœ๋… ๋ฐ ์ดํ•ด (2)
      • Spring ํ•ต์‹ฌ ๊ธฐ์ˆ  (24)
      • Spring REST API (8)
      • Spring MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  (7)
      • Spring Security (23)
      • Spring in Action (1)
    • ๐ŸŒป JAVA (84)
      • ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ (20)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ (13)
      • ๋””์ž์ธ ํŒจํ„ด (7)
      • ์ •๋ฆฌ์ •๋ฆฌ์ •๋ฆฌ (43)
      • JUnit (1)
    • ๐Ÿ”– Snippets (3)
      • Javascript (3)
    • โš™๏ธ Devops (22)
      • โ› Git (11)
      • ๐Ÿณ Docker (6)
      • ๐Ÿง Linux (3)
      • ๐ŸŒˆ Jenkins (1)
      • ๐Ÿ“ฌ Kafka (1)
    • ๐Ÿ’ฌ ETC.. (4)
      • ๐Ÿ’ป macOS (2)
    • ๐ŸŒง๏ธ ORM (2)
      • JPA (2)
    • ๐Ÿ Python (2)
    • ๐Ÿ“š Databases (15)
      • ์˜ค๋ผํด๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต(2ํŒ) (3)
      • RealMySQL 8.0 (8)
    • ๐Ÿ”ฅ Computer Science (5)
      • ๐Ÿ“ก ๋„คํŠธ์›Œํฌ (5)
    • ๐Ÿท๏ธ ํ˜‘์—… (1)
    • ๐Ÿ“œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (38)
      • BAEKJOON\์ˆ˜ํ•™ 1, ์ˆ˜ํ•™ 2 (8)
      • BAEKJOON\์žฌ๊ท€ (5)
      • BAEKJOON\๋ธŒ๋ฃจํŠธ ํฌ์Šค (3)
      • BAEKJOON\์ •๋ ฌ (1)
      • BAEKJOON\๋ฐฑํŠธ๋ž˜ํ‚น (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\์ด๋ถ„ํƒ์ƒ‰ (1)
      • BAEKJOON\๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (9)
      • BAEKJOON\๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (0)
    • โœจ ISEUNGHAN (1)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
๋ฐ˜์‘ํ˜•
hELLO ยท Designed By ์ •์ƒ์šฐ.
iseunghan
5. IoC ์ปจํ…Œ์ด๋„ˆ 5๋ถ€ : ๋นˆ์˜ ์Šค์ฝ”ํ”„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๊ฐœ์ธ์ •๋ณด

  • ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ
  • ํฌ๋Ÿผ
  • ๋กœ๊ทธ์ธ

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.