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.
Files changed (236) hide show
  1. package/bin/mega-ws-hub.js +2 -2
  2. package/package.json +32 -8
  3. package/sample/crud/.env +156 -8
  4. package/sample/crud/.env.example +153 -28
  5. package/sample/crud/.mega/journal/history/20260612092543-create-users.json +261 -0
  6. package/sample/crud/.mega/journal/snapshot.json +261 -0
  7. package/sample/crud/apps/main/controllers/auth-controller.js +22 -14
  8. package/sample/crud/apps/main/controllers/web-controller.js +7 -5
  9. package/sample/crud/apps/main/migrations/20260606000001-create-users.js +91 -13
  10. package/sample/crud/apps/main/migrations/20260606000002-create-boards.js +165 -0
  11. package/sample/crud/apps/main/migrations/20260606000003-create-logs.js +107 -0
  12. package/sample/crud/apps/main/models/log-partition-model.js +105 -0
  13. package/sample/crud/apps/main/models/note-model.js +79 -0
  14. package/sample/crud/apps/main/models/user-level-model.js +24 -0
  15. package/sample/crud/apps/main/models/user-model.js +146 -0
  16. package/sample/crud/apps/main/models/user-type-model.js +21 -0
  17. package/sample/crud/apps/main/models/wallet-model.js +24 -0
  18. package/sample/crud/apps/main/routes/users.js +55 -10
  19. package/sample/crud/apps/main/schedules/log-partition-schedule.js +33 -0
  20. package/sample/crud/apps/main/services/auth-service.js +39 -24
  21. package/sample/crud/apps/main/services/log-partition-service.js +101 -0
  22. package/sample/crud/apps/main/services/note-service.js +6 -6
  23. package/sample/crud/apps/main/services/redis-demo-service.js +3 -3
  24. package/sample/crud/apps/main/services/user-service.js +62 -21
  25. package/sample/crud/apps/main/views/auth/login.ejs +6 -6
  26. package/sample/crud/apps/main/views/auth/register.ejs +46 -5
  27. package/sample/crud/apps/main/views/users/edit.ejs +42 -5
  28. package/sample/crud/apps/main/views/users/list.ejs +6 -2
  29. package/sample/crud/apps/main/views/users/new.ejs +56 -4
  30. package/sample/crud/docs/log_partition_design.mm.md +23 -0
  31. package/sample/crud/mega.config.js +63 -3
  32. package/sample/crud/package.json +3 -3
  33. package/sample/crud/scripts/start-ws-hub.sh +2 -2
  34. package/sample/simple/package.json +2 -2
  35. package/src/adapters/adapter-manager.js +2 -1
  36. package/src/adapters/adapter-options.js +30 -0
  37. package/src/adapters/maria-adapter.js +26 -3
  38. package/src/adapters/mega-db-adapter.js +7 -1
  39. package/src/adapters/mongo-adapter.js +19 -1
  40. package/src/adapters/postgres-adapter.js +25 -2
  41. package/src/adapters/sqlite-adapter.js +20 -1
  42. package/src/cli/commands/new.js +13 -3
  43. package/src/cli/commands/scaffold.js +137 -33
  44. package/src/cli/generators/index.js +82 -2
  45. package/src/cli/index.js +478 -104
  46. package/src/core/ajv-mapper.js +27 -2
  47. package/src/core/boot.js +485 -237
  48. package/src/core/cluster-metrics.js +13 -4
  49. package/src/core/config-validator.js +25 -0
  50. package/src/core/ctx-builder.js +6 -2
  51. package/src/core/envelope.js +112 -12
  52. package/src/core/hub-link.js +65 -4
  53. package/src/core/i18n.js +11 -1
  54. package/src/core/index.js +6 -2
  55. package/src/core/mega-app.js +223 -481
  56. package/src/core/mega-cluster.js +54 -13
  57. package/src/core/mega-server.js +40 -9
  58. package/src/core/migration/dialect-registry.js +107 -0
  59. package/src/core/migration/dialects/README.md +62 -0
  60. package/src/core/migration/dialects/maria.js +496 -0
  61. package/src/core/migration/dialects/mongo.js +824 -0
  62. package/src/core/migration/dialects/postgres.js +563 -0
  63. package/src/core/migration/dialects/sqlite.js +476 -0
  64. package/src/core/migration/differ.js +456 -0
  65. package/src/core/migration/generate.js +508 -0
  66. package/src/core/migration/journal.js +167 -0
  67. package/src/core/migration/model-scan.js +84 -0
  68. package/src/core/migration/mongo-migration-db.js +97 -0
  69. package/src/core/migration/schema-builder.js +400 -0
  70. package/src/core/migration/schema-validator.js +315 -0
  71. package/src/core/migration-lock.js +205 -0
  72. package/src/core/migration-runner.js +166 -38
  73. package/src/core/multipart.js +28 -5
  74. package/src/core/pipeline.js +129 -0
  75. package/src/core/router.js +70 -65
  76. package/src/core/scope-registry.js +0 -1
  77. package/src/core/security.js +67 -9
  78. package/src/core/workers-manager.js +12 -1
  79. package/src/core/ws-cluster.js +10 -3
  80. package/src/core/ws-message.js +48 -4
  81. package/src/core/ws-presence.js +624 -0
  82. package/src/core/ws-roster.js +4 -1
  83. package/src/core/ws-upgrade.js +118 -12
  84. package/src/index.js +1 -1
  85. package/src/lib/hub-protocol.js +29 -0
  86. package/src/lib/mega-health.js +25 -4
  87. package/src/lib/mega-job-queue.js +98 -21
  88. package/src/lib/mega-job.js +29 -0
  89. package/src/lib/mega-logger.js +1 -1
  90. package/src/lib/mega-metrics.js +3 -12
  91. package/src/lib/mega-plugin.js +34 -3
  92. package/src/lib/mega-schedule.js +40 -22
  93. package/src/lib/mega-shutdown.js +162 -49
  94. package/src/lib/mega-tracing.js +66 -19
  95. package/src/lib/mega-worker.js +5 -1
  96. package/src/lib/otel-resource.js +36 -0
  97. package/src/{cli → lib}/ws-hub.js +51 -8
  98. package/src/models/crud-sql-builder.js +133 -0
  99. package/src/models/mega-model.js +82 -2
  100. package/src/models/model-crud.js +483 -0
  101. package/src/models/mongo-crud.js +285 -0
  102. package/templates/model/code-mongo.tpl +35 -0
  103. package/templates/model/code.tpl +15 -1
  104. package/templates/model/test-mongo.tpl +38 -0
  105. package/templates/model/test.tpl +4 -0
  106. package/types/adapters/adapter-manager.d.ts +95 -0
  107. package/types/adapters/adapter-options.d.ts +91 -0
  108. package/types/adapters/file-adapter.d.ts +94 -0
  109. package/types/adapters/file-session-adapter.d.ts +101 -0
  110. package/types/adapters/index.d.ts +20 -0
  111. package/types/adapters/maria-adapter.d.ts +115 -0
  112. package/types/adapters/mega-adapter.d.ts +215 -0
  113. package/types/adapters/mega-bus-adapter.d.ts +45 -0
  114. package/types/adapters/mega-cache-adapter.d.ts +47 -0
  115. package/types/adapters/mega-db-adapter.d.ts +47 -0
  116. package/types/adapters/mega-lock-adapter.d.ts +62 -0
  117. package/types/adapters/mega-log-sink-adapter.d.ts +15 -0
  118. package/types/adapters/mega-session-adapter.d.ts +32 -0
  119. package/types/adapters/mongo-adapter.d.ts +139 -0
  120. package/types/adapters/nats-adapter.d.ts +108 -0
  121. package/types/adapters/postgres-adapter.d.ts +139 -0
  122. package/types/adapters/redis-adapter.d.ts +70 -0
  123. package/types/adapters/redis-session-adapter.d.ts +82 -0
  124. package/types/adapters/redlock-adapter.d.ts +149 -0
  125. package/types/adapters/registry.d.ts +46 -0
  126. package/types/adapters/sqlite-adapter.d.ts +106 -0
  127. package/types/auth/index.d.ts +24 -0
  128. package/types/cli/commands/console-cmd.d.ts +37 -0
  129. package/types/cli/commands/new.d.ts +16 -0
  130. package/types/cli/commands/routes.d.ts +36 -0
  131. package/types/cli/commands/scaffold.d.ts +78 -0
  132. package/types/cli/commands/test-cmd.d.ts +14 -0
  133. package/types/cli/generators/index.d.ts +112 -0
  134. package/types/cli/index.d.ts +249 -0
  135. package/types/cli/template-engine.d.ts +40 -0
  136. package/types/core/ajv-mapper.d.ts +27 -0
  137. package/types/core/boot.d.ts +233 -0
  138. package/types/core/cluster-metrics.d.ts +52 -0
  139. package/types/core/config-loader.d.ts +13 -0
  140. package/types/core/config-validator.d.ts +30 -0
  141. package/types/core/ctx-builder.d.ts +80 -0
  142. package/types/core/envelope.d.ts +79 -0
  143. package/types/core/error-mapper.d.ts +17 -0
  144. package/types/core/formbody.d.ts +41 -0
  145. package/types/core/hub-link.d.ts +264 -0
  146. package/types/core/i18n.d.ts +178 -0
  147. package/types/core/index.d.ts +28 -0
  148. package/types/core/mega-app.d.ts +529 -0
  149. package/types/core/mega-cluster.d.ts +104 -0
  150. package/types/core/mega-server.d.ts +91 -0
  151. package/types/core/mega-service.d.ts +31 -0
  152. package/types/core/migration/dialect-registry.d.ts +22 -0
  153. package/types/core/migration/dialects/maria.d.ts +99 -0
  154. package/types/core/migration/dialects/mongo.d.ts +89 -0
  155. package/types/core/migration/dialects/postgres.d.ts +117 -0
  156. package/types/core/migration/dialects/sqlite.d.ts +111 -0
  157. package/types/core/migration/differ.d.ts +47 -0
  158. package/types/core/migration/generate.d.ts +56 -0
  159. package/types/core/migration/journal.d.ts +52 -0
  160. package/types/core/migration/model-scan.d.ts +19 -0
  161. package/types/core/migration/mongo-migration-db.d.ts +7 -0
  162. package/types/core/migration/schema-builder.d.ts +197 -0
  163. package/types/core/migration/schema-validator.d.ts +20 -0
  164. package/types/core/migration-lock.d.ts +33 -0
  165. package/types/core/migration-runner.d.ts +101 -0
  166. package/types/core/multipart.d.ts +86 -0
  167. package/types/core/openapi.d.ts +62 -0
  168. package/types/core/pipeline.d.ts +92 -0
  169. package/types/core/router.d.ts +159 -0
  170. package/types/core/routes-loader.d.ts +21 -0
  171. package/types/core/scope-registry.d.ts +14 -0
  172. package/types/core/security.d.ts +77 -0
  173. package/types/core/services-loader.d.ts +27 -0
  174. package/types/core/session-cleanup-schedule.d.ts +19 -0
  175. package/types/core/session-store.d.ts +18 -0
  176. package/types/core/session.d.ts +77 -0
  177. package/types/core/static-assets.d.ts +73 -0
  178. package/types/core/template.d.ts +106 -0
  179. package/types/core/workers-manager.d.ts +79 -0
  180. package/types/core/ws-cluster.d.ts +208 -0
  181. package/types/core/ws-compression.d.ts +112 -0
  182. package/types/core/ws-controller.d.ts +65 -0
  183. package/types/core/ws-message.d.ts +106 -0
  184. package/types/core/ws-presence.d.ts +273 -0
  185. package/types/core/ws-roster.d.ts +96 -0
  186. package/types/core/ws-upgrade.d.ts +231 -0
  187. package/types/errors/config-error.d.ts +10 -0
  188. package/types/errors/http-errors.d.ts +120 -0
  189. package/types/errors/index.d.ts +3 -0
  190. package/types/errors/mega-error.d.ts +32 -0
  191. package/types/index.d.ts +39 -0
  192. package/types/lib/asp/config.d.ts +49 -0
  193. package/types/lib/asp/crypto.d.ts +43 -0
  194. package/types/lib/asp/errors.d.ts +30 -0
  195. package/types/lib/asp/nonce-cache.d.ts +52 -0
  196. package/types/lib/asp/plugin.d.ts +30 -0
  197. package/types/lib/asp/ws-terminator.d.ts +45 -0
  198. package/types/lib/env-mapper.d.ts +14 -0
  199. package/types/lib/hub-protocol.d.ts +106 -0
  200. package/types/lib/index.d.ts +22 -0
  201. package/types/lib/logger/telegram-core.d.ts +104 -0
  202. package/types/lib/logger/telegram-transport.d.ts +45 -0
  203. package/types/lib/mega-brute-force.d.ts +66 -0
  204. package/types/lib/mega-circuit-breaker.d.ts +241 -0
  205. package/types/lib/mega-cron.d.ts +66 -0
  206. package/types/lib/mega-hash.d.ts +32 -0
  207. package/types/lib/mega-health.d.ts +41 -0
  208. package/types/lib/mega-job-queue.d.ts +176 -0
  209. package/types/lib/mega-job-worker.d.ts +130 -0
  210. package/types/lib/mega-job.d.ts +138 -0
  211. package/types/lib/mega-logger.d.ts +45 -0
  212. package/types/lib/mega-metrics.d.ts +285 -0
  213. package/types/lib/mega-plugin.d.ts +245 -0
  214. package/types/lib/mega-retry.d.ts +85 -0
  215. package/types/lib/mega-schedule.d.ts +260 -0
  216. package/types/lib/mega-shutdown.d.ts +135 -0
  217. package/types/lib/mega-tracing.d.ts +224 -0
  218. package/types/lib/mega-worker.d.ts +127 -0
  219. package/types/lib/otel-resource.d.ts +16 -0
  220. package/types/lib/worker-runner/process-entry.d.ts +1 -0
  221. package/types/lib/worker-runner/task-dispatch.d.ts +28 -0
  222. package/types/lib/worker-runner/thread-entry.d.ts +1 -0
  223. package/types/lib/ws-hub.d.ts +234 -0
  224. package/types/models/crud-sql-builder.d.ts +48 -0
  225. package/types/models/index.d.ts +1 -0
  226. package/types/models/mega-model.d.ts +138 -0
  227. package/types/models/model-crud.d.ts +82 -0
  228. package/types/models/mongo-crud.d.ts +59 -0
  229. package/types/test/index.d.ts +84 -0
  230. package/.env +0 -127
  231. package/sample/crud/apps/main/migrations/20260606000002-add-auth-to-users.js +0 -30
  232. package/sample/crud/apps/main/models/note.js +0 -71
  233. package/sample/crud/apps/main/models/user.js +0 -86
  234. package/sample/crud/package-lock.json +0 -5665
  235. package/sample/crud/yarn.lock +0 -2142
  236. package/sample/simple/package-lock.json +0 -1851
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  // @ts-check
3
3
  /**
4
- * `mega ws-hub` 실행 launcher (ADR-032). 실제 로직은 src/cli/ws-hub.js.
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/cli/ws-hub.js'
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.5",
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
- ".": "./src/index.js",
16
- "./lib": "./src/lib/index.js",
17
- "./errors": "./src/errors/index.js",
18
- "./auth": "./src/auth/index.js",
19
- "./test": "./src/test/index.js",
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
- DATABASE_URL=postgres://mega:dkTkqkfl12@localhost:5432/mega_test
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
- MONGO_URL=mongodb://mega:dkTkqkfl12@localhost:27017/mega_test?authSource=admin
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
- ASP_MASTER_SECRET=demo-asp-master-7Qe2mWzR1tYbN8sLpKvX0cAfH4dG6jU
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
- BRIDGE_ID=crud-1
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
@@ -1,50 +1,175 @@
1
- # sample-crud 환경변수 (.env.example) — 복사해서 .env 로 쓰고 실제 값 채우기. .env 는 git 에 안 올림.
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
- # HTTP 포트
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
- # Postgres 연결 (필수) services.databases.primary.url 이 읽는다.
10
- # 예: docker compose postgres
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 연결 (필수, ADR-155/157) 세션 store·brute-force·/demo/redis·cron·jobs 데모 캐시 + 분산 락(redlock).
17
- # DB 인덱스를 분리해 키 충돌을 피한다(/0 세션, /1 demo, /2 rate, /3 lock).
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) — services.caches.lock 이 읽는다. /demo/cron 스케줄의 클러스터 중복방지(leader election).
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 연결 (필수, ADR-119) services.buses.jobs.url 이 읽는다. /demo/jobs 잡 큐(EmailJob) JetStream 백엔드.
25
- # `mega worker` 프로세스가 소비하고 웹은 enqueue 한다. JetStream 활성 NATS 서버 필요(nats-server -js).
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
- # ASP WebSocket 데모 masterSecret (필수, ADR-158) — asp.masterSecret 이 읽는다. /ws/chat 의 E:/P:
33
- # 프레임 유도에 쓰인다. ASP 클라이언트(WASM MegaSocket)도 같은 secret 으로 키를 만드는 공유-키
34
- # 구조라 데모 페이지가 값을 브라우저에 주입한다 운영 secret 과 섞이지 않게 데모 전용 값을 둔다.
35
- ASP_MASTER_SECRET=change-me-to-a-demo-asp-secret
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
- # OpenTelemetry 트레이싱 (선택, ADR-104/126/163) — /demo/tracing 데모가 요청별 trace_id 를 만들고 Zipkin 으로
38
- # 잇는다. 미설정/false 트레이싱 OFF(데모는 비활성 안내를 보여줌). docker 의 otel-collector(:4318 OTLP HTTP)·
39
- # zipkin(:9411) 가동 시 true 켠다. exporter otlp → collector → zipkin 경로로 span 이 전달된다.
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 이 trace 딥링크 base(.../api/v2 떼 UI 루트)로 쓴다.
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
- # 업로드 저장 디렉터리 (선택, ADR-163) — /demo/upload 이 파일을 저장할 위치. 상대경로는 프로젝트 루트
49
- # (cwd) 기준, 절대경로면 그대로. 미설정 시 var/uploads(.gitignore). 다운로드도 같은 위치에서 소스로 읽는다.
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