본문 바로가기

프로그래밍(TA, AA)

[프로그래밍] SPI와 API 차이

SPI와 API의 차이점


API는 API(Application Programming Interface)의 약자로 API는 일종의 소프트웨어나 플랫폼에서 제공하는 서비스/기능에 액세스 하는 수단입니다.


SPI는 SPI(Service Provider Interface)의 약자로, SPI는 소프트웨어 또는 플랫폼의 동작을 주입, 확장 또는 변경하는 방법입니다.


API는 일반적으로 클라이언트가 서비스에 액세스하는 대상이며 다음과 같은 속성을 가집니다.


 - API는 특정 동작이나 출력을 얻기 위해 서비스에 액세스하는 프로그래밍 방식입니다.

 - API 진화의 관점에서 볼때 추가사항은 클라이언트에게 전혀 문제가 되지 않습니다.

 - 하지만 API는 한번 클라이언트에 의해 활용되었지만 적절한 의사 소통이 없으면 변경되거나 삭제될 수 없습니다. 왜냐하면 클라이언트의 기대가 완전히 저하되었기 때문입니다.


다른 부분의 SPI는 공급자를 대상으로하며 다음과 같은 속성이 있습니다.


 - SPI는 소프트웨어 또는 플랫폼의 동작을 확장/변경하는 방법입니다. (프로그래밍 가능 또는 프로그래밍 방식)

 - SPI 진화는 API 진화와 다릅니다. SPI 제거는 문제가 아닙니다.

 - SPI 인터페이스를 추가하면 문제가 발생하고 기존 구현이 손상될 수 있습니다.


SPI가 API의 특정 기능을 구현한 다음 서비스 조회 메커니즘을 통해 사용 가능한 것으로 등록함으로써 더 큰 시스템에 설치한다고 가정합니다. API는 최종 사용자 응용 프로그램 코드에서 직접 사용하지만 SPI 구성 요소를 통합할 수 있습니다. 캡슐화와 직접 사용의 차이점입니다.


참고: https://docs.oracle.com/javase/tutorial/sound/SPI-intro.html




서비스 프로바이더 프레임워크


서비스 프로바이더 프레임워크는, 복수의 서비스 프로바이더가 서비스를 구현하는 시스템으로, 시스템은 그 구현을 클라이언트로부터 이용가능하게 해, 구현으로부터 서비스 시스템을 분리합니다.



서비스 공급자 프레임워크에는 세가지 필수 구성요소가 있습니다. 서비스 인터페이스는 공급자가 구현합니다. 구현을 등록하기 위해서 시스템이 사용하는 프로바이더 등록 API 및 클라이언트가 서비스의 인스턴스를 획득하기 위해 사용하는 서비스 액세스 API를 포함합니다.  서비스 액세스 API는 일반적으로 클라이언트가 제공자를 선택할 수 있는 몇가지 기준을 지정할 수는 있지만 이를 요구하지는 않습니다. 이러한 사양이 없는 경우 API는 기본 구현의 인스턴스를 반환합니다. 서비스 액세스 API는 서비스 제공 업체 프레임워크의 기초를 형성하는 "유연한 정적 팩토리" 입니다.


서비스 공급자 프레임워크의 네번째 선택적 구성요소는 서비스 공급자 인터페이스로, 공급자가 구현하여 서비스 구현의 인스턴스를 만듭니다. 서비스 프로바이더 인터페이스가 없는 경우, 구현은 클래스명에 의해 등록되어 반영됩니다. JDBC의 경우 Connection은 서비스 인터페이스의 일부를 담당하고 DriverManager.registerDriver는 공급자 등록 API이고 DriverManager.getConnection은 서비스 액세스 API이며, Driver는 서비스 공급자 인터페이스입니다. 


서비스 제공자 프레임워크 패턴에는 여러가지 변형이 있습니다. 예를 들어, 서비스 액세스 API는 어댑터 패턴을 사용하여 공급자가 요구하는 서비스 인터페이스보다 더 풍부한 서비스 인터페이스를 반환할 수 있습니다.