소개

REST API 서버는 최근 웹 개발에서 매우 중요한 역할을 합니다. Python Flask는 간단하고 빠르게 REST API 서버를 만드는 데에 매우 적합한 프레임워크입니다. 이 글에서는 Python Flask를 이용해 REST API 서버를 어떻게 만드는지에 대해 알아보겠습니다.

목차

  1. Flask 소개
  2. REST API란?
  3. Flask로 REST API 서버 만드는 방법
    1. Flask 설치하기
    2. Flask 라우팅
    3. HTTP Methods
    4. JSON 데이터 전송
    5. REST API 응답 처리
    6. 예외 처리
    7. RESTful API
  4. Flask RESTful 사용하기
    1. Flask-RESTful 설치하기
    2. Flask-RESTful Resource
    3. Flask-RESTful Request Parsing
    4. Flask-RESTful Marshmallow
  5. Flask REST API 서버 보안
    1. JWT(Json Web Token) 인증
    2. Flask-HTTPAuth

1. Flask 소개

Flask는 Werkzeug 툴킷과 Jinja2 템플릿 엔진을 기반으로한 마이크로 웹 프레임워크입니다. Flask는 빠르고 간단한 구성과 디자인을 가지고 있습니다. Flask는 확장성과 유연성이 높아서 다양한 기능을 제공하면서도 쉽게 사용할 수 있습니다.

2. REST API란?

REST (Representational State Transfer)는 분산 시스템에서 구현할 수 있는 아키텍처 스타일입니다. REST API는 HTTP 프로토콜을 이용하여 웹 어플리케이션에서 데이터를 주고 받는 방식 중 하나입니다. REST API는 자원(resource)을 정의하고, 자원에 대한 행위(method)를 구분하여 정의합니다.

3. Flask로 REST API 서버 만드는 방법

3.1 Flask 설치하기

Flask를 사용하기 위해서는 우선 Flask를 설치해야 합니다. 가상환경을 이용하는 것을 권장합니다.

    pip install Flask

3.2 Flask 라우팅

Flask에서는 URL 패턴을 사용하여 함수를 연결합니다. 이를 라우팅(Routing)이라고 합니다.

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')
    def index():
        return 'Hello, World!'

3.3 HTTP Methods

HTTP Method는 REST API에서 자원에 대한 행위를 정의합니다. Flask에서는 HTTP Method에 따라 다르게 처리됩니다.

    from flask import Flask, request

    app = Flask(__name__)

    @app.route('/example', methods=['GET'])
    def example():
        return 'GET method'

    @app.route('/example', methods=['POST'])
    def example():
        return 'POST method'

    @app.route('/example', methods=['PUT'])
    def example():
        return 'PUT method'

    @app.route('/example', methods=['DELETE'])
    def example():
        return 'DELETE method'

3.4 JSON 데이터 전송

REST API에서는 데이터를 주고 받을 때 JSON 데이터 형식을 사용하는 것이 일반적입니다. Flask에서는 JSON 데이터를 쉽게 전송할 수 있는 jsonify 함수를 제공합니다.

    from flask import Flask, jsonify, request

    app = Flask(__name__)

    @app.route('/example', methods=['POST'])
    def example():
        data = request.get_json()  # JSON 데이터 받아오기
        result = {'message': 'success'}
        return jsonify(result)

3.5 REST API 응답 처리

REST API에서는 HTTP 상태 코드를 이용하여 응답을 처리합니다. Flask에서는 make_response 함수를 이용하여 HTTP 상태 코드와 함께 응답을 전송할 수 있습니다.

    from flask import Flask, jsonify, make_response

    app = Flask(__name__)

    @app.route('/example', methods=['GET'])
    def example():
        data = {'key': 'value'}
        response = make_response(jsonify(data))
        response.status_code = 200  # HTTP 상태 코드 설정
        return response

3.6 예외 처리

REST API에서는 예외 처리가 매우 중요합니다. Flask에서는 예외 처리를 위해 abort 함수를 제공합니다.

    from flask import Flask, abort

    app = Flask(__name__)

    @app.route('/example/<int:id>', methods=['GET'])
    def example(id):
        if id == 0:
            abort(404)  # 404 에러 발생
        return 'success'

3.7 RESTful API

RESTful API는 REST API의 설계 규칙을 따르는 API를 말합니다. Flask에서는 RESTful API를 쉽게 구현할 수 있도록 Flask-RESTful이라는 확장 모듈을 제공합니다.

4. Flask RESTful 사용하기

4.1 Flask-RESTful 설치하기

Flask-RESTful를 사용하기 위해서는 우선 Flask-RESTful을 설치해야 합니다.

    pip install flask-restful

4.2 Flask-RESTful Resource

Flask-RESTful에서는 Resource 클래스를 이용하여 API를 구현합니다.

    from flask import Flask
    from flask_restful import Api, Resource

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

    class Example(Resource):
        def get(self):
            return {'message': 'success'}

    api.add_resource(Example, '/example')

