티스토리 뷰
AI 웹 개발 입문 시리즈 (6/7)
로컬에서 만든 AI 챗봇을 친구에게 보여주려면 URL이 필요합니다. 이번 글에서 로컬 프로젝트를 인터넷에 올리는 과정을 함께 해봅시다.
1. 배포란 무엇인가?
'배포(Deployment)'는 내 컴퓨터(Local)에서만 돌아가던 코드를 서버라는 큰 컴퓨터에 올려서, 인터넷 주소(URL)만 있으면 전 세계 누구나 접속할 수 있게 만드는 과정입니다.
로컬 환경과 서버 환경은 다릅니다. 내 컴퓨터에서는 python app.py나 npm run dev로 쉽게 실행했지만, 서버에서는 API 키를 어디에 둘지, 트래픽이 몰리면 어떻게 할지 등을 고민해야 합니다.
왜 배포가 필요한가요?
로컬 개발 환경은 나만의 실험실입니다. 하지만 실제 사용자는 내 컴퓨터에 들어와서 프로그램을 실행할 수 없죠. 배포는 내 코드를 24시간 깨어 있는 서버에 복사하고, 누구나 접속할 수 있는 '공인 IP'나 '도메인'을 부여하는 과정입니다. 이 과정에서 우리는 로컬에서 무심코 사용했던 설정들이 서버에서도 잘 작동할지 하나씩 점검하게 됩니다.
배포 전 체크리스트: 이것만은 확인하세요!
- 의존성 정리: 내 컴퓨터에 설치된 라이브러리 목록이
requirements.txt(Python)나package.json(Node.js)에 정확히 기록되어 있나요? 서버는 이 파일을 보고 필요한 도구들을 설치합니다. - 환경 변수 분리: API 키를 코드에 직접 적어두면 GitHub에 올릴 때 전 세계에 공개됩니다. 반드시 환경 변수로 처리하고, 로컬에서는
.env파일을 사용하세요. - 애플리케이션 진입점: 서버가 실행될 때 어떤 파일을 가장 먼저 실행해야 하는지(예:
app.py,index.js) 명시되어 있나요? - 포트(Port) 설정: 대부분의 클라우드 서비스는
PORT라는 환경 변수를 통해 서버가 기다려야 할 포트 번호를 알려줍니다. 코드가 이를 유연하게 받아들이도록 작성되었는지 확인하세요.

2. 배포 플랫폼 비교
초보 개발자가 가장 많이 사용하는 두 가지 플랫폼을 비교해 보겠습니다.
| 구분 | Vercel (버셀) | Azure App Service (애저) |
|---|---|---|
| 특징 | 프론트엔드 최적화, 설정이 거의 없음 | 기업용 서비스, Python/Node 등 자유로움 |
| 난이도 | 매우 쉬움 (GitHub 연결 끝) | 보통 (CLI나 포털 설정 필요) |
| 추천 대상 | Next.js, React 앱 배포 | Python Flask/FastAPI 백엔드 앱 |
| 비용 | 개인 프로젝트 무료 플랜 강력 | 일정 수준까지 무료지만 유료 전환 가능성 |
배포 플랫폼 선택: 어떤 걸 골라야 할까요?
처음 시작하신다면 고민이 많으실 겁니다. 간단한 규칙을 정해 드릴게요.
- Vercel: Next.js나 React로 예쁜 화면을 만들었고, 백엔드는 OpenAI SDK만 쓰면 될 때 선택하세요. "배포가 이렇게 쉬워?"라는 말이 절로 나옵니다.
- Azure App Service: Python(Flask, FastAPI)으로 데이터베이스를 직접 다루거나 복잡한 로직을 백엔드에 두었을 때 선택하세요. 기업용 안정성과 확장이 필요할 때 가장 든든한 동료가 됩니다.
- 기타 대안: 더 자유로운 설정을 원한다면 AWS App Runner나 Google Cloud Run 같은 서비스도 있습니다. 하지만 초급 단계에서는 Vercel이나 Azure로 감을 잡는 것이 가장 빠릅니다.

