본문 바로가기
카테고리 없음

서비스 제공자 인터페이스

by 공일공1 2025. 12. 20.
반응형

서비스 제공자 인터페이스

⚙️ 서비스 제공자 인터페이스 (SPI) 완벽 이해 ⚙️

API는 들어봤는데 SPI는 생소하신가요? 핵심을 정리해 드립니다! 🔍


1. SPI(Service Provider Interface)란? 🤔

SPI는 라이브러리나 프레임워크가 확장 가능하도록 설계된 인터페이스입니다.

  • API: 사용자가 기능을 호출할 때 사용하는 '입구'입니다.
  • SPI: 제3자(제공자)가 새로운 기능을 추가할 수 있도록 비워둔 '연결 통로'입니다.
  • 플러그인 구조나 드라이버 교체 방식에서 핵심적인 역할을 합니다. 🔌

2. API vs SPI (차이점 비교) ⚖️

구분 API SPI
사용 주체 어플리케이션 개발자 서비스 제공자 (구현체)
목적 기능 활용 기능 확장 및 구현
호출 방향 사용자 → 시스템 시스템 → 구현체

3. 대표적인 실무 예시 💡

  • JDBC (Java Database Connectivity): 자바는 인터페이스(SPI)를 제공하고, 오라클이나 MySQL 같은 업체가 실제 드라이버를 만들어 끼우는 방식입니다.
  • 로그 라이브러리 (SLF4J): 추상화된 로그 인터페이스에 Logback이나 Log4j를 갈아 끼울 수 있습니다.
  • 결제 모듈: 쇼핑몰 시스템은 '결제' 인터페이스를 만들고, 카드사별로 각기 다른 모듈을 연결합니다. 💳

4. SPI의 장점 🌟

  • 결합도 감소: 핵심 시스템의 코드를 수정하지 않고도 기능을 바꿀 수 있습니다.
  • 유연성: 새로운 기술이나 장치가 나와도 드라이버만 교체하면 됩니다.
  • 표준화: 여러 업체가 동일한 인터페이스를 따르도록 유도할 수 있습니다.

❓ 자주 묻는 질문 (Q&A)

Q1. 인터페이스가 하나인데 API이면서 동시에 SPI일 수 있나요?

A1. 네, 맞습니다! 🙆 호출하는 입장에선 API이고, 구현하는 입장에선 SPI가 됩니다. 관점의 차이일 뿐입니다.

Q2. 자바에서 SPI를 어떻게 구현하나요?

A2. 주로 `java.util.ServiceLoader`를 사용합니다. 특정 폴더(`META-INF/services`)에 구현 클래스를 등록하면 시스템이 자동으로 인식합니다. 📂

Q3. 왜 굳이 SPI를 써야 하나요?

A3. 유지보수 때문입니다. 🛠️ 만약 SPI가 없다면 새로운 기능을 추가할 때마다 메인 소스 코드를 직접 수정해야 하므로 위험하고 비효율적입니다.


시스템의 확장을 고민하신다면 SPI 개념을 꼭 도입해 보세요! 🚀
더 유연하고 단단한 설계를 하실 수 있습니다.

[면책조항] 본 내용은 소프트웨어 공학의 일반적인 개념을 설명하며, 특정 프로그래밍 언어나 프레임워크의 상세 구현과는 차이가 있을 수 있습니다.

반응형