-
SPI vs. APIComputer/Programming 2009. 5. 21. 20:35
Service Provider Interface (SPI) is a software mechanism to support replaceable components.It is the implementer-side equivalent of an API; a set of hooks that can or must be overridden. In the Java Runtime Environment, SPIs are used in JDBC, JCE, JNDI, JAXP, JBI, Java Sound and Java Image I/O.
SPI라는 말을 쓰기는 하는데 무엇인지 정확히 찾아보았다. Wikipedia에 보면 위와 같이 차이를 알 수가 있다. 예를 들어 JDBC API는 이름은 API이지만 실제적으로는 SPI의 기능을 하고 있다. JDBC API를 application 상에서 사용하면 Oracle이나 SQLite와 같은 써드 파티에 의해 제공된 JDBC Driver를 통해서 SQL DBMS에 접근하게 된다. Sun에서는 인터페이스를 통해서 이런 이런 기능을 해 달라고만 한 것이고 실제로는 서비스 제공자에서 드라이버를 구현하여 제공하게 되는 것이다. JNDI나 JAXP에서도 마찬가지이다.
application 프로그래머 입장에서는 API나 SPI나 별 차이 없이 가져다 쓰면 되지만 service provider 입장에서는 SPI를 만족시키는 프로그램 (~ 플러그인)을 개발해야 하는 의무가 있는 것이다.