Skip to content
Home » “파이썬 웹 개발의 미래: Asgi의 개념과 활용 방법”

“파이썬 웹 개발의 미래: Asgi의 개념과 활용 방법”

요즘 웹개발 특
오래전부터 파이썬 웹 애플리케이션은 웹 서버와 통신할 때 웹 서버 게이트웨이 인터페이스(WSGI) 표준을 따랐다. WSGI는 2003년에 처음 도입되었고, 2010년에 업데이트되었다. 파이썬 버전 2.2에서는 네이티브 기능을 이용해 쉽게 구현할 수 있게 되었다. 이로 인해 WSGI는 모든 주요 파이썬 웹 프레임워크에 빠르게 도입되어 파이썬을 사용한 웹 개발의 기반이 되었다.

시계를 다시 현재로 돌려보자. 파이썬 2는 폐기되었고(한참 늦었지만), 파이썬에는 이제 네트워크 호출과 같은 비동기 작업을 처리하기 위한 기본 구문이 있다. WSGI 및 기타 기본적으로 동기 동작을 전제하는 표준은 비동기의 성능이나 효율성이 떨어진다. 이는 곧 WSGI가 웹소켓과 같은 고급 프로토콜을 효과적으로 처리하지 못한다는 것을 의미한다. 그래서 ASGI, 즉 비동기 서버 게이트웨이 인터페이스가 나왔다. ASGI는 WSGI와 마찬가지로 파이썬 웹 애플리케이션과 웹 서버 간의 공통적인 인터페이스를 기술한다. WSGI와 다른 점은 애플리케이션 당 여러 개의 비동기 이벤트를 허용한다는 것이다. 또한 ASGI는 동기 앱과 비동기 앱을 모두 지원한다. ASGI를 사용해 새로운 비동기 웹 앱을 구축하는 것뿐만 아니라 오래된 동기 WSGI 웹 앱을 ASGI로 마이그레이션할 수도 있다.

WSGI의 작동 방식

WSGI의 작동 방식
WSGI는 웹 서버에 파이썬 함수로서 노출되는 것이 일반적이다. 이 함수는 environ과 start_response라는 두 개의 매개변수를 받는다. environ은 웹 서버에서 제공한 환경 변수와 현재 요청에 대한 정보가 포함된 사전이다. start_response는 클라이언트로 HTTP 응답을 보내는 작업을 시작하는 데 사용되는 함수이다.

이 함수가 반환하는 데이터가 응답 본문을 구성한다. 간단한 application 함수는 다음과 같은 형태를 가진다.

def application(environ, start_response):
start_response(‘200 OK’, [(‘Content-Type’, ‘text/plain’)])
return [b’안녕하세요 우주여러분’]

플라스크(Flask)와 같은 WSGI 호환 웹 프레임워크를 사용하는 경우, 프레임워크 자체가 application 함수를 제공하며 이 함수의 모든 구성요소가 자동으로 연결된다. WSGI의 단점은 두 가지이다. 첫째, WSGI는 한 번에 하나의 요청과 응답만 처리하며 응답이 즉시 반환되는 것을 가정한다. 웹소켓이나 롱 폴링 HTTP 연결과 같이 장시간 지속되는 연결을 처리할 방법이 없다. 둘째, WSGI는 동기적으로 동작한다. 멀티스레드 연결 풀을 사용하더라도 응답이 반환될 때까지 각 연결이 차단된다. 많은 WSGI 설정에는 스레드와 프로세스 풀을 처리할 수 있는 기능이 있지만 WSGI 인터페이스 자체가 동기적이라는 제한이 있다.

요즘 웹개발 특

요즘 웹개발 특
요즘 웹개발 특

ASGI의 작동 방식

ASGI의 작동 방식은 WSGI와 유사하다. ASGI는 async 함수이며 매개변수가 3개인 application 함수 객체를 정의한다. scope는 현재 요청에 대한 정보를 담은 사전으로, WSGI의 environ과는 다소 다른 명명 규칙을 가지고 있다. send는 애플리케이션이 클라이언트로 메시지를 보낼 수 있게 해주는 async callable이다. receive는 애플리케이션이 클라이언트로부터 메시지를 받을 수 있게 해주는 async callable이다.

간단한 application 함수의 예시를 보면 다음과 같다.

async def application(scope, receive, send):
await send({
‘type’: ‘http.response.start’,
‘status’: 200,
‘headers’: [
[b’content-type’, b’text/plain’],
],
})
await send({
‘type’: ‘http.response.body’,
‘body’: b’Hello, world!’,
})

ASGI 웹 프레임워크는 WSGI와 마찬가지로 자체 application() 함수를 생성하여 필요에 따라 연결한다. ASGI의 가장 큰 특징은 비동기 메타포를 전반적으로 사용한다는 것이다. application 함수는 async이며, HTTP 헤더와 응답 본문을 별도의 두 가지 await send() 명령으로 보낸다. 따라서 application 함수와 send 함수는 다른 연결의 application 및 send 호출과 동시에 교차하여 처리가 가능하다. 이와 달리 WSGI에서는 요청과 응답을 처리하는 동안 다른 작업을 차단했거나 처리할 수 없었다.

