mega-framework 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/sample/crud/.env +156 -8
- package/sample/crud/.env.example +153 -28
- package/sample/crud/mega.config.js +61 -2
- package/sample/crud/package.json +2 -2
- package/sample/crud/yarn.lock +1 -1
- package/src/cli/commands/new.js +115 -67
- package/src/cli/commands/scaffold.js +6 -12
- package/src/cli/index.js +133 -12
- package/src/core/boot.js +30 -1
- package/src/core/config-validator.js +25 -0
- package/src/core/mega-app.js +25 -21
- package/src/core/mega-cluster.js +50 -12
- package/src/core/scope-registry.js +0 -1
- package/src/lib/mega-logger.js +1 -1
- package/src/lib/mega-shutdown.js +51 -13
- package/sample/crud/test/apps/main/auth-flow.integration.test.js +0 -177
- package/sample/crud/test/apps/main/auth-service.test.js +0 -93
- package/sample/crud/test/apps/main/chat-channel.test.js +0 -149
- package/sample/crud/test/apps/main/cron-demo-service.test.js +0 -93
- package/sample/crud/test/apps/main/demo-flow.integration.test.js +0 -386
- package/sample/crud/test/apps/main/email-job.test.js +0 -76
- package/sample/crud/test/apps/main/guide-service.test.js +0 -68
- package/sample/crud/test/apps/main/hash-task.test.js +0 -30
- package/sample/crud/test/apps/main/jobs-demo-service.test.js +0 -88
- package/sample/crud/test/apps/main/logs-demo-service.test.js +0 -85
- package/sample/crud/test/apps/main/metrics-demo-service.test.js +0 -90
- package/sample/crud/test/apps/main/note-service.test.js +0 -68
- package/sample/crud/test/apps/main/perf-service.test.js +0 -121
- package/sample/crud/test/apps/main/perf.integration.test.js +0 -202
- package/sample/crud/test/apps/main/redis-demo-service.test.js +0 -98
- package/sample/crud/test/apps/main/tracing-demo-service.test.js +0 -90
- package/sample/crud/test/apps/main/upload-demo-service.test.js +0 -61
- package/sample/crud/test/apps/main/user-service.test.js +0 -65
- package/sample/crud/test/apps/main/ws-chat.integration.test.js +0 -233
- package/templates/project/app.config.tpl +0 -8
- package/templates/project/app.config.views.tpl +0 -37
- package/templates/project/ecosystem.config.tpl +0 -10
- package/templates/project/env.tpl +0 -12
- package/templates/project/gitignore.tpl +0 -8
- package/templates/project/locales/client/en.json.tpl +0 -3
- package/templates/project/locales/client/ko.json.tpl +0 -3
- package/templates/project/locales/server/en.json.tpl +0 -17
- package/templates/project/locales/server/ko.json.tpl +0 -17
- package/templates/project/mega.config.tpl +0 -11
- package/templates/project/package.tpl +0 -25
- package/templates/project/public/css/app.css +0 -101
- package/templates/project/public/js/app.js +0 -54
- package/templates/project/public/js/theme-init.js +0 -12
- package/templates/project/public/vendor/bootstrap/bootstrap.bundle.min.js +0 -7
- package/templates/project/public/vendor/bootstrap/bootstrap.min.css +0 -6
- package/templates/project/readme.tpl +0 -48
- package/templates/project/route.test.tpl +0 -13
- package/templates/project/route.test.views.tpl +0 -15
- package/templates/project/route.tpl +0 -10
- package/templates/project/route.views.tpl +0 -10
- package/templates/project/views/index.ejs.tpl +0 -58
- package/templates/project/views/layout.ejs.tpl +0 -73
- package/templates/project/vitest.config.tpl +0 -8
package/package.json
CHANGED
package/sample/crud/.env
CHANGED
|
@@ -1,27 +1,175 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# sample-crud 환경변수 (.env) — 프레임워크 전체 설정 참조
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# CLI(`mega start`/`worker`/`scheduler`)가 부팅 전에 이 파일을 process.env 로
|
|
5
|
+
# 자동 로드한다(Node `process.loadEnvFile`, 20.6+, ADR-152). 이미 설정된 실제
|
|
6
|
+
# 환경변수는 덮어쓰지 않는다(실 env 우선 — `--env-file` 과 동일). 그 뒤 mega.config.js·
|
|
7
|
+
# apps/<app>/app.config.js 가 `process.env.X` 로 이 값들을 참조한다.
|
|
8
|
+
#
|
|
9
|
+
# [표기 규칙]
|
|
10
|
+
# KEY=value → 이 데모(crud)가 실제로 쓰는 값.
|
|
11
|
+
# # KEY=value → 프레임워크는 지원하지만 이 데모는 안 쓰는 옵션(참고용 — 필요 시 주석 해제).
|
|
12
|
+
#
|
|
13
|
+
# ⚠️ 아래 시크릿/비밀번호는 로컬 도커 데모 전용. 운영 배포 전 반드시 교체할 것.
|
|
14
|
+
# =============================================================================
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# ── 실행 환경 ────────────────────────────────────────────────────────────────
|
|
18
|
+
# development | production | test. pretty 로깅·정적자산 캐싱·i18n 자동완성 등에 영향.
|
|
19
|
+
# 보통 npm 스크립트(dev=development / start=production)가 설정하므로 .env 에선 생략 가능.
|
|
20
|
+
# NODE_ENV=development
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ── 서버 (mega.config.js > server) ───────────────────────────────────────────
|
|
24
|
+
# HTTP listen 포트 — server.port. CLI `--port N` 이 우선(ADR-146).
|
|
1
25
|
PORT=3000
|
|
2
|
-
|
|
3
|
-
MEGA_CLUSTER_WORKERS=8
|
|
26
|
+
# 세션 쿠키 HMAC 서명 시크릿(필수) — server.sessionSecret. 32자 이상 랜덤 강제(ADR-129/155).
|
|
4
27
|
SESSION_SECRET=Zz4VoSzf0sYMEoqASu8G_wx5l3uKi2MlHsxDK3MSkoE
|
|
28
|
+
# cluster 워커 프로세스 수(CLI 가 읽음, ADR-154) — 정수 N 또는 max(CPU 코어 수). 미설정/1=단일.
|
|
29
|
+
# 우선순위: `--cluster` 플래그 > MEGA_CLUSTER_WORKERS > server.cluster config.
|
|
30
|
+
MEGA_CLUSTER_WORKERS=8
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# ── ASP: Application-layer Secure Protocol (mega.config.js > asp) ─────────────
|
|
34
|
+
# /ws/chat 의 E:/P: 프레임 키 유도 masterSecret(필수) — asp.masterSecret (ADR-127/158).
|
|
35
|
+
# 클라이언트(WASM MegaSocket)도 같은 secret 으로 키를 유도하는 공유키 구조라 데모 전용 값을 둔다.
|
|
36
|
+
ASP_MASTER_SECRET=demo-asp-master-7Qe2mWzR1tYbN8sLpKvX0cAfH4dG6jU
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# ── 데이터베이스 (mega.config.js > services.databases) ────────────────────────
|
|
40
|
+
# Postgres(필수) — databases.primary.url. 모델·마이그레이션(mega migrate)·세션 사용자.
|
|
41
|
+
DATABASE_URL=postgres://mega:dkTkqkfl12@localhost:5432/mega_test
|
|
42
|
+
# MongoDB(필수) — databases.mongo.url. /demo/notes 컬렉션(ADR-108). url path 의 dbName 추출,
|
|
43
|
+
# authSource=인증 DB(보통 admin).
|
|
44
|
+
MONGO_URL=mongodb://mega:dkTkqkfl12@localhost:27017/mega_test?authSource=admin
|
|
45
|
+
# MariaDB(미사용) — 프레임워크는 mariadb 드라이버 지원. 쓰려면 mega.config 의 services.databases 에
|
|
46
|
+
# { driver:'mariadb', url: process.env.MARIA_URL } 추가. (url 은 query string 미지원)
|
|
47
|
+
# MARIA_URL=mariadb://mega:dkTkqkfl12@localhost:3306/mega_test
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# ── Redis 캐시 (mega.config.js > services.caches, app.config > session) ───────
|
|
51
|
+
# 논리 DB 인덱스를 분리해 키 충돌 회피(/0 세션 · /1 demo · /2 rate · /3 lock).
|
|
52
|
+
# 세션 store(app.config.js session.store.url, ADR-129/155).
|
|
5
53
|
REDIS_SESSION_URL=redis://:dkTkqkfl12@localhost:6379/0
|
|
54
|
+
# brute-force 카운터(ctx.bruteForce, ADR-049/130) — caches.rate.
|
|
6
55
|
REDIS_RATE_URL=redis://:dkTkqkfl12@localhost:6379/2
|
|
56
|
+
# /demo/redis·cron·jobs 데모 캐시 — caches.demo.
|
|
7
57
|
REDIS_DEMO_URL=redis://:dkTkqkfl12@localhost:6379/1
|
|
58
|
+
# 분산 락(redlock, ADR-113) — caches.lock(locks.main 이 빌려 씀). /demo/cron leader election.
|
|
8
59
|
REDIS_LOCK_URL=redis://:dkTkqkfl12@localhost:6379/3
|
|
9
|
-
|
|
60
|
+
# 범용 캐시(미사용) — 별도 캐시 어댑터가 필요하면 services.caches 에 추가해 참조.
|
|
61
|
+
# REDIS_CACHE_URL=redis://:dkTkqkfl12@localhost:6379/4
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# ── NATS 버스 (mega.config.js > services.buses) ──────────────────────────────
|
|
65
|
+
# 잡 큐(EmailJob JetStream, ADR-119) — buses.jobs.url. `mega worker` 가 소비, 웹이 enqueue.
|
|
66
|
+
# JetStream 활성 서버 필요(nats-server -js).
|
|
10
67
|
NATS_JOBS_URL=nats://localhost:4222
|
|
11
|
-
|
|
68
|
+
# 이벤트 버스(미사용) — pub/sub 등 두 번째 버스가 필요하면 services.buses 에 추가.
|
|
69
|
+
# NATS_EVENTS_URL=nats://localhost:4222
|
|
70
|
+
|
|
12
71
|
|
|
72
|
+
# ── WS Hub: 클러스터 채팅 브릿지 (ADR-059/065/137/176) ────────────────────────
|
|
73
|
+
# crud 는 app.config.js 의 bridgeHub 로 /ws/chat 을 클러스터 전파한다. 허브는 `mega ws-hub`(scripts/
|
|
74
|
+
# start-ws-hub.sh)로 별도 프로세스 기동. 아래 MEGA_WSHUB_* 는 src/cli/ws-hub.js 가 읽는다.
|
|
75
|
+
# --- 허브 서버가 읽는 값 (`mega ws-hub`) ---
|
|
76
|
+
# 수락 토큰 CSV(필수) — 브릿지 인증. 빈 값이면 허브 기동 실패. 운영 교체.
|
|
13
77
|
MEGA_WSHUB_TOKENS=dev-bridge-token-change-me
|
|
14
|
-
MEGA_WSHUB_TOKEN=dev-bridge-token-change-me
|
|
15
78
|
MEGA_WSHUB_PORT=3100
|
|
16
79
|
MEGA_WSHUB_HOST=0.0.0.0
|
|
80
|
+
# 허브 튜닝(선택) — 미설정 시 코드 기본값(heartbeat 25000 / maxPayload 1 MiB / 압축 off).
|
|
81
|
+
MEGA_WSHUB_HEARTBEAT_MS=25000
|
|
82
|
+
MEGA_WSHUB_MAX_PAYLOAD=1048576
|
|
83
|
+
MEGA_WSHUB_COMPRESSION=false
|
|
84
|
+
MEGA_WSHUB_COMPRESSION_THRESHOLD=1024 # MEGA_WSHUB_COMPRESSION=true 일 때만 적용
|
|
85
|
+
# --- 앱(브릿지 클라이언트)이 읽는 값 (app.config.js > bridgeHub) ---
|
|
17
86
|
MEGA_WSHUB_URL=ws://localhost:3100
|
|
87
|
+
MEGA_WSHUB_TOKEN=dev-bridge-token-change-me
|
|
88
|
+
# 이 노드(브릿지) 식별자 — bridgeHub.bridgeId. roster/로그 구분용(클러스터 워커는 -w{id} suffix 자동).
|
|
89
|
+
BRIDGE_ID=crud-1
|
|
90
|
+
|
|
18
91
|
|
|
92
|
+
# ── OpenTelemetry 분산 트레이싱 (선택, ADR-104/114/126/163) ───────────────────
|
|
93
|
+
# MegaTracing.fromEnv() 가 부팅 시 읽는다(boot.js). ENABLED!=='true' 면 0 비용 no-op.
|
|
94
|
+
# /demo/tracing 데모가 요청별 trace_id 를 만들고 Zipkin 딥링크로 잇는다. docker 의
|
|
95
|
+
# otel-collector(:4318 OTLP HTTP)·zipkin(:9411) 가동 시 true 로 켠다(collector 부재 시 export 실패 로그).
|
|
19
96
|
MEGA_OTEL_ENABLED=true
|
|
20
97
|
MEGA_OTEL_SERVICE_NAME=sample-crud
|
|
21
98
|
MEGA_OTEL_ENDPOINT=http://localhost:4318/v1/traces
|
|
22
|
-
MEGA_OTEL_EXPORTER=otlp
|
|
23
|
-
MEGA_OTEL_SAMPLING_RATIO=1.0
|
|
99
|
+
MEGA_OTEL_EXPORTER=otlp # otlp | zipkin | console | inmemory
|
|
100
|
+
MEGA_OTEL_SAMPLING_RATIO=1.0 # 0.0~1.0 또는 always_on | always_off
|
|
101
|
+
# Zipkin UI API base — /demo/tracing 딥링크 base(앱 코드가 읽음).
|
|
24
102
|
MEGA_OTEL_ZIPKIN_API=http://localhost:9411/api/v2
|
|
103
|
+
# resource 속성(선택) — 미설정 시 생략.
|
|
104
|
+
# MEGA_OTEL_VERSION=1.0.0
|
|
105
|
+
# MEGA_OTEL_ENVIRONMENT=local
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# ── Prometheus 메트릭 (선택, ADR-072/131) ────────────────────────────────────
|
|
109
|
+
# crud 는 mega.config.js 의 health.exposeMetrics:true 로 /metrics 를 켠다(config 주도 — env 아님).
|
|
110
|
+
# 아래 env 는 MegaMetrics.fromEnv() 를 직접 호출하는 커스텀 부팅에서만 효과(기본 boot 는 config 사용).
|
|
111
|
+
# METRICS_ENABLED=true # 또는 MEGA_METRICS_ENABLED
|
|
112
|
+
# MEGA_METRICS_SERVICE_NAME=sample-crud
|
|
113
|
+
# MEGA_METRICS_ENVIRONMENT=local
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# ── 로깅 (mega.config.js > logger, ADR-023/141) ──────────────────────────────
|
|
117
|
+
# pino 레벨 — logger.level. fatal | error | warn | info | debug | trace.
|
|
118
|
+
LOG_LEVEL=info
|
|
119
|
+
# (참고) 파일/텔레그램 sink 등은 .env 가 아니라 mega.config.js 의 logger.sinks 배열로 설정한다.
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
# ── 데모 (앱 코드가 읽음) ─────────────────────────────────────────────────────
|
|
123
|
+
# /demo/upload 저장 디렉터리. 상대경로=프로젝트 루트(cwd) 기준. 미설정 시 var/uploads.
|
|
25
124
|
DEMO_UPLOAD_DIR=var/uploads
|
|
26
125
|
|
|
27
|
-
|
|
126
|
+
|
|
127
|
+
# =============================================================================
|
|
128
|
+
# Docker 인프라 (docker-compose.yml 이 읽음, ADR-103) — 전부 선택/주석
|
|
129
|
+
# =============================================================================
|
|
130
|
+
# 위 연결 문자열(DATABASE_URL 등)은 아래 도커 기본값과 정합한다. docker-compose.yml 에 인라인
|
|
131
|
+
# 디폴트가 있어 미설정이어도 컨테이너가 뜨지만, 포트/비번을 바꾸려면 아래를 켜고 위 URL 도 함께 맞춘다.
|
|
132
|
+
# 네이밍: MEGA_<SERVICE>_<FIELD>.
|
|
133
|
+
# MEGA_PG_PORT=5432
|
|
134
|
+
# MEGA_PG_USER=mega
|
|
135
|
+
# MEGA_PG_PASSWORD=dkTkqkfl12
|
|
136
|
+
# MEGA_PG_DB=mega_test
|
|
137
|
+
# MEGA_MONGO_PORT=27017
|
|
138
|
+
# MEGA_MONGO_USER=mega
|
|
139
|
+
# MEGA_MONGO_PASSWORD=dkTkqkfl12
|
|
140
|
+
# MEGA_MONGO_DB=mega_test
|
|
141
|
+
# MEGA_REDIS_PORT=6379
|
|
142
|
+
# MEGA_REDIS_PASSWORD=dkTkqkfl12
|
|
143
|
+
# MEGA_NATS_PORT=4222
|
|
144
|
+
# MEGA_NATS_MONITOR_PORT=8222
|
|
145
|
+
# MEGA_MARIA_PORT=3306
|
|
146
|
+
# MEGA_MARIA_ROOT_PASSWORD=dkTkqkfl12
|
|
147
|
+
# MEGA_MARIA_USER=mega
|
|
148
|
+
# MEGA_MARIA_PASSWORD=dkTkqkfl12
|
|
149
|
+
# MEGA_MARIA_DB=mega_test
|
|
150
|
+
# 컨테이너 restart 정책: 개발=unless-stopped / CI 일회성=no.
|
|
151
|
+
# MEGA_INFRA_RESTART=unless-stopped
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
# =============================================================================
|
|
155
|
+
# 어댑터 옵션 자동매핑 (ADR-109, 12-factor) — 전부 선택/주석
|
|
156
|
+
# =============================================================================
|
|
157
|
+
# services.<domain>.<key> 에 `envPrefix: 'PG'` 처럼 지정하면 MegaAdapterManager 가
|
|
158
|
+
# MEGA_<PREFIX>_<KEY> 를 읽어 어댑터 옵션에 병합(env 우선). url 직접 지정 대신 12-factor 분리용.
|
|
159
|
+
# (crud 는 url 직접 방식이라 미사용 — 아래는 문법 참고.)
|
|
160
|
+
# 문법: MEGA_<PREFIX>_<KEY>
|
|
161
|
+
# URL → url
|
|
162
|
+
# HOST / PORT / USER / PASSWORD → 연결필드 (PORT 만 정수, 나머지 문자열)
|
|
163
|
+
# DATABASE | DB → database / DBNAME → dbName(Mongo)
|
|
164
|
+
# POOL_<X> → pool.{camelCase(X)} (드라이버 공통, 값 자동 타입변환)
|
|
165
|
+
# OPTIONS_<X> → options.{드라이버 표기} (postgres/sqlite=snake, 그 외=camel; MS 대문자 보존)
|
|
166
|
+
# 공통 풀 인터페이스(min/max/idleTimeoutMs/acquireTimeoutMs/maxLifetimeMs) 예:
|
|
167
|
+
# MEGA_PG_POOL_MIN=0
|
|
168
|
+
# MEGA_PG_POOL_MAX=10
|
|
169
|
+
# MEGA_PG_POOL_IDLE_TIMEOUT_MS=10000
|
|
170
|
+
# 드라이버 특화 옵션 예:
|
|
171
|
+
# MEGA_PG_OPTIONS_SSL=true # → options.ssl
|
|
172
|
+
# MEGA_PG_OPTIONS_STATEMENT_TIMEOUT=30000 # → options.statement_timeout (pg=snake)
|
|
173
|
+
# MEGA_MONGO_OPTIONS_AUTH_SOURCE=admin # → options.authSource (mongo=camel)
|
|
174
|
+
# MEGA_MONGO_OPTIONS_SERVER_SELECTION_TIMEOUT_MS=5000 # → options.serverSelectionTimeoutMS
|
|
175
|
+
# MEGA_MARIA_OPTIONS_BIG_INT_STRATEGY=number # number(기본,2^53 초과 손실) | bigint | string
|
package/sample/crud/.env.example
CHANGED
|
@@ -1,50 +1,175 @@
|
|
|
1
|
-
#
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# sample-crud 환경변수 (.env.example) — 프레임워크 전체 설정 참조
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# 복사해서 `.env` 로 쓰고 시크릿/비밀번호를 실제 값으로 채운다. CLI(`mega start`/`worker`/
|
|
5
|
+
# `scheduler`)가 부팅 전에 `.env` 를 process.env 로 자동 로드한다(Node `process.loadEnvFile`,
|
|
6
|
+
# 20.6+, ADR-152). 이미 설정된 실제 환경변수는 덮어쓰지 않는다(실 env 우선). 그 뒤 mega.config.js·
|
|
7
|
+
# apps/<app>/app.config.js 가 `process.env.X` 로 이 값들을 참조한다.
|
|
8
|
+
#
|
|
9
|
+
# [표기 규칙]
|
|
10
|
+
# KEY=value → 이 데모(crud)가 실제로 쓰는 값.
|
|
11
|
+
# # KEY=value → 프레임워크는 지원하지만 이 데모는 안 쓰는 옵션(참고용 — 필요 시 주석 해제).
|
|
12
|
+
#
|
|
13
|
+
# ⚠️ change-me 로 표시된 값은 반드시 교체할 것(시크릿은 32자 이상 랜덤 권장).
|
|
14
|
+
# =============================================================================
|
|
2
15
|
|
|
3
|
-
|
|
16
|
+
|
|
17
|
+
# ── 실행 환경 ────────────────────────────────────────────────────────────────
|
|
18
|
+
# development | production | test. pretty 로깅·정적자산 캐싱·i18n 자동완성 등에 영향.
|
|
19
|
+
# 보통 npm 스크립트(dev=development / start=production)가 설정하므로 .env 에선 생략 가능.
|
|
20
|
+
# NODE_ENV=development
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# ── 서버 (mega.config.js > server) ───────────────────────────────────────────
|
|
24
|
+
# HTTP listen 포트 — server.port. CLI `--port N` 이 우선(ADR-146).
|
|
4
25
|
PORT=3000
|
|
26
|
+
# 세션 쿠키 HMAC 서명 시크릿(필수) — server.sessionSecret. 32자 이상 랜덤 강제(ADR-129/155).
|
|
27
|
+
SESSION_SECRET=change-me-to-a-long-random-secret-at-least-32-chars
|
|
28
|
+
# cluster 워커 프로세스 수(CLI 가 읽음, ADR-154) — 정수 N 또는 max(CPU 코어 수). 미설정/1=단일.
|
|
29
|
+
# 우선순위: `--cluster` 플래그 > MEGA_CLUSTER_WORKERS > server.cluster config.
|
|
30
|
+
MEGA_CLUSTER_WORKERS=8
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# ── ASP: Application-layer Secure Protocol (mega.config.js > asp) ─────────────
|
|
34
|
+
# /ws/chat 의 E:/P: 프레임 키 유도 masterSecret(필수) — asp.masterSecret (ADR-127/158).
|
|
35
|
+
# 클라이언트(WASM MegaSocket)도 같은 secret 으로 키를 유도하는 공유키 구조라 데모 전용 값을 둔다.
|
|
36
|
+
ASP_MASTER_SECRET=change-me-to-a-demo-asp-secret
|
|
5
37
|
|
|
6
|
-
# cluster 워커 프로세스 수(ADR-154) — 정수 N 또는 max(CPU 코어 수). 미설정/1=단일 프로세스.
|
|
7
|
-
# MEGA_CLUSTER_WORKERS=max
|
|
8
38
|
|
|
9
|
-
#
|
|
10
|
-
#
|
|
39
|
+
# ── 데이터베이스 (mega.config.js > services.databases) ────────────────────────
|
|
40
|
+
# Postgres(필수) — databases.primary.url. 모델·마이그레이션(mega migrate)·세션 사용자.
|
|
11
41
|
DATABASE_URL=postgres://mega:change-me@localhost:5432/mega_test
|
|
42
|
+
# MongoDB(필수) — databases.mongo.url. /demo/notes 컬렉션(ADR-108). url path 의 dbName 추출,
|
|
43
|
+
# authSource=인증 DB(보통 admin).
|
|
44
|
+
MONGO_URL=mongodb://mega:change-me@localhost:27017/mega_test?authSource=admin
|
|
45
|
+
# MariaDB(미사용) — 프레임워크는 mariadb 드라이버 지원. 쓰려면 mega.config 의 services.databases 에
|
|
46
|
+
# { driver:'mariadb', url: process.env.MARIA_URL } 추가. (url 은 query string 미지원)
|
|
47
|
+
# MARIA_URL=mariadb://mega:change-me@localhost:3306/mega_test
|
|
12
48
|
|
|
13
|
-
# 세션 쿠키 HMAC 서명 시크릿 (필수, ADR-155) — server.sessionSecret 이 읽는다. 충분히 긴 랜덤 문자열.
|
|
14
|
-
SESSION_SECRET=change-me-to-a-long-random-secret
|
|
15
49
|
|
|
16
|
-
# Redis
|
|
17
|
-
# DB 인덱스를 분리해 키
|
|
50
|
+
# ── Redis 캐시 (mega.config.js > services.caches, app.config > session) ───────
|
|
51
|
+
# 논리 DB 인덱스를 분리해 키 충돌 회피(/0 세션 · /1 demo · /2 rate · /3 lock).
|
|
52
|
+
# 세션 store(app.config.js session.store.url, ADR-129/155).
|
|
18
53
|
REDIS_SESSION_URL=redis://:change-me@localhost:6379/0
|
|
54
|
+
# brute-force 카운터(ctx.bruteForce, ADR-049/130) — caches.rate.
|
|
19
55
|
REDIS_RATE_URL=redis://:change-me@localhost:6379/2
|
|
56
|
+
# /demo/redis·cron·jobs 데모 캐시 — caches.demo.
|
|
20
57
|
REDIS_DEMO_URL=redis://:change-me@localhost:6379/1
|
|
21
|
-
# 분산 락(redlock, ADR-113) —
|
|
58
|
+
# 분산 락(redlock, ADR-113) — caches.lock(locks.main 이 빌려 씀). /demo/cron leader election.
|
|
22
59
|
REDIS_LOCK_URL=redis://:change-me@localhost:6379/3
|
|
60
|
+
# 범용 캐시(미사용) — 별도 캐시 어댑터가 필요하면 services.caches 에 추가해 참조.
|
|
61
|
+
# REDIS_CACHE_URL=redis://:change-me@localhost:6379/4
|
|
62
|
+
|
|
23
63
|
|
|
24
|
-
# NATS
|
|
25
|
-
#
|
|
64
|
+
# ── NATS 버스 (mega.config.js > services.buses) ──────────────────────────────
|
|
65
|
+
# 잡 큐(EmailJob JetStream, ADR-119) — buses.jobs.url. `mega worker` 가 소비, 웹이 enqueue.
|
|
66
|
+
# JetStream 활성 서버 필요(nats-server -js).
|
|
26
67
|
NATS_JOBS_URL=nats://localhost:4222
|
|
68
|
+
# 이벤트 버스(미사용) — pub/sub 등 두 번째 버스가 필요하면 services.buses 에 추가.
|
|
69
|
+
# NATS_EVENTS_URL=nats://localhost:4222
|
|
27
70
|
|
|
28
|
-
# MongoDB 연결 (필수, ADR-157) — services.databases.mongo.url 이 읽는다. /demo/notes 데모 컬렉션의 백엔드.
|
|
29
|
-
# url path 의 dbName(mega_test)을 어댑터가 추출한다. authSource 는 인증 DB(보통 admin).
|
|
30
|
-
MONGO_URL=mongodb://mega:change-me@localhost:27017/mega_test?authSource=admin
|
|
31
71
|
|
|
32
|
-
#
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
|
|
72
|
+
# ── WS Hub: 클러스터 채팅 브릿지 (ADR-059/065/137/176) ────────────────────────
|
|
73
|
+
# crud 는 app.config.js 의 bridgeHub 로 /ws/chat 을 클러스터 전파한다. 허브는 `mega ws-hub`(scripts/
|
|
74
|
+
# start-ws-hub.sh)로 별도 프로세스 기동. 아래 MEGA_WSHUB_* 는 src/cli/ws-hub.js 가 읽는다.
|
|
75
|
+
# --- 허브 서버가 읽는 값 (`mega ws-hub`) ---
|
|
76
|
+
# 수락 토큰 CSV(필수) — 브릿지 인증. 빈 값이면 허브 기동 실패. 운영 교체.
|
|
77
|
+
MEGA_WSHUB_TOKENS=change-me-hub-token
|
|
78
|
+
MEGA_WSHUB_PORT=3100
|
|
79
|
+
MEGA_WSHUB_HOST=0.0.0.0
|
|
80
|
+
# 허브 튜닝(선택) — 미설정 시 코드 기본값(heartbeat 25000 / maxPayload 1 MiB / 압축 off).
|
|
81
|
+
# MEGA_WSHUB_HEARTBEAT_MS=25000
|
|
82
|
+
# MEGA_WSHUB_MAX_PAYLOAD=1048576
|
|
83
|
+
# MEGA_WSHUB_COMPRESSION=false
|
|
84
|
+
# MEGA_WSHUB_COMPRESSION_THRESHOLD=1024 # MEGA_WSHUB_COMPRESSION=true 일 때만 적용
|
|
85
|
+
# --- 앱(브릿지 클라이언트)이 읽는 값 (app.config.js > bridgeHub) ---
|
|
86
|
+
MEGA_WSHUB_URL=ws://localhost:3100
|
|
87
|
+
MEGA_WSHUB_TOKEN=change-me-hub-token
|
|
88
|
+
# 이 노드(브릿지) 식별자 — bridgeHub.bridgeId. roster/로그 구분용(클러스터 워커는 -w{id} suffix 자동).
|
|
89
|
+
BRIDGE_ID=crud-1
|
|
36
90
|
|
|
37
|
-
|
|
38
|
-
#
|
|
39
|
-
#
|
|
91
|
+
|
|
92
|
+
# ── OpenTelemetry 분산 트레이싱 (선택, ADR-104/114/126/163) ───────────────────
|
|
93
|
+
# MegaTracing.fromEnv() 가 부팅 시 읽는다(boot.js). ENABLED!=='true' 면 0 비용 no-op.
|
|
94
|
+
# /demo/tracing 데모가 요청별 trace_id 를 만들고 Zipkin 딥링크로 잇는다. docker 의
|
|
95
|
+
# otel-collector(:4318 OTLP HTTP)·zipkin(:9411) 가동 시 true 로 켠다(collector 부재 시 export 실패 로그).
|
|
40
96
|
MEGA_OTEL_ENABLED=false
|
|
41
97
|
MEGA_OTEL_SERVICE_NAME=sample-crud
|
|
42
98
|
MEGA_OTEL_ENDPOINT=http://localhost:4318/v1/traces
|
|
43
|
-
MEGA_OTEL_EXPORTER=otlp
|
|
44
|
-
MEGA_OTEL_SAMPLING_RATIO=1.0
|
|
45
|
-
# Zipkin UI API base — /demo/tracing
|
|
99
|
+
MEGA_OTEL_EXPORTER=otlp # otlp | zipkin | console | inmemory
|
|
100
|
+
MEGA_OTEL_SAMPLING_RATIO=1.0 # 0.0~1.0 또는 always_on | always_off
|
|
101
|
+
# Zipkin UI API base — /demo/tracing 딥링크 base(앱 코드가 읽음).
|
|
46
102
|
MEGA_OTEL_ZIPKIN_API=http://localhost:9411/api/v2
|
|
103
|
+
# resource 속성(선택) — 미설정 시 생략.
|
|
104
|
+
# MEGA_OTEL_VERSION=1.0.0
|
|
105
|
+
# MEGA_OTEL_ENVIRONMENT=local
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# ── Prometheus 메트릭 (선택, ADR-072/131) ────────────────────────────────────
|
|
109
|
+
# crud 는 mega.config.js 의 health.exposeMetrics:true 로 /metrics 를 켠다(config 주도 — env 아님).
|
|
110
|
+
# 아래 env 는 MegaMetrics.fromEnv() 를 직접 호출하는 커스텀 부팅에서만 효과(기본 boot 는 config 사용).
|
|
111
|
+
# METRICS_ENABLED=true # 또는 MEGA_METRICS_ENABLED
|
|
112
|
+
# MEGA_METRICS_SERVICE_NAME=sample-crud
|
|
113
|
+
# MEGA_METRICS_ENVIRONMENT=local
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# ── 로깅 (mega.config.js > logger, ADR-023/141) ──────────────────────────────
|
|
117
|
+
# pino 레벨 — logger.level. fatal | error | warn | info | debug | trace.
|
|
118
|
+
LOG_LEVEL=info
|
|
119
|
+
# (참고) 파일/텔레그램 sink 등은 .env 가 아니라 mega.config.js 의 logger.sinks 배열로 설정한다.
|
|
47
120
|
|
|
48
|
-
|
|
49
|
-
#
|
|
121
|
+
|
|
122
|
+
# ── 데모 (앱 코드가 읽음) ─────────────────────────────────────────────────────
|
|
123
|
+
# /demo/upload 저장 디렉터리. 상대경로=프로젝트 루트(cwd) 기준. 미설정 시 var/uploads.
|
|
50
124
|
DEMO_UPLOAD_DIR=var/uploads
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# =============================================================================
|
|
128
|
+
# Docker 인프라 (docker-compose.yml 이 읽음, ADR-103) — 전부 선택/주석
|
|
129
|
+
# =============================================================================
|
|
130
|
+
# 위 연결 문자열(DATABASE_URL 등)은 아래 도커 기본값과 정합한다. docker-compose.yml 에 인라인
|
|
131
|
+
# 디폴트가 있어 미설정이어도 컨테이너가 뜨지만, 포트/비번을 바꾸려면 아래를 켜고 위 URL 도 함께 맞춘다.
|
|
132
|
+
# 네이밍: MEGA_<SERVICE>_<FIELD>.
|
|
133
|
+
# MEGA_PG_PORT=5432
|
|
134
|
+
# MEGA_PG_USER=mega
|
|
135
|
+
# MEGA_PG_PASSWORD=change-me
|
|
136
|
+
# MEGA_PG_DB=mega_test
|
|
137
|
+
# MEGA_MONGO_PORT=27017
|
|
138
|
+
# MEGA_MONGO_USER=mega
|
|
139
|
+
# MEGA_MONGO_PASSWORD=change-me
|
|
140
|
+
# MEGA_MONGO_DB=mega_test
|
|
141
|
+
# MEGA_REDIS_PORT=6379
|
|
142
|
+
# MEGA_REDIS_PASSWORD=change-me
|
|
143
|
+
# MEGA_NATS_PORT=4222
|
|
144
|
+
# MEGA_NATS_MONITOR_PORT=8222
|
|
145
|
+
# MEGA_MARIA_PORT=3306
|
|
146
|
+
# MEGA_MARIA_ROOT_PASSWORD=change-me
|
|
147
|
+
# MEGA_MARIA_USER=mega
|
|
148
|
+
# MEGA_MARIA_PASSWORD=change-me
|
|
149
|
+
# MEGA_MARIA_DB=mega_test
|
|
150
|
+
# 컨테이너 restart 정책: 개발=unless-stopped / CI 일회성=no.
|
|
151
|
+
# MEGA_INFRA_RESTART=unless-stopped
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
# =============================================================================
|
|
155
|
+
# 어댑터 옵션 자동매핑 (ADR-109, 12-factor) — 전부 선택/주석
|
|
156
|
+
# =============================================================================
|
|
157
|
+
# services.<domain>.<key> 에 `envPrefix: 'PG'` 처럼 지정하면 MegaAdapterManager 가
|
|
158
|
+
# MEGA_<PREFIX>_<KEY> 를 읽어 어댑터 옵션에 병합(env 우선). url 직접 지정 대신 12-factor 분리용.
|
|
159
|
+
# (crud 는 url 직접 방식이라 미사용 — 아래는 문법 참고.)
|
|
160
|
+
# 문법: MEGA_<PREFIX>_<KEY>
|
|
161
|
+
# URL → url
|
|
162
|
+
# HOST / PORT / USER / PASSWORD → 연결필드 (PORT 만 정수, 나머지 문자열)
|
|
163
|
+
# DATABASE | DB → database / DBNAME → dbName(Mongo)
|
|
164
|
+
# POOL_<X> → pool.{camelCase(X)} (드라이버 공통, 값 자동 타입변환)
|
|
165
|
+
# OPTIONS_<X> → options.{드라이버 표기} (postgres/sqlite=snake, 그 외=camel; MS 대문자 보존)
|
|
166
|
+
# 공통 풀 인터페이스(min/max/idleTimeoutMs/acquireTimeoutMs/maxLifetimeMs) 예:
|
|
167
|
+
# MEGA_PG_POOL_MIN=0
|
|
168
|
+
# MEGA_PG_POOL_MAX=10
|
|
169
|
+
# MEGA_PG_POOL_IDLE_TIMEOUT_MS=10000
|
|
170
|
+
# 드라이버 특화 옵션 예:
|
|
171
|
+
# MEGA_PG_OPTIONS_SSL=true # → options.ssl
|
|
172
|
+
# MEGA_PG_OPTIONS_STATEMENT_TIMEOUT=30000 # → options.statement_timeout (pg=snake)
|
|
173
|
+
# MEGA_MONGO_OPTIONS_AUTH_SOURCE=admin # → options.authSource (mongo=camel)
|
|
174
|
+
# MEGA_MONGO_OPTIONS_SERVER_SELECTION_TIMEOUT_MS=5000 # → options.serverSelectionTimeoutMS
|
|
175
|
+
# MEGA_MARIA_OPTIONS_BIG_INT_STRATEGY=number # number(기본,2^53 초과 손실) | bigint | string
|
|
@@ -15,6 +15,13 @@ export default {
|
|
|
15
15
|
port: Number(process.env.PORT ?? 3000),
|
|
16
16
|
// 세션 쿠키 HMAC 서명 시크릿(global 스코프, ADR-129). boot 이 앱에 주입한다. .env 의 SESSION_SECRET.
|
|
17
17
|
sessionSecret: process.env.SESSION_SECRET,
|
|
18
|
+
// (예시·미사용) listen 호스트 — 기본 '0.0.0.0'. `mega start --host H`(CLI)가 우선.
|
|
19
|
+
// host: '0.0.0.0',
|
|
20
|
+
// (예시·미사용) cluster 워커 수 — CLI `--cluster` > .env MEGA_CLUSTER_WORKERS > 이 값(ADR-154). 정수 N | 'max'.
|
|
21
|
+
// cluster: 'max',
|
|
22
|
+
// (예시·미사용) 메트릭/트레이싱 resource 의 service.name·version(health.serviceName 미지정 시 폴백).
|
|
23
|
+
// serviceName: 'sample-crud',
|
|
24
|
+
// version: '0.1.0',
|
|
18
25
|
},
|
|
19
26
|
|
|
20
27
|
// ASP(Application-layer Secure Protocol) masterSecret — global 스코프 시크릿(ADR-127, scope-registry).
|
|
@@ -24,6 +31,8 @@ export default {
|
|
|
24
31
|
// 이 값을 브라우저에 주입한다 — 그래서 운영 secret 과 분리된 데모 전용 값을 .env 의 ASP_MASTER_SECRET 에 둔다.
|
|
25
32
|
asp: {
|
|
26
33
|
masterSecret: process.env.ASP_MASTER_SECRET,
|
|
34
|
+
// (예시·미사용) HTTP body/query 암호화 옵션(enabledPaths·driftMs·nonceCache 등)은 **앱 스코프** —
|
|
35
|
+
// apps/<app>/app.config.js 의 asp.http 에 둔다. 여기 global 블록엔 masterSecret 만(scope-registry).
|
|
27
36
|
},
|
|
28
37
|
|
|
29
38
|
// 전역 어댑터(ADR-102/106/109) — globalKey 로 선언, 앱은 app.config.js 의 별명으로 참조.
|
|
@@ -33,6 +42,11 @@ export default {
|
|
|
33
42
|
primary: {
|
|
34
43
|
driver: 'postgres',
|
|
35
44
|
url: process.env.DATABASE_URL,
|
|
45
|
+
// (예시·미사용) url 대신 discrete 도 가능: { host, port, user, password, database } (url 과 상호배타).
|
|
46
|
+
// (예시·미사용) 공통 풀 인터페이스 — 드라이버별 키로 자동 매핑(ADR-109). 단위 *Ms=밀리초.
|
|
47
|
+
// pool: { min: 0, max: 10, idleTimeoutMs: 10_000 },
|
|
48
|
+
// (예시·미사용) 드라이버 네이티브 옵션 passthrough(pg=snake_case).
|
|
49
|
+
// options: { ssl: false, statement_timeout: 30_000 },
|
|
36
50
|
},
|
|
37
51
|
// DB 'mongo' — Document DB 어댑터(ADR-108). notes 데모 컬렉션(Note 모델 static adapter='mongo')의 공유
|
|
38
52
|
// 인스턴스. url path 의 dbName(mega_test)을 어댑터가 추출한다. .env 의 MONGO_URL(authSource=admin).
|
|
@@ -40,6 +54,12 @@ export default {
|
|
|
40
54
|
driver: 'mongodb',
|
|
41
55
|
url: process.env.MONGO_URL,
|
|
42
56
|
},
|
|
57
|
+
// (예시·미사용) MariaDB 어댑터(ADR-105). 쓰려면 주석 해제 + .env 의 MARIA_URL 설정.
|
|
58
|
+
// 모델은 static adapter='maria'(globalKey)로 닿고, app.config.js databases 에 별명 추가.
|
|
59
|
+
// maria: {
|
|
60
|
+
// driver: 'mariadb',
|
|
61
|
+
// url: process.env.MARIA_URL,
|
|
62
|
+
// },
|
|
43
63
|
},
|
|
44
64
|
caches: {
|
|
45
65
|
// redis 캐시 'rate' — brute-force(ctx.bruteForce, ADR-049/130)의 원자적 INCR 백엔드. .env 의 REDIS_RATE_URL(db 2).
|
|
@@ -60,6 +80,12 @@ export default {
|
|
|
60
80
|
driver: 'redis',
|
|
61
81
|
url: process.env.REDIS_LOCK_URL,
|
|
62
82
|
},
|
|
83
|
+
// (예시·미사용) 범용 캐시 — 일반 키/값 캐싱이 필요하면 주석 해제 + .env 의 REDIS_CACHE_URL 설정.
|
|
84
|
+
// 기존 캐시(rate/demo/lock)와 키 충돌을 피해 별도 논리 DB(/4 등)를 권장. app.config.js caches 에 별명 추가.
|
|
85
|
+
// cache: {
|
|
86
|
+
// driver: 'redis',
|
|
87
|
+
// url: process.env.REDIS_CACHE_URL,
|
|
88
|
+
// },
|
|
63
89
|
},
|
|
64
90
|
// NATS 버스 'jobs' — 잡 큐(EmailJob, ADR-119)의 JetStream 백엔드. producer(웹)는 ctx.bus('jobs').native(nc)로
|
|
65
91
|
// enqueue, consumer(`mega worker`)는 같은 버스로 소비한다. .env 의 NATS_JOBS_URL.
|
|
@@ -68,6 +94,11 @@ export default {
|
|
|
68
94
|
driver: 'nats',
|
|
69
95
|
url: process.env.NATS_JOBS_URL,
|
|
70
96
|
},
|
|
97
|
+
// (예시·미사용) 이벤트 버스 — pub/sub 등 두 번째 NATS 버스가 필요하면 주석 해제 + .env 의 NATS_EVENTS_URL.
|
|
98
|
+
// events: {
|
|
99
|
+
// driver: 'nats',
|
|
100
|
+
// url: process.env.NATS_EVENTS_URL,
|
|
101
|
+
// },
|
|
71
102
|
},
|
|
72
103
|
// 분산 락 'main' — redlock(ADR-113). caches.lock(Redis) 을 빌려 단일 노드 redlock 을 구성한다. /demo/cron
|
|
73
104
|
// 스케줄(CronCounterSchedule.static lock)의 클러스터 중복방지(leader election)에 쓰인다.
|
|
@@ -79,6 +110,17 @@ export default {
|
|
|
79
110
|
},
|
|
80
111
|
},
|
|
81
112
|
|
|
113
|
+
// (예시·미사용) Embedded WS Hub(ADR-137) — `mega ws-hub` 별도 프로세스 대신 같은 프로세스에 허브를 띄움
|
|
114
|
+
// (single-node). 켜면 app.config.js bridgeHub.url 을 이 host:port 로 맞춘다. acceptedTokens 필수(빈 값=throw).
|
|
115
|
+
// wsHub: {
|
|
116
|
+
// enabled: true,
|
|
117
|
+
// port: 3100,
|
|
118
|
+
// host: '127.0.0.1',
|
|
119
|
+
// acceptedTokens: (process.env.MEGA_WSHUB_TOKENS ?? '').split(',').filter(Boolean),
|
|
120
|
+
// heartbeatMs: 25_000,
|
|
121
|
+
// // compression: { enabled: false },
|
|
122
|
+
// },
|
|
123
|
+
|
|
82
124
|
// ── 클러스터 전송 선택(ADR-176, 앱당 하나·상호배타) ───────────────────────────────────────────
|
|
83
125
|
// 이 샘플은 현재 **WS Hub**(app.config 의 bridgeHub → `mega ws-hub` 서버, localhost:3100)로 채팅을
|
|
84
126
|
// 클러스터 전파한다. boot 가 bridgeHub 를 보고 app.connectHub 를 자동 호출한다(개발자 배선 불요).
|
|
@@ -101,11 +143,20 @@ export default {
|
|
|
101
143
|
// CPU 워커 풀(ADR-124) — `mega start`(boot)가 ctx.workers['hash'] 로 배선한다(config.workers).
|
|
102
144
|
workers: [HashWorker],
|
|
103
145
|
|
|
146
|
+
// (예시·미사용) 플러그인 — 명시 등록만(auto-discovery 없음, ADR-079). 문자열 또는 { name, options }.
|
|
147
|
+
// plugins: [{ name: 'my-plugin', options: {} }],
|
|
148
|
+
|
|
104
149
|
// pino 로깅(ADR-023/141) — console sink, dev pretty. redact 로 민감필드를 sink 출력 전 메인스레드에서
|
|
105
150
|
// 마스킹한다(token/password/secret/authorization). /demo/logs 데모가 이 마스킹을 시연한다(ADR-163).
|
|
106
151
|
logger: {
|
|
107
|
-
level: '
|
|
108
|
-
sinks
|
|
152
|
+
level: process.env.LOG_LEVEL ?? 'info',
|
|
153
|
+
// sinks — 출력처 배열. console(dev pretty) 외에 file(pino-roll)·telegram sink 지원.
|
|
154
|
+
sinks: [
|
|
155
|
+
{ type: 'console', pretty: true },
|
|
156
|
+
// (예시·미사용) 파일 sink — 날짜 로테이션 + keep N.
|
|
157
|
+
// { type: 'file', path: './logs/app.log', rotation: 'daily', keep: 14 },
|
|
158
|
+
// (예시·미사용) telegram sink — warn 이상 알림. botToken/chatId 는 .env 등 시크릿으로 주입(코드·git 직접 X).
|
|
159
|
+
],
|
|
109
160
|
redact: ['*.password', '*.token', '*.secret', '*.authorization', 'password', 'token', 'secret'],
|
|
110
161
|
},
|
|
111
162
|
|
|
@@ -114,5 +165,13 @@ export default {
|
|
|
114
165
|
exposeMetrics: true,
|
|
115
166
|
metricsPath: '/metrics',
|
|
116
167
|
metricsAllowList: ['127.0.0.1', '::1'],
|
|
168
|
+
// (예시·미사용) liveness/readiness 경로 — 기본 '/health' · '/health/ready'.
|
|
169
|
+
// paths: { live: '/health', ready: '/health/ready' },
|
|
170
|
+
// (예시·미사용) 메트릭 resource service.name — 미지정 시 server.serviceName → MEGA_OTEL_SERVICE_NAME 폴백.
|
|
171
|
+
// serviceName: 'sample-crud',
|
|
117
172
|
},
|
|
173
|
+
|
|
174
|
+
// OpenTelemetry 분산 트레이싱 — **config 블록이 아니라 .env 의 MEGA_OTEL_\*** 로 설정한다
|
|
175
|
+
// (MegaTracing.fromEnv, boot.js). MEGA_OTEL_ENABLED='true' + MEGA_OTEL_SERVICE_NAME 필수.
|
|
176
|
+
// (`tracing` 키는 스키마엔 있으나 현재 부팅이 소비하지 않음 — 죽은 설정 회피 위해 블록을 두지 않음.)
|
|
118
177
|
}
|
package/sample/crud/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"node": ">=20"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"dev": "
|
|
10
|
+
"dev": "mega start --watch",
|
|
11
11
|
"start": "NODE_ENV=production mega start",
|
|
12
12
|
"migrate": "mega migrate",
|
|
13
13
|
"migrate:down": "mega migrate:down",
|
|
@@ -25,4 +25,4 @@
|
|
|
25
25
|
"concurrently": "^9.0.0",
|
|
26
26
|
"vitest": "^4.0.0"
|
|
27
27
|
}
|
|
28
|
-
}
|
|
28
|
+
}
|
package/sample/crud/yarn.lock
CHANGED
|
@@ -1234,7 +1234,7 @@ marked@^18.0.5:
|
|
|
1234
1234
|
integrity sha512-S6GcvALHg6K4ohtu4E7x0a1AqhAjp6cV8KhLSyN9qVapnzJkusVBxZRcIU9AeYsbe6P1hKDusSbEOzGyyuce6w==
|
|
1235
1235
|
|
|
1236
1236
|
"mega-framework@file:../..":
|
|
1237
|
-
version "0.1.
|
|
1237
|
+
version "0.1.5"
|
|
1238
1238
|
dependencies:
|
|
1239
1239
|
"@fastify/cookie" "^11.0.2"
|
|
1240
1240
|
"@fastify/cors" "^11.2.0"
|