[python] Flask-RESTful에서 에러 처리 방법

Flask-RESTful은 Python에서 웹 API를 개발하기 위한 강력한 프레임워크입니다. 하지만 때로는 API 요청 중에 발생하는 에러를 처리해야 할 때가 있습니다. 이번 블로그 포스트에서는 Flask-RESTful에서 에러를 처리하는 방법을 알아보겠습니다.

1. 에러 핸들링 데코레이터 사용하기

Flask-RESTful은 @app.errorhandler 데코레이터를 사용하여 라우트 함수에서 발생하는 모든 예외를 처리할 수 있습니다.

from flask import Flask
from flask_restful import Api, Resource

app = Flask(__name__)
api = Api(app)

@app.errorhandler(Exception)
def handle_error(error):
    # 에러 처리 로직 작성
    return {'message': 'An error occurred'}, 500

class MyResource(Resource):
    def get(self):
        # 예외 발생
        raise Exception('Something went wrong')

api.add_resource(MyResource, '/my-resource')

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 @app.errorhandler(Exception)로 모든 예외를 처리하고 있습니다. 라우트 함수에서 예외가 발생하면 handle_error 함수가 호출되고, 에러 메시지와 상태 코드 500을 반환합니다.

2. 커스텀 에러 핸들러 등록하기

Flask-RESTful은 기본적으로 flask-restful 패키지에서 제공하는 기본 예외 핸들러를 사용합니다. 하지만 필요에 따라 커스텀 예외 핸들러를 등록하여 사용할 수도 있습니다.

from flask import Flask
from flask_restful import Api, Resource
from flask_restful import errors

app = Flask(__name__)
api = Api(app)

@api.errorhandler(errors.BadRequest)
def handle_bad_request_error(error):
    # BadRequest 에러 처리 로직 작성
    return {'message': 'Bad request'}, 400

class MyResource(Resource):
    def get(self):
        # BadRequest 예외 발생
        raise errors.BadRequest('Validation failed')

api.add_resource(MyResource, '/my-resource')

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 @api.errorhandler(errors.BadRequest)로 BadRequest 예외를 처리하는 커스텀 핸들러를 등록하고 있습니다. 이렇게 등록한 커스텀 핸들러는 BadRequest 예외가 발생했을 때 호출되며, 에러 메시지와 상태 코드 400을 반환합니다.

3. 전역 예외 핸들러 등록하기

Flask-RESTful은 전역 예외 핸들러를 등록하는 기능도 제공합니다. 이를 사용하면 모든 API 요청에서 발생하는 예외를 한 곳에서 처리할 수 있습니다.

from flask import Flask
from flask_restful import Api, Resource
from flask import got_request_exception

app = Flask(__name__)
api = Api(app)

def handle_exception(e):
    # 예외 처리 로직 작성
    return {'message': 'An error occurred'}, 500

got_request_exception.connect(handle_exception, app)

class MyResource(Resource):
    def get(self):
        # 예외 발생
        raise Exception('Something went wrong')

api.add_resource(MyResource, '/my-resource')

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 got_request_exception.connect(handle_exception, app)로 전역 예외 핸들러를 등록하고 있습니다. 모든 API 요청에서 예외가 발생하면 handle_exception 함수가 호출되며, 에러 메시지와 상태 코드 500을 반환합니다.

마치며

이번 포스트에서는 Flask-RESTful에서 에러를 처리하는 방법에 대해서 알아보았습니다. 에러 핸들링은 웹 API 개발에서 매우 중요한 부분이므로, 신중하게 처리해야 합니다. Flask-RESTful은 다양한 예외 핸들링 기능을 제공하므로 필요에 따라 사용하면 됩니다.

더 자세한 정보는 Flask-RESTful 문서를 참고하시기 바랍니다.