피드로 돌아가기
Adapters vs Plugins in KickJS v5 — Choosing the Right Primitive
Dev.toDev.to
Backend

Identity와 Lifecycle 기반의 Adapter 및 Plugin 분리 설계

Adapters vs Plugins in KickJS v5 — Choosing the Right Primitive

Orinda Felix Ochieng2026년 4월 25일9intermediate

Context

KickJS v5에서 기능적 유사성을 가진 defineAdapterdefinePlugin 사이의 모호함으로 인한 설계 혼선 발생. 단순 기능 구현을 넘어 리소스 소유권과 배포 전략에 따른 명확한 구분 기준 정립이 필요한 상황.

Technical Solution

  • App-level infrastructure 관리를 위해 Single-instance identity를 보장하는 Adapter 구조 설계
  • beforeStartshutdown 훅의 대칭성을 통한 Long-lived resource의 안전한 생명주기 관리
  • 재사용성과 배포를 목적으로 versionpeer-version을 포함한 Plugin 추상화 계층 도입
  • dependsOn 기반의 Topological sort를 적용하여 Plugin 간 의존성 및 실행 순서 제어
  • 기능적 대칭성(Middleware, DI binding 등)을 유지하여 Primitive 선택 변경 시의 전환 비용 최소화

1. 리소스 소유권 확인: DB Pool 등 단일 인스턴스 보장이 필요한가? (Yes $\rightarrow$ Adapter)

2. 배포 범위 결정: 타 프로젝트나 팀에서 npm 패키지로 설치하여 사용할 가능성이 있는가? (Yes $\rightarrow$ Plugin)

3. 생명주기 필요성: Application Bootstrap 단계의 특정 시점(beforeStart/shutdown)에 정밀한 제어가 필요한가? (Yes $\rightarrow$ Adapter)

4. 구성 방식: 설정값(Config)을 통해 외부 사용자가 커스터마이징하는 형태인가? (Yes $\rightarrow$ Plugin)

원문 읽기