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 PageCollections 데이터 테이블
Next PageDataSourceManager 데이터 소스 관리
TIP

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

#Database

Database는 데이터베이스 타입의 데이터 소스(DataSource)에서 아주 중요한 부분입니다. 각 데이터베이스 타입의 데이터 소스는 Database 인스턴스를 하나씩 가지고 있으며, dataSource.db를 통해 접근할 수 있습니다. 메인 데이터 소스의 Database 인스턴스는 app.db라는 편리한 별칭으로도 접근 가능합니다. db의 주요 메서드들을 잘 알아두는 것은 서버 사이드 플러그인을 개발하는 데 필수적입니다.

#Database 구성 요소

일반적인 Database는 다음과 같은 부분들로 구성됩니다.

  • 컬렉션: 데이터 테이블 구조를 정의합니다.
  • Model: ORM 모델에 해당하며, 주로 Sequelize에 의해 관리됩니다.
  • Repository: 데이터 접근 로직을 캡슐화하는 저장소 계층으로, 더 높은 수준의 작업 메서드를 제공합니다.
  • FieldType: 필드 타입입니다.
  • FilterOperator: 필터링에 사용되는 연산자입니다.
  • Event: 생명 주기 이벤트 및 데이터베이스 이벤트입니다.

#플러그인에서의 사용 시점

#beforeLoad 단계에서 할 수 있는 작업

이 단계에서는 데이터베이스 작업을 할 수 없으며, 정적 클래스 등록이나 이벤트 리스닝에 적합합니다.

  • db.registerFieldTypes() — 사용자 정의 필드 타입 등록
  • db.registerModels() — 사용자 정의 모델 클래스 등록
  • db.registerRepositories() — 사용자 정의 Repository 클래스 등록
  • db.registerOperators() — 사용자 정의 필터 연산자 등록
  • db.on() — 데이터베이스 관련 이벤트 리스닝

#load 단계에서 할 수 있는 작업

이 단계에서는 모든 선행 클래스 정의와 이벤트가 로드된 상태이므로, 데이터 테이블을 로드할 때 누락되거나 빠지는 부분이 없습니다.

  • db.defineCollection() — 새로운 데이터 테이블 정의
  • db.extendCollection() — 기존 데이터 테이블 설정 확장

플러그인의 내장 테이블을 정의하는 경우, ./src/server/collections 디렉터리에 두는 것을 더 권장합니다. 자세한 내용은 컬렉션을 참조하세요.

#데이터 작업

Database는 데이터를 접근하고 조작하는 두 가지 주요 방법을 제공합니다.

#Repository를 통한 작업

const repo = db.getRepository('users');
const user = await repo.findOne({ filter: { id: 1 } });

Repository 계층은 일반적으로 페이지네이션, 필터링, 권한 확인 등과 같은 비즈니스 로직을 캡슐화하는 데 사용됩니다.

#Model을 통한 작업

const UserModel = db.getModel('users');
const user = await UserModel.findByPk(1);

Model 계층은 ORM 엔티티에 직접적으로 해당하며, 낮은 수준의 데이터베이스 작업을 수행하는 데 적합합니다.

#데이터베이스 작업이 가능한 단계는 무엇인가요?

#플러그인 생명 주기

단계데이터베이스 작업 가능 여부
staticImport아니요
afterAdd아니요
beforeLoad아니요
load아니요
install예
beforeEnable예
afterEnable예
beforeDisable예
afterDisable예
remove예
handleSyncMessage예

#App 이벤트

단계데이터베이스 작업 가능 여부
beforeLoad아니요
afterLoad아니요
beforeStart예
afterStart예
beforeInstall아니요
afterInstall예
beforeStop예
afterStop아니요
beforeDestroy예
afterDestroy아니요
beforeLoadPlugin아니요
afterLoadPlugin아니요
beforeEnablePlugin예
afterEnablePlugin예
beforeDisablePlugin예
afterDisablePlugin예
afterUpgrade예

#Database 이벤트/훅

단계데이터베이스 작업 가능 여부
beforeSync아니요
afterSync예
beforeValidate예
afterValidate예
beforeCreate예
afterCreate예
beforeUpdate예
afterUpdate예
beforeSave예
afterSave예
beforeDestroy예
afterDestroy예
afterCreateWithAssociations예
afterUpdateWithAssociations예
afterSaveWithAssociations예
beforeDefineCollection아니요
afterDefineCollection아니요
beforeRemoveCollection아니요
afterRemoveCollection아니요