[파이썬] web2py에서의 에러 핸들링

웹 애플리케이션을 개발하다 보면 사용자에게 발생한 오류를 적절하게 처리해야 할 때가 있습니다. web2py는 파이썬 기반의 웹 프레임워크로서, 에러 핸들링을 간편하게 처리할 수 있는 다양한 기능을 제공합니다. 이번 블로그 포스트에서는 web2py에서의 에러 핸들링에 대해 알아보겠습니다.

1. 예외 처리(Exception Handling)

웹 애플리케이션에서 발생하는 예외를 처리하기 위해서는 try/except 문을 사용할 수 있습니다. web2py는 이러한 예외 처리를 보다 쉽게 할 수 있도록 IS_ENCODING 파라미터를 제공합니다. 이를 사용하면 예외가 발생했을 때 자동으로 예외 페이지로 이동하게 됩니다.

def my_page():
    try:
        # 예외가 발생할 가능성이 있는 코드
        # ...
    except Exception as e:
        # 예외 처리 코드
        response.flash = "예외가 발생했습니다: %s" % str(e)
        redirect(URL('error', 'index'))

위의 예제에서는 try 블록에서 예외가 발생할 가능성이 있는 코드를 작성합니다. 만약 어떤 예외가 발생하면 except 블록으로 이동하게 되고, 이 곳에서 예외를 처리하는 로직을 작성할 수 있습니다. 예외 처리 후에는 사용자에게 보여줄 메시지를 response.flash 변수에 저장하고, redirect 함수를 사용하여 예외 페이지로 이동합니다.

2. 에러 핸들러(Error Handler)

웹 애플리케이션에 일치하는 URL이 없거나 서버에 내부적인 오류가 발생했을 때 사용자에게 보여질 에러 페이지를 커스터마이징할 수도 있습니다. web2py에서는 이를 위해 에러 핸들러(Error Handler)를 지원합니다.

에러 핸들러를 사용하려면 routes.py 파일에 다음과 같이 코드를 추가합니다.

from gluon.tools import web2py_fallback
error_handler = web2py_fallback

위의 코드를 추가하면 web2py_fallback 메서드가 에러 페이지로 사용됩니다. 이 메서드는 에러 발생 시 예외 정보를 포함한 디버그 페이지를 보여주게 됩니다. 이를 원하지 않는 경우에는 routes.py 파일에서 error_handler 변수를 변경하여 다른 에러 핸들러 메서드를 사용할 수도 있습니다.

3. 플래시 메시지(Flash Message)

web2py에서는 예외 처리나 다른 로직에서 사용자에게 메시지를 표시할 때 유용한 플래시 메시지(Flash Message) 기능을 제공합니다. 플래시 메시지는 일회성 메시지로서, 한 번 사용되면 그 즉시 삭제됩니다.

플래시 메시지를 사용하려면 response.flash 변수에 메시지를 할당하면 됩니다. 예를 들어, 아래의 예제는 폼 데이터 검증에 실패했을 때 사용자에게 에러 메시지를 표시하는 방법을 보여줍니다.

def my_form():
    form = SQLFORM(db.my_table)
    if form.process().accepted:
        response.flash = "데이터가 정상적으로 저장되었습니다"
    elif form.errors:
        response.flash = "입력한 데이터가 유효하지 않습니다"
    return dict(form=form)

위의 예제에서는 form.process().accepted가 참이면 데이터가 성공적으로 저장되었음을 의미하므로, 사용자에게 플래시 메시지로 ‘데이터가 정상적으로 저장되었습니다’라는 메시지가 표시됩니다. 반면 form.errors가 참이면 입력한 데이터가 유효하지 않다는 뜻이므로, 사용자에게 ‘입력한 데이터가 유효하지 않습니다’라는 메시지가 표시됩니다.

4. 로그 기록(Logging)

웹 애플리케이션 개발 중에는 에러가 발생할 경우를 대비하여 로그를 기록하는 것이 좋습니다. web2py에서도 간편하게 로그를 기록할 수 있는 기능을 제공합니다.

import logging

logger = logging.getLogger("my_logger")
handler = logging.FileHandler("my_log.txt")
logger.addHandler(handler)

def my_function():
    try:
        # 예외가 발생할 가능성이 있는 코드
        # ...
    except Exception as e:
        logger.error("에러가 발생했습니다: %s" % str(e))

위의 예제에서는 logging 모듈을 사용하여 my_logger라는 이름의 로거를 생성하고, my_log.txt 파일에 로그를 기록하도록 설정했습니다. my_function 함수에서 예외가 발생하면 logger.error를 호출하여 에러 메시지를 로그에 기록합니다.

로그를 기록하면 에러가 발생한 상황을 추적하여 디버깅에 도움을 줄 수 있으며, 서버 모니터링 등에도 유용하게 활용할 수 있습니다.


web2py에서의 에러 핸들링에 대해 알아보았습니다. 예외 처리, 에러 핸들러, 플래시 메시지, 그리고 로그 기록을 통해 사용자에게 보다 효과적인 에러 관리를 제공할 수 있습니다. 이러한 기능을 적절히 사용하여 웹 애플리케이션의 안정성과 사용자 경험을 향상시킬 수 있습니다.