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

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

7. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 2๋ถ€. ํ”„๋กœํผํ‹ฐ

ํ”„๋กœํผํ‹ฐ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •๊ฐ’ Environment์˜ ์—ญํ• ์€ ํ”„๋กœํผํ‹ฐ ์†Œ์Šค ์„ค์ • ๋ฐ ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ 1) ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ •๊ฐ’ 1-1. VM options ์„ค์ • VM options : -Dapp.name=spring5 ์„ค์ • @Component public class AppRunner implements ApplicationRunner { @Autowired ApplicationContext ctx; @Autowired BookRepository bookRepository; @Override public void run(ApplicationArguments args) throws Exception { Environment environment = ctx.getEnv..

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

6. IoC ์ปจํ…Œ์ด๋„ˆ 6๋ถ€ : Environment 1๋ถ€. ํ”„๋กœํŒŒ์ผ

Environment ํ”„๋กœํŒŒ์ผ๊ณผ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ApplicationContext extends EnvironmentCapable getEnvironment() Environment EnvironmentCapable ํ”„๋กœํŒŒ์ผ ๋นˆ๋“ค์˜ ๊ทธ๋ฃน Environment์˜ ์—ญํ• ์€ ํ™œ์„ฑํ™”ํ•  ํ”„๋กœํŒŒ์ผ ํ™•์ธ ๋ฐ ์„ค์ • ํ”„๋กœํŒŒ์ผ ์œ ์ฆˆ์ผ€์ด์Šค ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” A๋ผ๋Š” ๋นˆ์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” B๋ผ๋Š” ๋นˆ์„ ์“ฐ๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ! ์ด ๋นˆ์€ ๋ชจ๋‹ˆํ„ฐ๋ง ์šฉ๋„๋‹ˆ๊นŒ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ํ•„์š”๊ฐ€ ์—†๊ณ  ๋ฐฐํฌํ•  ๋•Œ๋งŒ ๋“ฑ๋ก์ด ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค! 1. ๊ฐ๊ฐ์˜ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ.. ๋‹ค๋ฅธ ๋นˆ๋“ค์„ ์จ์•ผํ•˜๋Š” ๊ฒฝ์šฐ! 2. ํŠน์ • ํ™˜๊ฒฝ์—์„œ๋งŒ ์–ด๋–ค ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœํŒŒ์ผ ์ •์˜ํ•˜๊ธฐ ํด๋ž˜์Šค์— ์ •์˜ @Configuration @Profile("test") @Compo..

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

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

์Šค์ฝ”ํ”„ ์‹ฑ๊ธ€ํ†ค ( ๊ธฐ๋ณธ๊ฐ’ ) : ์˜ค์ง ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค ํ”„๋กœํ† ํƒ€์ž… ( @Scope("prototype") ์ถ”๊ฐ€ํ•ด์ค˜์•ผํ•จ. ) : ๋งค๋ฒˆ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด Request Session WebSocket ... ์‹ฑ๊ธ€ํ†ค proto ๋Š” AppRunner๊ฐ€ ์ฃผ์ž…๋ฐ›์€ ์ธ์Šคํ„ด์Šค์ด๊ณ , single.getProto() ๋Š” Singleํด๋ž˜์Šค์—์„œ ์ง์ ‘ ์ฃผ์ž… ์‹œ์ผœ์ค€ ์ธ์Šคํ„ด์Šค์ด๋‹ค. ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋Š” ๋‹น์—ฐํžˆ ์‹ฑ๊ธ€ํ†ค์ด๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€(๋˜‘๊ฐ™์€ ๊ฐ์ฒด๊ฐ€) ์ฐํžŒ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… @Scope("prototype")์„ ์ง€์ •ํ•ด์ฃผ๊ณ  Proto ๊ฐ์ฒด์™€ Single ๊ฐ์ฒด ๋ฅผ ๊ฐ๊ฐ 3๋ฒˆ ์ถœ๋ ฅํ•ด๋ณด์•˜๋‹ค. ๊ฒฐ๊ณผ๋Š” ์—ญ์‹œ ์‹ฑ๊ธ€ํ†ค์€ ๋งค๋ฒˆ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฐ˜๋ฉด, ํ”„๋กœํ† ํƒ€์ž…์€ ๋งค๋ฒˆ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ๋‚˜์˜ค๋Š”๊ฑธ ์•Œ์ˆ˜์žˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž… ๋นˆ์ด ์‹ฑ๊ธ€ํ†ค ๋นˆ์„ ์ฐธ์กฐํ•˜๋ฉด? ์•„๋ฌด ๋ฌธ์ œ ์—†์Œ...

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

2. IoC ์ปจํ…Œ์ด๋„ˆ 2๋ถ€ : ApplicationContext์™€ ๋‹ค์–‘ํ•œ ๋นˆ ์„ค์ • ๋ฐฉ๋ฒ•

์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์˜์—ญํ•  ๋นˆ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ์˜์กด ๊ด€๊ณ„ ์„ค์ • ๋นˆ ์ œ๊ณต (IoC ์˜ˆ์‹œ) ๊ฐ์ฒด๋ฅผ ๋‚ด๊ฐ€ ์ง์ ‘ new ์ƒ์„ฑ (IoC ์ ์šฉ x) class OwnerController{ private OwnerRepository repository = new OwnerRepository(); } IoC ๋ฅผ ์ด์šฉํ•œ ์˜์กด์„ฑ ์ฃผ์ž… (IoC ์ ์šฉ o) class OwnerController{ private OwnerRepository repo; public OwnerController(OwnerRepository repo){ //์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ›๋Š”๋‹ค this.repo = repo; } } IoC OwnerRepository๋ผ๋Š” ์˜์กด์„ฑ์„ OwnerController ์—๊ฒŒ ์ฃผ์ž…์‹œํ‚จ๋‹ค. -> ์ด๊ฒƒ์ด IoC..

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

1. IoC ์ปจํ…Œ์ด๋„ˆ 1๋ถ€ : ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ์™€ ๋นˆ

IoC ๋ž€? Inversion of Control : ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…( Dependency Injection) ์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์ฃผ์ž… ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•จ ์Šคํ”„๋ง IoC ์ปจํ…Œ์ด๋„ˆ BeanFactory ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ์˜ ์ค‘์•™ ์ €์žฅ์†Œ ๋นˆ ์„ค์ • ์†Œ์Šค๋กœ ๋ถ€ํ„ฐ ๋นˆ ์ •์˜๋ฅผ ์ฝ์–ด๋“ค์ด๊ณ , ๋นˆ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์ œ๊ณตํ•œ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋นˆ(bean)์ด๋ผ๊ณ  ํ•˜๊ณ , ์ด ๋นˆ(bean)๋“ค์„ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นˆ ํŒฉํ† ๋ฆฌ(BeanFactory) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. BeanFactory์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…์Šค(ApplicationContext)๋ผ๊ณ  ๋ถ€๋ฆ„ OwnerController ๊ฐ€ IoC ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ๋“ค์–ด์˜ค..

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

3. IoC ์ปจํ…Œ์ด๋„ˆ 3๋ถ€ : @Autowired

@Autowired required : ๊ธฐ๋ณธ๊ฐ’์€ true (๋”ฐ๋ผ์„œ ๋ชป ์ฐพ์œผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ๋™ ์‹คํŒจ) @Autowired๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋œ๊ฑธ๊นŒ? ์–ด๋–ค ๋นˆ์ด ๋˜๋Š” ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๊ฐ€ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  ๊ทธ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๋นˆ์œผ๋กœ ๋“ฑ๋ก์ด ๋˜์–ด์žˆ๋‹ค๋ฉด @Autowired๊ฐ€ ์—†๋”๋ผ๋„ ์ž๋™์œผ๋กœ ์ฃผ์ž…์„ ์‹œ์ผœ์ค€๋‹ค. Repository๋ผ๋Š” interface ๋ฅผ ๊ตฌํ˜„ํ•œ interface๋Š” Spring Data JPA์—์„œ .. LifeCycle .. ์–ด์ฉŒ๊ณ  ์—์„œ bean์œผ๋กœ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค.... ๊ทธ๋ž˜์„œ ๋”ฐ๋กœ @Autowired๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์—†์–ด๋„ bean์œผ๋กœ ๋“ฑ๋ก์ด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด @Autowired ๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์  ์‚ฌ๋ผ์ง„๋‹ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด. ์‚ฌ์šฉํ•  ์ˆ˜..

iseunghan
'๐Ÿ’ Spring/Spring ํ•ต์‹ฌ ๊ธฐ์ˆ ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)