IoC
, AOP
, PSA
๋ฅผ ๋๊ณ ํ๋ ๋ง์ธ๋ฐ, ์์ IoC, AOP์ ๋ํด ๊ฐ๋
์ ์์๋ณด์๊ณ ๋ง์ง๋ง์ผ๋ก PSA์ ๋ํด ๊ฐ๋
์ ์ตํ๋ณด๋๋ก ํ์.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)ํด์ ์ฌ์ฉํ ์ ์๋ค
๐ ๋ฐฐ์์ ๋ฐ๋ก ์ฐ๋ ์คํ๋ง ํ๋ ์์ํฌ
๐จ๐ปโ๐ป ๋ฉ๋ถ์ด๋์ ๋ธ๋ก๊ทธ: PSA๋?