피드로 돌아가기
Dev.toDatabase
원문 읽기
PluginClassLoader 기반 격리 구조를 통한 OpenSearch 확장성 확보
How OpenSearch Plugins Really Work: Architecture & Extension Points
AI 요약
Context
코어 시스템의 안정성을 유지하며 사용자 정의 기능을 추가해야 하는 확장성 요구사항 존재. 플러그인 간 라이브러리 버전 충돌 및 코어 JVM 내에서의 비정상 동작으로 인한 시스템 전체 다운타임 위험이 주요 제약 사항임.
Technical Solution
- compileOnly 설정을 통한 OpenSearch 코어 라이브러리의 번들링 제외 및 호스트 JVM 라이브러리 공유 구조 설계
- PluginClassLoader를 이용한 플러그인별 독립 네임스페이스 생성으로 코어 및 타 플러그인과의 의존성 충돌 방지
- SearchPlugin 등 정의된 Extension Point 인터페이스 구현을 통한 코어 내부 로직 접근 제한 및 제어된 훅(Hook) 제공
- descriptor.properties 매니페스트 기반의 버전 검증 및 리플렉션을 이용한 엔트리 포인트 동적 인스턴스화
- Fail-fast 원칙을 적용한 부트스트랩 프로세스로 플러그인 로드 실패 시 노드 시작을 차단하는 안정성 확보
실천 포인트
1. 플러그인 추가 시 JVM 메모리 풋프린트 증가 여부를 모니터링할 것
2. 메이저 버전 업데이트 시 API 호환성 검증을 위한 재컴파일 및 회귀 테스트 수행
3. 외부 라이브러리 도입 시 코어 라이브러리와의 버전 충돌 가능성을 ClassLoader 수준에서 검토
4. 신뢰할 수 없는 플러그인 설치 시 전체 노드 크래시 위험에 대비한 네트워크 격리 방안 고려