🚀 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도 정리해줘” 라고 말씀해 주세요.
같은 스타일로 깔끔하게 이어서 작성해 드리겠습니다 😊
'챗봇 공부 노트' 카테고리의 다른 글
| [19편] part 3 배포 백엔드/회원가입/정규식/의존성 변경 상세 (0) | 2026.02.13 |
|---|---|
| [19편] part 2 배포 프론트/프록시 구조 변경 상세 정리 (0) | 2026.02.13 |
| [18편] Part 2 마이페이지 코드 + 설계의도 (0) | 2026.02.06 |
| [18편] Part1 마이페이지 CRUD + OAuth 통합 + 이미지 업로드 (0) | 2026.02.06 |
| [17편] Part 3 MySQL 세션/메시지 + 오류정리 및 해결 (0) | 2026.02.05 |