mega-framework 0.1.5 → 0.1.7
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/bin/mega-ws-hub.js +2 -2
- package/package.json +32 -8
- package/sample/crud/.env +156 -8
- package/sample/crud/.env.example +153 -28
- package/sample/crud/.mega/journal/history/20260612092543-create-users.json +261 -0
- package/sample/crud/.mega/journal/snapshot.json +261 -0
- package/sample/crud/apps/main/controllers/auth-controller.js +22 -14
- package/sample/crud/apps/main/controllers/web-controller.js +7 -5
- package/sample/crud/apps/main/migrations/20260606000001-create-users.js +91 -13
- package/sample/crud/apps/main/migrations/20260606000002-create-boards.js +165 -0
- package/sample/crud/apps/main/migrations/20260606000003-create-logs.js +107 -0
- package/sample/crud/apps/main/models/log-partition-model.js +105 -0
- package/sample/crud/apps/main/models/note-model.js +79 -0
- package/sample/crud/apps/main/models/user-level-model.js +24 -0
- package/sample/crud/apps/main/models/user-model.js +146 -0
- package/sample/crud/apps/main/models/user-type-model.js +21 -0
- package/sample/crud/apps/main/models/wallet-model.js +24 -0
- package/sample/crud/apps/main/routes/users.js +55 -10
- package/sample/crud/apps/main/schedules/log-partition-schedule.js +33 -0
- package/sample/crud/apps/main/services/auth-service.js +39 -24
- package/sample/crud/apps/main/services/log-partition-service.js +101 -0
- package/sample/crud/apps/main/services/note-service.js +6 -6
- package/sample/crud/apps/main/services/redis-demo-service.js +3 -3
- package/sample/crud/apps/main/services/user-service.js +62 -21
- package/sample/crud/apps/main/views/auth/login.ejs +6 -6
- package/sample/crud/apps/main/views/auth/register.ejs +46 -5
- package/sample/crud/apps/main/views/users/edit.ejs +42 -5
- package/sample/crud/apps/main/views/users/list.ejs +6 -2
- package/sample/crud/apps/main/views/users/new.ejs +56 -4
- package/sample/crud/docs/log_partition_design.mm.md +23 -0
- package/sample/crud/mega.config.js +63 -3
- package/sample/crud/package.json +3 -3
- package/sample/crud/scripts/start-ws-hub.sh +2 -2
- package/sample/simple/package.json +2 -2
- package/src/adapters/adapter-manager.js +2 -1
- package/src/adapters/adapter-options.js +30 -0
- package/src/adapters/maria-adapter.js +26 -3
- package/src/adapters/mega-db-adapter.js +7 -1
- package/src/adapters/mongo-adapter.js +19 -1
- package/src/adapters/postgres-adapter.js +25 -2
- package/src/adapters/sqlite-adapter.js +20 -1
- package/src/cli/commands/new.js +13 -3
- package/src/cli/commands/scaffold.js +137 -33
- package/src/cli/generators/index.js +82 -2
- package/src/cli/index.js +478 -104
- package/src/core/ajv-mapper.js +27 -2
- package/src/core/boot.js +485 -237
- package/src/core/cluster-metrics.js +13 -4
- package/src/core/config-validator.js +25 -0
- package/src/core/ctx-builder.js +6 -2
- package/src/core/envelope.js +112 -12
- package/src/core/hub-link.js +65 -4
- package/src/core/i18n.js +11 -1
- package/src/core/index.js +6 -2
- package/src/core/mega-app.js +223 -481
- package/src/core/mega-cluster.js +54 -13
- package/src/core/mega-server.js +40 -9
- package/src/core/migration/dialect-registry.js +107 -0
- package/src/core/migration/dialects/README.md +62 -0
- package/src/core/migration/dialects/maria.js +496 -0
- package/src/core/migration/dialects/mongo.js +824 -0
- package/src/core/migration/dialects/postgres.js +563 -0
- package/src/core/migration/dialects/sqlite.js +476 -0
- package/src/core/migration/differ.js +456 -0
- package/src/core/migration/generate.js +508 -0
- package/src/core/migration/journal.js +167 -0
- package/src/core/migration/model-scan.js +84 -0
- package/src/core/migration/mongo-migration-db.js +97 -0
- package/src/core/migration/schema-builder.js +400 -0
- package/src/core/migration/schema-validator.js +315 -0
- package/src/core/migration-lock.js +205 -0
- package/src/core/migration-runner.js +166 -38
- package/src/core/multipart.js +28 -5
- package/src/core/pipeline.js +129 -0
- package/src/core/router.js +70 -65
- package/src/core/scope-registry.js +0 -1
- package/src/core/security.js +67 -9
- package/src/core/workers-manager.js +12 -1
- package/src/core/ws-cluster.js +10 -3
- package/src/core/ws-message.js +48 -4
- package/src/core/ws-presence.js +624 -0
- package/src/core/ws-roster.js +4 -1
- package/src/core/ws-upgrade.js +118 -12
- package/src/index.js +1 -1
- package/src/lib/hub-protocol.js +29 -0
- package/src/lib/mega-health.js +25 -4
- package/src/lib/mega-job-queue.js +98 -21
- package/src/lib/mega-job.js +29 -0
- package/src/lib/mega-logger.js +1 -1
- package/src/lib/mega-metrics.js +3 -12
- package/src/lib/mega-plugin.js +34 -3
- package/src/lib/mega-schedule.js +40 -22
- package/src/lib/mega-shutdown.js +162 -49
- package/src/lib/mega-tracing.js +66 -19
- package/src/lib/mega-worker.js +5 -1
- package/src/lib/otel-resource.js +36 -0
- package/src/{cli → lib}/ws-hub.js +51 -8
- package/src/models/crud-sql-builder.js +133 -0
- package/src/models/mega-model.js +82 -2
- package/src/models/model-crud.js +483 -0
- package/src/models/mongo-crud.js +285 -0
- package/templates/model/code-mongo.tpl +35 -0
- package/templates/model/code.tpl +15 -1
- package/templates/model/test-mongo.tpl +38 -0
- package/templates/model/test.tpl +4 -0
- package/types/adapters/adapter-manager.d.ts +95 -0
- package/types/adapters/adapter-options.d.ts +91 -0
- package/types/adapters/file-adapter.d.ts +94 -0
- package/types/adapters/file-session-adapter.d.ts +101 -0
- package/types/adapters/index.d.ts +20 -0
- package/types/adapters/maria-adapter.d.ts +115 -0
- package/types/adapters/mega-adapter.d.ts +215 -0
- package/types/adapters/mega-bus-adapter.d.ts +45 -0
- package/types/adapters/mega-cache-adapter.d.ts +47 -0
- package/types/adapters/mega-db-adapter.d.ts +47 -0
- package/types/adapters/mega-lock-adapter.d.ts +62 -0
- package/types/adapters/mega-log-sink-adapter.d.ts +15 -0
- package/types/adapters/mega-session-adapter.d.ts +32 -0
- package/types/adapters/mongo-adapter.d.ts +139 -0
- package/types/adapters/nats-adapter.d.ts +108 -0
- package/types/adapters/postgres-adapter.d.ts +139 -0
- package/types/adapters/redis-adapter.d.ts +70 -0
- package/types/adapters/redis-session-adapter.d.ts +82 -0
- package/types/adapters/redlock-adapter.d.ts +149 -0
- package/types/adapters/registry.d.ts +46 -0
- package/types/adapters/sqlite-adapter.d.ts +106 -0
- package/types/auth/index.d.ts +24 -0
- package/types/cli/commands/console-cmd.d.ts +37 -0
- package/types/cli/commands/new.d.ts +16 -0
- package/types/cli/commands/routes.d.ts +36 -0
- package/types/cli/commands/scaffold.d.ts +78 -0
- package/types/cli/commands/test-cmd.d.ts +14 -0
- package/types/cli/generators/index.d.ts +112 -0
- package/types/cli/index.d.ts +249 -0
- package/types/cli/template-engine.d.ts +40 -0
- package/types/core/ajv-mapper.d.ts +27 -0
- package/types/core/boot.d.ts +233 -0
- package/types/core/cluster-metrics.d.ts +52 -0
- package/types/core/config-loader.d.ts +13 -0
- package/types/core/config-validator.d.ts +30 -0
- package/types/core/ctx-builder.d.ts +80 -0
- package/types/core/envelope.d.ts +79 -0
- package/types/core/error-mapper.d.ts +17 -0
- package/types/core/formbody.d.ts +41 -0
- package/types/core/hub-link.d.ts +264 -0
- package/types/core/i18n.d.ts +178 -0
- package/types/core/index.d.ts +28 -0
- package/types/core/mega-app.d.ts +529 -0
- package/types/core/mega-cluster.d.ts +104 -0
- package/types/core/mega-server.d.ts +91 -0
- package/types/core/mega-service.d.ts +31 -0
- package/types/core/migration/dialect-registry.d.ts +22 -0
- package/types/core/migration/dialects/maria.d.ts +99 -0
- package/types/core/migration/dialects/mongo.d.ts +89 -0
- package/types/core/migration/dialects/postgres.d.ts +117 -0
- package/types/core/migration/dialects/sqlite.d.ts +111 -0
- package/types/core/migration/differ.d.ts +47 -0
- package/types/core/migration/generate.d.ts +56 -0
- package/types/core/migration/journal.d.ts +52 -0
- package/types/core/migration/model-scan.d.ts +19 -0
- package/types/core/migration/mongo-migration-db.d.ts +7 -0
- package/types/core/migration/schema-builder.d.ts +197 -0
- package/types/core/migration/schema-validator.d.ts +20 -0
- package/types/core/migration-lock.d.ts +33 -0
- package/types/core/migration-runner.d.ts +101 -0
- package/types/core/multipart.d.ts +86 -0
- package/types/core/openapi.d.ts +62 -0
- package/types/core/pipeline.d.ts +92 -0
- package/types/core/router.d.ts +159 -0
- package/types/core/routes-loader.d.ts +21 -0
- package/types/core/scope-registry.d.ts +14 -0
- package/types/core/security.d.ts +77 -0
- package/types/core/services-loader.d.ts +27 -0
- package/types/core/session-cleanup-schedule.d.ts +19 -0
- package/types/core/session-store.d.ts +18 -0
- package/types/core/session.d.ts +77 -0
- package/types/core/static-assets.d.ts +73 -0
- package/types/core/template.d.ts +106 -0
- package/types/core/workers-manager.d.ts +79 -0
- package/types/core/ws-cluster.d.ts +208 -0
- package/types/core/ws-compression.d.ts +112 -0
- package/types/core/ws-controller.d.ts +65 -0
- package/types/core/ws-message.d.ts +106 -0
- package/types/core/ws-presence.d.ts +273 -0
- package/types/core/ws-roster.d.ts +96 -0
- package/types/core/ws-upgrade.d.ts +231 -0
- package/types/errors/config-error.d.ts +10 -0
- package/types/errors/http-errors.d.ts +120 -0
- package/types/errors/index.d.ts +3 -0
- package/types/errors/mega-error.d.ts +32 -0
- package/types/index.d.ts +39 -0
- package/types/lib/asp/config.d.ts +49 -0
- package/types/lib/asp/crypto.d.ts +43 -0
- package/types/lib/asp/errors.d.ts +30 -0
- package/types/lib/asp/nonce-cache.d.ts +52 -0
- package/types/lib/asp/plugin.d.ts +30 -0
- package/types/lib/asp/ws-terminator.d.ts +45 -0
- package/types/lib/env-mapper.d.ts +14 -0
- package/types/lib/hub-protocol.d.ts +106 -0
- package/types/lib/index.d.ts +22 -0
- package/types/lib/logger/telegram-core.d.ts +104 -0
- package/types/lib/logger/telegram-transport.d.ts +45 -0
- package/types/lib/mega-brute-force.d.ts +66 -0
- package/types/lib/mega-circuit-breaker.d.ts +241 -0
- package/types/lib/mega-cron.d.ts +66 -0
- package/types/lib/mega-hash.d.ts +32 -0
- package/types/lib/mega-health.d.ts +41 -0
- package/types/lib/mega-job-queue.d.ts +176 -0
- package/types/lib/mega-job-worker.d.ts +130 -0
- package/types/lib/mega-job.d.ts +138 -0
- package/types/lib/mega-logger.d.ts +45 -0
- package/types/lib/mega-metrics.d.ts +285 -0
- package/types/lib/mega-plugin.d.ts +245 -0
- package/types/lib/mega-retry.d.ts +85 -0
- package/types/lib/mega-schedule.d.ts +260 -0
- package/types/lib/mega-shutdown.d.ts +135 -0
- package/types/lib/mega-tracing.d.ts +224 -0
- package/types/lib/mega-worker.d.ts +127 -0
- package/types/lib/otel-resource.d.ts +16 -0
- package/types/lib/worker-runner/process-entry.d.ts +1 -0
- package/types/lib/worker-runner/task-dispatch.d.ts +28 -0
- package/types/lib/worker-runner/thread-entry.d.ts +1 -0
- package/types/lib/ws-hub.d.ts +234 -0
- package/types/models/crud-sql-builder.d.ts +48 -0
- package/types/models/index.d.ts +1 -0
- package/types/models/mega-model.d.ts +138 -0
- package/types/models/model-crud.d.ts +82 -0
- package/types/models/mongo-crud.d.ts +59 -0
- package/types/test/index.d.ts +84 -0
- package/.env +0 -127
- package/sample/crud/apps/main/migrations/20260606000002-add-auth-to-users.js +0 -30
- package/sample/crud/apps/main/models/note.js +0 -71
- package/sample/crud/apps/main/models/user.js +0 -86
- package/sample/crud/package-lock.json +0 -5665
- package/sample/crud/yarn.lock +0 -2142
- package/sample/simple/package-lock.json +0 -1851
package/bin/mega-ws-hub.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// @ts-check
|
|
3
3
|
/**
|
|
4
|
-
* `mega ws-hub` 실행 launcher (ADR-032). 실제 로직은 src/
|
|
4
|
+
* `mega ws-hub` 실행 launcher (ADR-032). 실제 로직은 src/lib/ws-hub.js.
|
|
5
5
|
*
|
|
6
6
|
* 사용: MEGA_WSHUB_TOKENS=tok1,tok2 [MEGA_WSHUB_PORT=3100] [MEGA_WSHUB_HOST=0.0.0.0]
|
|
7
7
|
* [MEGA_WSHUB_HEARTBEAT_MS=25000] mega-ws-hub
|
|
8
8
|
*/
|
|
9
|
-
import { runWsHubCli } from '../src/
|
|
9
|
+
import { runWsHubCli } from '../src/lib/ws-hub.js'
|
|
10
10
|
|
|
11
11
|
runWsHubCli().catch((err) => {
|
|
12
12
|
// 부팅 실패는 fail-fast — 메시지 출력 후 비정상 종료 (P4: 이유 명확, silent X).
|
package/package.json
CHANGED
|
@@ -1,33 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mega-framework",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Node.js 마이크로프레임웍 + CLI — Slim의 가벼움 + Rails의 관례",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
7
|
"node": ">=20.6.0"
|
|
8
8
|
},
|
|
9
9
|
"main": "src/index.js",
|
|
10
|
+
"types": "types/index.d.ts",
|
|
11
|
+
"workspaces": [
|
|
12
|
+
"sample/crud",
|
|
13
|
+
"sample/simple"
|
|
14
|
+
],
|
|
10
15
|
"repository": {
|
|
11
16
|
"type": "git",
|
|
12
17
|
"url": "git+https://git.nyx-zone.com/mega/mega-framework.git"
|
|
13
18
|
},
|
|
14
19
|
"exports": {
|
|
15
|
-
".":
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
"./
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./types/index.d.ts",
|
|
22
|
+
"default": "./src/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./lib": {
|
|
25
|
+
"types": "./types/lib/index.d.ts",
|
|
26
|
+
"default": "./src/lib/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./errors": {
|
|
29
|
+
"types": "./types/errors/index.d.ts",
|
|
30
|
+
"default": "./src/errors/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./auth": {
|
|
33
|
+
"types": "./types/auth/index.d.ts",
|
|
34
|
+
"default": "./src/auth/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./test": {
|
|
37
|
+
"types": "./types/test/index.d.ts",
|
|
38
|
+
"default": "./src/test/index.js"
|
|
39
|
+
},
|
|
20
40
|
"./eslint-plugin": "./src/eslint-plugin/index.js",
|
|
21
41
|
"./package.json": "./package.json"
|
|
22
42
|
},
|
|
23
43
|
"files": [
|
|
24
44
|
"src/**/*.js",
|
|
45
|
+
"types/**/*.d.ts",
|
|
25
46
|
"bin/**/*.js",
|
|
26
47
|
"templates/**",
|
|
27
48
|
"sample/**",
|
|
28
49
|
"infra/**",
|
|
29
50
|
"docker-compose.yml",
|
|
30
|
-
".env",
|
|
31
51
|
".env.example",
|
|
32
52
|
"eslint.config.js",
|
|
33
53
|
"vitest.config.js",
|
|
@@ -51,6 +71,7 @@
|
|
|
51
71
|
"test:coverage": "vitest run --coverage",
|
|
52
72
|
"lint": "eslint src test",
|
|
53
73
|
"typecheck": "tsc -p jsconfig.json --noEmit",
|
|
74
|
+
"build:types": "rm -rf types && tsc -p tsconfig.build.json",
|
|
54
75
|
"format": "prettier -w src test packages",
|
|
55
76
|
"infra:up": "docker compose up -d --wait",
|
|
56
77
|
"infra:down": "docker compose down -v",
|
|
@@ -58,7 +79,8 @@
|
|
|
58
79
|
"infra:reset": "docker compose down -v && docker compose up -d --wait",
|
|
59
80
|
"test:integration": "npm run infra:up && vitest run test/integration && npm run infra:down",
|
|
60
81
|
"test:unit": "vitest run test/unit",
|
|
61
|
-
"prepublishOnly": "npm run lint && npm run typecheck && npm run test:unit",
|
|
82
|
+
"prepublishOnly": "npm run build:types && npm run lint && npm run typecheck && npm run test:unit",
|
|
83
|
+
"prepare": "npm run build:types",
|
|
62
84
|
"release": "bash scripts/publish.sh"
|
|
63
85
|
},
|
|
64
86
|
"devDependencies": {
|
|
@@ -89,6 +111,7 @@
|
|
|
89
111
|
"@fastify/swagger": "^9.7.0",
|
|
90
112
|
"@fastify/swagger-ui": "^5.2.6",
|
|
91
113
|
"@opentelemetry/api": "^1.9.1",
|
|
114
|
+
"@opentelemetry/core": "^2.7.1",
|
|
92
115
|
"@opentelemetry/exporter-prometheus": "^0.218.0",
|
|
93
116
|
"@opentelemetry/exporter-trace-otlp-http": "^0.218.0",
|
|
94
117
|
"@opentelemetry/exporter-zipkin": "^2.7.1",
|
|
@@ -97,6 +120,7 @@
|
|
|
97
120
|
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
98
121
|
"@opentelemetry/semantic-conventions": "^1.41.1",
|
|
99
122
|
"ajv": "^8.20.0",
|
|
123
|
+
"ajv-formats": "^3.0.1",
|
|
100
124
|
"better-sqlite3": "^12.10.0",
|
|
101
125
|
"commander": "^15.0.0",
|
|
102
126
|
"croner": "^10.0.1",
|
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/lib/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/lib/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
|