์คํ๋ง 3๋ ํน์ง(IoC/DI, AOP, PSA) ์ค PSA์ ์์๋ณธ๋ค.
๊ฐ๋
PSA๋ Portable Service Abstraction์ผ๋ก ์ผ๊ด์ฑ ์๋ ์๋น์ค ์ถ์ํ์ด๋ค.
- ์ด๋ํฐ ํจํด์ ์ ์ฉํด ๊ฐ์ ์ผ์ ํ๋ ๋ค์์ ๊ธฐ์ ์ ๊ณตํต์ ์ธํฐํ์ด์ค๋ก ์ ์ดํ ์ ์๊ฒ ํ ๊ฒ์ ์๋น์ค ์ถ์ํ๋ผ๊ณ ํ๋ค.
- ์ถ์ํ ๊ณ์ธต์ ์ฌ์ฉํด์ ์ด๋ค ๊ธฐ์ ์ ๋ด๋ถ์ ์จ๊ธฐ๊ณ ๊ฐ๋ฐ์์๊ฒ ํธ์์ฑ์ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ ์๋น์ค ์ถ์ํ(Service Abstraction)์ด๋ผ ํ๋ค.
- ์๋น์ค ์ถ์ํ(Service Abstraction)๋ก ์ ๊ณต๋๋ ๊ธฐ์ ์ ๋ค๋ฅธ ๊ธฐ์ ์คํ์ผ๋ก ๊ฐํธํ๊ฒ ๋ฐ๊ฟ ์ ์๋ ํ์ฅ์ฑ์ ๊ฐ๊ณ ์๋ ๊ฒ์ด Portable Service Abstraction์ด๋ค.
Spring์ Spring Web MVC, Spring Transaction, Spring Cache ๋ฑ์ ๋ค์ํ PSA๋ฅผ ์ ๊ณตํ๋ค.
Spring Web MVC
- ์ผ๋ฐ ํด๋์ค์ @Controller ์ ๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ์์ฒญ์ ๋งคํํ ์ ์๋ ์ปจํธ๋กค๋ฌ ์ญํ ์ ์ํํ๋ ํด๋์ค๊ฐ ๋๋ค. ๊ทธ ํด๋์ค์์๋ @GetMapping๊ณผ @PostMapping ์ ๋
ธํ
์ด์
์ ์ฌ์ฉํด์ ์์ฒญ์ ๋งคํํ ์ ์๋ค.
- ์๋ธ๋ฆฟ์ Low level ๋ก ๊ฐ๋ฐํ์ง ์๊ณ ๋, Spring Web MVC๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ ๊ฒ ์๋ธ๋ฆฟ์ ๊ฐํธํ๊ฒ ๊ฐ๋ฐํ ์ ์๋ค. ๋ท๋จ์ spring์ด ์ ๊ณตํด์ฃผ๋ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ด ์จ๊ฒจ์ ธ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฆ HttpServlet์ ์์๋ฐ๊ณ doGet(), doPost()๋ฅผ ๊ตฌํํ๋ ๋ฑ์ ์์ ์ ์ง์ ํ์ง ์์๋ ๋๋ค.
์๋น์ค ์ถ์ํ์ ๋ชฉ์ ์ค ํ๋๊ฐ ์ด๋ฌํ ํธ์์ฑ์ ์ ๊ณตํ๋ ๊ฒ์ด๋ค.
- ๋ํ, Spring Web MVC๋ ์ฝ๋๋ฅผ ๊ฑฐ์ ๊ทธ๋๋ก ๋ ์ํ์์ ํฐ์บฃ์ด ์๋ ์์ ํ ๋ค๋ฅธ ๊ธฐ์ ์คํ์ผ๋ก ์คํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- ์๋ฅผ ๋ค์ด ํ๋ก์ ํธ๊ฐ spring-boot-starter-web ์์กด์ฑ ๋์ spring-boot-starter-webflux ์์กด์ฑ์ ๋ฐ๋๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ๋ง ํ๋ฉด ํฐ์บฃ์ด ์๋ netty ๊ธฐ๋ฐ์ผ๋ก ์คํํ๊ฒ ํ ์๋ ์๋ค.
์ด๋ ๊ฒ Spring Web MVC๋ @Controller, @RequestMapping๊ณผ ๊ฐ์ ์ ๋ ธํ ์ด์ ๊ณผ ๋ท๋จ์ ์ฌ๋ฌ๊ฐ์ง ๋ณต์กํ ์ธํฐํ์ด์ค๋ค ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ ๋ค์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์๊ฐ ๊ธฐ์กด์ ์ฝ๋๋ฅผ ๊ฑฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์น ๊ธฐ์ ์คํ์ ๊ฐํธํ๊ฒ ๋ฐ๊ฟ ์ ์๋๋ก ํ๋ค.
Spring Transaction
Low level๋ก ํธ๋์ญ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ ค๋ฉด setAutoCommit()๊ณผ commit(), rollback()์ ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ Spring์ด ์ ๊ณตํ๋ @Transactional ์ ๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๋จ์ํ ๋ฉ์๋์ ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ์ค์ผ๋ก์จ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
์ด๋ํ PSA๋ก์จ ๋ค์ํ ๊ธฐ์ ์คํ์ผ๋ก ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊ฟ ์ ์๋ค.
์๋ฅผ ๋ค์ด JDBC๋ฅผ ์ฌ์ฉํ๋ DatasourceTransactionManager, JPA๋ฅผ ์ฌ์ฉํ๋ JpaTransactionManager, Hibernate๋ฅผ ์ฌ์ฉํ๋ HibernateTransactionManager๋ฅผ ์ ์ฐํ๊ฒ ๋ฐ๊ฟ์ ์ฌ์ฉํ ์ ์๋ค.
์ฆ ๊ธฐ์กด ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์ ์ฑ๋ก ํธ๋์ญ์ ์ ์ค์ ๋ก ์ฒ๋ฆฌํ๋ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉ ๊ธฐ์ ์ ๋ฐ๋ผ ๋ฐ๊ฟ ์ ์๋ค.
Spring Cache
Cache๋ ๋ง์ฐฌ๊ฐ์ง๋ก JCacheManager, ConcurrentMapCacheManager, EhCacheCacheManager์ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ง ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฌ์ฉ์๋ @Cacheable ์ ๋ ธํ ์ด์ ์ ๋ถ์ฌ์ค์ผ๋ก์จ ๊ตฌํ์ฒด๋ฅผ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์์๋ ํ์์ ๋ฐ๋ผ ๋ฐ๊ฟ ์ธ ์ ์๋ค.
Spring ์ ์ด๋ ๋ฏ ํน์ ๊ธฐ์ ์ ์ง์ ์ ์ํฅ์ ๋ฐ์ง ์๊ฒ๋ ๊ฐ์ฒด๋ฅผ POJO ๊ธฐ๋ฐ์ผ๋ก ํ๋ฒ์ฉ ๋ ์ถ์ํํ Layer ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ ์ด๋ฅผํตํด ์ผ๊ด์ฑ์๋ ์๋น์ค ์ถ์ํ๋ฅผ ๋ง๋ค์ด๋ธ๋ค. ๋๋ถ์ ์ฝ๋๋ ๋ ๊ฒฌ๊ณ ํด์ง๊ณ ๊ธฐ์ ์ด ๋ฐ๋์ด๋ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๊ฒ ๋๋ค.
- POJO(Plain Old Java Object) : ์ค๋๋ ๋ฐฉ์์ ๊ฐ๋จํ ์๋ฐ ์ค๋ธ์ ํธ
- ํน์ ๊ธฐ์ ์ ์ข ์๋์ด ๋์ํ๋ ๊ฒ์ด ์๋ ์์ํ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
- Java EE ๋ฑ ์ค๋ ํ๋ ์์ํฌ๋ค์ ์ฌ์ฉ๋๋ ํ๋ ์ ์ํฌ์ ์ข ์๋ '๋ฌด๊ฑฐ์ด' ๊ฐ์ฒด์ ๋ฐ๋ฐํด์ ์ฌ์ฉํ๊ฒ๋ ์ฉ์ด
- ๊ฐ์ฒด์งํฅ์ ์ธ ์๋ฆฌ์ ์ถฉ์คํ๋ฉด์, ํ๊ฒฝ๊ณผ ๊ธฐ์ ์ ์ข ์๋์ง ์๊ณ ํ์์ ๋ฐ๋ผ ์ฌํ์ฉ๋ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ค๊ณ๋ ์ค๋ธ์ ํธ
์ฐธ๊ณ
- guy-who-writes-sourcecode.tistory.com/40
- atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-PSA
- jins-dev.tistory.com/entry/Spring-PSAPortable-Service-Abstraction%EC%9D%98-%EA%B0%9C%EB%85%90
- siyoon210.tistory.com/120
'๐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ์ฆ์ ๋ก๋ฉ, ์ง์ฐ ๋ก๋ฉ | FetchType.EAGER, FetchType.LAZY (0) | 2021.08.31 |
---|---|
[Spring] DI(Dependency Injection) (0) | 2021.05.02 |
[Spring] AOP (0) | 2021.04.18 |
[Spring] Pageable ๋ค์ค Sorting | PageableDefault | Pagination (1) | 2020.01.09 |
๋๊ธ