앞의 세 생성기술(텍스트·오디오·이미지)을 하나의 창구로 묶는 단계입니다. 브라우저 화면(포트 3000)에서 전송한 기획 요소를 받아, 내 컴퓨터 로컬에 띄워둔 Ollama(11434, Qwen3.5), Qwen 0.6B TTS, FLUX로 전달 및 지휘하는 파이썬 중계 서버를 작성합니다.
백엔드 통합: FastAPI 중계 서버 구축
📚1단계: 주요 개념 설명
Python FastAPI를 사용해 프론트엔드와 로컬 AI 모델들(Qwen3.5·Qwen 0.6B TTS·FLUX)을 하나로 잇는 백엔드 중계 서버를 연동 코딩한다.
파이썬 FastAPI 중계 라우터 개요
- 웹 브라우저 대시보드 화면(3000포트)과 로컬에 흩어진 AI 모듈들(Ollama, TTS, FLUX) 간의 데이터를 교통정리해 주는 백엔드 Uvicorn API 서버를 구축합니다.
- 구문이 간결하고 성능이 우수한 파이썬 표준 라이브러리인 FastAPI 기반을 학습합니다.
🛠️2단계: 따라하기 실습
11·12교시에서 만든 음성·이미지 API에 텍스트(Ollama 프록시)까지 더해, 하나의 OpenAI 호환 로컬 서버(:8000)로 묶습니다. 그러면 웹앱은 base URL 한 줄만 바꿔 텍스트·음성·이미지를 전부 로컬로 돌립니다.
웹앱이 클라우드처럼 부를 수 있는 로컬 서버 하나로 묶습니다.
FastAPI server.py에 /v1/chat/completions(로컬 Ollama로 프록시)·/v1/audio/speech(로컬 TTS)·/v1/images/generations(로컬 FLUX) 세 엔드포인트를 OpenAI와 같은 형식으로 만들고, CORS 모든 출처 허용, uvicorn 8000포트 실행까지 해줘.
- 경로·형식을 OpenAI 규격에 맞추는 게 핵심 — 그래야 웹앱이 '주소만' 바꿔 그대로 호출합니다.
- CORS 미들웨어가 있어야 배포된 화면이 이 서버를 불러도 브라우저가 막지 않습니다.
왜 CORS 허용이 필요한지 눈으로 확인합니다.
- 오른쪽 CORS 샌드박스에서 미들웨어를 껐다/켰다 하며 차단(빨간 자물쇠)↔200 OK 차이를 확인하세요.
- 출처(포트)가 다르면 브라우저가 기본 차단하므로, 서버가 '이 출처 허용'을 응답에 붙여야 합니다.
환경변수 한 줄로 Day 1 웹앱 전체를 로컬 모델로 돌립니다.
Day 1 웹앱의 .env.local에 AI_BASE_URL=http://localhost:8000 을 추가하고, 대본·음성·이미지 API 호출이 이 base URL을 쓰도록 맞춰줘. (키 없이도 로컬 서버로 요청되게)
- 이 한 줄이면 텍스트·음성·이미지 호출이 전부 내 로컬 서버(:8000)로 향합니다 — 코드는 그대로.
- 주제를 넣어 생성하면 대본·음성·이미지가 모두 내 컴퓨터에서 나옵니다. 클라우드로 되돌리려면 그 줄만 지우면 끝.
- '클라우드 웹앱 == 온프렘 웹앱, 차이는 주소 한 줄'임을 몸으로 확인하는 단계입니다.
우측 CORS 연동 샌드박스에서 'CORS Middleware 허용'을 껐을 때와 켰을 때 각각 테스트 요청을 보내 보세요. 미들웨어가 없으면 브라우저가 요청을 차단(빨간 자물쇠)하고, 허용하면 3000↔8000 포트 간 통신이 열려 200 OK가 돌아오는 차이를 직접 확인합니다.
# 로컬 서버는 OpenAI와 '같은 경로'를 제공한다 # /v1/chat/completions · /v1/audio/speech · /v1/images/generations # 그래서 웹앱은 코드를 안 고치고 주소(base URL)만 바꾸면 끝: # .env.local → AI_BASE_URL=http://localhost:8000 # # 클라우드: https://api.openai.com/v1/... # 온프렘: http://localhost:8000/v1/... (env 한 줄만 교체)
💡 코딩 중 막히나요? 모범 솔루션 코드
🧩3단계: 개념 검증 퀴즈
FastAPI 서버에 탑재한 CORS 활성화 기능이 정상 작동하고 교차 출처 테스트를 통과하는지 검증합니다.
Q1. 브라우저(3000)에서 FastAPI(8000)로 요청할 때 CORS 설정이 없으면?
Q2. CORS 문제를 해결하는 올바른 위치는?
CORS 정책이 켜져 있어야 브라우저가 FastAPI 백엔드(8000포트)로부터 데이터를 정상 수신할 수 있습니다.