Skip to content

tech stack

JJong-03 edited this page Jun 18, 2026 · 7 revisions

기술 스택

기준일: 2026-06-09

K3s Terraform Argo CD Tailscale AWS IoT Core ECS Fargate FastAPI React 18 Amazon Bedrock

이 문서는 현재 active 기술과 retired/planned 항목을 분리한다. 과거 Hub 중심 Prometheus Agent/AMP 구성, 독립 Risk Normalizer/Risk Score Engine 서비스, 서버리스 Dashboard API 초안은 현재 기본 구조로 보지 않는다.

상태 기준

상태 의미
active 현재 코드, Terraform, Helm chart, 운영 절차의 기본 경로
retired 과거 구현·검증 이력이 있으나 현재 기본 구성에서 제거되었거나 재설치하지 않는 항목
planned 후속 보강 또는 선택 구성. 현재 구현으로 표현하지 않음
reference 원본 저장소나 설계 입력으로만 남은 참조 항목

Edge

기술 상태 현재 역할 기준
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)이 다르다.


Control

기술 상태 현재 역할 기준
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 순서로 의존성이 있다.


Data

기술 상태 현재 역할 기준
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를 담당한다.


Dashboard

기술 상태 현재 역할 기준
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이 대체 경로가 된다.


Reporting

기술 상태 현재 역할 기준
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는 별도 확인 대상이다.


Delivery

기술 상태 현재 역할 기준
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 스크립트에서 자동 삭제 대상이 아니다.


Observability

기술 상태 현재 역할 기준
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에서 직접 조회할 수 있게 한다.


Runtime/Configuration 경계

configs/runtime/runtime-config.yaml은 이 저장소에는 존재하지 않는다. 원본 Edge/Dashboard 저장소에 남은 참조 설정이며, 현재 Lambda DataProcessor는 이 YAML을 읽지 않고 Terraform 환경변수와 코드 상수로 동작한다. 자세한 내용은 런타임 설정을 따른다.

관련 문서

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally