제출 자료 근거 대조 — 2026-09-08
이 문서는 이력서·포트폴리오·웹에 사용한 주장과 공개 코드/기록을 연결한다. 교육·개인 프로젝트의 구현 검증이며 고객 운영 실적을 뜻하지 않는다. 과거 설계 기록은 원문을 유지하고, 현재 코드와 다른 부분을 아래에서 구분한다.
검토한 버전
| 저장소 | 검토 commit |
|---|---|
| 팀 통합 코드 | 841cd678c016d1409eafb23933432d13447714d8 |
| 개인 담당 코드 | a15286afd4bfe6bb12fcc732a5ef194cde8813ca |
| 팀 Wiki | Wiki git 8c97ba6e973f2eedac089dd830af72e85cc02248 |
Aegis의 2026.05–2026.06 구현·발표 표기는 5월 작업 분담/구현 ADR부터 6월 통합 및 6월 29일 최종 발표까지 공개 기록으로 확인되는 활동 구간이다. 전체 사전 기획 시작일을 새로 단정하지 않는다.
Aegis: 초기 기록과 현재 계약
| 항목 | 제출물에서 사용하는 표현 | 근거/한계 |
|---|---|---|
| 개인 역할 | Data/Dashboard VPC Terraform, Streams→Redis notifier, FastAPI·React | 작업 분담 ADR. DataProcessor·GraphAggregator5m·Slack dispatcher는 팀원 구현 |
| 테스트 환경 | Raspberry Pi 기반 A와 VM 기반 B/C, 2인 교육 팀 | 시스템 구조. 실제 3개 고객 공장 운영으로 표현하지 않음 |
| 장애 관측 | 48h TTL, 약 116,000건 상주, Query 50+ pages | 트러블슈팅 #42. 동일 조건 전후 측정값이 아님 |
| 임시 cap의 한계 | 최신 500건 제한으로 오래된 위험 신호 누락 | 조회 ADR. 장기 집계로 전환한 이유 |
| 현재 HTTP API | 10m 기본 250, 1h 기본 2,000; 6/12/24h 집계 | router. 내부 helper의 기본 500과 구분 |
| 집계 범위 | 6/12/24h source 최대 72/144/288, 출력 최대 72 | DynamoDB 조회/재집계 코드. 완전한 구간 데이터가 있을 때의 버킷 수; 실제 반환 수는 데이터 유무에 좌우됨 |
| TTL | raw 2h 목표/설정과 마지막 문서화된 운영 48h 구분 | read model. 현재 배포 환경의 TTL을 새로 관측한 것은 아님 |
| 개선 수치 | 지연·오류율·읽기 용량 개선 폭 미측정 | 초기 ADR의 93%는 항목 수 추정 산식. <2초 및 무재발 서술은 동일 부하 실행 로그가 없어 제출 성능 성과로 사용하지 않음 |
Safety Score는 낮을수록 위험하다. 원본의 모든 이벤트 순서를 집계로 복원할 수는 없으나, 평균뿐 아니라 최솟값·최댓값을 유지해 위험 신호를 평균으로만 덮지 않는 계약을 사용한다.
제출 전 재실행한 테스트
실행일: 2026-09-08. 팀 통합 코드 위 commit의 기존 test_history.py를 수정 없이 실행했다. 새 성과 수치를 만들기 위한 신규 테스트가 아니다.
python3 -m venv ../test-venv
../test-venv/bin/python -m pip install \
-r apps/dashboard-backend/requirements.txt \
-r apps/dashboard-backend/requirements-dev.txt
../test-venv/bin/python -m pytest -q apps/dashboard-backend/tests/test_history.py
실행 환경: Python 3.12, 테스트 fixture의 모의 AWS(moto) 및 SQLite. 결과: 38 passed, 3 warnings in 24.65s. 경고는 AnyIO alias와 FastAPI startup hook의 deprecation이다. 실제 AWS 호출이나 부하 테스트 결과가 아니다. 의존성의 향후 버전 변경에 따라 재실행 결과/시간은 달라질 수 있다.
| 검사 | 입력과 기대 결과 |
|---|---|
| 결측 처리 | 빈 버킷과 유효 표본 75개를 합칠 때 빈 값을 0점으로 평균내지 않고 평균 94 유지 |
| 12h 재집계 | 5분 버킷 2개를 10분으로 합침. 표본 97+97=194, 위험 및 온도 극값 보존 |
| 24h 재집계 | 출력 간격 20분 |
| 원본/집계 분리 | 1h 원본 조회에 GRAPH#5M 항목이 섞이지 않음 |
설계 선택과 남는 제약
| 사례 | 당시 선택 이유 | 남는 제약 / 원문 |
|---|---|---|
| Aegis API | WebSocket 연결과 RDS·Redis 연결 풀 때문에 Lambda 초안을 Fargate로 변경 | task·ALB·NAT 상시 비용, 단일 AZ 의존. Fargate ADR |
| Aegis VPC | dashboard에서 EKS/Argo 관리 API를 직접 조회하지 않고 데이터 저장소를 통해 연결 | 데이터 계약·IAM 조율 필요. Dashboard ADR |
| Stock 실행 | 별도 브로커 없이 Kubernetes Job별 격리·TTL 적용 | Pod 생성 비용, 세밀한 우선순위·속도 제어 필요. Stock ADR |
| AWS 504 진단 | worker SG 연결 누락과 EC2→ClusterIP 라우팅 문제를 구분; PoC에서 NodePort 적용 | node IP 의존을 운영 대안으로 승격하지 않음. 트러블슈팅 |
| GKE Pending | 제한된 2개 노드에서 maxSurge 0·maxUnavailable 1 선택 | rollout 중 가용 replica가 일시 1개. 트러블슈팅 |
Stock의 2026-03-04 E2E 기록은 단일 요청의 상태 전이와 MySQL 저장을 보여 준다. 이 기록의 짧은 타임스탬프 차이를 처리속도 성과로 사용하지 않는다. Job 생성 이후 Worker 중단·deadline·결과 저장 실패의 모든 복구 경로를 검증했다는 뜻도 아니다.
Stock은 CI가 manifest PR을 만들고 수동 merge 후 Argo CD가 동기화한다. GKE 사례에서는 이미지 tag를 manifest에 수동 반영했다. 두 사례를 동일한 자동 배포 수준으로 표현하지 않는다.