16-(3) 현존하는 AI 웹/앱서비스를 하나 선정하세요. (가상의 서비스로 해보는 것도 좋아요.) 그 서비스가 지금까지 학습한 Docker, 추론 최적화, Streamlit, FastAPI로 구현되었다고 가정하고, 전체 아키텍처를 작성해보세요. 만약 가능하다면, 보안 요소(CORS 등)/멀티유저 요청 처리 방안(비동기 처리, 대기 큐 등)/클라우드 배포 구조(GCP, AWS)/모니터링 및 로깅 전략 까지 포함하여 작성해보세요. |        Serendipity                                                                                                                                                                                                                                                                                                                                                                                   
Post

16-(3) 현존하는 AI 웹/앱서비스를 하나 선정하세요. (가상의 서비스로 해보는 것도 좋아요.) 그 서비스가 지금까지 학습한 Docker, 추론 최적화, Streamlit, FastAPI로 구현되었다고 가정하고, 전체 아키텍처를 작성해보세요. 만약 가능하다면, 보안 요소(CORS 등)/멀티유저 요청 처리 방안(비동기 처리, 대기 큐 등)/클라우드 배포 구조(GCP, AWS)/모니터링 및 로깅 전략 까지 포함하여 작성해보세요.

16-(3) 현존하는 AI 웹/앱서비스를 하나 선정하세요. (가상의 서비스로 해보는 것도 좋아요.) 그 서비스가 지금까지 학습한 Docker, 추론 최적화, Streamlit, FastAPI로 구현되었다고 가정하고, 전체 아키텍처를 작성해보세요. 만약 가능하다면, 보안 요소(CORS 등)/멀티유저 요청 처리 방안(비동기 처리, 대기 큐 등)/클라우드 배포 구조(GCP, AWS)/모니터링 및 로깅 전략 까지 포함하여 작성해보세요.

🟢 가상의 서비스 하나를 골라서 Streamlit + FastAPI + Triton 기반으로 전체 아키텍처를 설계해보자.


⚪ 1. 가상 서비스 정의: “QSM-AI”

본 아키텍처 설계는 가상의 AI 서비스 “QSM-AI”를 기준으로 한다.

  • 기능: mGRE (multi-echo Gradient Echo) MRI의 Phase(.nii) 파일을 업로드하면, 딥러닝 모델(e.g., QSM-ViT)이 이를 실시간으로 QSM (Quantitative Susceptibility Map) 영상으로 재구성하는 웹 서비스.
  • 핵심 요구 기술: Streamlit(UI), FastAPI(Logic), Triton(Inference), Docker(Packaging)

⚪ 2. 핵심 아키텍처: 3-Tier Decoupled Microservices

가장 효율적이고 확장 가능한 구조는 각 컴포넌트의 역할을 명확히 분리(Decouple)하는 3-Tier 마이크로서비스 아키텍처이다.

  • Tier 1: streamlit-fe (Frontend): 사용자 UI
  • Tier 2: fastapi-be (Backend): API Gateway, 비즈니스 로직, 전/후처리
  • Tier 3: triton-is (Inference): 고성능 AI 모델 추론

이 세 서비스는 각각 별도의 Docker 컨테이너로 실행되며, docker-composeKubernetes 환경의 내부 사설 네트워크를 통해 통신한다.

