logologo
시작
가이드
개발
플러그인
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
시작
가이드
개발
플러그인
API
logologo

빠른 시작

플러그인 개발 개요
첫 플러그인 작성
프로젝트 디렉토리 구조

서버사이드 개발

개요
Plugin 플러그인
Collections 데이터 테이블
Database 데이터베이스 작업
DataSourceManager 데이터 소스 관리
ResourceManager 리소스 관리
ACL 권한 제어
Middleware 미들웨어
Cache 캐시
Event 이벤트
Context 요청 컨텍스트
Migration 업그레이드 스크립트
Logger 로그
I18n 국제화
Command 커맨드 라인
CronJobManager 예약 작업 관리
Test 테스트

클라이언트사이드 개발

개요
Plugin 플러그인
Context 컨텍스트
Router 라우터
ACL 권한 제어
DataSourceManager 데이터 소스 관리
Resource 리소스
Request 요청
Styles & Themes 스타일 & 테마
Logger 로그
I18n 국제화
Test 테스트

기타

플러그인 업그레이드 가이드
언어 목록
의존성 관리
빌드
Previous Page개요
Next PageCollections 데이터 테이블
TIP

이 문서는 AI로 번역되었습니다. 부정확한 내용이 있을 경우 영어 버전을 참조하세요

#플러그인

NocoBase에서 서버 플러그인(Server Plugin)은 서버 기능을 확장하고 사용자 정의할 수 있는 모듈화된 방법을 제공합니다. 개발자는 @nocobase/server의 Plugin 클래스를 상속하여 다양한 생명 주기 단계에서 이벤트, API, 권한 설정 및 기타 사용자 정의 로직을 등록할 수 있습니다.

#플러그인 클래스

기본적인 플러그인 클래스 구조는 다음과 같습니다.

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {}

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}

  async handleSyncMessage(message: Record<string, any>) {}

  static async staticImport() {}
}

export default PluginHelloServer;

#생명 주기

플러그인의 생명 주기 메서드는 다음 순서로 실행되며, 각 메서드에는 특정 실행 시점과 용도가 있습니다.

생명 주기 메서드실행 시점설명
staticImport()플러그인 로드 전클래스의 정적 메서드로, 애플리케이션 또는 플러그인 상태와 무관한 초기화 단계에서 실행됩니다. 플러그인 인스턴스에 의존하지 않는 초기화 작업을 수행하는 데 사용됩니다.
afterAdd()플러그인이 플러그인 관리자에 추가된 직후 실행이때 플러그인 인스턴스는 생성되었지만, 모든 플러그인이 초기화를 완료한 것은 아닙니다. 일부 기본적인 초기화 작업을 수행할 수 있습니다.
beforeLoad()모든 플러그인의 load() 메서드 실행 전이 시점에서 모든 활성화된 플러그인 인스턴스에 접근할 수 있습니다. 데이터베이스 모델 등록, 데이터베이스 이벤트 수신, 미들웨어 등록 등 준비 작업에 적합합니다.
load()플러그인 로드 시 실행모든 플러그인의 beforeLoad() 메서드 실행이 완료된 후에야 load() 메서드가 실행되기 시작합니다. 리소스, API 인터페이스, 서비스 등 핵심 비즈니스 로직을 등록하는 데 적합합니다.
install()플러그인이 처음 활성화될 때 실행플러그인이 처음 활성화될 때 한 번만 실행됩니다. 일반적으로 데이터베이스 테이블 구조 초기화, 초기 데이터 삽입 등 설치 로직에 사용됩니다.
afterEnable()플러그인이 활성화된 후 실행플러그인이 활성화될 때마다 실행되며, 타이머 작업 시작, 예약 작업 등록, 연결 설정 등 활성화 후 동작에 사용될 수 있습니다.
afterDisable()플러그인이 비활성화된 후 실행플러그인이 비활성화될 때 실행되며, 리소스 정리, 작업 중지, 연결 종료 등 정리 작업에 사용될 수 있습니다.
remove()플러그인이 삭제될 때 실행플러그인이 완전히 삭제될 때 실행됩니다. 데이터베이스 테이블 삭제, 파일 정리 등 제거 로직을 작성하는 데 사용됩니다.
handleSyncMessage(message)다중 노드 배포 시 메시지 동기화애플리케이션이 다중 노드 모드에서 실행될 때, 다른 노드에서 동기화된 메시지를 처리하는 데 사용됩니다.

