개념 사전 · 프로토콜

ASGI

Asynchronous Server Gateway Interface · 아스기

는 서버와 비동기 애플리케이션을 로 연결하는 인터페이스이다. HTTP뿐 아니라 WebSocket처럼 여러 이벤트가 이어지는 통신과 애플리케이션 생애를 표현할 수 있다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

01무엇이고, 어떤 일을 하나

  • 연결·요청의 범위 정보와 이벤트 전달을 분리한다.
  • 응답 시작·본문·연결 종료 같은 비동기 흐름을 표현한다.
  • 를 지원하는 앱과 서버의 이벤트 루프를 연결한다.

02어떤 순서로 동작하나

  1. scope 준비

    서버가 프로토콜 종류·경로·헤더 등 연결 또는 요청의 범위 정보를 구성한다.

  2. 비동기 앱 호출

    애플리케이션을 scope, receive, send와 함께 호출하고 앱이 필요한 입력 이벤트를 받는다.

  3. 처리·양보

    비동기 I/O를 하는 동안 다른 작업이 진행될 기회를 얻는다. 동기 I/O나 CPU 계산은 자동으로 양보되지 않는다.

  4. 전송

    앱이 응답 시작과 본문 등의 이벤트를 send하고 프로토콜 규칙에 맞게 요청이나 연결을 끝낸다.

03먼저 알아둘 용어와 구성요소

애플리케이션은 scope, receive, send를 받는 이다.
scope는 연결이나 요청의 정보이고 receive는 들어오는 이벤트, send는 를 전달한다.
HTTP 응답은 시작 이벤트로 상태·헤더를 보내고 본문 이벤트로 내용을 보낸다. 같은 인터페이스 계열에서 WebSocket과 lifespan 같은 프로토콜 생애도 표현할 수 있다.
는 기다리는 동안 이벤트 루프가 다른 작업을 진행할 기회를 준다.
하지만 async def 안에서 동기 DB 호출이나 큰 CPU 계산을 그대로 실행하면 그 구간 동안 루프를 막을 수 있다. 비동기라는 이름이 모든 코드를 병렬로 빠르게 만들지는 않는다. 비동기 드라이버, 제한된 thread pool, CPU 작업 분리를 요구에 맞게 선택한다.
프록시·앱·DB의 timeout과 최대 연결 수도 한 요청 흐름에서 맞물린다.

04예제로 따라가기

  • HTTP 응답에서는 시작 이벤트로 상태·헤더를 보내고 이어 본문 이벤트로 데이터를 보낸다.
  • async def 안에서 동기 DB 호출을 오래 실행하면 해당 이벤트 루프가 다른 작업을 처리하지 못할 수 있다.
  • WebSocket은 여러 입력·출력 이벤트가 하나의 연결에서 이어져 단일 요청·반환으로 끝나는 호출 모델과 차이가 있다.

05혼동하기 쉬운 점과 확인 기준

  • 의 동기 호출이나 async 함수 안의 동기 DB 호출은 해당 실행 흐름을 기다리게 할 수 있다. 라는 키워드 유무보다 실제 호출이 어디서 양보하는지 봐야 한다.
  • 앱은 status·헤더·본문을 만들고 서버 인터페이스가 이를 HTTP로 전달한다. 문자 개수와 바이트 길이, 이미 보낸 헤더 뒤 발생한 예외를 구별해야 응답 오류를 설명할 수 있다.
  • 비동기 동시성과 여러 CPU의 병렬 계산은 같은 개념이 아니다. CPU 작업을 문법만 붙여 자동 병렬화했다고 해석하지 않는다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.