Tier 1: Frontend (Streamlit-FE)

  • 역할: 사용자 인터페이스 및 상호작용.
  • 기술: Streamlit
  • 동작:
    1. st.file_uploader.nii 파일 수신.
    2. httpx 라이브러리를 사용하여 fastapi-be의 API 엔드포인트(http://fastapi-be:8000/api/v1/reconstruct)로 HTTP POST 요청.
    3. fastapi-be로부터 결과 파일(e.g., PNG 슬라이스)을 받아 st.image로 시각화.

Tier 2: Backend (FastAPI-BE / API Gateway)

  • 역할: 시스템의 ‘뇌’ 역할. 단순한 프록시가 아닌, 핵심 비즈니스 로직을 처리.
  • 기술: FastAPI (CPU 기반 컨테이너)
  • 동작:
    1. CORS 설정: Streamlit 도메인으로부터의 교차 출처 요청을 허용.
    2. API 수신 및 검증: /api/v1/reconstruct 엔드포인트에서 요청 수신 및 유효성 검사.
    3. 전처리 (Pre-processing): nibabel, numpy 등을 사용하여 원본 .nii 파일을 Triton이 요구하는 Tensor 포맷으로 변환 (e.g., 정규화, 리사이징).
    4. 추론 요청 (Async): FastAPIasync def 내에서 tritonclient의 비동기 API (async_infer)를 호출하여 triton-is에 추론 요청. (I/O Blocking 방지)
    5. 후처리 (Post-processing): triton-is로부터 받은 Raw Tensor를 사용자 친화적인 포맷(e.g., PNG 슬라이스, .nii 파일)으로 변환.
    6. (Optional) 로깅 및 저장: 요청/응답 결과 및 메타데이터를 DB나 S3에 저장.
    7. 응답: Streamlit-FE에 최종 결과물(JSON 또는 파일) 반환.

Tier 3: Inference Server (Triton-IS)

  • 역할: AI 모델의 고성능 연산(추론)을 전담하는 ‘근육’.
  • 기술: NVIDIA Triton Inference Server (GPU 기반 컨테이너)
  • 동작:
    1. 모델 최적화: PyTorch 모델을 ONNX로 변환하고, 다시 TensorRT 백엔드를 사용하여 GPU에 최적화된 .plan 엔진 파일로 빌드.
    2. 모델 리포지토리: config.pbtxt 파일과 최적화된 모델 파일(model.plan)을 model_repository에 저장.
    3. 서빙: Triton 서버가 이 리포지토리를 로드하여 GPU 메모리에 상주시킨 후, gRPC(8001) 및 HTTP(8000) 포트를 열고 대기.
    4. 고성능 추론: fastapi-be의 요청을 받아 Dynamic Batching 등의 최적화 기법을 적용하여 GPU에서 초고속 추론 수행.

⚪ 3. 상세 설계: 고급 고려사항

A. 보안 (Security) - CORS

fastapi-beStreamlit 컨테이너의 내부 주소(e.g., http://streamlit-fe:8501)와 실제 배포 도메인(e.g., https://qsm-ai.com)을 FastAPICORSMiddlewareallow_origins로 명시해야 한다.

B. 멀티유저 요청 처리 (Concurrency)

이 아키텍처는 두 가지 레벨에서 동시성을 처리한다.

  1. FastAPI (I/O Concurrency): async/await를 통해 수십 명의 사용자가 동시에 파일 업로드/다운로드를 대기하는 I/O 작업을 블로킹 없이 효율적으로 처리한다.
  2. Triton (Compute Concurrency): FastAPI로부터 동시에 쏟아지는 여러 추론 요청을 요청 큐(Queue)에 쌓는다. Triton의 Dynamic Batching 기능이 이 큐의 요청들을 최적의 배치 크기(e.g., 8, 16)로 묶어 GPU에 한 번에 전달함으로써, GPU의 Throughput(처리량)을 극대화한다.

C. 클라우드 배포 구조 (AWS/GCP)

  • 컴포넌트 분리 배포:
    • Triton (GPU): AWS EKS 또는 GCP GKE (Kubernetes)의 GPU 노드 풀(Node Pool) (e.g., g4dn 인스턴스)에 배포.
    • FastAPI & Streamlit (CPU): AWS Fargate 또는 GCP Cloud Run 같은 서버리스 컨테이너 플랫폼에 배포하여 비용 효율성 및 자동 확장(Auto-scaling) 확보.
  • 인프라:
    • Gateway: AWS API Gateway 또는 Application Load Balancer를 시스템 맨 앞에 배치하여 /api/* 요청은 FastAPI로, / 요청은 Streamlit으로 라우팅.
    • Storage: 모든 .nii 파일 및 결과물은 AWS S3 또는 GCP Cloud Storage에 저장. 컨테이너 내부(Ephemeral)에 저장하면 안 됨.

D. 모니터링 및 로깅 (Observability)

  • Logging: 모든 컨테이너는 stdout/stderr로 로그를 출력. AWS CloudWatch Logs 또는 GCP Cloud Logging (Fluentd/Fluentbit)을 통해 로그를 중앙 수집.
  • Monitoring (Metrics):
    • Triton: /metrics 엔드포인트를 Prometheus로 스크래핑하여 GPU 사용률, 추론 Latency(P95/P99), 처리량(RPS) 등 핵심 AI 성능 지표 확보.
    • FastAPI: starlette-prometheus를 이용해 API 에러율, 요청 Latency 지표 노출.
  • Dashboard & Alerting: Grafana 또는 AWS CloudWatch Dashboard에서 상기 지표를 시각화. “P99 Latency > 3초” 또는 “GPU 사용률 95% 지속” 시 Slack 또는 Email알림(Alerting) 설정.

🟢 예시 답안 (코드잇 제공)

.

This post is licensed under CC BY 4.0 by the author.

© 2025 Soohyun Jeon ⭐

🌱 Mostly to remember, sometimes to understand.