한국어
C/C++
 

C++ C++로 플러그인 개발

makersweb 2019.12.08 17:42 조회 수 : 1916

플러그인은 메인 프로그램이 제어하는 프로그램의 일부가 될 수 있는 코드이다. C 또는 C++ 프로그램의 경우 일반적으로 플러그인은 기본프로그램에서 동적으로 로드(및 언로드)하는 공유 라이브러리로 구현된다.

 

플러그인 기반 소프트웨어 설계는 프로그램을 안전한 방식으로 확장하고 발전시킬 수 있다. 즉, 핵심 기능을 불안정하게 할 위험 없이 기능을 추가 할 수 있다. 또한 리스크 분리, 구현 세부 사항 숨기기, 격리 된 테스트 및 기타 여러 이점들을 얻을 수 있다.

 

플러그인 모델을 적용한 몇 가지 예로 크롬 웹 브라우저 웹스토어에 있는 수많은 확장 프로그램, 이미지 처리 응용 프로그램 (예: Adobe Photoshop) 용 확장 프로그램, 운영 체제 (예: Linux 모듈) 용 동적로드 가능한 디바이스 드라이버 등이 있다.

chrome Plugins.png

▲Chrome 웹 스토어

그러면 C++ 플러그인 시스템을 개발할 때 알아 두어야 하는 핵심 포인트 몇가지를 살펴보자.

  • 이진 호환성: C++ 표준은 ABI (Application Binary Interface)를 지정하지 않는다. 즉, 다른 컴파일러 또는 동일한 컴파일러의 다른 버전의 C++ 라이브러리는 호환되지 않을 수 있다. 그래도 고성능을 위한 시스템에 있어서는 C/C++만이 유일한 실용적인 선택이다.
  • 플러그인 라이프사이클 관리: 플러그인의 life-cycle을 관리하고 메인 시스템에 노출해야 한다.
  • 버전 관리: 개발된 플러그인의 API가 호환 가능한지를 확인 할 수 있는 방법이 필요하다.
  • 메타데이터: 버전을 비롯해 플러그인 이름등, 플러그인을 로드하기 전에 메타 정보를 취득할 수 있는 방법이 필요하다.
  • 링크 방법: 위에서도 언급했듯이 플러그인은 보통 동적 라이브러리로 만들고 런타임중에 로드, 언로드한다. 동적 라이브러리는 핫 스와핑 (시스템을 종료하지 않고 다시 로드), 안전한 확장 (핵심 시스템을 수정하지 않은 추가 기능) 및 링크 시간 단축과 같은 많은 장점을 제공한다. 그러나 일부 시스템(성능이 중요한 임베디드 시스템)이나 보안 문제로 인해 외부 코드를 로드 할 수 없는 경우가 있다. 때로는 플러그인이 기본 실행 파일에 정적으로 연결하는 것이 요구될 때도 있다.

C++ 플러그인 모델을 적용하기 위해 직접 구현 할 수도 있겠지만 이미 관련된 오픈 소스 라이브러리 또는 프레임워크를 사용 해보는 것도 시간을 아끼는 좋은 방법이 될 수 있겠다.

크로스플랫폼 응용프로그램 프레임워크인 Qt는 매우 유용한 플러그인 솔루션을 제공한다.libuv는 공유라이브러리를로드하고 라이브러리에서 심볼을 검색하기위한 크로스플랫폼용 API를 제공한다. 그 밖에도 역시 크로스 플랫폼을 지원하는 DynObj, Pluma등이 있다.

 

Linux 및 Windows에서 동작하는 C++ 예제: plugin_api.zip