๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/Spring

[Spring] PSA (Portable Service Abstraction)

by dar0m! 2021. 5. 2.

์Šคํ”„๋ง 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 ๋“ฑ ์ค‘๋Ÿ‰ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ์— ์ข…์†๋œ '๋ฌด๊ฑฐ์šด' ๊ฐ์ฒด์— ๋ฐ˜๋ฐœํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ ์šฉ์–ด
    • ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์›๋ฆฌ์— ์ถฉ์‹คํ•˜๋ฉด์„œ, ํ™˜๊ฒฝ๊ณผ ๊ธฐ์ˆ ์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์žฌํ™œ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ค๊ณ„๋œ ์˜ค๋ธŒ์ ํŠธ

 

์ฐธ๊ณ 

 

๋Œ“๊ธ€