3. Part 1: Vercel에 배포하기 (가장 쉬운 경로)
Vercel은 GitHub 저장소를 연결하는 것만으로 배포가 끝납니다. 프론트엔드 중심의 AI 앱(예: Next.js + OpenAI SDK)에 가장 적합합니다.
1단계: GitHub에 코드 올리기
먼저 코드가 GitHub에 올라가 있어야 합니다.
git add .
git commit -m "feat: initial AI chatbot"
git push origin main
2단계: Vercel 연결 및 프로젝트 생성
- Vercel에 로그인하고 Add New > Project를 누릅니다.
- 내 GitHub 저장소를 가져옵니다(Import).
- Environment Variables (환경 변수) 섹션을 찾으세요.
3단계: 환경 변수 설정 (중요!)
로컬 .env 파일에 있던 OPENAI_API_KEY를 Vercel 설정 화면에 입력해야 합니다.
- Key:
OPENAI_API_KEY - Value:
sk-xxxx...(내 실제 키)
이 과정을 거쳐야 Vercel 서버가 내 OpenAI 계정으로 요청을 보낼 수 있습니다.
4단계: 배포 완료와 최종 확인
Deploy 버튼을 누르면 실시간으로 빌드(Build) 로그가 흐릅니다. 빌드는 내 소스 코드를 서버가 실행 가능한 상태로 조립하는 과정입니다. 여기서 빨간색 에러 메시지가 뜬다면 오타가 있거나 라이브러리가 빠진 것이니 당황하지 말고 로그를 찬찬히 읽어보세요.
배포가 끝나면 [프로젝트명].vercel.app 형태의 도메인이 생성됩니다. 이 주소로 접속해 친구들과 공유해 보세요.

운영 팁: 환경 변수 업데이트하기
OpenAI API 키를 교체했거나, 다른 설정을 바꿔야 할 때가 있습니다.
- Vercel 프로젝트 대시보드에서 Settings > Environment Variables로 이동합니다.
- 기존 값을 수정하고 저장합니다.
- Deployments 탭에서 최신 항목 옆의
...버튼을 눌러 Redeploy를 실행해야 수정된 환경 변수가 서버에 최종 적용됩니다. 단순히 설정만 바꾼다고 해서 즉시 반영되지 않는다는 점에 주의하세요!
4. Part 2: Azure App Service에 배포하기 (Python 백엔드)
Python(Flask, FastAPI)으로 만든 AI 앱이라면 Azure가 좋은 선택입니다.
1단계: Azure CLI 준비하기
먼저 내 컴퓨터에 Azure CLI(Command Line Interface)를 설치해야 합니다. 터미널에서 az 명령어를 쓸 수 있게 해주는 도구입니다.
# Azure 로그인: 브라우저 창이 뜨면 로그인하세요.
az login
# 현재 사용 중인 구독(Subscription) 목록을 확인합니다.
az account list --output table
2단계: 단 한 줄로 끝내는 배포 (az webapp up)
Azure에는 수많은 설정 메뉴가 있지만, 초보자라면 az webapp up 명령어가 마법과도 같은 경험을 줄 겁니다. 이 명령어는 자동으로 리소스 그룹(Resource Group)을 만들고, 요금제(App Service Plan)를 정하고, 코드를 압축해서 올려줍니다.
# 루트 폴더에서 실행 (requirements.txt가 있어야 합니다)
az webapp up --sku F1 --name my-ai-chatbot-app --location koreacentral
--sku F1: 가장 낮은 무료 요금제를 쓰겠다는 뜻입니다. 연습용으로 딱이죠.--name: 내 웹 사이트 주소의 이름입니다. 전 세계에서 하나뿐이어야 하니 본인의 닉네임을 섞어 보세요. ([내이름]-ai-app.azurewebsites.net)--location koreacentral: 한국(서울) 데이터센터에 서버를 두겠다는 의미입니다. 지리적으로 가까워야 응답 속도가 빠릅니다.
배포가 끝나면 터미널 창에 JSON 형태의 결과가 나옵니다. 여기서 Resource Group의 이름(예: [이름]_rg_Windows_koreacentral)을 잘 메모해 두세요. 다음 단계에서 꼭 필요합니다.
3단계: 환경 변수로 API 키 주입하기
로컬 .env 파일은 GitHub에 올리지 않았으니, Azure 서버도 내 OpenAI API 키를 모르는 상태입니다. 앱 설정(App Settings) 메뉴를 통해 이를 알려줘야 합니다.
# 메모해둔 리소스 그룹 이름을 --resource-group 뒤에 넣으세요.
az webapp config appsettings set \
--name my-ai-chatbot-app \
--resource-group [메모한-리소스-그룹-이름] \
--settings OPENAI_API_KEY=sk-xxxx...
이제 서버가 기지개를 켜고 OpenAI 서버와 대화할 준비를 마쳤습니다!
4단계: 실시간 로그로 '내 앱' 생존 확인하기
배포 후 사이트에 접속했는데 Application Error가 나온다면? 당황하지 말고 실시간 로그를 켜보세요.
# 실시간 로그 스트리밍 시작
az webapp log tail --name my-ai-chatbot-app --resource-group [리소스-그룹-이름]
로그는 서버가 내뱉는 생생한 목소리입니다. "OPENAI_API_KEY가 없습니다"라거나 "라이브러리 설치 실패" 같은 힌트를 주기 때문에 트래픽이 몰리는 운영 단계에서도 필수적인 명령어입니다.
5. API 키 보안: 절대 코드에 넣지 마세요
초보자가 가장 많이 하는 실수가 API 키를 소스 코드에 직접 적어서 GitHub에 올리는 것입니다.
환경 변수 사용법
코드에서는 process.env.OPENAI_API_KEY (JS)나 os.getenv("OPENAI_API_KEY") (Python)으로 값을 읽어와야 합니다. 이렇게 하면 코드는 그대로 두고, 배포 플랫폼(Vercel, Azure)의 설정 화면에서 키값만 바꿔 가며 운영할 수 있습니다.
.env 파일과 .gitignore의 관계
.env파일에 실제 API 키를 적고 로컬 개발을 진행합니다..gitignore파일에 반드시.env를 추가하여 GitHub에 업로드되지 않게 막습니다.- 서버(Vercel, Azure)에는 각 플랫폼의 'Environment Variables' 메뉴를 통해 키값을 따로 입력합니다.
# .gitignore 파일 예시
.env
__pycache__/
node_modules/
.venv/
.DS_Store

