[python] aiohttp를 사용하여 비동기적으로 웹 정적 리소스 제공하기

소개

aiohttp는 Python에서 비동기 웹 애플리케이션을 만들기 위해 사용되는 파이썬 라이브러리입니다. 이 라이브러리를 사용하면 효율적으로 비동기적으로 웹 서버를 구축하고, 클라이언트 요청을 처리할 수 있습니다. 이 글에서는 aiohttp를 사용하여 웹 서버에서 정적 리소스를 제공하는 방법에 대해 알아보겠습니다.

준비물

aiohttp를 사용하기 전에, 우선 aiohttp 패키지를 설치해야 합니다. 아래의 명령어를 사용하여 설치할 수 있습니다.

pip install aiohttp

코드 예제

아래의 코드 예제는 aiohttp를 사용하여 웹 서버에서 정적 리소스를 제공하는 간단한 예시입니다.

from aiohttp import web

async def handle(request):
    path = request.path.lstrip('/')
    try:
        # 파일을 읽어와서 response에 전송
        with open(path, 'rb') as f:
            return web.Response(body=f.read())
    except FileNotFoundError:
        # 파일이 없는 경우 404 에러를 반환
        return web.Response(status=404)

app = web.Application()
app.router.add_get('/{tail:.*}', handle)

web.run_app(app)

이 예제에서는 클라이언트로부터의 요청을 처리하기 위해 handle 함수를 정의합니다. 함수는 클라이언트가 요청한 파일을 로드하여 응답으로 반환합니다. 파일이 없는 경우 404 에러를 반환합니다.

app 객체를 생성한 후 app.router.add_get 메서드를 사용하여 경로와 핸들러 함수를 등록합니다. 이렇게 등록한 핸들러 함수는 클라이언트의 요청과 일치하는 경로로 요청이 올 때마다 실행됩니다.

마지막으로 web.run_app 메서드를 사용하여 웹 서버를 실행합니다.

실행하기

위의 코드를 server.py 파일로 저장한 후에 아래의 명령어로 서버를 실행할 수 있습니다.

python server.py

서버가 실행되면 클라이언트가 http://localhost:8080/파일경로로 접속하여 정적 리소스를 요청할 수 있습니다.

결론

aiohttp를 사용하면 Python으로 비동기 웹 애플리케이션을 쉽게 작성할 수 있습니다. 이 글에서는 aiohttp를 사용하여 웹 서버에서 정적 리소스를 제공하는 방법을 살펴보았습니다. 추가적인 기능을 구현하고 싶다면 aiohttp의 공식 문서를 참고하시기 바랍니다.

참고 자료