
PSA란?
우선 PSA는 Portable Service Abstrction의 약자 입니다.
Spring의 핵심 철학 중 하나이고
특정 기술에 종속되지 않도록 추상화 계층을 제공한다는 정의를 가지고 있습니다.
이를 좀더 쉽게 설명하자면
어떤 기술을 어떤 개발자가 쓰던 똑같은 방식으로 쓸 수 있게 추상화 하는 것
이라고 설명할 수 있겠습니다.
예를 들어서 우리가 프로그램을 만들 때, 데이터베이스, 캐시 같은
외부 기술을 사용하게 되는데 이런 기술은 모두 제각각의 방식으로 동작하게 됩니다.
이럴 때 개발자가 모든 기술의 세부적인 사용법을 모두 알아야 한다면
개발자가 미쳐버릴 수 있습니다. 만약 개발을 하다가 "우리 DB 바꿔볼까?"라는
의견이 나온다면 프로그램을 통째로 뜯어 고쳐야 할 수도 있습니다.
Spring에서는 이러한 문제를 해결하기 위해서
PSA라는 개념을 도입하게 되었습니다.
PSA를 사용하게 되면
"DB에서 데이터 가져오기"라는 동작만 신경쓰고
그게 실제로는 MySQL에서 시행되든, Oracle에서 시행되든
상관하지 않아도 되게 됩니다.
만약 GSM에서 일본을 보내줬는데
콘센트 규격이 달라서 노트북 충전을 못한다면 정말 슬플것입니다.
이럴때 멀티 어댑터 하나만 있다면 이 문제가 해결되게 됩니다.
이때 멀티 어댑터가 PSA와 같은 역할을 한다고 볼수 있습니다.
PSA를 왜 쓸까?
대표적으로 네가지 이유가 있습니다.
첫 번째로, 특정 DB, 캐시 등 기술에 의존하지 않고 교체가 용이 할 수 있게
벤더 종속성을 줄이기 위해 사용합니다.
두 번째로, JDBC, JPA등 기술이 다르더라도 비슷한 코드 스타일로 개발 할 수 있게
일관된 프로그래밍 모델을 사용하기 위해서 사용됩니다.
세 번쨰로, 세부 구현을 몰라도 개발에 지장이 없으므로 비즈니스 로직에 집중할 수 있게 되어서
개발자가 편해집니다.
마지막으로 기술 변경시 바꾸어야 하는 코드가 줄어들게 되어서
유지보수가 보다 쉬워집니다.
PSA의 장단점
우선 장점부터 소개하자면
일관성 있는 개발 경험을 제공하게 됩니다.
벤더 / 구현체가 독립적입니다.
유지보수와 확장이 보다 편리하고 쉬워집니다.
사용하는 기술을 교체하게 될 때 비용이 절감됩니다.
다음은 단점입니다.
추상화 계층으로 인해서 약간의 오버헤드가 발생할 수 있습니다.
추상화가 모든 기능을 담지 못하기 때문에 특정 기능은
구현체 종속 코드가 필요해질 수 있습니다.
추상화가 너무 많아지면 내부 동작을 이해하기 어려워질 수 있습니다.
PSA 사용 예시
그렇다면 이러한 PSA는 어떤곳에 주로 사용될까요?
1. 데이터 접근
DB 종류나 ORM 기술이 달라도 동일한 코드 스타일이 사용 가능합니다.
2. 트랜잭션 관리
JDBC, JPA 등 구현체에 상관 없이 동일하게 트랜잭션을 처리하게 됩니다.
3. 캐시
Redis, EhCache 등 다양한 캐시 라이브러리를 지원합니다.
4. 메시징
SMTP 서버 등 구현체 간의 차이 숨기게 됩니다.
마무리
이처럼 PSA는 어떤 키보드로 어떤 운영체제에서 "A"키를 누르던 간에
"A"가 입력되는 것처럼 기술간의 차이를 추상화 해주게 됩니다.
이러한 PSA는 이식성과 유연성을 확보하고
데이터 접근이나, 트랜잭션 등에서 내부구조는 몰라도
오직 원하는 기능만을 일관된 방식으로 호출하기만 하면 됩니다.
PSA는 개발자가 비즈니스 로직에만 집중할 수 있도록 도와주는
Spring의 핵심 철학입니다.
'Spring' 카테고리의 다른 글
| [Spring] Servlet과 DispatacherServlet (2) | 2025.08.01 |
|---|---|
| [Spring] Spring Filter란? (2) | 2025.08.01 |
| [Spring] IoC란? (0) | 2025.07.17 |
| [Spring] DI란? (0) | 2025.07.16 |
| [Spring] 어노테이션과 import는 무엇일까? (1) | 2025.06.09 |