--- domain: api last_rule_review_commit: 1f1527d7c6b8f115ba12c951c9919d779f071b23 last_rule_updated_at: 2026-06-01 --- # api ## 목적 / 책임 클라이언트-facing socket API endpoint와 ALT operator-facing control plane을 제공한다. proto-socket server lifecycle, connection setup, heartbeat timing, ALT protobuf parser registration, API configuration, and worker-facing client proxy lifecycle을 이 경계에서 관리한다. ## 포함 경로 - `services/api/cmd/alt-api/` - API service entrypoint - `services/api/internal/config/` - API environment configuration - `services/api/internal/contracts/` - API-local ALT protobuf parser map - `services/api/internal/socket/` - client-facing proto-socket server, session handlers, worker forwarding - `services/api/internal/workerclient/` - API-owned proto-socket client proxy to worker - `services/api/go.mod` - API module dependencies ## 제외 경로 - `services/worker/` - long-running jobs and backtest execution - `packages/contracts/` - protobuf schema source - `packages/domain/` - transport-free domain vocabulary - `apps/client/` - UI and client navigation ## 주요 구성 요소 - `config.Config` - host, port, socket path, heartbeat timing, WebSocket origin patterns, and worker socket URL - `config.Load` - environment variable parsing with local fallback defaults - `contracts.ParserMap` - parser registration for generated ALT protobuf messages - `socket.NewServer` - proto-socket `WsServer` construction and session handler registration - `socket.marketHandlers` - `ListInstruments` and `ListBars` validation plus worker forwarding - `socket.backtestHandlers` - start, list, detail, result, and compare backtest request validation plus worker forwarding - `workerclient.WorkerClient` - API-side worker request/response proxy for market reads and backtest command/query contracts - `workerclient.sendTyped` - shared worker forwarding path for timeout, unavailable, and context cancellation mapping - `cmd/alt-api/main.go` - signal handling and service lifecycle ## 유지할 패턴 - Read configuration from environment variables with explicit local defaults. - Keep process lifecycle in `cmd/alt-api`; keep reusable socket construction under `internal/socket`. - Keep ALT protobuf parser registration under `internal/contracts` and inject it into proto-socket server construction. - Treat proto-socket as the transport abstraction; ALT payload parsing should be derived from contracts. - Keep client-facing command/query handling in API thin: validate request shape, map transport failures to typed contract errors, and route long-running execution or worker-owned reads through the worker boundary. - Keep worker connectivity lifecycle observable and injectable enough for tests; avoid spreading worker connection state through unrelated API packages. - Keep `HelloResponse.capabilities` aligned with actually registered API session handlers. - Bound forwarded worker calls with a context timeout and return typed `ErrorInfo` payloads instead of leaking Go handler errors to clients. ## 다른 도메인과의 경계 - **contracts**: API imports generated contract packages and owns API-local parser registration, but contract source stays in `packages/contracts`. - **worker**: API may forward commands/queries to worker and surface worker availability, but should not run long backtest/import work inline or own worker storage dependencies. - **client**: API serves client sessions; client UI state and navigation stay in Flutter. ## 금지 사항 - Do not add direct Flutter/client assumptions to API internals. - Do not put scheduled job loops or heavy data processing in the API service. - Do not add worker execution engines, PostgreSQL stores, Redis queues, or provider adapters to API internals. - Do not bypass proto-socket for the main client session path without an explicit architecture update. - Do not require Flutter client or any external operator surface to connect directly to worker runtime surfaces.