노션으로 다시 돌아갔습니다 😅

[Spring 특징] PSA (Portable Service Abstraction)

by mignon25

PSA (Portable Service Abstraction) 란?

객체 지향 설계 5원칙인 SOLID의 OCP 및 DIP와 관련이 있다. 

소프트웨어 요소는 확장에는 열려 있되, 변경에는 닫혀 있어야 하고, (OCP)

프로그래머는 추상화에 의존해야 하며, 구체화에 의존해서는 안된다(DIP)는 원칙이다. 

왜 추상화에 의존해야 할까?

 

클라이언트가 구체적인 구현체에 의존하게 된다면, 사용하는 구현체가 바뀌어야 할 때, 그 구현체를 사용하던 모든 곳에서 같이 수정이 이루어져야 한다. 이는 객체지향적인 설계가 아니다. 

그러므로 클라이언트는 해당 구현체의 역할만 인지하고, 그 역할만 정해져 있는 추상 클래스를 의존해야 한다. 

그리고 사용할 때는 그 추상클래스를 구현한 실제 구현체를 적용해주는 것이다. 

그러면 구현체가 바뀌더라도 해당 추상 클래스를 구현한 구현체로만 바꾸어주면 클라이언트에서의 변경이 필요하지 않다. 

 

이처럼 클라이언트가 추상화 된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 일관된 서비스 추상화(PSA)의 기본 개념이다. 

 

DbClient 는 OracleJdbcConnector, MariaDBJdbcConnector, SQLiteJdbcConnector 같은 JdbcConnector 인터페이스의 구현체에 직접적으로 연결해서 Connection을 얻는 것이 아니라, JdbcConnector 인터페이스를 통해 간접적으로 연결되어(느슨한 결합) Connection 객체를 얻게 된다. 

 

이 때, 어떤 구현체를 사용하더라도 DbClient 가 Connection 을 얻는 방식은 getConnection() 메서드를 사용하는 것으로 동일하다. 

즉, 일관된 방식으로 해당 서비스의 기능을 사용할 수 있다. 

 

PSA 가 필요한 주된 이유

어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써, 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구사항을 반영하기 위함.
=> 애플리케이션의 요구 사항 변경에 유연하게 대처할 수 있다. 

 

블로그의 정보

Mignon'S Dev Log

mignon25

활동하기