10. 서버 사양 / 인프라 운영 현황 — fingu-tips
TL;DR · 10.1 호스트 사양 · 10.2 네트워크 / 보안 · 10.3 컨테이너 토폴로지 · 10.4 API 표면 · 10.5 운영 / 시크릿 / 로그 · 10.6 실측 리소스 · 10.7 트래픽 / 활동 · 10.8 리스크 / 기한 · 10.9 바로 실행 가능한 작업
TL;DR
fingu-tips PoC 데모 인스턴스 running 16h+ healthy. t4g.xlarge / 15GB RAM / 50GB / ARM64 / AL2023. docker compose 2 service (fingu-tips-api Python+HF, fingu-tips-web nginx). Cloudflare → fingu.grinda.ai 노출. 시크릿은 Infisical export → .env. DeprovisionAfter 2026-05-21 (D-2) — 보존 작업 필요.
10.1 호스트 사양 (EC2)
- Instance ID
- i-0407fb88ae762654a
- Name
- fingu-tips
- Type
- t4g.xlarge (4 vCPU Graviton2 ARM64, 16 GB RAM, EBS-only, up to 5 Gbps)
- AMI
- ami-04244cf6c328aabab
- OS
- Amazon Linux 2023 (kernel 6.18.25-55.108.amzn2023.aarch64)
- 총 메모리
- 15 GiB (swap 0)
- 디스크
- 50 GB EBS / 12 GB 사용 (24%)
- AZ
- ap-northeast-2a
- Public IP
- 3.38.72.133
- Private IP
- 172.31.4.101
- SSH Key
- fingu-tips-key.pem
- Launch
- 2026-05-15 03:15 UTC (4일 4시간 가동)
- Project 태그
- fingu-tips-rnd-evaluation
- Deprovision
- 2026-05-21 (D-2)
부트스트랩 (UserData)
#!/bin/bash dnf install -y docker git systemctl enable --now docker usermod -aG docker ec2-user mkdir -p $DOCKER_CONFIG/cli-plugins curl -fsSL .../docker-compose-linux-aarch64 -o $DOCKER_CONFIG/cli-plugins/docker-compose curl -1sLf 'https://dl.cloudsmith.io/.../infisical-cli/setup.rpm.sh' | bash dnf install -y infisical mkdir -p /opt/fingu && chown -R ec2-user:ec2-user /opt/fingu
10.2 네트워크 / 보안
Security Group (sg-048e60097c48a4235 · fingu-tips-sg)
| 포트 | 프로토콜 | 출처 | 비고 |
|---|---|---|---|
| 80 | TCP | Cloudflare 15 CIDR | HTTP — CF proxy 경유 |
| 443 | TCP | Cloudflare 15 CIDR | HTTPS — CF proxy 경유 (origin cert 보유) |
| 22 | TCP | 0.0.0.0/0 | SSH 전세계 오픈 정책 검토 권장 |
외부 노출 호스트
fingu.grinda.ai — Cloudflare proxy(orange cloud) → 3.38.72.133:80/443. nginx 종단에서 TLS 1.2/1.3 (/etc/nginx/certs/origin.crt), HTTP/2 활성.
10.3 컨테이너 토폴로지 (compose project: fingu)
| 컨테이너 | 이미지 | 포트 | 리소스 한도 | 헬스체크 | 상태 |
|---|---|---|---|---|---|
fingu-tips-api |
fingu-tips-api:latest (1.36 GB) |
8001/tcp (internal only) | mem 6G / res 256M | GET /api/health |
Up 16h healthy |
fingu-tips-web |
fingu-tips-web:latest (57.3 MB, nginx) |
80, 443 → host | cpu 0.5 / mem 128M / res 32M | GET /healthz |
Up 16h healthy |
볼륨
api_results→/app/results(측정 결과 영속)hf_cache→/root/.cache/huggingface— HF 모델 weight 5~7GB 영속, 재배포 cold-start 단축
네트워크
fingu-net (bridge). web → api (depends_on healthy). nginx upstream api:8001, keepalive 32.
옵션 파이프라인
ENABLE_REAL_PIPELINE=true 활성 시 HF 모델 3개 (FinguAI-Chat-v1 + Qwen-Orpo-v1 + FingUv2 ≈ 5~7GB) RAM 로드. t4g.small (2GB)은 OOM, 현재 t4g.xlarge (16GB)는 여유.
10.4 API 표면 (web access log + nginx 라우팅)
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /api/health | API 헬스 (healthcheck용) |
| GET | /api/personas | 페르소나 목록 |
| GET | /api/personas/{name} | 단건 (확인된 페르소나: jiyu, eunyoung) |
| GET | /api/personas/{name}/portfolio | 포트폴리오 |
| GET | /api/personas/{name}/recommendations | 추천 |
| POST | /api/kpi/{n}/sample | 단일 KPI 측정 (현재 KPI 7만 자동 호출 중) |
| GET | /admin/logs | 관리자 로그 페이지 (ADMIN_LOG_TOKEN gated 추정) |
| GET | /healthz | nginx 헬스 (access log off) |
10.5 운영 / 시크릿 / 로그
시크릿 주입 흐름
deploy.sh → infisical export → /opt/fingu/.env → docker compose env_file → 컨테이너 환경변수.
관측된 환경변수 키 (값 마스킹)
ADMIN_LOG_TOKEN=*** ANTHROPIC_API_KEY=*** OPENAI_API_KEY=*** ENABLE_REAL_PIPELINE=*** ENABLE_FINETUNED_PIPELINE=*** FINETUNED_KPI2_API_URL=*** FINETUNED_KPI3_API_URL=*** DEPLOY_ID=***
컨테이너 로깅
- 드라이버
json-file, rotationmax-size=10m × max-file=3(컨테이너당 최대 30MB) - API 로그 포맷: JSON (event/request_id/elapsed_ms 구조화) — 검색·집계 친화
- web 로그: nginx combined + masked path
- CloudWatch Logs 미연동 — 컨테이너 재생성 시 로그 휘발
/opt/fingu 디렉터리 구조 (상위 항목 + 용량)
| 항목 | 용량 | 비고 |
|---|---|---|
datasets/ | 11 MB | 평가 데이터셋 |
public/ | 2.8 MB | 정적 자산 |
docs/ | 708 KB | 프로젝트 문서 |
frontend/ | 540 KB | UI 소스 |
src/ | 468 KB | API 소스 |
evidence/ | 252 KB | 증빙 자료 |
tests/ · scripts/ · api/ · deploy/ | 총 ~340 KB | — |
results/ | 0 | 볼륨 마운트 (호스트엔 빈 디렉터리) |
10.6 실측 리소스 (docker stats · 스냅샷)
| 컨테이너 | CPU | 메모리 사용 | 한도 대비 |
|---|---|---|---|
fingu-tips-api | 1.10% | 88.8 MiB | 1.4% of 6 GiB |
fingu-tips-web | 0.17% | 5.7 MiB | 4.5% of 128 MiB |
호스트 메모리
총 15 GiB · 사용 526 MiB · 가용 14 GiB · buff/cache 1.1 GiB · swap 없음 → 현재는 HF 모델 미로드 상태로 운영 중 (real pipeline OFF 추정).
10.7 트래픽 / 활동 패턴
KPI 7 자동 측정 루프 (관찰 결과)
POST /api/kpi/7/sample가 ~300ms 간격으로 연속 호출 —user_0000 → user_0027+순회- 응답 모두
score: 0.0, verdict: "no_label", is_correct: true일관 — 라벨 부재 sample이라 trivially true elapsed_ms1.4 ~ 2.9 — stub 처리 (KPI4_STUB_LATENCY_MS=3) 기준 정상
클라이언트 (web access log 24h)
- Cloudflare CIDR (
172.64/16,162.158/15,172.69/16) 경유 — origin IP 직접 트래픽 0 - User-Agent: Chrome (Mac/Win), Firefox 150, Edge 148, Slackbot 1.0 (링크 unfurl)
- 주 진입점:
https://fingu.grinda.ai/recommend,/admin/logs
10.8 리스크 / 기한
| 항목 | 등급 | 메모 |
|---|---|---|
| DeprovisionAfter 2026-05-21 | D-2 | 볼륨 + .env + /opt/fingu 스냅샷 권장 |
| SG 22번 포트 0.0.0.0/0 | 중 | 본인 IP/32 또는 VPN/사설망으로 축소 |
| SSM Agent 미설치 | 하 | SSH 외 통제 채널 없음. 키 분실 시 복구 곤란 |
| CloudWatch Logs 미연동 | 하 | 컨테이너 재생성 시 로그 휘발 (30MB rotation) |
| KPI 7 결과 trivially true | 하 | 라벨 없는 sample 루프 — 측정값 의미 검증 필요 |
| 호스트 메모리 여유 | 양호 | HF 5~7GB 로드 여유 있음 (현재 526 MiB) |
| 디스크 | 양호 | 24% 사용 (12/50 GB) |
10.9 바로 실행 가능한 작업
A. 즉시 (AWS CLI · 추가 권한 불필요)
- EC2 메타·UserData·SG·메트릭 수집 (본 문서)
- SSH 접속 + 컨테이너·로그·.env 키·nginx 직접 확인 (본 문서)
- EBS 볼륨 스냅샷 1회 — DeprovisionAfter 전 데이터 보존
aws ec2 describe-instances --profile grindaai --instance-ids i-0407fb88ae762654a \ --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId' --output text \ | xargs -n1 -I{} aws ec2 create-snapshot --profile grindaai --volume-id {} \ --description "fingu-tips pre-deprovision 2026-05-19" - SG 22번 포트 0.0.0.0/0 → 본인 IP/32 로 축소
- CloudWatch Logs 그룹 생성 + awslogs driver 연동 (재배포 시 휘발 방지)
B. SSH 안에서 즉시 (이미 접근 가능)
- 전체 페르소나 dump
ssh -i ~/Downloads/fingu-tips-key.pem ec2-user@3.38.72.133 \ 'curl -s http://127.0.0.1:8001/api/personas | python3 -m json.tool'
- 에러/경고 로그 추출
sudo docker logs fingu-tips-api 2>&1 | grep -iE '"level": "(ERROR|WARNING)"' | tail -50
- KPI 1~6 호출 흔적 확인
sudo docker logs fingu-tips-api 2>&1 | grep -oE '/api/kpi/[0-9]+/' | sort | uniq -c
evidence/,results/,datasets/tarball 백업ssh ... 'tar czf - /opt/fingu/{evidence,datasets,docs,src,api,deploy}' \ > ~/Downloads/fingu-source-$(date +%F).tgzADMIN_LOG_TOKEN으로/admin/logs접근 확인
C. 운영 관점 권장
- DeprovisionAfter 연장 vs 종료 결정 (D-2 안에)
- PoC 결과 → docs/ 또는 vault에 별도 핸드오프 문서로 정리
- SSM Agent 설치 (다음 인스턴스부터는 부트스트랩에 포함 권장)
sudo dnf install -y amazon-ssm-agent sudo systemctl enable --now amazon-ssm-agent # + IAM Role: AmazonSSMManagedInstanceCore attach
- SSH 키 1Password 등록 — 현재 ~/Downloads/ 평문 보관