또한, 예제에서는 receive를 사용하지 않았지만 이 또한 async 함수로, 다른 작업을 차단하지 않고 요청 본문을 받을 수 있다. 이 방법을 사용하면 요청과 응답을 증분적으로 서버에서 주고 받을 수 있다. 이는 WSGI에서는 매끄럽게 처리하기 어렵거나 아예 불가능한 일이었다.

파이썬 코딩 무료 강의 (기본편) – 6시간 뒤면 여러분도 개발자가 될 수 있어요 [나도코딩]

파이썬 코딩 무료 강의 (기본편) - 6시간 뒤면 여러분도 개발자가 될 수 있어요 [나도코딩]
파이썬 코딩 무료 강의 (기본편) – 6시간 뒤면 여러분도 개발자가 될 수 있어요 [나도코딩]

ASGI의 작동 방식

ASGI에서 동기 및 비동기 함수 사용하기

ASGI를 사용할 때, async 함수와 최대한 비동기 친화적인 라이브러리를 사용하는 것이 좋습니다. 이렇게 하면 성능을 크게 향상시킬 수 있습니다. 동기 전용 코드를 사용하면 문제를 해결하기가 어렵습니다. 동기 함수를 장기 실행으로 호출하면 전체 호출 체인이 차단되기 때문에 비동기 사용의 장점이 사라집니다. 따라서, 장기 실행 동기 호출을 사용해야 하는 경우 asyncio.run_in_executor를 사용하여 스레드 또는 프로세스 풀에 호출을 위임해야 합니다. 스레드 풀은 CPU 사용량이 많지 않은 외부 이벤트 또는 작업을 기다릴 때 사용해야 하며, 프로세스 풀은 CPU 사용량이 많은 로컬 작업에 사용해야 합니다. 예를 들어, 웹 애플리케이션에 원격 웹사이트를 호출하는 루트(route)가 있다면 스레드를 사용해야 합니다. 더 좋은 방법은 비동기 HTTP 요청을 수행하는 aiohttp 라이브러리를 사용하는 것입니다. 만약 필로우(Pillow) 이미지 라이브러리를 사용해 이미지 크기를 조절하려면 run_in_executor를 프로세스 풀과 함께 사용해야 합니다. 프로세스 간에 데이터를 주고받는 약간의 오버헤드가 있지만, run_in_executor는 다른 이벤트를 차단하지 않습니다. 이와 같은 내용을 고려하여 ASGI에서 동기 및 비동기 함수를 올바르게 사용해야 합니다.

초보개발자 vs 고수개발자 #shorts

초보개발자 vs 고수개발자 #shorts
초보개발자 vs 고수개발자 #shorts

ASGI를 지원하는 웹 프레임워크

ASGI를 지원하는 웹 프레임워크는 다양하지만, 대표적인 프레임워크로는 스탈렛(Starlette)과 패스트API(FastAPI), 쿼트(Quart), 장고(Django)가 있다.

스탈렛과 패스트API는 최근에 주목받는 프레임워크로, 둘 다 ASGI를 지원하며 비동기 우선으로 설계되었다. 이 두 프레임워크는 파이썬을 위한 가장 현대적이고 최첨단인 웹 프레임워크다.

쿼트는 대표적인 파이썬 웹 프레임워크인 플라스크도 ASGI를 지원하지만, 플라스크는 처음부터 비동기 메타포를 활용하도록 설계되지 않았다. 그러나 깃랩은 플라스크의 구문과 메타포를 사용하면서 비동기 루트 핸들러를 허용한다.

장고는 버전 3.0부터 ASGI를 지원하며, 장고 애플리케이션 내의 비동기 코드에 대한 지원은 3.1에 추가되었다. 장고는 실행 속도 측면에서 아쉬움이 있지만, 비동기의 존재만으로도 더 높은 성능을 얻을 수 있다.

이렇게 다양한 ASGI 웹 프레임워크 중에서 자신의 상황에 맞는 프레임워크를 선택하면 웹 앱을 개발하는데 있어서 더욱 편리하고 수월할 것이다.

[email protected] .

무조건 공감되는 코딩 입문자 특징 ㅋㅋㅋ #Shorts

무조건 공감되는 코딩 입문자 특징 ㅋㅋㅋ #Shorts
무조건 공감되는 코딩 입문자 특징 ㅋㅋㅋ #Shorts
Fastapi에 대해 가볍게 알아보자.
Fastapi에 대해 가볍게 알아보자.
파이썬, 비주얼 스튜디오 사용자 품는다” 차세대 R 마크다운, 콰르토 - Itworld Korea
파이썬, 비주얼 스튜디오 사용자 품는다” 차세대 R 마크다운, 콰르토 – Itworld Korea
파이썬 - Itworld Korea
파이썬 – Itworld Korea
Yaml의 숨은 오류를 미리 막아주는 7가지 팁 - Itworld Korea
Yaml의 숨은 오류를 미리 막아주는 7가지 팁 – Itworld Korea

See more here: molady.vn

Categories: https://molady.vn/kr

Leave a Reply

Your email address will not be published. Required fields are marked *