4.3 Flask-RESTful Request Parsing

Flask-RESTful에서는 Request Parsing을 지원합니다. Request Parsing을 이용하면 요청한 데이터를 쉽게 받아올 수 있습니다.

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

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

    parser = reqparse.RequestParser()
    parser.add_argument('name', type=str)

    class Example(Resource):
        def get(self):
            args = parser.parse_args()
            return {'name': args['name']}

    api.add_resource(Example, '/example')

4.4 Flask-RESTful Marshmallow

Flask-RESTful에서는 Marshmallow를 이용하여 데이터 검증 및 직렬화를 수행할 수 있습니다.

    from flask import Flask
    from flask_restful import Api, Resource, reqparse
    from marshmallow import Schema, fields, ValidationError

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

    class ExampleSchema(Schema):
        name = fields.String(required=True)

        def handle_error(self, error, data):
            raise ValidationError(error, data=data)

    example_schema = ExampleSchema()

    class Example(Resource):
        def post(self):
            json_data = request.get_json()
            try:
                data = example_schema.load(json_data)
            except ValidationError as e:
                return {'message': str(e)}, 400
            return {'name': data['name']}

    api.add_resource(Example, '/example')

5. Flask REST API 서버 보안

5.1 JWT(Json Web Token) 인증

REST API 서버에서는 보안이 매우 중요합니다. JWT(Json Web Token) 인증은 REST API 서버에서 자주 사용되는 인증 방식 중 하나입니다. Flask에서는 PyJWT 라이브러리를 이용하여 JWT 인증을 구현할 수 있습니다.

    import jwt
    from flask import Flask, jsonify, request

    app = Flask(__name__)

    @app.route('/login', methods=['POST'])
    def login():
        username = request.json.get('username')
        password = request.json.get('password')
        if username == 'admin' and password == 'password':
            token = jwt.encode({'username': username}, 'secret', algorithm='HS256')
            return jsonify({'token': token.decode('utf-8')})
        else:
            return jsonify({'message': 'Invalid username or password'}), 401

5.2 Flask-HTTPAuth

Flask-HTTPAuth는 Flask에서 인증 처리를 쉽게 구현할 수 있도록 도와주는 확장 모듈입니다.

    from flask import Flask, jsonify
    from flask_httpauth import HTTPTokenAuth

    app = Flask(__name__)
    auth = HTTPTokenAuth(scheme='JWT')

    @auth.verify_token
    def verify_token(token):
        try:
            data = jwt.decode(token, 'secret', algorithms=['HS256'])
            return data['username'] == 'admin'
        except:
            return False

    @app.route('/example', methods=['GET'])
    @auth.login_required
    def example():
        return jsonify({'message': 'success'})

결론

이 글에서는 Python Flask를 이용하여 REST API 서버를 만드는 방법에 대해 알아보았습니다. Flask를 이용하면 간단하고 빠르게 REST API 서버를 만들 수 있습니다. 또한 Flask-RESTful을 이용하여 RESTful API를 쉽게 구현할 수 있습니다. 마지막으로 JWT 인증과 Flask-HTTPAuth를 이용하여 REST API 서버 보안을 강화할 수 있습니다.

자주 묻는 질문(FAQs)

  1. Python Flask를 이용한 REST API 서버는 무엇인가요?
    • Python Flask를 이용하여
  2. Flask에서 HTTP Method는 어떻게 처리되나요?
    • Flask에서는 HTTP Method에 따라 다르게 처리됩니다. 예를 들어, GET 메소드는 데이터 조회에 사용되고, POST 메소드는 데이터 생성에 사용됩니다.
  3. Flask-RESTful에서 Request Parsing을 어떻게 수행하나요?
    • Flask-RESTful에서는 reqparse 모듈을 이용하여 Request Parsing을 수행합니다. reqparse 모듈을 이용하면 요청한 데이터를 쉽게 받아올 수 있습니다.
  4. Flask-RESTful에서 Marshmallow를 이용하여 무엇을 할 수 있나요?
    • Flask-RESTful에서는 Marshmallow를 이용하여 데이터 검증 및 직렬화를 수행할 수 있습니다. Marshmallow를 이용하면 데이터의 유효성 검사를 쉽게 할 수 있습니다.
  5. JWT 인증은 무엇인가요?
    • JWT(Json Web Token) 인증은 REST API 서버에서 자주 사용되는 인증 방식 중 하나입니다. JWT는 서버에서 발행한 Token을 클라이언트가 저장하고, 이를 이용하여 인증을 수행합니다.

이상으로 Python Flask를 이용한 REST API 서버 만드는 방법에 대해 알아보았습니다. Flask를 이용하면 간단하고 빠르게 REST API 서버를 만들 수 있습니다. 또한 Flask-RESTful을 이용하여 RESTful API를 쉽게 구현할 수 있습니다. 마지막으로 JWT 인증과 Flask-HTTPAuth를 이용하여 REST API 서버 보안을 강화할 수 있습니다.

+ Recent posts