#실행 순서 설명

생명 주기 메서드의 일반적인 실행 흐름은 다음과 같습니다.

  1. 정적 초기화 단계: staticImport()
  2. 애플리케이션 시작 단계: afterAdd() → beforeLoad() → load()
  3. 플러그인 첫 활성화 단계: afterAdd() → beforeLoad() → load() → install()
  4. 플러그인 재활성화 단계: afterAdd() → beforeLoad() → load()
  5. 플러그인 비활성화 단계: 플러그인이 비활성화될 때 afterDisable()이 실행됩니다.
  6. 플러그인 삭제 단계: 플러그인이 삭제될 때 remove()가 실행됩니다.

#app 및 관련 멤버

플러그인 개발 시 this.app을 통해 애플리케이션 인스턴스가 제공하는 다양한 API에 접근할 수 있으며, 이는 플러그인 기능 확장의 핵심 인터페이스입니다. app 객체는 시스템의 다양한 기능 모듈을 포함하고 있으며, 개발자는 플러그인의 생명 주기 메서드에서 이러한 모듈을 사용하여 비즈니스 요구 사항을 구현할 수 있습니다.

#app 멤버 목록

멤버 이름타입/모듈주요 용도
loggerLogger시스템 로그를 기록하고, 다양한 수준(info, warn, error, debug)의 로그 출력을 지원하여 디버깅 및 모니터링에 용이합니다. 자세한 내용은 로그를 참조하십시오.
dbDatabaseORM 계층 작업, 모델 등록, 이벤트 수신, 트랜잭션 제어 등 데이터베이스 관련 기능을 제공합니다. 자세한 내용은 데이터베이스를 참조하십시오.
resourceManagerResourceManagerREST API 리소스 및 작업 핸들러를 등록하고 관리하는 데 사용됩니다. 자세한 내용은 리소스 관리를 참조하십시오.
aclACL접근 제어 계층으로, 권한, 역할 및 리소스 접근 정책을 정의하여 세분화된 권한 제어를 구현합니다. 자세한 내용은 권한 제어를 참조하십시오.
cacheManagerCacheManager시스템 수준 캐시를 관리하며, Redis, 메모리 캐시 등 다양한 캐시 백엔드를 지원하여 애플리케이션 성능을 향상시킵니다. 자세한 내용은 캐시를 참조하십시오.
cronJobManagerCronJobManager타이머 작업을 등록, 시작 및 관리하는 데 사용되며, Cron 표현식 구성을 지원합니다. 자세한 내용은 타이머 작업을 참조하십시오.
i18nI18n국제화 지원을 통해 다국어 번역 및 현지화 기능을 제공하여 플러그인이 여러 언어를 지원하는 데 용이합니다. 자세한 내용은 국제화를 참조하십시오.
cliCLI명령줄 인터페이스를 관리하고, 사용자 정의 명령을 등록 및 실행하여 NocoBase CLI 기능을 확장합니다. 자세한 내용은 명령줄을 참조하십시오.
dataSourceManagerDataSourceManager여러 데이터 소스 인스턴스 및 해당 연결을 관리하며, 다중 데이터 소스 시나리오를 지원합니다. 자세한 내용은 데이터 소스 관리를 참조하십시오.
pmPluginManager플러그인 관리자로, 플러그인을 동적으로 로드, 활성화, 비활성화, 삭제하고 플러그인 간의 의존 관계를 관리하는 데 사용됩니다.

참고: 각 모듈의 자세한 사용 방법은 해당 문서 장을 참조하십시오.