6. 비용 관리와 모니터링 기초
AI 앱은 무료로 배포해도 LLM API 호출 비용이 발생합니다. 운영의 핵심은 '의외의 지출'을 막는 것입니다.
1. OpenAI 사용량 제한
OpenAI Dashboard에서 한 달 최대 사용 금액(Monthly Budget)을 꼭 설정하세요. 예를 들어 $5로 설정해두면, 그 이상의 요청은 자동으로 차단되어 안심할 수 있습니다.
2. Azure 비용 알람
Azure를 쓴다면 'Cost Management' 메뉴에서 예산 알람(Budget Alert)을 설정하세요. 무료 범위를 넘기거나 설정한 금액의 80%에 도달했을 때 이메일을 받도록 설정하는 것이 좋습니다.
3. 실시간 모니터링: 서비스가 살아있는지 확인하기
배포 직후에는 다음 세 가지 '생존 신호'를 체크하세요.
- 첫 접속 속도(Cold Start): 서버를 오랫동안 쓰지 않으면 잠들기도 합니다. 처음 접속할 때 '깨어나는' 데 시간이 얼마나 걸리는지 확인해 보세요.
- HTTP 500 에러 추적: 만약 "서버 내부 오류"가 뜬다면, Vercel의 'Runtime Logs'나 Azure의 'Log Stream'을 열어보세요. 코드 한 줄의 오타나 누락된 환경 변수 때문일 확률이 90%입니다.
- 사용자 질문 분석: 사용자가 어떤 질문을 하는지, AI가 적절한 정보를 제공하는지 정기적으로 확인해 보세요. 이는 다음 7편에서 다룰 '서비스 개선'을 위한 가장 소중한 데이터가 됩니다.

7. 시리즈 목차
- AI API 첫 걸음: OpenAI API로 첫 번째 요청 보내기
- 프롬프트 엔지니어링 101: AI와 대화하는 기술
- 나만의 챗봇 만들기: 실시간 채팅 UI 구현
- RAG의 기초: 외부 데이터로 AI의 지식 확장하기
- AI 에이전트 이해하기: 스스로 행동하는 AI
- AI 웹 앱 배포하기: Vercel과 Azure에 올리고 운영하기 (현재 글)
- AI 앱의 평가와 개선: 품질을 측정하고 더 좋게 만드는 법
참고 자료
- Total
- Today
- Yesterday
- pandas
- LLM
- AZURE
- rag
- Azure Functions
- openAI
- aks
- cloudcomputing
- Tutorial
- AppService
- faiss
- Python
- Prompt engineering
- app service
- appserviceplan
- Kubernetes
- embeddings
- CloudArchitecture
- streaming
- langchain
- 데이터시각화
- Ai
- DevOps
- serverless
- scaling
- 공공데이터
- Cloud
- Document Processing
- ALTAIR
- vector search
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
