[파이썬] Tornado에서의 에러 트래킹

Tornado는 파이썬으로 작성된 비동기 웹 프레임워크로서, 웹 애플리케이션의 개발을 빠르고 효율적으로 할 수 있게 해줍니다. 그러나 때로는 예측할 수 없는 에러가 발생할 수 있고, 이러한 에러의 원인을 파악하는 것은 중요합니다. 이 블로그 포스트에서는 Tornado에서의 에러 트래킹에 대해 알아보겠습니다.

1. 에러 로깅 설정

에러를 트래킹하기 위해 먼저 Tornado 애플리케이션에서 에러 로깅을 설정해야 합니다. Tornado는 내장된 로깅 모듈을 사용하여 로그를 기록합니다. 로깅 모듈 설정은 일반적으로 애플리케이션의 진입점인 main 함수에서 수행됩니다.

import logging
import tornado.ioloop
import tornado.web

def main():
    # 로그 레벨 설정
    logging.getLogger().setLevel(logging.ERROR)
    
    # Tornado 애플리케이션 설정
    app = tornado.web.Application([
        (r"/", MainHandler),
    ])
    
    # 애플리케이션 실행
    app.listen(8888)
    tornado.ioloop.IOLoop.current().start()

위의 예시에서는 로그 레벨을 logging.ERROR로 설정했습니다. 이는 에러 레벨의 로그만 기록하도록 설정하는 것입니다.

2. 에러 핸들링

Tornado에서 발생하는 에러를 핸들링하는 가장 간단한 방법은 RequestHandlerwrite_error() 메서드를 오버라이딩하는 것입니다. 이 메서드는 애플리케이션에서 발생한 에러를 처리하고 클라이언트에 대한 응답을 생성하는 역할을 수행합니다.

import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        try:
            # 예외가 발생할 수 있는 코드
            result = 10 / 0
        except Exception as e:
            # 예외 처리
            self.write_error(500, **{'exc_info': (type(e), e, e.__traceback__)})
    
    def write_error(self, status_code, **kwargs):
        self.set_status(status_code)
        self.write("에러가 발생했습니다.")

위의 예시에서는 / 경로로의 GET 요청을 처리하는 MainHandler 클래스를 정의했습니다. get() 메서드에서는 의도적으로 ZeroDivisionError를 발생시켜 예외 상황을 재현합니다. 예외가 발생하면 write_error() 메서드가 호출되어 클라이언트에게 500 상태 코드를 응답으로 보내고 에러 메시지를 출력합니다.

3. 에러 로깅

에러를 트래킹하기 위해선 로깅이 필요합니다. 앞서 설정한 로깅 모듈을 사용하여 에러를 로그로 기록할 수 있습니다.

import logging
import tornado.web
import traceback

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        try:
            # 예외가 발생할 수 있는 코드
            result = 10 / 0
        except Exception as e:
            # 예외 처리
            logging.exception("에러 메시지")
            self.write_error(500, **{'exc_info': (type(e), e, e.__traceback__)})

위의 예시에서는 logging.exception() 메서드를 이용해 예외 메시지와 traceback 정보를 로깅합니다. traceback 정보에는 예외가 발생한 파일과 라인 번호 등이 포함되어 있어 디버깅에 유용합니다.

이렇게 로깅을 설정하면 발생한 에러를 로그 파일에 저장하거나 실시간으로 모니터링할 수 있습니다.

결론

Tornado에서의 에러 트래킹은 애플리케이션 개발 및 유지 보수에 필수적인 요소입니다. 이번 블로그 포스트에서는 에러 로깅 설정과 에러 핸들링에 대해 알아보았습니다. Tornado를 사용하여 안정적이고 신뢰성 높은 웹 애플리케이션을 개발하기 위해 에러 트래킹을 적극적으로 활용해 보세요.