-
Notifications
You must be signed in to change notification settings - Fork 0
tech stack
기준일: 2026-06-09
이 문서는 현재 active 기술과 retired/planned 항목을 분리한다. 과거 Hub 중심 Prometheus Agent/AMP 구성, 독립 Risk Normalizer/Risk Score Engine 서비스, 서버리스 Dashboard API 초안은 현재 기본 구조로 보지 않는다.
| 상태 | 의미 |
|---|---|
| active | 현재 코드, Terraform, Helm chart, 운영 절차의 기본 경로 |
| retired | 과거 구현·검증 이력이 있으나 현재 기본 구성에서 제거되었거나 재설치하지 않는 항목 |
| planned | 후속 보강 또는 선택 구성. 현재 구현으로 표현하지 않음 |
| reference | 원본 저장소나 설계 입력으로만 남은 참조 항목 |
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| K3s | active | Factory A/B/C Spoke 런타임 | Factory A는 Raspberry Pi 3-node, B/C는 VM testbed |
Helm chart aegis-spoke
|
active | 공장별 workload packaging |
charts/aegis-spoke, envs/factory-*
|
| Hub ArgoCD + Tailscale | active | Hub에서 Factory K3s API로 GitOps sync | Factory API는 Tailscale 경유 |
| Longhorn | active (FA) | Factory A InfluxDB/outbox PVC 기준선 | failover/failback 운영 이력 있음 |
| InfluxDB | active (FA) | 센서, AI, sound, Kubernetes 상태 원천 |
factory-a-log-adapter 입력 |
factory-a-log-adapter |
active | Factory A 원천 상태를 canonical JSON으로 변환 | apps/factory-a-log-adapter |
| VM dummy generator | active (FB/C) | testbed canonical JSON 생성 | 실제 공장 데이터가 아니라 synthetic 데이터 |
edge-iot-publisher |
active | outbox JSON을 AWS IoT Core MQTT로 송신 | Factory A PVC, Factory B/C hostPath |
snapshot-uploader |
active (FA) | presigned URL로 image binary를 S3에 직접 업로드 | IoT에는 metadata event만 송신 |
edge-agent |
reference | 통합 전/후속 개념 설명 | 현재 표준 송신 경로는 adapter/publisher 분리 |
Factory A는 Raspberry Pi 3-node K3s에서 InfluxDB와 센서 데이터를 수집하는 운영형 Spoke다. Factory B/C는 multi-factory 제어 경로와 Dashboard 카드 분리를 검증하는 VM 테스트베드로, 실제 센서 정확도를 검증하는 환경이 아니다. 두 Spoke 유형 모두 edge-iot-publisher를 공통 송신 컴포넌트로 쓰지만, outbox 경로(PVC vs hostPath)와 데이터 생성 방식(log adapter vs dummy generator)이 다르다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| Terraform | active | AWS 인프라 source of truth |
infra/*, AWS provider ~> 6.0
|
| AWS EKS Hub | active | Control/Management VPC의 Hub Kubernetes | infra/hub |
| Hub ArgoCD | active | Factory Spoke sync와 app 상태 확인 | Tailscale 등록 cluster 사용 |
| Tailscale | active | Hub-Spoke private control path | 공인 IP 없이 K3s API 접근 |
| AWS Load Balancer Controller | active | Hub Admin UI ingress/ALB | Hub rebuild 이력 있음 |
| GitHub Actions | active/planned | image build, ECR push, manifest update 경로 | 워크플로 repo/role 가정은 후속 재확인 필요 |
| S3 backend + native lockfile | active | Terraform state 저장과 잠금 | backend/state ownership 확인 후 조작 |
| Hub risk-normalizer Pod | retired | 과거 Hub 기반 risk 계산 구상 | 현재 계산은 DataProcessor Lambda 내부 |
Control 플레인의 핵심은 Hub EKS가 Tailscale 경유로 Factory K3s API에 접근해 GitOps를 수행한다는 점이다. 공장 네트워크에 공인 IP가 없어도 ArgoCD가 Spoke workload를 sync할 수 있다. Terraform state는 root별 S3 backend로 분리되어 있으며, Foundation → Hub → Data-Pipeline → Dashboard 순서로 의존성이 있다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| AWS IoT Core | active | Factory MQTT 수신 진입점 | factory별 topic rule |
S3 raw/
|
active | IoT 원본 보존 | IoT Rule S3 action |
| Lambda DataProcessor | active | canonical JSON 정규화, Safety Score, read model 갱신 | apps/data-processor |
| DynamoDB FactoryStatus | active |
LATEST, HISTORY#STATE, GRAPH#5M, CLOUD#infra, ALERT#
|
foundation table |
S3 processed/
|
active | source별 처리 결과와 state snapshot | report/dashboard/alert 입력 |
DataProcessorRefresh1m |
active | 입력 중단 factory freshness 갱신 | EventBridge schedule |
GraphAggregator5m |
active | 5분 graph bucket 생성 |
GRAPH#5M, S3 processed_agg/
|
| CloudInfra Fast Collector | active | ECS/ALB/RDS/Redis/CloudFront/DLQ 등 빠른 상태 수집 | 1분 주기 Lambda |
| CloudInfra Slow Collector | active | EKS/Kubernetes/ArgoCD/S3 freshness 등 느린 상태 수집 | 5분 주기 Lambda |
| RiskAlertDispatcher | active | processed snapshot 기반 Slack alert, dedupe, cooldown | notifier와 별도 Lambda |
| SnapshotPresigner | active | image snapshot presigned PUT URL 발급 | HTTP API + Lambda |
| Risk Normalizer | active (module) | IoT payload 정규화 모듈 | 독립 서비스가 아님 |
| Risk Score Engine | active (module) | Safety Score 계산 모듈 |
processor/risk.py, 독립 서비스가 아님 |
| Pipeline Status Aggregator | active (module) | freshness와 pipeline status 계산 | DataProcessor 내부 모듈 |
데이터 플레인은 Lambda 중심 설계다. IoT Core가 수신한 MQTT 메시지를 IoT Rule이 Lambda DataProcessor로 라우팅하고, DataProcessor 내부에서 정규화·Safety Score 계산·read model 갱신이 모두 일어난다. 초기 설계에서 독립 서비스였던 Risk Normalizer, Risk Score Engine, Pipeline Status Aggregator는 현재 이 Lambda의 내부 모듈이다. RiskAlertDispatcher와 Lambda notifier는 이름이 유사하지만 역할이 다르다 — 전자는 Slack alert를 담당하고 후자는 Dashboard WebSocket push를 담당한다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| React 18 + Vite 6 | active | Dashboard SPA | apps/dashboard-web/package.json |
| TypeScript 5.6, Vitest, ESLint | active | frontend build/test/lint toolchain | 2026-06-10 통합 기준 lint/test/build 통과 |
| CloudFront + S3 | active | SPA 정적 배포 | permanent stack과 DNS stack 분리 |
| Cognito Hosted UI | active | OIDC Authorization Code + PKCE | JWT 검증과 RDS RBAC 병행 |
| ALB + ECS Fargate | active | Dashboard Backend 실행 경로 | 1 vCPU/2 GiB task, demo 기준 desired/min/max 2 |
| FastAPI + Uvicorn | active | REST API와 WebSocket endpoint | apps/dashboard-backend |
| Bedrock Converse | active |
/chat/query 질문 해석과 Evidence 기반 답변 생성 |
ADR 0033/0034 |
| DynamoDB/S3 read-only access | active | factory, graph, cloud infra, report, image snapshot 조회 | backend task role |
| RDS PostgreSQL | active | 사용자, 공장, 권한 metadata | 단일 DB instance, 2AZ subnet group, multi_az=false
|
| ElastiCache Redis | active | notifier/backend Pub/Sub | TLS, AUTH token, single shard |
| Lambda notifier | active | DynamoDB Streams를 Redis Pub/Sub로 전달 | Dashboard WebSocket push용, alert dispatcher와 별도 |
| 서버리스 Dashboard API 초안 | retired | 초기 Dashboard API 초안 | 현재 API 런타임은 ALB + ECS Fargate + FastAPI |
| WAF | planned | 공개 endpoint 보안 강화 후보 | 현재 Terraform 리소스 미확인 |
Dashboard는 CloudFront/S3 SPA와 ALB/ECS Fargate Backend로 구성된다. 인증은 Cognito OIDC PKCE로 처리하고, 인가는 Backend가 RDS의 user-factory-role 관계를 조회하는 방식으로 분리된다. 실시간 갱신은 DynamoDB Streams → Lambda notifier → Redis Pub/Sub → WebSocket 경로를 사용하며, WebSocket 단절 시 REST polling이 대체 경로가 된다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| EventBridge Scheduler | active | 매일 00:30 KST 기준 report workflow 시작 | UTC cron 30 15 * * ? *
|
| Step Functions | active/on-demand | factory/cloud_infra report orchestration | target별 Map 처리, 비용 절감 시 stack destroy 가능 |
| Reporting Lambdas 7개 | active/on-demand | window 준비, 시간별 집계, 일별 병합, Bedrock 생성 |
infra/reporting/locals.tf; 운영 검증 이력은 factory-b 수동 실행 중심 |
| Bedrock Claude 3 Sonnet | active (default) | report 초안 생성 | 기본 model ID anthropic.claude-3-sonnet-20240229-v1:0
|
S3 reports/daily/
|
active | Markdown/metadata/context/report 산출물 저장 | Dashboard 조회 및 DOCX export 입력 |
| DOCX export | active | Dashboard에서 보고서 다운로드 |
docx frontend dependency |
| 단일 report generator Lambda | retired | 초기 단순 구조 표현 | 현재는 Step Functions + 7 Lambda |
Daily Report는 Dashboard 기능이 아니라 EventBridge → Step Functions → 7개 Lambda로 구성된 독립 batch pipeline이다. KST 00:30에 시작해 전날의 factory/cloud-infra 데이터를 수집·집계하고 Bedrock으로 report 초안을 생성한다. Dashboard reports API는 생성이 아니라 S3에서 결과를 읽어 제공하는 역할이다. 마지막 문서화된 운영 검증은 factory-b 수동 실행과 S3 산출물 확인이며, 전체 target scheduler smoke는 별도 확인 대상이다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| ECR | active | backend/edge image 저장소 | build script와 workflow 대상 |
| Docker | active | app image build | dashboard-backend, edge apps |
| Build/Destroy scripts | active | 보호 리소스 보존형 운영 절차 |
scripts/build, scripts/destroy
|
terraform fmt -check |
active | Phase 8 기준 주요 root 통과 | validate는 환경 이슈로 재확인 필요 |
| AWS/K3s smoke test | planned | end-to-end 동작 확인 | state ownership 확인 후 실행 |
배포 실행 단위는 scripts/build/, scripts/destroy/의 보호 리소스 보존형 shell script다. GitHub Actions는 image build와 ECR push를 담당하지만, Spoke workload 배포는 Hub ArgoCD가 Tailscale 경유로 수행한다. Foundation 리소스(IoT 인증서, DynamoDB table)는 destroy 스크립트에서 자동 삭제 대상이 아니다.
| 기술 | 상태 | 현재 역할 | 기준 |
|---|---|---|---|
| Hub Grafana | active | Hub/Admin UI 관측 화면 | AMP datasource는 retired 이력 |
| Local Grafana | active (FA) | Factory A local InfluxDB/Prometheus 시각화 | edge baseline |
| CloudWatch Logs/Metrics | active | Lambda, ECS, ALB, RDS, Redis, scheduler 관측 | CloudInfra collector 입력 |
| CloudInfra read model | active | Dashboard Cloud Infra 화면과 alert 입력 | DynamoDB/S3 processed |
| Slack webhook alert | active (optional) | RiskAlertDispatcher scope별 알림 전송 | Secrets Manager/SSM value는 문서화하지 않음 |
| AMP | retired | 과거 중앙 메트릭 저장 검증 | 비용 최적화 후 active 기본 구성 제외 |
| Hub Prometheus Agent | retired | 과거 AMP remote_write 송신 | 재설치하지 않는 cleanup 대상 |
현재 관측 기준선은 CloudWatch Logs/Metrics와 Hub Grafana다. AMP/Prometheus Agent는 비용 최적화 이전에 검증한 이력은 있으나 현재 기본 구성에서 제외됐다. CloudInfra read model은 외부 관측 도구 없이 ECS/ALB/EKS 상태를 Dashboard에서 직접 조회할 수 있게 한다.
configs/runtime/runtime-config.yaml은 이 저장소에는 존재하지 않는다. 원본
Edge/Dashboard 저장소에 남은 참조 설정이며, 현재 Lambda DataProcessor는 이
YAML을 읽지 않고 Terraform 환경변수와 코드 상수로 동작한다. 자세한 내용은
런타임 설정을 따른다.
- 시스템 아키텍처
- 제어 & 데이터 플레인
- Dashboard VPC 설계
- 하드웨어 배치
- Hub EKS 네임스페이스
- Tailscale Mesh VPN
- 데이터 생명주기
- 데이터 조회 모델
- 실시간 갱신 구조
- IoT 데이터 계약
- Reporting Pipeline
- 로컬 스토리지
- 클라우드 스토리지
- Edge Agent
- Edge AI 탐지
- Factory-A Log Adapter
- Dummy Sensor
- Edge IoT Publisher
- Lambda Data Processor
- Risk Normalizer
- Risk Score Engine
- Pipeline Status Aggregator
- Graph Aggregator 5m
- Cloud Infra Collector
- Daily Report Generator
- Risk Alert Dispatcher
- Image Snapshot Pipeline
- Dashboard Backend
- Dashboard Web
- AI 채팅 어시스턴트