๐ Spring/Spring ํต์ฌ ๊ธฐ์
ํ๋กํผํฐ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ํ ์ ์๋ ์ค์ ๊ฐ 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 ํต์ฌ ๊ธฐ์
Environment ํ๋กํ์ผ๊ณผ ํ๋กํผํฐ๋ฅผ ๋ค๋ฃจ๋ ์ธํฐํ์ด์ค ApplicationContext extends EnvironmentCapable getEnvironment() Environment EnvironmentCapable ํ๋กํ์ผ ๋น๋ค์ ๊ทธ๋ฃน Environment์ ์ญํ ์ ํ์ฑํํ ํ๋กํ์ผ ํ์ธ ๋ฐ ์ค์ ํ๋กํ์ผ ์ ์ฆ์ผ์ด์ค ํ
์คํธ ํ๊ฒฝ์์๋ A๋ผ๋ ๋น์ ์ฌ์ฉํ๊ณ , ๋ฐฐํฌ ํ๊ฒฝ์์๋ B๋ผ๋ ๋น์ ์ฐ๊ณ ์ถ์ ๊ฒฝ์ฐ! ์ด ๋น์ ๋ชจ๋ํฐ๋ง ์ฉ๋๋๊น ํ
์คํธํ ๋๋ ํ์๊ฐ ์๊ณ ๋ฐฐํฌํ ๋๋ง ๋ฑ๋ก์ด ๋๋ฉด ์ข๊ฒ ๋ค! 1. ๊ฐ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ.. ๋ค๋ฅธ ๋น๋ค์ ์จ์ผํ๋ ๊ฒฝ์ฐ! 2. ํน์ ํ๊ฒฝ์์๋ง ์ด๋ค ๋น์ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ ํ๋กํ์ผ ์ ์ํ๊ธฐ ํด๋์ค์ ์ ์ @Configuration @Profile("test") @Compo..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
์ค์ฝํ ์ฑ๊ธํค ( ๊ธฐ๋ณธ๊ฐ ) : ์ค์ง ํ๋์ ์ธ์คํด์ค ํ๋กํ ํ์
( @Scope("prototype") ์ถ๊ฐํด์ค์ผํจ. ) : ๋งค๋ฒ ๋ค๋ฅธ ์ธ์คํด์ค ๊ฐ์ฒด Request Session WebSocket ... ์ฑ๊ธํค proto ๋ AppRunner๊ฐ ์ฃผ์
๋ฐ์ ์ธ์คํด์ค์ด๊ณ , single.getProto() ๋ Singleํด๋์ค์์ ์ง์ ์ฃผ์
์์ผ์ค ์ธ์คํด์ค์ด๋ค. ๊ฒฐ๊ณผ ๊ฒฐ๊ณผ๋ ๋น์ฐํ ์ฑ๊ธํค์ด๋ฏ๋ก ํ๋์ ๊ฐ์ฒด๊ฐ(๋๊ฐ์ ๊ฐ์ฒด๊ฐ) ์ฐํ๋ค. ํ๋กํ ํ์
@Scope("prototype")์ ์ง์ ํด์ฃผ๊ณ Proto ๊ฐ์ฒด์ Single ๊ฐ์ฒด ๋ฅผ ๊ฐ๊ฐ 3๋ฒ ์ถ๋ ฅํด๋ณด์๋ค. ๊ฒฐ๊ณผ๋ ์ญ์ ์ฑ๊ธํค์ ๋งค๋ฒ ๊ฐ์ ๊ฐ์ฒด๊ฐ ๋์ค๋ ๋ฐ๋ฉด, ํ๋กํ ํ์
์ ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋์ค๋๊ฑธ ์์์๋ค. ํ๋กํ ํ์
๋น์ด ์ฑ๊ธํค ๋น์ ์ฐธ์กฐํ๋ฉด? ์๋ฌด ๋ฌธ์ ์์...
๐ Spring/Spring ํต์ฌ ๊ธฐ์
์คํ๋ง 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 ํต์ฌ ๊ธฐ์
IoC ๋? Inversion of Control : ์์กด ๊ด๊ณ ์ฃผ์
( Dependency Injection) ์ด๋ผ๊ณ ๋ ํ๋ฉฐ, ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ๋ ์์กด ๊ฐ์ฒด๋ฅผ ์ง์ ๋ง๋ค์ด ์ฌ์ฉํ๋๊ฒ ์๋๋ผ, ์ฃผ์
๋ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋งํจ ์คํ๋ง IoC ์ปจํ
์ด๋ BeanFactory ์ ํ๋ฆฌ์ผ์ด์
์ปดํฌ๋ํธ์ ์ค์ ์ ์ฅ์ ๋น ์ค์ ์์ค๋ก ๋ถํฐ ๋น ์ ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ , ๋น์ ๊ตฌ์ฑํ๊ณ ์ ๊ณตํ๋ค. ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋น(bean)์ด๋ผ๊ณ ํ๊ณ , ์ด ๋น(bean)๋ค์ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ๋ก ์ปจํ
์ด๋๋ฅผ ๋น ํฉํ ๋ฆฌ(BeanFactory) ๋ผ๊ณ ๋ถ๋ฅธ๋ค. BeanFactory์ ์ฌ๋ฌ ๊ฐ์ง ์ปจํ
์ด๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์ค(ApplicationContext)๋ผ๊ณ ๋ถ๋ฆ OwnerController ๊ฐ IoC ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ค์ด์ค..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
@Autowired required : ๊ธฐ๋ณธ๊ฐ์ true (๋ฐ๋ผ์ ๋ชป ์ฐพ์ผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ๋ ์คํจ) @Autowired๋ผ๋ ์ด๋
ธํ
์ด์
์ด ์๋๋ฐ ์ด๋ป๊ฒ ๋น์ผ๋ก ๋ฑ๋ก์ด ๋๊ฑธ๊น? ์ด๋ค ๋น์ด ๋๋ ํด๋์ค์ ์์ฑ์๊ฐ ์ค์ง ํ๋๋ง ์๊ณ ๊ทธ ์์ฑ์์ ๋งค๊ฐ๋ณ์ ํ์
์ด ๋น์ผ๋ก ๋ฑ๋ก์ด ๋์ด์๋ค๋ฉด @Autowired๊ฐ ์๋๋ผ๋ ์๋์ผ๋ก ์ฃผ์
์ ์์ผ์ค๋ค. Repository๋ผ๋ interface ๋ฅผ ๊ตฌํํ interface๋ Spring Data JPA์์ .. LifeCycle .. ์ด์ฉ๊ณ ์์ bean์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํด์ค๋ค.... ๊ทธ๋์ ๋ฐ๋ก @Autowired๋ผ๋ ์ด๋
ธํ
์ด์
์ด ์์ด๋ bean์ผ๋ก ๋ฑ๋ก์ด ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด @Autowired ๋ผ๋ ์ด๋
ธํ
์ด์
์ด ์ ์ ์ฌ๋ผ์ง๋ค๊ณ ํ๋ค. ์ด๋ฐ์์ผ๋ก ์ฝ๋๋ฅผ ์ง๋ฉด. ์ฌ์ฉํ ์..