챗봇 공부 노트

[19편] part 1 배포 전체 흐름 + 장애 대응 + 서버 유지

frontend-diary-log 2026. 2. 13. 17:48

🚀 Aura AI 배포 전체 흐름 & 장애 대응 총정리 (Part 1)

본 글은 Next.js + FastAPI + MySQL + EC2 + Vercel 조합으로 서비스를 실제 배포하면서 겪었던
아키텍처 설계 과정과 장애 해결 경험을 A부터 Z까지 정리한 실전 기록입니다.

단순 이론이 아닌 실제 운영 중 발생한 문제 → 원인 분석 → 해결 과정 중심으로 작성했습니다.
동일한 스택을 사용하는 분들께 큰 도움이 될 것입니다.


1️⃣ 전체 아키텍처 구성

📌 기술 스택

프론트엔드

  • Next.js
  • NextAuth
  • 배포: Vercel

백엔드

  • FastAPI
  • Uvicorn
  • 배포: AWS EC2 (Ubuntu)

데이터베이스

  • MySQL
  • EC2 내부 localhost 설치

📌 전체 통신 구조

브라우저
   ↓
Vercel (Next.js)
   ↓
/api/proxy
   ↓
EC2 FastAPI
   ↓
MySQL

📌 이 구조를 선택한 이유

Vercel은 HTTPS만 허용합니다.

즉,

  • 프론트 → HTTPS
  • 백엔드 → HTTP

상태에서 브라우저가 직접 EC2 API를 호출하면 Mixed Content 오류가 발생합니다.

따라서 다음과 같은 구조로 해결했습니다.

해결 전략

👉 Vercel 내부에 Proxy API 생성

HTTPS → (Vercel Proxy) → HTTP

브라우저는 HTTPS만 보게 만들어 보안 정책을 우회합니다.



2️⃣ 핵심 장애 ① Mixed Content 차단

❌ 증상

브라우저 콘솔 에러:

Mixed Content: The page was loaded over HTTPS, but requested an insecure resource
  • 로그인은 성공
  • 하지만 사용자 정보 API 호출 실패

❌ 원인

구분프로토콜

Vercel HTTPS
EC2 FastAPI HTTP

브라우저는 HTTPS 페이지에서 HTTP 요청을 보안상 차단합니다.


✅ 해결 방법

1. Vercel 내부에 Proxy Route 생성

/api/proxy/*

2. 모든 API 호출을 Proxy 경유로 변경

변경 전

http://EC2_IP:8000/users/me

변경 후

/api/proxy/users/me

✅ 결과

  • 브라우저는 HTTPS만 인식
  • Mixed Content 완전 해결
  • API 정상 동작


3️⃣ 핵심 장애 ② Vercel에서 DB 연결 실패

❌ 증상

NextAuth 로그인 시 에러 발생

ECONNREFUSED 127.0.0.1:3306

❌ 원인

Vercel은 서버리스 환경입니다.

즉,

  • 로컬 MySQL 직접 접근 ❌
  • 내부 네트워크 DB 연결 ❌
  • 장시간 DB 커넥션 유지 ❌

서버리스에서 DB 직결은 구조적으로 불가능합니다.


✅ 해결 전략

아키텍처 분리

역할 재정의

역할담당

인증 NextAuth
사용자 CRUD FastAPI
DB 접근 EC2

최종 구조

NextAuth → 인증 전용
FastAPI → DB 작업 전용
Vercel → Proxy 역할만 수행

✅ 결과

  • DB 연결 오류 해결
  • 안정적인 인증/회원가입 구조 확보


4️⃣ 핵심 장애 ③ EC2 SSH 접속 불능

❌ 증상

SSH 접속 시

  • 연결은 됨
  • 배너 안 뜸
  • 입력 불가
  • 멈춤 상태

❌ 원인

  • SSH 데몬 응답 불능
  • 네트워크 일시 정지
  • 인스턴스 내부 문제

✅ 해결 방법

EC2 콘솔에서

Reboot

재부팅 후 즉시 정상 접속 복구


💡 교훈

EC2 SSH 먹통 → 99% 재부팅으로 해결



5️⃣ Uvicorn 실행 방식 개선 (중요 ⭐)


❌ 초기 실행 방식

nohup uvicorn main:app --host 0.0.0.0 --port 8000 &

문제점

  • 터미널 종료 시 종료 가능성
  • 재부팅 시 자동 실행 안 됨
  • 운영 환경에 부적합


✅ 개선 방식 → systemd 서비스 등록

서비스 파일 생성

sudo tee /etc/systemd/system/aura-api.service > /dev/null <<'EOF'
[Unit]
Description=Aura FastAPI (Uvicorn)
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/home/ubuntu/aura_ai/backend
EnvironmentFile=/home/ubuntu/aura_ai/backend/.env
ExecStart=/home/ubuntu/aura_ai/backend/.venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

📌 각 옵션 설명

옵션의미

WorkingDirectory 백엔드 프로젝트 위치
EnvironmentFile .env 자동 로드
ExecStart 서버 실행 명령
Restart=always 장애 시 자동 재시작
RestartSec 재시작 딜레이


적용 명령

sudo systemctl daemon-reload
sudo systemctl enable aura-api
sudo systemctl restart aura-api

상태 확인

sudo systemctl status aura-api --no-pager
sudo ss -tlnp | grep 8000

✅ 결과

  • active (running) 확인
  • 0.0.0.0:8000 리스닝 확인
  • SSH 종료해도 서버 유지
  • EC2 재부팅 후 자동 실행

👉 운영 서버 안정성 완전 확보



6️⃣ SSH 키 & PEM 접속 정리


접속 명령 (Windows PowerShell)

ssh -i "C:\Users\dddd3\aura_ai\aura-key.pem" ubuntu@51.21.202.235

📌 주의사항

1️⃣ PEM 파일 존재 확인

dir

2️⃣ 경로 반드시 따옴표

공백/특수문자 방지

3️⃣ 키 없으면 접속 불가

PEM = 사실상 로그인 비밀번호



✅ Part 1 요약

이번 파트에서 해결한 핵심 문제

✔ Mixed Content 차단 해결
✔ Vercel DB 연결 실패 구조 개선
✔ SSH 접속 불능 복구
✔ Uvicorn systemd 서비스화
✔ 안정적인 서버 운영 환경 구축



📌 다음 글 예고 (Part 2)

다음 편에서는

  • Proxy route.ts 구현 이유
  • apiClient.ts 구조 변경
  • Mixed Content 해결 흐름 상세 코드
  • LocationModal / ProfileSection 수정 내역

까지 프론트 코드 레벨 변경 사항을 자세히 정리할 예정입니다.


원하시면
👉 “Part 2도 정리해줘” 라고 말씀해 주세요.
같은 스타일로 깔끔하게 이어서 작성해 드리겠습니다 😊