Skip to Content
API 레퍼런스@asapjs/sequelize데이터베이스 라이프사이클

데이터베이스 라이프사이클

@asapjs/sequelize가 제공하는 데이터베이스 초기화, 동기화, 헬스 체크 함수입니다.

이 페이지에서 찾을 수 있는 것

심볼타입설명
initSequelizeModuleasync functionDB 레이어 전체 초기화
getSequelizefunction전역 Sequelize 인스턴스 접근자
modelsSyncasync function모델-DB 스키마 동기화
healthCheckasync functionDB 연결 상태 확인
generateDBMLasync functionDBML 생성 (placeholder)

initSequelizeModule()

import { initSequelizeModule } from '@asapjs/sequelize'; const initSequelizeModule = async (dirname: string): Promise<Sequelize>

전체 데이터베이스 레이어를 초기화합니다. extensions'@asapjs/sequelize'가 있으면 Application.run()이 자동으로 호출합니다. 일반적인 사용에서는 직접 호출할 필요가 없습니다.

파라미터

파라미터타입설명
dirnamestring컴파일된 출력 디렉토리의 절대 경로. 모든 하위 디렉토리를 재귀적으로 스캔합니다.

반환값: Promise<Sequelize> — 초기화된 Sequelize 인스턴스.

초기화 단계

  1. getConfig().db를 읽어 dbInit()으로 Sequelize 연결을 생성합니다.
  2. 연결을 인증합니다. 대상 데이터베이스가 존재하지 않는 경우(MySQL ER_BAD_DB_ERROR), 데이터베이스 이름 없이 임시 연결을 열고 CREATE DATABASE IF NOT EXISTS를 실행한 후 재연결합니다.
  3. dirname에서 *Table.js*Dto.js에 해당하는 파일을 재귀적으로 스캔합니다.
  4. 검색된 모든 *Table 클래스를 Sequelize 모델로 등록합니다(addModels).
  5. 검색된 모든 *Dto 클래스를 인스턴스화하고 dto.init()을 호출하여 해당 형태를 Swagger 컴포넌트 스키마로 등록합니다.

파일 네이밍 규칙

파일명 패턴등록 대상
*Table.js / *Table.tsSequelize 모델 — Sequelize 인스턴스에 추가
*Dto.js / *Dto.tsDTO 클래스 — Swagger에 스키마 등록

.map으로 끝나는 파일은 무시됩니다.


getSequelize()

import { getSequelize } from '@asapjs/sequelize'; const sequelize = getSequelize(); // Sequelize 반환

initSequelizeModule이 생성한 전역 Sequelize 인스턴스를 반환합니다. Application.run() 이후 어디서든 이 함수를 호출하여 Sequelize 인스턴스에 접근하고 로우 쿼리, 트랜잭션, 또는 모델에 직접 접근할 수 있습니다.

const sequelize = getSequelize(); await sequelize.transaction(async (t) => { await UsersTable.create({ name: 'Alice' }, { transaction: t }); await PostsTable.create({ title: 'Hello', user_id: 1 }, { transaction: t }); });

modelsSync()

import { modelsSync } from '@asapjs/sequelize'; const modelsSync = async (): Promise<true>

등록된 모든 Sequelize 모델을 데이터베이스 스키마와 동기화합니다. Sequelize의 sync({ alter: { drop: false } }) 모드를 사용합니다 — 누락된 컬럼을 추가하고 컬럼 타입을 수정하지만 기존 컬럼이나 테이블을 절대 삭제하지 않습니다. 실행 중인 애플리케이션에서도 안전하게 실행할 수 있습니다.

app.run(async () => { if (process.env.DB_SYNC === 'true') { await modelsSync(); } });

alter: { drop: false } 플래그는 모델 정의에서 제거된 컬럼이 데이터베이스에 그대로 남아 있도록 보장하여 우발적인 데이터 손실을 방지합니다.


healthCheck()

import { healthCheck } from '@asapjs/sequelize'; const healthCheck = async (): Promise<true>

1초 타임아웃으로 SELECT 1을 실행하여 데이터베이스 연결이 살아있는지 확인합니다. 연결이 초기화되지 않았거나 쿼리가 타임아웃 내에 완료되지 않으면 Error를 던집니다.

import { healthCheck } from '@asapjs/sequelize'; import { Get } from '@asapjs/router'; import { RouterController, ExecuteArgs } from '@asapjs/router'; export default class HealthController extends RouterController { public basePath = '/health'; public tag = 'Health'; constructor() { super(); this.registerRoutes(); } @Get('/', { title: 'Health check', auth: false }) async check({}: ExecuteArgs) { await healthCheck(); return { status: 'ok' }; } }

generateDBML()

import { generateDBML } from '@asapjs/sequelize'; const generateDBML = async (): Promise<void>

참고: 현재 placeholder 구현입니다. 함수 본문이 비어 있습니다(async () => {}). 향후 @Table 데코레이터로 등록된 테이블 정보를 기반으로 DBML 출력을 생성할 예정입니다.


관련 항목

Last updated on