콘텐츠로 이동

부트로더

wippy/bootloader 모듈은 시작 시 정의된 순서로 부트로더 함수를 탐색하고 실행하여 애플리케이션 초기화를 조율합니다. 다른 프레임워크 모듈(마이그레이션, 암호화, 인덱스 갱신)은 자체 초기화 단계를 실행하기 위해 부트로더를 등록합니다.

프로젝트에 모듈을 추가합니다:

Terminal window
wippy add wippy/bootloader
wippy install

의존성과 필요한 애플리케이션 호스트를 선언합니다:

version: "1.0"
namespace: app
entries:
- name: processes
kind: process.host
lifecycle:
auto_start: true
- name: os_env
kind: env.storage.os
- name: dep.bootloader
kind: ns.dependency
component: wippy/bootloader
version: "*"
parameters:
- name: application_host
value: app:processes
- name: env_storage
value: app:os_env

부트로더 자체는 wippy.bootloader:bootloader.service(auto_start: trueprocess.service)로 실행됩니다. 이를 활성화하기 위해 다른 것은 필요하지 않습니다.

시작 시 부트로더는 다음을 수행합니다:

  1. 레지스트리에서 meta.type: bootloader를 가진 모든 엔트리를 탐색합니다.
  2. meta.order 오름차순으로 정렬합니다(가장 낮은 것이 먼저).
  3. 각각을 Lua 함수로 순차적으로 실행합니다.
  4. status = "error"를 반환하는 첫 번째 오류에서 중단합니다.
  5. 완료 시 총계 / 성공 / 실패 / 건너뜀 카운트를 보고합니다.

부트로더는 자율적입니다 — 각각이 자신의 조건을 확인하고, 작업을 수행하며, 구조화된 결과를 보고합니다.

부트로더는 meta.type: bootloader를 가진 모든 function.lua 엔트리입니다:

- name: seed_defaults
kind: function.lua
meta:
type: bootloader
order: 50
description: Seed default rows for a new install
source: file://seed_defaults.lua
method: run
modules:
- logger
imports:
sql: :sql
필드필수설명
meta.typebootloader여야 함
meta.order아니오실행 순서(기본값 100); 낮은 값이 먼저 실행됨
meta.description아니오사람이 읽을 수 있는 요약
meta.requires아니오로그에 표시되는 의존성 힌트

method는 결과를 설명하는 테이블을 반환합니다:

local function run()
local ok, err = apply_seed()
if err then
return {
status = "error",
message = "seed failed: " .. tostring(err)
}
end
if not ok then
return {
status = "skipped",
message = "already seeded"
}
end
return {
status = "success",
message = "seeded default rows"
}
end
return { run = run }
상태의미
success작업 완료
skipped작업 없음(이미 완료됨, 사전 조건 미충족)
error실패 — 부팅 시퀀스 중단

Lua 오류를 발생시키는 부트로더는 error로 처리됩니다.

낮은 order 값이 먼저 실행됩니다. 인프라용으로 낮은 순서를 예약하세요:

Order일반적인 용도
10시크릿 및 암호화 키(모듈에서 제공)
20스키마 마이그레이션(wippy/migration에서 제공)
50데이터 시딩, 검색 인덱스 워밍업
100기본 — 애플리케이션 레벨 작업

두 부트로더가 같은 순서를 공유하는 경우, 그들 사이의 실행 순서는 보장되지 않습니다.

256비트 ENCRYPTION_KEY를 생성하고 값이 없는 경우 구성된 env_storage를 통해 저장합니다. 다른 모듈(보안, 사용량 추적)은 envelope 암호화를 위해 이 변수를 읽습니다. 변수가 이미 존재하는 경우 건너뜁니다.

마이그레이션 부트로더(순서 20)

섹션 제목: “마이그레이션 부트로더(순서 20)”

wippy/migration에서 제공됩니다. meta.type: migration을 가진 모든 엔트리를 탐색하고, meta.target_db별로 그룹화한 다음, 대기 중인 것을 적용합니다. 마이그레이션을 참조하세요.

서비스는 엔트리 ID, 순서, 소요 시간과 함께 부트로더당 한 줄(SUCCESS, FAILED, SKIPPED)을 로그에 기록합니다. 최종 요약 줄은 집계 카운트를 보고합니다. 실패한 부트로더는 시작을 중단합니다 — 이후 슈퍼바이저의 재시작 정책이 bootloader.service에 적용됩니다.

부트로더를 멱등하게 유지하세요. 충돌 재시작 후 다시 실행될 수 있으므로, 작업을 수행하기 전에 사전 조건(행 존재, 파일 존재, env 변수 설정됨)을 확인하세요.