일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- selenium
- 자동화
- aiortc
- GPT
- 퍼피티어
- uvicorn
- freetds
- WSL
- realtime
- kotlin
- AWS
- linux
- FastAPI
- App
- 직링
- netfunnel 우회
- EC2
- ngrok
- fasapi
- 티켓
- 예매
- ubuntu
- ASGI
- nginx
- puppeteer
- 자동화 도구
- docker desktop
- WebRTC
- 콘서트
- Django
- Today
- Total
개발 삽질 일지
[Linux] Uvicorn 본문
Uvicorn이란?
Uvicorn은 ASGI 서버입니다.
ASGI(Asynchronous Server Gateway Interface)는 WSGI의 다음 세대로, 비동기 처리를 지원합니다.
즉, FastAPI, Django Channels, 최신 웹 프레임워크를 사용할 때는 ASGI 기반의 서버가 필요하고, 그 대표적인 것이 Uvicorn입니다. Django를 사용하면서 uwsgi를 통해 배포를 진행했었고, 비동기 처리를 위해 uvicorn으로 넘어가면서 배운 것들을 정리했습니다.
WSGI vs ASGI
항목 | WSGI | ASGI |
요청 처리 방식 | 동기(Sync) | 비동기(Async + Sync) |
실시간 처리 | 어렵다 | WebSocket, SSE 등 실시간 처리 가능 |
사용 예 | Django, Flask | Fast API, Django Channels |
서버 예시 | Gunicorn, uWSGI | Uvicorn, Daphne, Hypercorn |
Uvicorn은 ASGI 스펙을 따르기 때문에 동기와 비동기 코드를 모두 처리할 수 있으며, 고성능이 필요한 실시간 웹 환경에 적합합니다.
Uvicorn 실행 및 자동화 설정하기
앞서 Nginx 설정에서 요청을 내부 서버인 127.0.0.1:8000으로 전달하도록 구성했기 때문에, 해당 포트에서 실제로 동작하는 Python 서버(Uvicorn)가 준비되어 있어야 합니다.
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
하지만 실무에서는 매번 수동으로 실행하기보다는 시스템 서비스로 등록해 자동화하는 것이 일반적입니다.
systemd 서비스 등록하기
리눅스에서는 systemd를 통해 서버 재부팅 시 자동으로 Uvicorn을 실행하도록 설정할 수 있습니다.
1. 서비스 유닛 파일 작성
sudo nano /etc/systemd/system/uvicorn.service
예시
[Unit]
Description=Uvicorn daemon for Django project
After=network.target
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/myproject
Environment="PATH=/home/ubuntu/venv/bin"
ExecStart=/home/ubuntu/venv/bin/uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
프로젝트 경로(WorkingDirectory)와 가상환경(PATH)은 실제 환경에 맞게 수정해야 합니다.
2. 서비스 등록 및 실행
sudo systemctl daemon-reload # 서비스 파일을 새로 읽어옵니다
sudo systemctl enable uvicorn # 부팅 시 자동 실행되도록 등록합니다
sudo systemctl start uvicorn # 서비스를 시작합니다
sudo systemctl status uvicorn # 실행 상태를 확인합니다
이제 서버가 재시작되더라도 Uvicorn은 자동으로 백그라운드에서 실행됩니다.
전체 구성 흐름 요약
[ 사용자 브라우저 ]
↓ optatumai.com 요청 (HTTP/HTTPS)
┌─────────────────────┐
│ Nginx (80/443) │
└─────────────────────┘
↓ proxy_pass
┌─────────────────────┐
│ Uvicorn (8000포트) │
└─────────────────────┘
↓
Django ASGI 애플리케이션
Nginx는 외부 요청을 받아 정적 파일은 직접 처리하고,
그 외 모든 요청을 내부의 Uvicorn 서버로 안전하게 전달합니다.
(번외) Django를 ASGI 환경에서 배포는 진행 중입니다. 동기 코드로 배포가 되는 것은 확인했으나, 로컬에서 비동기 코드를 사용했을 때 에러를 뿜습니다. 아시는 분 있으면 도와주세요..
🧭 다음 글 안내
이 글은 Linux 환경에서 Django를 Uvicorm과 함께 배포하는 단계입니다. Nginx와 연동까지 끝마쳤으니, 이제 실제 서비스를 띄울 준비가 끝났습니다.
👉 다음 글에서는 EC2 인스턴스 생성과 RDS 연결 방법을 정리합니다.
[AWS] 웹 애플리케이션 배포하기 (EC2)
[1편: EC2 인스턴스 만들고 RDS 연결까지] 이 글은 AWS에서 EC2 인스턴스를 생성하고, 웹 애플리케이션을 배포하려는 분들을 위한 실습형 가이드입니다."인스턴스는 만들었는데 뭘 해야 할지 모르겠
gnaaak.tistory.com
언제나처럼 — 시작은 삽질이지만, 끝은 지식입니다.
'Linux 학습 로드맵 > 3단계: 고급 - 우당탕탕 서비스 운영' 카테고리의 다른 글
[Linux] (번외) FastAPI + Django + Uvicorn (1) | 2025.05.07 |
---|---|
[Linux] Nginx (0) | 2025.05.02 |