Spring Framework: Spring PSA

IToriginalยท2023๋…„ 6์›” 6์ผ
0

๋‚จ์ •๋„ค๋“ค: Web Study

๋ชฉ๋ก ๋ณด๊ธฐ
6/7
post-thumbnail
post-custom-banner
๐Ÿš€ Spring์€ Spring Triangle์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ํ•ต์‹ฌ 3๋Œ€์š”์†Œ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์ด๋Š” ๊ฐ๊ฐ IoC , AOP , PSA๋ฅผ ๋‘๊ณ  ํ•˜๋Š” ๋ง์ธ๋ฐ, ์•ž์„œ IoC, AOP์— ๋Œ€ํ•ด ๊ฐœ๋…์„ ์•Œ์•„๋ณด์•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ PSA์— ๋Œ€ํ•ด ๊ฐœ๋…์„ ์ตํ˜€๋ณด๋„๋ก ํ•˜์ž.

PSA(Portable Service Abstraction)?

PSA๋Š” Portable Service Abstraction์˜ ์•ฝ์ž๋กœ ํ™˜๊ฒฝ์˜ ๋ณ€ํ™”์™€ ๊ด€๊ณ„์—†์ด ์ผ๊ด€๋œ ๋ฐฉ์‹์˜ ๊ธฐ์ˆ ๋กœ์˜ ์ ‘๊ทผ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋ ค๋Š” ์ถ”์ƒํ™” ๊ตฌ์กฐ๋ฅผ ๋งํ•œ๋‹ค.
์ด๋Š” POJO ์›์น™์„ ์ฒ ์ €ํžˆ ๋”ฐ๋ฅธ Spring์˜ ๊ธฐ๋Šฅ์œผ๋กœ Spring์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Library๋“ค์€ POJO ์›์น™์„ ์ง€ํ‚ค๊ฒŒ๋” PSAํ˜•ํƒœ์˜ ์ถ”์ƒํ™”๊ฐ€ ๋˜์–ด์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

PSA์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— Service Abstraction์˜ ๊ฐœ๋…๋ถ€ํ„ฐ ์•Œ์•„์•ผํ•œ๋‹ค.์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

์ด ์ฝ”๋“œ๋Š” Transaction ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ผ๋ถ€์ด๋‹ค.
Service์— @Transactional์ด๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ ํ™œ์šฉํ•˜๊ธฐ๋งŒ ํ–ˆ๊ณ , ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ป๊ฒŒํ•ด์„œ ๋™์ž‘ํ•˜๊ฒŒ ๋˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ์•„๋ณด์ง€ ๋ชปํ–ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋Š” Spring Framework์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ œ๊ณตํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

์ฆ‰, ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ๊ธฐ์ˆ ์„ ๋‚ด๋ถ€์— ์ˆจ๊ธฐ๊ณ  ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํŽธ๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์„œ๋น„์Šค ์ถ”์ƒํ™”(Servie Abstraction)๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด JDBC ๊ธฐ๋ฐ˜์œผ๋กœ DataBase์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, JPA๋ฅผ ํ™œ์šฉํ•ด ORM ์ ‘๊ทผ์„ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ DB์— ์ ‘๊ทผ์„ ํ•ด๋„ Transactional์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ ์ถ”์ƒํ™”๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์Šค๋ฅผ ๋ฌถ์–ด๋‘” ๊ฒƒ์„ PSA(Portable Service Abstraction)์ด๋ผ๊ณ  ํ•œ๋‹ค.
Portable ์€ ํœด๋Œ€์šฉ์ด๋ผ๋Š” ์˜๋ฏธ๋กœ JDBC Driver ์˜ ์ข…๋ฅ˜๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ˆ˜์ •์—†์ด ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, MySQL Driver๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ์–ด๋Š์ˆœ๊ฐ„ Oracle Driver๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ”„๋กœ์ ํŠธ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์–ด๋–ป๊ฒŒ ์ด๋Ÿฌํ•œ ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ผ๊นŒ?

์ด๋Ÿฐ ๊ธฐ๋Šฅ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์ถ”์ƒํ™” ๊ณ„์ธต์ด ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ชจ๋“  JDBC Driver๋Š” ๊ณตํ†ต์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์–ด๋–ค ๊ฒƒ์ด๋“  ๋Œ€์ฒด๋˜์–ด๋„ ํ”„๋กœ์ ํŠธ์—๋Š” ์˜ํ–ฅ์ด ์—†์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

์ด ์ ์„ ํ†ตํ•ด์„œ Spring PSA๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ์ˆ˜์ •์—๋Š” ๋‹ซํ˜€์žˆ์–ด์•ผํ•˜๋Š” OCP์›์น™์— ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ •๋ฆฌ

๐Ÿš€ PSA(Portable Service Abstraction): ์–ด๋Š ํ™˜๊ฒฝ(P)์ด๋“  ๋ณต์žกํ•œ ๊ธฐ์ˆ (S)์„ ์ถ”์ƒํ™”(A)ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค


Reference

๐Ÿ“š ๋ฐฐ์›Œ์„œ ๋ฐ”๋กœ ์“ฐ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ
๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๋ฉ๋ถ„์ด๋‹˜์˜ ๋ธ”๋กœ๊ทธ: PSA๋ž€?

profile
๐Ÿ‘พISTP์˜ ๊ฐœ๋ฐœ์ž ๋„์ „๊ธฐ๐Ÿง
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€