1122 - 1128
# 1122 - 1128
# 1122 - toString์ ํญ์ ์ฌ์ ์ํ๋ผ
# toString()
Object์ ๊ธฐ๋ณธ toString๋ฉ์๋๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ํด๋์ค์ ์ ํฉํ ๋ฌธ์์ด์ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. ์ด ๋ฉ์๋๋ ํด๋์ค_์ด๋ฆ@16์ง์๋ก_ํํํ_ํด์์ฝ๋
๋ฅผ ๋ฐํํ๋ค.
# toString()์ ์ฌ์ ์ ํด์ผ ํ๋ ์ด์
equals์ hashCode ๊ท์ฝ ๋งํผ ๋๋จํ ์ค์ํ์ง ์์ง๋ง, toString์ ์ ๊ตฌํํ ํด๋์ค๋ ์ฌ์ฉํ๊ธฐ์ ํจ์ฌ ์ฆ๊ฒ๊ณ , ๊ทธ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์์คํ ์ ๋๋ฒ๊น ํ๊ธฐ ์ฝ๋ค. toString ๋ฉ์๋๋ ๊ฐ์ฒด๋ฅผ println, printf, ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์(+), assert ๊ตฌ๋ฌธ์ ๋๊ธธ ๋, ํน์ ๋๋ฒ๊ฑฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋ ์๋์ผ๋ก ๋ถ๋ฆฐ๋ค. ์ฌ๋ฌ๋ถ์ด ์ง์ ํธ์ถํ์ง ์๋๋ผ๋ ๋ค๋ฅธ ์ด๋๊ฐ์์ ์ฐ์ธ๋ค. ์๋ฅผ๋ค์ด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ปดํฌ๋ํธ๊ฐ ์ค๋ฅ ํ์ด์ง๋ฅผ ๋ก๋ฉํ ๋ ์๋์ผ๋ก ํธ์ถ ๋ ์ ์๋ค. ์ด๋ toString์ ์ ๋๋ก ์ฌ์ ์ํ์ง ์๋๋ค๋ฉด ์ธ๋ชจ์๋ ๋ฉ์์ง๋ง ๋ก๊ทธ์ ๋จ๋๋ค.
# toString ์ฌ์ ์์ ์ฃผ์ ์ฌํญ
- ์ค์ ์์ toString์ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฃผ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ฐํํ๋๊ฒ ์ข๋ค.
- ํ์ง๋ง ๊ฐ์ฒด๊ฐ ๊ฑฐ๋ํ๊ฑฐ๋ ๊ฐ์ฒด์ ์ํ์ ๋ฌธ์์ด๋ก ํํํ๊ธฐ ์ด๋ ต๋ค๋ฉด, ์์ฝ ์ ๋ณด๋ฅผ ๋ด์์ผํ๋ค.
- toString์ ๊ตฌํํ ๋๋ฉด ๋ฐํ๊ฐ์ ํฌ๋งท์ ๋ฌธ์ํํ ์ง ์ ํด์ผ ํ๋ค.
- ํฌ๋งท์ ๋ช ์ํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ ํ์ค์ ์ด๊ณ , ๋ช ํํ๊ณ , ์ฌ๋์ด ์ฝ์ ์ ์๊ฒ ๋๋ค.
- ๋ค๋ง, ํฌ๋งท์ ํ๋ฒ ๋ช ์ํ๋ฉด ์ฝ๋งค์ด๊ฒ ๋๋ค.
- ํฌ๋งท์ ๋ช ์ํ๋ ์๋๋ ์๋๋ ๋ช ํํ ๋ฐํ์ผ ํ๋ค.
/** * ์ด ์ฝ๋ฌผ์ ๊ดํ ๋๋ต์ ์ธ ์ค๋ช
์ ๋ฐํํ๋ค. * ๋ค์์ ์ด ์ค๋ช
์ ์ผ๋ฐ์ ์ธ ํํ์ด๋, * ์์ธ ํ์์ ์ ํด์ง์ง ์์์ผ๋ฉฐ ํฅํ ๋ณ๊ฒฝ๋ ์ ์๋ค. * * "[์ฝ๋ฌผ #9: ์ ํ=์ฌ๋, ๋์=ํ
๋ ๋น์ , ๊ฒ๋ชจ์ต=๋จน๋ฌผ]" */ @Override public String toString() { ... }
- ์ ์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ toString์ ์ ๊ณตํ ์ด์ ๊ฐ ์๊ณ , ๋๋ถ๋ถ์ ๊ฒฐ๊ฑฐ ํ์
๋ ์๋ฐ๊ฐ ์ด๋ฏธ ์๋ฒฝํ toString์ ์ ๊ณตํ๋ ๋ฐ๋ก ์ฌ์ ์ํ์ง ์์๋ ๋๋ค.
- ํ์ง๋ง, ํ์ ํด๋์ค๋ค์ด ๊ณต์ ํด์ผ ํ ๋ฌธ์์ด ํํ์ด ์๋ ์ถ์ ํด๋์ค๋ผ๋ฉด toString์ ์ฌ์ ์ ํด์ค์ผ ํ๋ฉฐ, ๋๋ค์ ์ปฌ๋ ์ ๊ตฌํ์ฒด๋ ์ถ์ ์ปฌ๋ ์ ํด๋์ค๋ค์ toStirng๋ฉ์๋๋ฅผ ์์ํด์ ์ฌ์ฉํ๋ค.
# 1123 - CrudRepository vs JpaRepository
์ ์์๊ด๊ณ๋ฅผ ์ดํด๋ณด๋ฉด, ์ต์์ ๋ถ๋ชจ์ธ Repository๋ฅผ CrudRepository๊ฐ ์์๋ฐ์ ํ์ฅ์ํค๊ณ , ์ด๋ฅผ PagingAndSortingRepository๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ JpaRepository๊ฐ ์์๋ฐ์ ํ์ฅ์ํจ ๊ฒ์ ๋ณผ ์ ์๋ค.
๊ฐ๊ฐ ์์ค์ฝ๋๋ฅผ IDE๋ฅผ ํตํด ์์ธํ ์ดํด๋ณผ ์ ์์ง๋ง, ๊ตฌ์กฐ์์ผ๋ก JpaRepository์ ๊ตฌํ์ฒด๋ค์ด ๋น์ฐํ ๋ ๋ง๋ค. ์ฌ์ฉํ๊ณ ์ ํ๋ ๋๋ฉ์ธ์ด ์ด๋ ์ ๋์ ์์ค๊น์ง ํ์ํ๊ฐ์ ๋ฐ๋ผ ์ฌ์ฉ.
- CrudRepository : CRUD ๊ด๋ จ ๊ธฐ๋ฅ์ ์ ๊ณต. (๊ฐ๋จํ CRUD๋ง ํ์ํ ๊ฒฝ์ฐ)
- PagingAndSortingRepository : ํ์ด์ง๊ณผ ์ํ ์ ์ถ๊ฐ๋ก ์ ๊ณต.
- JpaRepository : ์ ๊ธฐ๋ฅ์ ๋ฌผ๋ก JPA ๊ด๋ จ ํนํ๋ ๊ธฐ๋ฅ(์ง์์ฑ ์ปจํ ์คํธ ํ๋ฌ์ ๋ฐ ๋ฐฐ์น์์ ๋ ์ฝ๋ ์ญ์ )๋ค์ ์ ๊ณต.
# 1124 - Maven ๋ค์ค๋ชจ๋, ์์กด์ฑ
# Mavenํ๊ฒฝ ๋ค์ค ๋ชจ๋ ํ๋ก์ ํธ ์์ฑ
- parent ํ๋ก์ ํธ ์์ฑ
- Maven Project๋ก ์์ฑ
- packaging : pom
- 'Parent'์ pom์ ์์๋ฐ๋ ํ๋ก์ ํธ ์์ฑ
- Maven Module๋ก ์์ฑ
- Parent ๋ฅผ 1์์ ์ ์ํ ํ๋ก์ ํธ๋ก ์ค์
=> ํ์ ํ๋ก์ ํธ๋ parent์์ ์ ์ํ pom.xml(dependency, repository ๋ฑ๋ฑ..) ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค.
# ๋ค์ค ๋ชจ๋๊ฐ ํด๋์ค ์ฌ์ฉ
- ๋ณ๋ค๋ฅธ ์ค์ ํ์ ์์ด, ๋๋ค Maven ํ๋ก์ ํธ์ด๋ฉฐ ๊ฐ์ Workspace์์ ์์ ๊ฒฝ์ฐ Dependency๋ก ์ถ๊ฐ
<dependency>
<groupId>com.mypjt</groupId>
<artifactId>myProjectA</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
# 1125 - Spring Bean LifeCycle(์คํ๋ง ๋น ์๋ช ์ฃผ๊ธฐ)
# ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ํ์ด๋, ๋คํธ์ํฌ ์์ผ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ํด๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์์ ์ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ข ๋ฃํ๋ ์์ ์ ์งํํ๋ ค๋ฉด, ๊ฐ์ฒด์ ์ด๊ธฐํ์ ์ข ๋ฃ ์์ ์ด ํ์ํ๋ค.
์คํ๋ง ๋น๋ ์์ ๊ฐ์ ์๋ฆฌ๋ก ์ด๊ธฐํ ์์
๊ณผ ์ข
๋ฃ ์์
์ด ๋๋ ์ ์งํ๋๋ค.
๊ฐ๋จํ๊ฒ ๋งํ๋ฉด ๊ฐ์ฒด ์์ฑ -> ์์กด๊ด๊ณ ์ฃผ์
์ด๋ผ๋ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ์ง๋ค.
์ฆ, ์คํ๋ง ๋น์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋ค ๋๋ ๋ค์์์ผ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ค๋น๊ฐ ์๋ฃ๋๋ค.
# Spring ์์กด๊ด๊ณ ์ฃผ์ ๊ณผ์
- ๊ฐ์ฅ ์ฒ์์๋ Spring IoC ์ปจํ
์ด๋๊ฐ ๋จผ์ ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ด ์ผ์ด๋๋ค.
- Component-Scan์ผ๋ก Bean์ ๋ฑ๋กํ๋ค.
- @Configuration, @Controller, @Service ๋ฑ๋ฑ Bean์ผ๋ก ๋ฑ๋กํ ์ ์๋ ์ด๋ ธํ ์ด์ ๋ค๊ณผ ์ค์ ํ์ผ๋ค์ ์ฝ์ด IoC ์ปจํ ์ด๋ ์์ Bean์ผ๋ก ๋ฑ๋กํ๋ค.
- ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์
ํ๊ธฐ ์ ์ ์ค๋น ๋จ๊ณ๊น ์กด์ฌํ๋๋ฐ, ์ด ๋จ๊ณ์์ ๊ฐ์ฒด์ ์์ฑ์ด ์ผ์ด๋๋ค.
- ์์ฑ์ ์ฃผ์ : ๊ฐ์ฒด์ ์์ฑ๊ณผ ์์กด๊ด๊ณ ์ฃผ์ ์ด ๋์์ ์ผ์ด๋๋ค.
- setter, Field ์ฃผ์ : ๊ฐ์ฒด์ ์์ฑ -> ์์กด๊ด๊ณ ์ฃผ์ ์ผ๋ก ๋ผ์ดํ ์ฌ์ดํด์ด ๋๋์ด์ง๋ค.
# ์คํ๋ง ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋ ์์ ์ ์ด๋ป๊ฒ ์ ์ ์์๊น?
Bean์ผ๋ก ๋ฑ๋ก๋ ๊ฐ์ฒด๋ค์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋ ํ์ ์ด๊ธฐํ ์์ ์ ์งํํด์ผ ํ๋ค.
- ์คํ๋ง์ Bean LifeCycle
์คํ๋ง ์ปจํ
์ด๋ ์์ฑ -> ์คํ๋ง ๋น ์์ฑ -> ์์กด๊ด๊ณ ์ฃผ์
-> ์ด๊ธฐํ ์ฝ๋ฐฑ -> ์ฌ์ฉ -> ์๋ฉธ ์ ์ฝ๋ฐฑ -> ์คํ๋ง ์ข
๋ฃ
์คํ๋ง์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋๋ฉด ์คํ๋ง ๋น์๊ฒ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ํตํด์ ์ด๊ธฐํ ์์ ์ ์๋ ค์ฃผ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ํ ์คํ๋ง์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๊ธฐ ์ง์ ์ ์๋ฉธ ์ฝ๋ฐฑ์ ์ ๊ณตํ๋ค.
- ์ด๊ธฐํ ์ฝ๋ฐฑ : ๋น์ด ์์ฑ๋๊ณ , ๋น์ ์์กด๊ด๊ณ ์ฃผ์ ์ด ์๋ฃ๋ ํ ํธ์ถ
- ์๋ฉธ์ ์ฝ๋ฐฑ : ๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ
๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ถ๋ฆฌํ์
์์ฑ์๋ ํ์ ์ ๋ณด๋ฅผ ๋ฐ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฑ ์์ ๊ฐ์ง๋ค. ๋ฐ๋ฉด์ ์ด๊ธฐํ๋ ์ด๋ ๊ฒ ์์ฑ๋ ๊ฐ๋ค์ ํ์ฉํด์ ์ธ๋ถ ์ปค๋ฅ์ ์ ์ฐ๊ฒฐํ๋ ๋ฑ ๋ฌด๊ฑฐ์ด ๋์์ ์ํํ๋ค.
๋ฐ๋ผ์ ์์ฑ์ ์์์ ๋ฌด๊ฑฐ์ด ์ด๊ธฐํ ์์ ์ ํจ๊ป ํ๋ ๊ฒ ๋ณด๋ค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ถ๋ถ๊ณผ ์ด๊ธฐํ ํ๋ ๋ถ๋ถ์ ๋ช ํํ๊ฒ ๋๋๋ ๊ฒ์ด ์ ์ง๋ณด์ ๊ด์ ์์ ์ข๋ค.
# ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ ์ง์ ๋ฐฉ๋ฒ
- ์ธํฐํ์ด์ค(InitializaingBean, DisposableBean)
- ์ค์ ์ ๋ณด์ ์ด๊ธฐํ ๋ฉ์๋, ์ข ๋ฃ ๋ฉ์๋ ์ง์
- @PostConstruct, @PreDestroy ์ด๋ ธํ ์ด์ ์ง์
# 1. ์ธํฐํ์ด์ค(InitializaingBean, DisposableBean)
- ์์์ ํตํ ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ ์ง์
- InitializaingBean -> afterPropertiesSet ๋ฉ์๋๋ก ์ด๊ธฐํ ์ง์
- DisposableBean -> destroy ๋ฉ์๋๋ก ์๋ฉธ์ ์ง์
- ์ด๊ธฐํ, ์๋ฉธ๋ฉ์๋์ ์ด๋ฆ์ ๋ณ๊ฒฝ ํ ์ ์๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฉ ํ ์ ์๋ค.
- ํ์ฌ ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
# 2. @PostConstruct, @PreDestory ์ด๋ ธํ ์ด์
- ์ต์ ์คํ๋ง์์ ๊ฐ์ฅ ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ.
- ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์์ด์ธ๋ฆผ.
- javax.annotation.PostConstruct ํจํค์ง๋ก, ์คํ๋ง ์ข ์ X, ์๋ฐ ํ์ค
# 3. ๋น ๋ฑ๋ก ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋ ์ง์
- ์ค์ ์ ๋ณด์
@Bean(initMethod="init", destroyMethod="close")
์ฒ๋ผ ์ด๊ธฐํ, ์๋ฉธ ๋ฉ์๋๋ฅผ ์ง์
# 1127 - Filter, Interceptor, AOP ์ฐจ์ด
- ๊ณตํต ํ๋ก์ธ์ค์ ๋ํ ์ฒ๋ฆฌ
- ๋ก๊ทธ์ธ ๊ด๋ จ(์ธ์ ์ฒดํฌ)์ฒ๋ฆฌ, ๊ถํ์ฒดํฌ, XSS๋ฐฉ์ด, pc์ ๋ชจ๋ฐ์ผ์น์ ๋ถ๊ธฐ์ฒ๋ฆฌ, ๋ก๊ทธ, ํ์ด์ง ์ธ์ฝ๋ฉ ๋ณํ ๋ฑ
- ์คํ๋ง์์ ์ฌ์ฉ๋๋ Filter, Interceptor, AOP ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋ชจ๋ ๋ฌด์จ ํ๋์ ํ๊ธฐ์ ์ ๋จผ์ ์คํํ๊ฑฐ๋, ์คํํ ํ์ ์ถ๊ฐ์ ์ธ ํ๋์ ํ ๋ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅHandler๋ค์ด๋ค.
- ์์
Filter -> Interceptor -> AOP -> Interceptor -> Filter
1. ์๋ฒ๋ฅผ ์คํ์์ผ ์๋ธ๋ฆฟ์ด ์ฌ๋ผ์ค๋ ๋์์ init์ด ์คํ๋๊ณ , ๊ทธ ํ doFilter๊ฐ ์คํ๋๋ค.
2. ์ปจํธ๋กค๋ฌ์ ๋ค์ด๊ฐ๊ธฐ ์ preHandler๊ฐ ์คํ๋๋ค.
3. ์ปจํธ๋กค๋ฌ์์ ๋์ postHandler, after Completion, doFilter ์์ผ๋ก ์งํ์ด ๋๋ค.
4. ์๋ธ๋ฆฟ ์ข
๋ฃ ์ destroy๊ฐ ์คํ๋๋ค.
- Filter์ Interceptor๋ Servlet ๋จ์์์ ์ด๋ฃจ์ด์ง๋ค. ๋ฐ๋ฉด AOP๋ ๋ฉ์๋ ์์ Proxyํจํด์ ํํ๋ก ์คํ๋๋ค.
- ์คํ์์๋ฅผ ๋ณด๋ฉด Filter๊ฐ ๊ฐ์ฅ ๋ฐ์ ์๊ณ ๊ทธ์์ Interceptor, ๊ทธ์์ AOP๊ฐ ์๋ ํํ์ด๋ค.
# 1. Filter(ํํฐ)
๋ง ๊ทธ๋๋ก ์์ฒญ๊ณผ ์๋ต์ ๊ฑฐ๋ฅธ๋ค ์ ์ ํ๋ ์ญํ ์ ํ๋ค.
์๋ธ๋ฆฟ ํํฐ๋ DispatcherServlet ์ด์ ์ ์คํ์ด ๋๋๋ฐ ํํฐ๊ฐ ๋์ํ๋๋ก ์ง์ ๋ ์์์ ์๋จ์์ ์์ฒญ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ฑฐ๋, ์ฌ๋ฌ๊ฐ์ง ์ฒดํฌ๋ฅผ ์ํํ ์ ์๋ค.
๋ํ ์์์ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ์๋ต๋ด์ฉ์ ๋ํด์๋ ๋ณ๊ฒฝํ๋ ์ฒ๋ฆฌ๋ฅผ ํ ์๊ฐ ์๋ค.
# ์คํ ๋ฉ์๋
- init() - ํํฐ ์ธ์คํด์ค ์ด๊ธฐํ
- doFilter() - ์ /ํ ์ฒ๋ฆฌ
- destroy() - ํํฐ ์ธ์คํด์ค ์ข ๋ฃ
# 2. Interceptor(์ธํฐ์ ํฐ)
์์ฒญ์ ๋ํ ์์
์ /ํ๋ก ๊ฐ๋ก์ฑ๋ค.
ํํฐ๋ ์คํ๋ง ์ปจํ
์คํธ ์ธ๋ถ์ ์กด์ฌํ์ฌ ์คํ๋ง๊ณผ ๋ฌด๊ดํ ์์์ ๋ํด ๋์ํ๋ค. ํ์ง๋ง ์ธํฐ์
ํฐ๋ ์คํ๋ง์ DispatcherServlet์ด ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ , ํ๋ก ๋ผ์ด๋ค๊ธฐ ๋๋ฌธ์ ์คํ๋ง ์ปจํ
์คํธ(Context, ์์ญ) ๋ด๋ถ์์ Controller(Handler)์ ๊ดํ ์์ฒญ๊ณผ ์๋ต์ ๋ํ ์ฒ๋ฆฌ๋ฅผํ๋ค.
์คํ๋ง์ ๋ชจ๋ ๋น ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๋ค.
์ธํฐ์
ํฐ๋ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ๋ก๊ทธ์ธ ์ฒดํฌ, ๊ถํ์ฒดํฌ, ํ๋ก๊ทธ๋จ ์คํ์๊ฐ ๊ณ์ฐ์์
๋ก๊ทธํ์ธ ๋ฑ์ ์
๋ฌด์ฒ๋ฆฌ
# ์คํ ๋ฉ์๋
- preHandler() - ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ์คํ๋๊ธฐ ์
- postHandler() - ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ์คํ์ง ํ viewํ์ด์ง ๋ ๋๋ง ๋๊ธฐ ์
- afterCompletion() - viewํ์ด์ง๊ฐ ๋ ๋๋ง ๋๊ณ ๋ ํ
# 3. AOP
OOP๋ฅผ ๋ณด์ํ๊ธฐ ์ํด ๋์จ ๊ฐ๋
๊ฐ์ฒด์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ํ์ ๋ ์ค๋ณต์ ์ค์ผ ์ ์๋ ๋ถ๋ถ์ ์ค์ด๊ธฐ ์ํด ์ข
๋จ๋ฉด(๊ด์ )์์ ๋ฐ๋ผ๋ณด๊ณ ์ฒ๋ฆฌํ๋ค.
์ฃผ๋ก ๋ก๊น
, ํธ๋์ญ์
, ์๋ฌ์ฒ๋ฆฌ ๋ฑ ๋น์ง๋์ค๋จ์ ๋ฉ์๋์์ ์กฐ๊ธ ๋ ์ธ๋ฐํ๊ฒ ์กฐ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
Interceptor๋ Filter์ ๋ฌ๋ฆฌ ๋ฉ์๋ ์ ํ์ ์ง์ ์ ์์ ๋กญ๊ฒ ์ค์ ์ด ๊ฐ๋ฅํ๋ค. Interceptor์ Filter๋ ์ฃผ์๋ก ๋์์ ๊ตฌ๋ถํด์ ๊ฑธ๋ฌ๋ด์ผํ๋ ๋ฐ๋ฉด, AOP๋ ์ฃผ์, ํ๋ผ๋ฏธํฐ, ์ด๋ ธํ ์ด์ ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์์ ์ง์ ํ ์ ์๋ค.
AOP์ Advice์ HandlerInterceptor์ ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ํ๋ผ๋ฏธํฐ์ ์ฐจ์ด๋ค. Advice์ ๊ฒฝ์ฐ JoinPoint๋ ProceedingJoinPoint ๋ฑ์ ํ์ฉํด์ ํธ์ถํ๋ค. ๋ฐ๋ฉด HandlerInterceptor๋ Filter์ ์ ์ฌํ๊ฐ HttpServletRequest, HttpServletResponse๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ๋ค.
# AOP์ ํฌ์ธํธ์ปท
- @Before: ๋์ ๋ฉ์๋์ ์ํ ์
- @After: ๋์ ๋ฉ์๋์ ์ํ ํ
- @Atter-returning: ๋์ ๋ฉ์๋์ ์ ์์ ์ธ ์ํ ํ
- @After-throwing: ์์ธ๋ฐ์ ํ
- @Around: ๋์ ๋ฉ์๋์ ์ํ ์ /ํ