๐ Contents
- ์คํ๋ง ํ๋ ์์ํฌ๋
- Spring, Spring MVC, Spring Boot์ ์ฐจ์ด
- Bean์ด๋
- Container๋
- IOC(Inversion of Control, ์ ์ด์ ์ญ์ )๋
- MVC ํจํด์ด๋
- DI(Dependency Injection, ์์กด์ฑ ์ฃผ์ )๋
- AOP(Aspect Oriented Programming)๋
- POJO
- DAO์ DTO์ ์ฐจ์ด
- Spring JDBC๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ์ ๊ทผ
- Filter์ Interceptor ์ฐจ์ด
- ์๋ฐ ์ํฐํ๋ผ์ด์ฆ ๊ฐ๋ฐ์ ํธํ๊ฒ ํด์ฃผ๋ ๊ฒฝ๋๊ธ ์คํ์์ค ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ
- Lightweight Java Applicaion Framework
- ๋ชฉํ: POJO ๊ธฐ๋ฐ์ Enterprise Application ๊ฐ๋ฐ์ ์ฝ๊ณ ํธํ๊ฒ ํ ์ ์๋๋ก ํ๋ค.
- Java Application์ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ํ๋ถ๊ตฌ์กฐ(Infrastructure)๋ฅผ ํฌ๊ด์ ์ผ๋ก ์ ๊ณตํ๋ค.
- Spring์ด ํ๋ถ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ Application ๊ฐ๋ฐ์ ์ง์คํ ์ ์๋ค.
- ๊ฐ๋จํ ์คํ๋ง(Spring)์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ฌ๋ฌ ๊ฐ์ง ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
- ๋ํ๋ฏผ๊ตญ ๊ณต๊ณต๊ธฐ๊ด์ ์น ์๋น์ค ๊ฐ๋ฐ ์ ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์๋ ์ ์ ์ ๋ถ ํ์ค ํ๋ ์์ํฌ์ ๊ธฐ๋ฐ ๊ธฐ์
- Spring *
- Spring MVC
- Spring Boot
- ์ปจํ ์ด๋ ์์ ๋ค์ด์๋ ๊ฐ์ฒด
- ์ปจํ ์ด๋์ ๋ด๊ฒจ์์ผ๋ฉฐ, ํ์ํ ๋ ์ปจํ ์ด๋์์ ๊ฐ์ ธ์์ ์ฌ์ฉ
- @Bean ์ ์ฌ์ฉํ๊ฑฐ๋ xml ์ค์ ์ ํตํด ์ผ๋ฐ ๊ฐ์ฒด๋ฅผ Bean์ผ๋ก ๋ฑ๋กํ ์ ์๊ณ , Bean์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ ์ฝ๊ฒ ์ฃผ์ ํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅ
- ๊ฐ์ฒด ์์ฑ -> ์์กด ์ค์ -> ์ด๊ธฐํ -> ์ฌ์ฉ -> ์๋ฉธ
- ์คํ๋ง ์ปจํ ์ด๋์ ์ํด ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ
- ์คํ๋ง ์ปจํ ์ด๋ ์ด๊ธฐํ ์ ๋น ๊ฐ์ฒด ์์ฑ, ์์กด ๊ฐ์ฒด ์ฃผ์ ๋ฐ ์ด๊ธฐํ
- ์คํ๋ง ์ปจํ ์ด๋ ์ข ๋ฃ ์ ๋น ๊ฐ์ฒด ์๋ฉธ
- ๋น ์ด๊ธฐํ ๋ฉ์๋์
@PostConstruct
์ฌ์ฉ
- ๋น ์ ์ xml์
<context:annotation-config></context:annotation-config>
์ถ๊ฐ
InitializingBean
์ธํฐํ์ด์ค์afterPropertiesSet()
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋- ์ปค์คํ init() ๋ฉ์๋ ์ ์
- ๋น ์ ์ xml์
init-method
์์ฑ์ผ๋ก ๋ฉ์๋ ์ด๋ฆ ์ง์ - ๋๋ ๋น ์ด๊ธฐํ ๋ฉ์๋์
@Bean(init-method="init")
์ง์
- ๋น ์๋ฉธ ๋ฉ์๋์
@PreDestroy
์ฌ์ฉ
- ๋น ์ ์ xml์
<context:annotation-config></context:annotation-config>
์ถ๊ฐ
DisposableBean
์ธํฐํ์ด์ค์destroy()
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋- ์ปค์คํ destroy() ๋ฉ์๋ ์ ์
- ๋น ์ ์ xml์
destroy-method
์์ฑ์ผ๋ก ๋ฉ์๋ ์ด๋ฆ ์ง์
- 1๋ฒ ๋ฐฉ๋ฒ (๊ถ์ฅ)
- ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๊ฐ๊ฒฐํ๋ฉฐ ์ฝ๋์์ ์ด๊ธฐํ ๋ฉ์๋๊ฐ ์กด์ฌํจ์ ์ฝ๊ฒ ํ์ ๊ฐ๋ฅํ์ฌ xml ์ค์ ๋ฐฉ๋ฒ๋ณด๋ค ์ง๊ด์
- 2๋ฒ ๋ฐฉ๋ฒ (์ง์)
- ๋น ์ฝ๋์ ์คํ๋ง ์ธํฐํ์ด์ค๊ฐ ๋ ธ์ถ๋์ด ๊ถ์ฅํ์ง ์์ผ๋ฉฐ ๊ฐ๊ฒฐํ์ง ์์ ๋ฐฉ๋ฒ
- 3๋ฒ ๋ฐฉ๋ฒ
- ๋น ์ฝ๋์ ์คํ๋ง ์ธํฐํ์ด์ค๋ ๋ ธ์ถ๋์ง ์์ง๋ง, ์ฝ๋๋ง์ผ๋ก ์ด๊ธฐํ ๋ฉ์๋ ํธ์ถ ์ฌ๋ถ๋ฅผ ์ ์ ์๋ ๋จ์
- singleton (default)
- ์ ํ๋ฆฌ์ผ์ด์ ์์ Bean ๋ฑ๋ก ์ singleton scope๋ก ๋ฑ๋ก
- Spring IoC ์ปจํ ์ด๋ ๋น ํ ๊ฐ์ ์ธ์คํด์ค๋ง ์์ฑ
- ์ปจํ ์ด๋๊ฐ Bean ๊ฐ์ ธ๋ค ์ฃผ์ ํ ๋ ํญ์ ๊ฐ์ ๊ฐ์ฒด ์ฌ์ฉ
- ๋ฉ๋ชจ๋ฆฌ๋ ์ฑ๋ฅ ์ต์ ํ์ ์ ๋ฆฌ
- prototype
- ์ปจํ ์ด๋์์ Bean ๊ฐ์ ธ๋ค ์ธ ๋ ํญ์ ๋ค๋ฅธ ์ธ์คํด์ค ์ฌ์ฉ
- ๋ชจ๋ ์์ฒญ์์ ์๋ก์ด ๊ฐ์ฒด ์์ฑ
- gc์ ์ํด Bean ์ ๊ฑฐ
- request
- Bean ๋ฑ๋ก ์ ํ๋์ HTTP request ์๋ช ์ฃผ๊ธฐ ์์ ๋จ ํ๋์ Bean๋ง ์กด์ฌ
- ๊ฐ๊ฐ์ HTTP ์์ฒญ์ ๊ณ ์ Bean ๊ฐ์ฒด ๋ณด์
- Spring MVC Web Application์์ ์ฌ์ฉ
- session
- ํ๋์ HTTP Session ์๋ช ์ฃผ๊ธฐ ์์ ๋จ ํ๋์ Bean๋ง ์กด์ฌ
- Spring MVC Web Application์์ ์ฌ์ฉ
- global session
- ํ๋์ global HTTP Session ์๋ช ์ฃผ๊ธฐ ์์ ํ ๊ฐ์ Bean ์ง์
- Spring MVC Web Application์์ ์ฌ์ฉ
- application
- ServletContext ์๋ช ์ฃผ๊ธฐ ์์ ํ ๊ฐ์ Bean ์ง์
- Spring MVC Web Application์์ ์ฌ์ฉ
- [Spring] IOC(Inversion Of Control): ์ ์ด ์ญ์
- [Spring] Spring Bean์ ๊ฐ๋ ๊ณผ Bean Scope ์ข ๋ฅ
- Spring ๋น/์ปจํ ์ด๋ ์๋ช ์ฃผ๊ธฐ (Lifecycle)
- SpringMVC :: ์คํ๋ง ์ปจํ ์ด๋์ ์๋ช ์ฃผ๊ธฐ, ๋น์ ์๋ช ์ฃผ๊ธฐ (Life cycle), InitialzingBean, DisposableBean, @PreDestroy, @PostConstruct
- [Spring] ๋น(bean)์๋ช ์ฃผ๊ธฐ ๋ฉ์๋
-
์ปจํ ์ด๋(Container)๋ ๋ณดํต ์ธ์คํด์ค์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋กํ๋ ๊ฒ์ด๋ผ ํ ์ ์๋ค. ๋ค์๋งํด, ์ปจํ ์ด๋๋ ๋น์ ์ด ์์ฑํ ์ฝ๋์ ์ฒ๋ฆฌ๊ณผ์ ์ ์์๋ฐ์ ๋ ๋ฆฝ์ ์ธ ์กด์ฌ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ์ปจํ ์ด๋๋ ์ ์ ํ ์ค์ ๋ง ๋์ด์๋ค๋ฉด ๋๊ตฌ์ ๋์์์ด๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ค์ค๋ก ์ฐธ์กฐํ ๋ค ์์์ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์๋ฉธ์ ์ปจํธ๋กคํด์ค๋ค.
-
Spring ํ๋ ์์ํฌ๋ ๋ค๋ฅธ ํ๋ ์์ํฌ๋ค๊ณผ ๋ฌ๋ฆฌ ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. ์ด์ ๊ฐ์ ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ๊ฒ์ด IoC ํจํด์ด๋ค.
- IoC(Inversion of Control, ์ ์ด์ ์ญ์ )๋
- ๊ฐ์ฒด์ ์์ฑ์์๋ถํฐ ์๋ช ์ฃผ๊ธฐ์ ๊ด๋ฆฌ๊น์ง ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ด ๋ฐ๋ ๊ฒ์ ์๋ฏธ, ๋๋ ์ ์ด ๊ถํ์ ์์ ์ด ์๋ ๋ค๋ฅธ ๋์์๊ฒ ์์ํ๋ ๊ฒ์ด๋ค.
- ์ด ๋ฐฉ์์ ๋๋ถ๋ถ์ ํ๋ ์์ํฌ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ฐ๋ฐ์๋ ํ์ํ ๋ถ๋ถ์ ๊ฐ๋ฐํด์ ๋ผ์ ๋ฃ๊ธฐ์ ํํ๋ก ๊ฐ๋ฐํ๊ณ ์คํํ๊ฒ ๋๋ค. ํ๋ ์์ํฌ๊ฐ ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ์ ํ์ํ ๋ถํ์ ๊ฐ๋ฐํ๊ณ ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ค.
- ์ด๋ ๊ฒ ์กฐ๋ฆฝ๋ ์ฝ๋์ ์ต์ข ํธ์ถ์ ๊ฐ๋ฐ์์ ์ํด์ ์ ์ด๋๋ ๊ฒ์ด ์๋๋ผ ํ๋ ์์ํฌ์ ๋ด๋ถ์์ ๊ฒฐ์ ๋ ๋๋ก ์ด๋ค์ง๊ฒ ๋๋๋ฐ, ์ด๋ฌํ ํ์์ "์ ์ด์ ์ญ์ "์ด๋ผ๊ณ ํํํ๋ค.
- Spring์์์ IoC
- Spring ํ๋ ์์ํฌ์์ ์ง์ํ๋ Ioc Container๋ ์ฐ๋ฆฌ๋ค์ด ํํ ๊ฐ๋ฐํ๊ณ ์ฌ์ฉํด์๋ ์ผ๋ฐ POJO(Plain Old Java Object)์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์์ฑ๋ ์ธ์คํด์ค๋ค์๊ฒ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฐจ์ด
- IoC์ ๊ฐ๋ ์ด ์ ์ฉ๋์๋์ ์ฐจ์ด
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ์ง์ ์ ์ดํ๋ค. ๋จ์ง ๋์ํ๋ ์ค์ ํ์ํ ๊ธฐ๋ฅ์ด ์์ ๋ ๋ฅ๋์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฉํ ๋ฟ์ด๋ค.
- ๋ฐ๋ฉด์ ํ๋ ์์ํฌ๋ ๊ฑฐ๊พธ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ํ๋ ์์ํฌ์ ์ํด ์ฌ์ฉ๋๋ค. ๋ณดํต ํ๋ ์์ํฌ ์์ ๊ฐ๋ฐํ ํด๋์ค๋ฅผ ๋ฑ๋กํด๋๊ณ , ํ๋ ์์ํฌ๊ฐ ํ๋ฆ์ ์ฃผ๋ํ๋ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋ง๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์์ฉํ๋๋ก ๋ง๋๋ ๋ฐฉ์์ด๋ค.
- DI?
- Dependency Injection, ์์กด์ฑ ์ฃผ์
- Dependency Injection์ Spring ํ๋ ์์ํฌ์์ ์ง์ํ๋ IoC์ ํํ์ด๋ค.
- DI๋ ํด๋์ค ์ฌ์ด์ ์์กด๊ด๊ณ๋ฅผ ๋น ์ค์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ
์ด๋๊ฐ ์๋์ ์ผ๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฒ์ ๋งํ๋ค. ๊ฐ๋ฐ์๋ค์ ์ ์ด๋ฅผ ๋ด๋นํ ํ์์์ด ๋น ์ค์ ํ์ผ์ ์์กด๊ด๊ณ๊ฐ ํ์ํ๋ค๋ ์ ๋ณด๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
- ์ปจํ ์ด๋๊ฐ ์คํ ํ๋ฆ์ ์ฃผ์ฒด๊ฐ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ์์กด๊ด๊ณ๋ฅผ ์ฃผ์ ํด์ฃผ๋ ๊ฒ.
- ์์กด์ฑ(Dependency)
- ํ์ฌ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํธ์์ฉ(์ฐธ์กฐ)ํ๊ณ ์๋ค๋ฉด ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ํ์ฌ ๊ฐ์ฒด์ ์์กด์ด๋ผ ํ๋ค.
- ์์กด์ฑ์ด ์ํํ ์ด์
- ํ๋์ ๋ชจ๋์ด ๋ฐ๋๋ฉด ์์กดํ ๋ค๋ฅธ ๋ชจ๋๊น์ง ๋ณ๊ฒฝ๋์ผ ํ๋ค.
- ํ ์คํธ ๊ฐ๋ฅํ ์ดํ์ ๋ง๋ค ๋ ์์กด์ฑ์ด ์์ผ๋ฉด ์ ๋ํ ์คํธ ์์ฑ์ด ์ด๋ ต๋ค.
- ์ ๋ํ ์คํธ์ ๋ชฉ์ ์์ฒด๊ฐ ๋ค๋ฅธ ๋ชจ๋๋ก๋ถํฐ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ ์๊ตฌํ๋ค.
- DI์ ํน์ง
- โnewโ๋ฅผ ์ฌ์ฉํด ๋ชจ๋ ๋ด์์ ๋ค๋ฅธ ๋ชจ๋์ ์ด๊ธฐํํ์ง ์์ผ๋ ค๋ฉด ๊ฐ์ฒด ์์ฑ์ ๋ค๋ฅธ ๊ณณ์์ ํ๊ณ , ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ฉด ๋๋ค.
- ์์กด์ฑ ์ฃผ์ ์ Inversion of Control ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ํ๋ค. ํด๋์ค๊ฐ ์ธ๋ถ๋ก๋ถํฐ ์์กด์ฑ์ ๊ฐ์ ธ์ผํ๋ค.
- DI๊ฐ ํ์ํ ์ด์ (DI์ ์ฅ์ )
- ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉ ํ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ , ๋ค๋ฅธ ํด๋์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ํด๋์ค๋ฅผ ํ ์คํธ ํ ์ ์๋ค.
- ๋น์ฆ๋์ค ๋ก์ง์ ํน์ ๊ตฌํ์ด ์๋ ํด๋์ค๋ฅผ ์์ฑํ๋๋ฐ ๋งค์ฐ ํจ๊ณผ์
- DI์ ์ธ๊ฐ์ง ๋ฐฉ๋ฒ
- Contructor Injection : ์์ฑ์ ์ฝ์
- Method(Setter) Injection : ๋ฉ์๋ ๋งค๊ฐ ๋ณ์ ์ฝ์
- Field Injection : ๋ฉค๋ฒ ๋ณ์ ์ฝ์
-
AOP(Aspect Oriented Programming)๋
- Aspect Oriented Programming, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ์ด๋ค ๋ก์ง์ ๊ธฐ์ค์ผ๋ก ํต์ฌ ๊ด์ ๊ณผ ๋ถ๊ฐ ๊ด์ ์ ๋๋๊ณ , ๊ด์ ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ํํ๋ ๊ฒ
- ํต์ฌ ๊ด์ ์ ์ฃผ๋ก ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง
- ๋ถ๊ฐ ๊ด์ ์ ํต์ฌ ๋ก์ง์ ์คํํ๊ธฐ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ, ๋ก๊น , ํ์ผ ์ ์ถ๋ ฅ ๋ฑ
-
AOP ๋ชฉ์
- ์์ค ์ฝ๋์์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํด์ ์ฐ๋ ์ฝ๋(= ํฉ์ด์ง ๊ด์ฌ์ฌ, Concern)๋ฅผ Aspect๋ก ๋ชจ๋ํํ์ฌ ํต์ฌ ๋ก์ง์์ ๋ถ๋ฆฌ ๋ฐ ์ฌ์ฌ์ฉ
- ๊ฐ๋ฐ์๊ฐ ํต์ฌ ๋ก์ง์ ์ง์คํ ์ ์๊ฒ ํ๊ธฐ ์ํจ
- ์ฃผ๋ก ๋ถ๊ฐ ๊ธฐ๋ฅ์ ๋ชจ๋ํ
-
AOP ์ฃผ์ ์ฉ์ด
- Aspect
- ํฉ์ด์ง ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํ ํ ๊ฒ
- Advice + PointCut
- Target
- Aspect๋ฅผ ์ ์ฉํ๋ ๊ณณ(ํด๋์ค, ๋ฉ์๋ ๋ฑ)
- Advice
- ์ค์ง์ ์ผ๋ก ์ํํด์ผ ํ๋ ๊ธฐ๋ฅ์ ๋ด์ ๊ตฌํ์ฒด
- JoinPoint
- Advice๊ฐ ์ ์ฉ๋ ์์น
- ๋ผ์ด๋ค ์ ์๋ ์ง์
- ex. ๋ฉ์๋ ์ง์ ์, ์์ฑ์ ํธ์ถ ์, ํ๋์์ ๊ฐ ๊บผ๋ผ ๋ ๋ฑ
- PointCut
- JoinPoint์ ์์ธ ์คํ ์ ์
- ๋์ฑ ๊ตฌ์ฒด์ ์ผ๋ก Advice๊ฐ ์คํ๋ ์ง์ ์ง์
- Weaving
- PointCut์ ์ํด ๊ฒฐ์ ๋ Target์ JoinPoint์ Advice๋ฅผ ์ฝ์ ํ๋ ๊ณผ์
- Aspect
-
AOP ์ ์ฉ ๋ฐฉ๋ฒ
- ์ปดํ์ผ ์ ์ ์ฉ
- AspectJ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์๋ฐ ํ์ผ์ ํด๋์ค ํ์ผ๋ก ๋ง๋ค ๋ Advice ์์ค๊ฐ ์ถ๊ฐ๋์ด ์กฐ์๋ ๋ฐ์ดํธ ์ฝ๋ ์์ฑํ๋ ๋ฐฉ๋ฒ
- ๋ก๋ ์ ์ ์ฉ
- AspectJ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์ปดํ์ผ ํ ์ปดํ์ผ ๋ ํด๋์ค๋ฅผ ๋ก๋ฉํ๋ ์์ ์ Advice ์์ค๋ฅผ ๋ผ์๋ฃ๋ ๋ฐฉ๋ฒ
- ๋ฐํ์ ์ ์ ์ฉ
- Spring AOP๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- ์คํ๋ง์ ๋ฐํ์ ์ Bean ์์ฑ
- A๋ผ๋ Bean ๋ง๋ค ๋ A๋ผ๋ ํ์ ์ ํ๋ก์ Bean๋ ์์ฑํ๊ณ , ํ๋ก์ Bean์ด A์ ๋ฉ์๋ ํธ์ถ ์ง์ ์ Advice ์์ค๋ฅผ ํธ์ถํ ํ A์ ๋ฉ์๋ ํธ์ถ
- ์ปดํ์ผ ์ ์ ์ฉ
-
Spring AOP ํน์ง
- ํ๋ก์ ํจํด ๊ธฐ๋ฐ์ AOP ๊ตฌํ์ฒด
- Target ๊ฐ์ฒด์ ๋ํ ํ๋ก์๋ฅผ ๋ง๋ค์ด ์ ๊ณต
- Target์ ๊ฐ์ธ๋ ํ๋ก์๋ ๋ฐํ์ ์ ์์ฑ
- ์ ๊ทผ ์ ์ด ๋ฐ ๋ถ๊ฐ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํด ํ๋ก์ ๊ฐ์ฒด ์ฌ์ฉ
- ํ๋ก์๊ฐ Target ๊ฐ์ฒด์ ํธ์ถ์ ๊ฐ๋ก์ฑ Advice ์ํ ์ /ํ ํต์ฌ ๋ก์ง ํธ์ถ
- ์คํ๋ง Bean์๋ง AOP ์ ์ฉ ๊ฐ๋ฅ
- ๋ฉ์๋ ์กฐ์ธ ํฌ์ธํธ๋ง ์ง์ํ์ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ ๋ฐํ์ ์์ ์๋ง Advice ์ ์ฉ ๊ฐ๋ฅ
- ๋ชจ๋ AOP๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ ์์ผ๋ฉฐ ์คํ๋ง IoC์ ์ฐ๋ํ์ฌ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ข ๋ฌธ์ (์ค๋ณต ์ฝ๋, ํ๋ก์ ํด๋์ค ์์ฑ์ ๋ฒ๊ฑฐ๋ก์, ๊ฐ์ฒด ๊ฐ ๊ด๊ณ ๋ณต์ก๋ ์ฆ๊ฐ)์ ๋ํ ํด๊ฒฐ์ฑ ์ง์ ๋ชฉ์
- ํ๋ก์ ํจํด ๊ธฐ๋ฐ์ AOP ๊ตฌํ์ฒด
๋ฒ์ญํ๋ฉด 'ํ๋ฒํ ๊ตฌ์ ์๋ฐ ๊ฐ์ฒด'. ์ฆ ํ๋ ์์ํฌ ์ธํฐํ์ด์ค๋ ํด๋์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ํ์ฅํ์ง ์๋ ๋จ์ํ ํด๋์ค.
- EJB์ ์ํฐํ๋ผ์ด์ฆ ์๋น์ค
- EJB(Enterprise JavaBean)
- ๊ธฐ์ ์ ๋ฌด์ฒ๋ฆฌ์ IT์์คํ ์ ๋ํ ์์กด๋๊ฐ ๋์์ง๋ฉด์ ์์คํ ์ด ๋ค๋ค์ผ ํ๋ ๋น์ฆ๋์ค ๋ก์ง ์์ฒด๊ฐ ์ ์ฐจ ๋ณต์กํด์ง๊ณ , ๋ง์ ์ฌ์ฉ์์ ์ฒ๋ฆฌ์๊ตฌ๋ฅผ ๋น ๋ฅด๊ฒ ์์ ์ ์ด๋ฉด์ ํ์ฅ ๊ฐ๋ฅํ ํํ๋ก ์ ์งํ๊ธฐ์ํด ํ์ํ ๋ก์ฐ๋ ๋ฒจ์ ๊ธฐ์ ์ ์ธ(ํธ๋์ ์ ์ฒ๋ฆฌ, ์ํ๊ด๋ฆฌ, ๋ฉํฐ์ฐ๋ ๋ฉ, ๋ฆฌ์์คํ๋ง, ๋ณด์๋ฑ) ์ฒ๋ฆฌ๊ฐ ์๊ตฌ๋๋ค.
- EJB์ ๋น์ ์ 'EJB๋ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค. ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์๋ ๋ก์ฐ๋ ๋ฒจ์ ๊ธฐ์ ๋ค์ ๊ด์ฌ์ ๊ฐ์ง ํ์๋ ์๋ค.' ์์ง๋ง, ๊ฒฐ๋ก ์ ์ผ๋ก ๋ถํ์ํ ๋งํผ ๊ณผ๋ํ ์์ง๋์ด๋ง์ผ๋ก ์คํจํ ๋ํ์ ์ธ ์ผ์ด์ค๊ฐ ๋์๋ค.
- ๊ฐ์ฅ ์ต์ ์ ๋ฌธ์ ์ ์ EJB ์คํ์ ๋ฐ๋ฅด๋ ๋น์ฆ๋์ค ์ค๋ธ์ ํธ๋ค์ ๊ฐ์ฒด์งํฅ์ ์ธ ํน์ง๊ณผ ์ฅ์ ์ ํฌ๊ธฐํด์ผํ๋ค๋ ๊ฒ์ด๋ค. EJB ๋น์ ์์๊ณผ ๋คํ์ฑ๋ฑ์ ํํ์ ์ ๋๋ก ๋๋ฆด ์ ์์๋ค.
- ๋งํด ํ์ธ๋ฌ๋ EJB์ ๊ฐ์ ์๋ชป ์ค๊ณ๋ ๊ณผ๋ํ ๊ธฐ์ ์ ํผํ๊ณ , ๊ฐ์ฒด์งํฅ ์๋ฆฌ์ ๋ฐ๋ผ ๋ง๋ค์ด์ง ์๋ฐ ์ธ์ด์ ๊ธฐ๋ณธ์ ์ถฉ์คํ๊ฒ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ์ผ๋ช POJO ๋ฐฉ์์ผ๋ก ๋์์์ผ ํ๋ค๊ณ ์ง์ ํ๋ค.
- ํน์ง
- Java์์ ์ ๊ณตํ๋ API ์ธ์ ์ข ์๋์ง ์์
- ํน์ ๊ท์ฝ, ํ๊ฒฝ์ ์ข ์๋์ง ์์
- ํ๊ฒฝ์ ์ข
์๋์ง ์๋ ๊ฒ์ ์ฅ์
- ์ฝ๋์ ๊ฐ๊ฒฐํจ (๋น์ฆ๋์ค ๋ก์ง๊ณผ ํน์ ํ๊ฒฝ/low ๋ ๋ฒจ ์ข ์์ ์ธ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ฏ๋ก ๋จ์)
- ๋น์ฆ๋์ค ๋ก์ง๊ณผ ํน์ ํ๊ฒฝ์ด ๋ถ๋ฆฌ๋๋ฏ๋ก ๋จ์ํจ
- ์๋ํ ํ ์คํธ์ ์ ๋ฆฌ (ํ๊ฒฝ ์ข ์์ ์ธ ์ฝ๋๋ ์๋ํ ํ ์คํธ๊ฐ ์ด๋ ต์ง๋ง, POJO๋ ํ ์คํธ๊ฐ ๋งค์ฐ ์ ์ฐ)
- ๊ฐ์ฒด์งํฅ ์ค๊ณ์ ์์ ๋ก์ด ์ฌ์ฉ
- DAO(Data Access Object)
- DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์กฐ์ํ๋ ๊ธฐ๋ฅ์ ์ ๋ดํ๋๋ก ๋ง๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
- DB์ ์ ๊ทผ์ ํ๊ธฐ์ํ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๊ธฐ ์ํด์ ์ฌ์ฉ ํ๋ค.
- DTO(Data Transfer Object)
- ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์๋ฐ๋น์ฆ๋ฅผ ๋งํ๋ค.
- ์ฌ๊ธฐ์ ๋งํ๋ ๊ณ์ธต์ Controller, View, Business Layer, Persistent Layer ์ด๋ค.
- ์ผ๋ฐ์ ์ธ DTO๋ ๋ก์ง์ ๊ฐ๊ณ ์์ง ์๋ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด์ด๋ฉฐ, ์์ฑ๊ณผ ๊ทธ ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํ getter, setter ๋ฉ์๋๋ง ๊ฐ์ง ํด๋์ค์ด๋ค.
- VO(Value Object) ๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
- DTO์ ๋์ผํ ๊ฐ๋ ์ด์ง๋ง read only ์์ฑ์ ๊ฐ์ง๋ค.
- ๊ณ์ธต๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ์ํ ์๋ฐ๋น์ฆ๋ฅผ ๋งํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ(๊ณตํต ๋ถ๋ถ)์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํ ์ ์๋๋ก Spring์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- ์๋ฒ ์คํ ์ Servlet์ด ์ฌ๋ผ์ค๋ ๋์ init ํ doFilter ์คํ
- Dispatcher Servlet์ ์ง๋์ณ Interceptor์ preHandler ์คํ
- ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฑฐ์ณ ๋ด๋ถ ๋ก์ง ์ํ ํ, Interceptor์ postHandler ์คํ
- doFilter ์คํ
- Servlet ์ข ๋ฃ ์ destroy
- Dispatcher Servlet ์ด์ ์ ์ํ๋๊ณ , ์๋ต ์ฒ๋ฆฌ์ ๋ํด์๋ ๋ณ๊ฒฝ ๋ฐ ์กฐ์ ์ํ ๊ฐ๋ฅ
- WAS ๋ด์ ApplicationContext์์ ๋ฑ๋ก๋ ํํฐ๊ฐ ์คํ
- WAS ๊ตฌ๋ ์ FilterMap์ด๋ผ๋ ๋ฐฐ์ด์ ๋ฑ๋ก๋๊ณ , ์คํ ์ Filter chain์ ๊ตฌ์ฑํ์ฌ ์์ฐจ์ ์ผ๋ก ์คํ
- Spring Context ์ธ๋ถ์ ์กด์ฌํ์ฌ Spring๊ณผ ๋ฌด๊ดํ ์์์ ๋ํด ๋์
- ์ผ๋ฐ์ ์ผ๋ก web.xml์ ์ค์
- ์์ธ ๋ฐ์ ์ Web Application์์ ์์ธ ์ฒ๋ฆฌ
- ex. ์ธ์ฝ๋ฉ ๋ณํ, XSS ๋ฐฉ์ด ๋ฑ
- ์คํ ๋ฉ์๋
- init() : ํํฐ ์ธ์คํด์ค ์ด๊ธฐํ
- doFilter() : ์ค์ ์ฒ๋ฆฌ ๋ก์ง
- destroy() : ํํฐ ์ธ์คํด์ค ์ข ๋ฃ
- Dispatcher Servlet ์ดํ Controller ํธ์ถ ์ , ํ์ ๋ผ์ด๋ค์ด ๊ธฐ๋ฅ ์ํ
- Spring Context ๋ด๋ถ์์ Controller์ ์์ฒญ๊ณผ ์๋ต์ ๊ด์ฌํ๋ฉฐ ๋ชจ๋ Bean์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ผ๋ฐ์ ์ผ๋ก servlet-context.xml์ ์ค์
- ์์ธ ๋ฐ์ ์ @ControllerAdvice์์ @ExceptionHandler๋ฅผ ์ฌ์ฉํด ์์ธ ์ฒ๋ฆฌ
- ex. ๋ก๊ทธ์ธ ์ฒดํฌ, ๊ถํ ์ฒดํฌ, ๋ก๊ทธ ํ์ธ ๋ฑ
- ์คํ ๋ฉ์๋
- preHandler() : Controller ์คํ ์
- postHandler() : Controller ์คํ ํ
- afterCompletion() : view Rendering ํ
- Filter๋ WAS๋จ์ ์ค์ ๋์ด Spring๊ณผ ๋ฌด๊ดํ ์์์ ๋ํด ๋์ํ๊ณ , Interceptor๋ Spring Context ๋ด๋ถ์ ์ค์ ๋์ด ์ปจํธ๋กค๋ฌ ์ ๊ทผ ์ , ํ์ ๊ฐ๋ก์ฑ์ ๊ธฐ๋ฅ ๋์
- Filter๋ doFilter() ๋ฉ์๋๋ง ์์ง๋ง, Interceptor๋ pre์ post๋ก ๋ช ํํ๊ฒ ๋ถ๋ฆฌ
- Interceptor์ ๊ฒฝ์ฐ AOP ํ๋ด ๊ฐ๋ฅ
- handlerMethod(@RequestMapping์ ์ฌ์ฉํด ๋งคํ ๋ @Controller์ ๋ฉ์๋)๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๊ณตํ์ฌ ๋ฉ์๋ ์๊ทธ๋์ฒ ๋ฑ ์ถ๊ฐ ์ ๋ณด๋ฅผ ํ์ ํด ๋ก์ง ์คํ ์ฌ๋ถ ํ๋จ ๊ฐ๋ฅ