๐ Spring/Spring ํต์ฌ ๊ธฐ์
์ปดํฌ๋ํธ ์ค์บ ์ฃผ์ ๊ธฐ๋ฅ ์ค์บ ์์น ์ค์ @Configuration ์ผ๋ก ๋ฑ๋ก๋ ํด๋์ค์ ํจํค์ง ๋ด์์๋ง ๋น์ ์ฐพ์์ ๋ฑ๋กํ๋ค. @SpringBootApplication @SpringBootAplication๋ auto-configuration์ ๋ด๋นํ๋ค. application class์์ extra configuration์ ์ ์ํ๊ฑฐ๋ component scan์ ํด์ค๋ค. @SpringBootApplication ํ๋๋ง์ผ๋ก @EnableAutoConfiguration,@ComponentScan,@Configuration์ธ ๊ฐ์ง Annotation์ ์ฌ์ฉํ ๊ฒ๊ณผ ๊ฐ์ ๋์์ ํ ์ ์๋ค. ํํฐ : ์ด๋ค ์ ๋
ธํ
์ด์
์ ์ค์บ ํ ์ง ๋๋ ํ์ง ์์์ง @Component @Repository @Service @..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
๋น ์ด๋? ์คํ๋ง IoC ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌ ํ๋ ๊ฐ์ฒด ์คํ๋ง IoC ์ปจํ
์ด๋๋? BeanFactory ๋ฅผ ํ์ฅํ๋ ApplicationContext๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค. ์ปจํ
์ด๋๊ฐ ํ๋ ์ผ : ๋น ์ค์ ์์ค๋ก ๋ถํฐ ๋น ์ ์๋ฅผ ์ฝ์ด๋ค์ด๊ณ , ๋น์ ๊ตฌ์ฑํ๊ณ ์ ๊ณตํ๋ค. ( ๋น ์ธ์คํด์ค ์์ฑ, ์์กด ๊ด๊ณ ์ค์ , ๋น ์ ๊ณต) ์ฅ์ 1. ์์กด์ฑ ๊ด๋ฆฌ 2. ์ค์ฝํ - ์ฑ๊ธํค (๊ธฐ๋ณธ๊ฐ) : ํ๋์ ๊ฐ์ฒด๋ง ์ฌ์ฉ -> ๋น ๋ฅธ ์ฑ๋ฅ - ํ๋กํ ํ์
: ๋งค๋ฒ ๋ค๋ฅธ ๊ฐ์ฒด 3. ๋ผ์ดํ์ฌ์ดํด ์ธํฐํ์ด์ค ๋น ๋ฑ๋ก ํ๋ ๋ฐฉ๋ฒ ๋๊ฐ์ง 1. ๊ณ ์ ์ ์ธ ๋ฐฉ์์ ๋น ๋ฑ๋ก ๋ฐฉ๋ฒ - ApplicationContext (XML) ๋จ์ : ์ผ์ผํ ํ๋ํ๋ ๋น์ ๋ฑ๋กํด์ผ ํ๋ค๋ ๋ถํธํจ์ด ์๋ค. 2. ์ด๋
ธํ
์ด์
์ ์ด์ฉํ ๋น ๋ฑ๋ก ๋ฐฉ๋ฒ ( Java ) package ..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
PSA ๋ ? ์ ๋ง๋ ์ธํฐํ์ด์ค ๋์ ์ฝ๋ ํ์ฅ์ฑ์ด ์ข์ง ๋ชปํ ์ฝ๋ or ๊ธฐ์ ์ ํนํ๋์ด ์๋ ์ฝ๋ ๋์ ์ฝ๋ +++++++++ ์ ๋ง๋ ์ธํฐํ์ด์ค(PSA) ++++++++++++++++ ํ์ฅ์ฑ์ด ์ข์ง ๋ชปํ ์ฝ๋ or ๊ธฐ์ ์ ํนํ๋์ด ์๋ ์ฝ๋ ์คํ๋ง ํธ๋์ญ์
@Transactional ์ด๋ผ๋ annotation์ ์ฒ๋ฆฌํ๋ Aspect ๊ฐ ์๋ค. ๊ทธ Aspect์์๋ *PlatformTransactionManager ๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํด์ ์ฝ๋ฉ์ ํด๋จ๋ค. * ์ ๋ง๋ ์ธํฐํ์ด์ค(PSA) ์ ์ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ PlatformTransactionManager ์ ์ฌ๋ฌ ๊ตฌํ์ฒด๋ค์ด ๋ฐ๋๋๋ผ๋, ํธ๋์ญ์
์ Aspect ์ฝ๋๋ ๋ฐ๋์ง๊ฐ ์๋๋ค. ์ฌ๊ธฐ์๋ Repository ๋ผ๋ interface๋ฅผ ๊ตฌํํ๊ณ ์..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
AOP ์ ํต์ฌ : ํฉ์ด์ง ์ฝ๋๋ฅผ ํ๊ณณ์ผ๋ก ๋ชจ์ผ๋ ์ฝ๋ฉ ๊ธฐ๋ฒ ํฉ์ด์ง AAAA ์ BBBB class A { method a () { AAAA ์ค๋์ 7์ 4์ผ ๋ฏธ๊ตญ ๋
๋ฆฝ ๊ธฐ๋
์ผ์ด๋์. BBBB } method b () { AAAA ์ ๋ ์์นจ์ ์ด๋์ ๋ค๋
์์ ๋ฐฅ๋จน๊ณ ๋นจ๋๋ฅผ ํ์ต๋๋ค. BBBB } } class B { method c() { AAAA ์ ์ฌ์ ์ด๊ฑฐ ์ฐ๋๋ผ ๋ชป๋จน์๋๋ฐ ์ ๋
์ ์ ์ก๋ณถ์์ ๋จน๊ณ ์ถ๋ค์. BBBB } } AAAA , BBBB ๋ฅผ ๋ฐ์ผ๋ก ๋นผ๋ฒ๋ฆฐ๋ค. ๋ชจ์ ๋์ AAAA ์ BBBB class A { method a () { ์ค๋์ 7์ 4์ผ ๋ฏธ๊ตญ ๋
๋ฆฝ ๊ธฐ๋
์ผ์ด๋์. } method b () { ์ ๋ ์์นจ์ ์ด๋์ ๋ค๋
์์ ๋ฐฅ๋จน๊ณ ๋นจ๋๋ฅผ ํ์ต๋๋ค. } } class B { method c..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
IoC ๋? Inversion of Control ( ์ ์ด๊ถ ์ญ์ ) (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; } } OwnerRepository๋ OwnerController์ ์์กด์ฑ์ด๋ค. ->OwnerRepository๊ฐ ์์ด์ผ ..
๐ Spring/Spring ํต์ฌ ๊ธฐ์
IoC ์ปจํ
์ด๋ - ApplicationContext ์ปจํ
์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ฅผ ๋น(bean)์ด๋ผ๊ณ ํ๊ณ , ์ด ๋น(bean)๋ค์ ๊ด๋ฆฌํ๋ค๋ ์๋ฏธ๋ก ์ปจํ
์ด๋๋ฅผ ๋น ํฉํ ๋ฆฌ(BeanFactory) ๋ผ๊ณ ๋ถ๋ฅธ๋ค. BeanFactory์ ์ฌ๋ฌ ๊ฐ์ง ์ปจํ
์ด๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์ค(ApplicationContext)๋ผ๊ณ ๋ถ๋ฆ ApplcationContext : ์๊ฐ Bean๋ค์ ๋ง๋ค๊ณ , ๊ทธ Bean๋ค์ ์์กด์ฑ์ ์ฎ์ด์ค๋ค. ์ค๋ก์ง Bean๋ค๋ง ๊ด๋ฆฌ! OwnerController ๊ฐ IoC ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ค์ด์ค๊ณ , ์ปจํ
์ด๋์์ OwnerController ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ค๋ค. ๊ทธ๋ฆฌ๊ณ , OwnerRepository ์ ๊ฐ์ฒด๋ ๋ง๋ค์ด ์ค๋ค. -> Bean ์ฆ, Bean๋ค์ ์์กด์ฑ๋ค์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋ค. I..