개념 사전 · 프로토콜
ASGI
Asynchronous Server Gateway Interface · 아스기
는 서버와 비동기 애플리케이션을 로 연결하는 인터페이스이다. HTTP뿐 아니라 WebSocket처럼 여러 이벤트가 이어지는 통신과 애플리케이션 생애를 표현할 수 있다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 연결·요청의 범위 정보와 이벤트 전달을 분리한다.
- 응답 시작·본문·연결 종료 같은 비동기 흐름을 표현한다.
- 를 지원하는 앱과 서버의 이벤트 루프를 연결한다.
02어떤 순서로 동작하나
- scope 준비
서버가 프로토콜 종류·경로·헤더 등 연결 또는 요청의 범위 정보를 구성한다.
- 비동기 앱 호출
애플리케이션을 scope, receive, send와 함께 호출하고 앱이 필요한 입력 이벤트를 받는다.
- 처리·양보
비동기 I/O를 하는 동안 다른 작업이 진행될 기회를 얻는다. 동기 I/O나 CPU 계산은 자동으로 양보되지 않는다.
- 전송
앱이 응답 시작과 본문 등의 이벤트를 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상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.