비동기 서버 게이트웨이 인터페이스

IT 위키
Retrospect (토론 | 기여)님의 2025년 3월 26일 (수) 08:17 판 (새 문서: ASGI(비동기 서버 게이트웨이 인터페이스, '''A'''synchronous '''S'''erver '''G'''ateway '''I'''nterface)는 Python 웹 프레임워크와 서버 간의 비동기 통신을 가능하게 해주는 표준 인터페이스로, 기존 WSGI(Web Server Gateway Interface)의 한계를 극복하고 웹소켓, HTTP/2 등 비동기 기능을 지원하기 위해 설계되었다. ==개요== ASGI는 Django, FastAPI, Starlette 같은 현대적인 Python 웹 프레임워크가 고...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

ASGI(비동기 서버 게이트웨이 인터페이스, Asynchronous Server Gateway Interface)는 Python 웹 프레임워크와 서버 간의 비동기 통신을 가능하게 해주는 표준 인터페이스로, 기존 WSGI(Web Server Gateway Interface)의 한계를 극복하고 웹소켓, HTTP/2 등 비동기 기능을 지원하기 위해 설계되었다.

1 개요[편집 | 원본 편집]

ASGI는 Django, FastAPI, Starlette 같은 현대적인 Python 웹 프레임워크가 고성능 네트워크 프로그래밍과 실시간 웹 기능(예: 웹소켓)을 지원할 수 있도록 해준다. 비동기 함수(async def)와 함께 사용할 수 있으며, 멀티프로토콜 처리 구조를 가지고 있다.

2 역사[편집 | 원본 편집]

  • WSGI는 Python 웹 표준으로 널리 사용되었으나, 동기 방식만 지원
  • ASGI는 2016년 Django Channels 프로젝트의 일환으로 등장
  • 현재는 Django, FastAPI, Starlette, Quart 등에서 사용되고 있음

3 특징[편집 | 원본 편집]

  • 비동기/동기 모두 지원 — async/await 기반의 처리를 기본으로 하고, 기존 WSGI 앱과의 호환성도 제공
  • 웹소켓 지원 — 실시간 채팅, 스트리밍 등에 적합
  • 멀티 프로토콜 — HTTP, HTTP/2, WebSocket 등 다양한 프로토콜 처리 가능
  • 스코프(Scope) 구조 — 요청, 연결 등에 대한 정보를 딕셔너리 형태로 전달
  • 이벤트 기반 구조 — 요청 처리 흐름이 event loop를 기반으로 비동기 실행됨

4 구조[편집 | 원본 편집]

ASGI 애플리케이션은 다음과 같은 구조를 가진다.

async def app(scope, receive, send):
    assert scope["type"] == "http"

    await receive()  # 요청 수신
    await send({     # 응답 전송
        "type": "http.response.start",
        "status": 200,
        "headers": [[b"content-type", b"text/plain"]],
    })
    await send({
        "type": "http.response.body",
        "body": b"Hello, ASGI!",
    })

5 사용 예시[편집 | 원본 편집]

ASGI 앱은 일반적으로 Uvicorn, Daphne, Hypercorn 같은 ASGI 서버를 통해 실행된다.

5.1 FastAPI 예제 실행[편집 | 원본 편집]

uvicorn main:app --reload

5.2 Django ASGI 설정 (asgi.py)[편집 | 원본 편집]

import os
from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()

6 주요 ASGI 서버[편집 | 원본 편집]

  • Uvicorn — 빠르고 가벼운 ASGI 서버, FastAPI와 자주 사용됨
  • Daphne — Django Channels용으로 개발된 ASGI 서버
  • Hypercorn — Quart 프레임워크에서 주로 사용됨

7 같이 보기[편집 | 원본 편집]

8 참고 문헌[편집 | 원본 편집]