[파이썬] aiohttp 커스텀 에러 페이지 설정하기

aiohttp는 파이썬에서 사용하는 강력한 비동기 웹 프레임워크입니다. 이 프레임워크를 사용하면 간단하게 웹 서버를 구축하고, 요청 및 응답을 처리할 수 있습니다.

이번 글에서는 aiohttp에서 커스텀 에러 페이지를 설정하는 방법을 알아보겠습니다. 기본적으로 aiohttp는 에러 발생 시 기본 에러 페이지를 제공하지만, 이를 사용자 정의한 커스텀 페이지로 변경할 수 있습니다.

1. 커스텀 에러 핸들러 생성하기

먼저, 커스텀 에러 핸들러를 생성해야 합니다. 에러 핸들러는 aiohttp의 web.View 클래스를 상속받아야 합니다. 이 클래스를 상속받으면 http_exception 메서드를 오버라이딩하여 커스텀한 에러 페이지를 반환할 수 있습니다.

아래는 CustomErrorHandler 클래스의 예시입니다.

from aiohttp import web

class CustomErrorHandler(web.View):
    async def http_exception(self, request, exception):
        # 에러 처리 로직 작성
        return web.Response(text="에러가 발생했습니다.", status=exception.status)

에러 핸들러에서는 http_exception 메서드를 정의합니다. 이 메서드는 요청(request)과 에러(exception)를 인수로 받아 커스텀한 응답(web.Response)을 반환합니다. 위 예시에서는 단순히 “에러가 발생했습니다.”라는 텍스트를 반환하고, 에러의 상태 코드를 사용하여 응답의 상태(status)를 지정합니다.

2. 라우터에 에러 핸들러 등록하기

다음으로, 라우터에 커스텀 에러 핸들러를 등록해야 합니다. 아래 코드는 이를 수행하는 예시입니다.

from aiohttp import web

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

위 예시에서는 add_route 메서드를 사용하여 모든 경로('/'를 제외한 모든 경로)에 대해 CustomErrorHandler를 등록합니다. 따라서 어떤 경로로 요청이 들어오더라도 CustomErrorHandler가 실행되어 커스텀 에러 페이지를 반환합니다.

3. 서버 실행 및 테스트

이제 위에서 작성한 코드를 실행하여 aiohttp 서버를 실행해보고, 커스텀 에러 페이지가 정상적으로 동작하는지 테스트해보세요.

from aiohttp import web

async def handle(request):
    return web.Response(text="Hello, world!")

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

web.run_app(app)

위 예시에서는 루트 경로(/)에 대해 “Hello, world!”라는 응답을 반환하는 핸들러를 등록했습니다. 이외의 모든 경로에 대해서는 커스텀 에러 페이지가 반환될 것입니다.

마무리

이제 aiohttp에서 커스텀 에러 페이지를 설정하는 방법을 알아보았습니다. 에러 페이지를 커스텀하는 것은 사용자에게 더 나은 사용자 경험을 제공하는데 도움이 됩니다. 필요에 따라 커스텀 에러 페이지를 더욱 복잡하게 구성하여 사용자에게 유용한 정보를 제공할 수도 있습니다.