웹 애플리케이션을 개발하다 보면 사용자에게 발생한 오류를 적절하게 처리해야 할 때가 있습니다. 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에서의 에러 핸들링에 대해 알아보았습니다. 예외 처리, 에러 핸들러, 플래시 메시지, 그리고 로그 기록을 통해 사용자에게 보다 효과적인 에러 관리를 제공할 수 있습니다. 이러한 기능을 적절히 사용하여 웹 애플리케이션의 안정성과 사용자 경험을 향상시킬 수 있습니다.