본문 바로가기
Web Application

클라이언트 요청에 응답하는 Flask 서버 코드

by quantWhale 2024. 2. 18.
반응형

이전 글에서는 Flask 서버에 데이터를 요청하기 위한 클라이언트측 자바스크립트(Ajax) 코드에 대해 알아보았습니다.

 

이번 글에서는 Falsk 서버는 클라이언트 측에서 보낸 AJAX 요청에 따라 필요한 데이터를 처리하고 응답을 반환하도록 되어 있는데 AJAX 요청을 처리하기 위한 Flask 서버 측 예시 코드를 예시와 함께 설명을 드리도록 하겠습니다.

 

인천고래 AI이미지

1. 페이지 로딩 시 데이터를 요청하는 경우의 Flask 코드

클라이언트는 서버의 특정 엔드포인트(/some-endpoint)로 GET 요청을 보내고. 서버는 이 요청을 받고 필요한 데이터를 조회한 후 JSON 형태로 클라이언트에 응답하는 구조로 이루어집니다.

# 파이썬 코드로 이루어진 플라스크 선언부
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/some-endpoint', methods=['GET'])
def get_data():
    # 데이터를 처리하는 로직 (예: 데이터베이스 조회)
    data = {
        'key1': 'value1',
        'key2': 'value2',
        # 여기에 필요한 데이터를 추가
    }
    return jsonify(data)  # JSON 형태로 데이터를 클라이언트에 응답

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

 

파이썬을 이용하는 개발자분들이라면 익숙한 코드입니다.

다만 생소하다고 할 수 있는 부분은 route 부분일텐데요 이 부분에 대한 설명을  하도록 하겠습니다.

 

1-1. @app.route

Flask는 웹서비스를 위한 프레임워크로 특정 엔드포인트(/some-endpoint)로 들어오는 HTTP GET 요청을 처리하기 위한 라우트를 정의합니다.

  • @app.route는 Flask에서 라우트를 정의하는 데 사용되는 데코레이터입니다. 이 데코레이터는 함수 위에 위치하며, 해당 함수를 특정 URL 경로에 매핑합니다.
  • @app.route 데코레이터에 지정된 URL 경로(/some-endpoint)로 요청이 들어오면, Flask는 이에 해당하는 함수를 호출하여 응답을 처리합니다.

 

1-2. '/some-endpoint'

  • '/some-endpoint'는 클라이언트가 서버에 접근하기 위해 사용하는 URL 경로를 지정합니다.
    예를 들어, 클라이언트가 http://yourdomain.com/some-endpoint에 접속하면, 이 라우트에 매핑된 함수가 호출됩니다.
  • 경로는 웹 애플리케이션 내에서 리소스를 식별하는 데 사용되며, 필요에 따라 변수를 포함할 수도 있습니다(예: /user/).

 

1-3. methods=['GET']

  • methods=['GET']는 이 라우트가 처리할 HTTP 메소드를 지정합니다.
    여기서는 GET 메소드만을 처리하도록 설정되어 있습니다.
  • HTTP GET 메소드는 주로 서버로부터 데이터를 조회할 때 사용됩니다. 클라이언트는 데이터를 요청하고, 서버는 요청받은 리소스의 표현(representation)을 클라이언트에게 전달합니다.
  • methods 인자에는 여러 HTTP 메소드를 리스트 형태로 지정할 수 있으며, 이를 통해 같은 경로에 대해 다른 HTTP 메소드를 처리하는 여러 라우트를 정의할 수 있습니다(예: methods=['GET', 'POST']).
# 파이썬 (Flask) 코드 선언부
@app.route('/some-endpoint', methods=['GET'])
def handle_request():
    # 여기에 요청을 처리하는 로직을 구현합니다.
    return 'Response for GET request'

 

 

2. 클라이언트에서 임의의 요청값을 전달하여 Flask에 요청하는 경우

이 경우, 클라이언트는 서버의 또 다른 엔드포인트(/filtered-data)로 POST 요청을 보내며, 이때 필터링 조건을 데이터로 함께 전송합니다.

Flask(플라스크) 서버는 클라이언트로 전달 받은 데이터를 기반으로 필터링된 결과를 조회하여 응답합니다.

# 파이썬(Flask) 코드 선언부
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/filtered-data', methods=['POST'])
def get_filtered_data():
    # 클라이언트로부터 받은 필터링 조건
    filter_condition = request.json.get('filter')

    # 필터링 조건을 기반으로 데이터를 처리하는 로직
    # 여기서는 예시로 단순한 데이터를 반환하나, 실제로는 데이터베이스 조회 등을 통해 필터링된 데이터를 조회할 수 있습니다.
    filtered_data = [
        {'key1': 'value1', 'filter': filter_condition},
        {'key2': 'value2', 'filter': filter_condition},
        # 필터링 조건에 따른 결과 데이터
    ]

    return jsonify(filtered_data)

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

 

이 예시에서는 아래와 같은 순서로 진행이 됩니다.

  1. Flask서버는 request 객체를 사용하여 클라이언트로부터 전송된 JSON 데이터를 접근합니다.
  2. request.json.get('filter')를 통해 클라이언트가 보낸 필터링 조건을 받아옵니다.
  3. 이 조건에 따라 필요한 데이터 처리(예: 데이터베이스 조회)를 진행한 후,
  4. 결과를 JSON 형태로 클라이언트에 반환합니다.

위의 Flask 서버 코드는 클라이언트 측에서 제공한 AJAX 요청에 대응하여 서버에서 필요한 데이터를 처리하고 응답하는 기본적인 방법을 보여줍니다.

 

이 글을 통해 클라이언트와 서버 간의 데이터 통신을 위해 AJAX와 Flask를 함께 사용하는 방법을 이해하는 데 도움이 되기를 바랍니다.

 

※ 아래의 링크는 위의 Flask 서버의 데이터를 요청하는 클라이언트 측 코드가 있는 글입니다. 참고 바랍니다.

 

AJAX를 사용하여 서버(Flask)에 데이터를 요청하는 두 가지 방법

클라이언트에서는 데이터를 표시하기 위해 일반적인 2가지 방식을 제공합니다. 사용자가 URL로 접속하여 일반적으로 페이지가 로딩이 될 때 특별한 행동을 하지 않아도 페이지가 로드되는 것처

quant.i-whale.com

 

※ 아래의 링크는 HTML 코드와 Flask 서버간의 데이터 타입에 대한 처리 방식을 정리한 글입니다. 참고 바랍니다.

 

데이터 종류에 따른 Flask 서버 & 클라이언트측 코드

이번 글에서는 Flask 서버로부터 데이터를 받아와서 클라이언트에서 처리하는 예시들을 하나의 HTML 코드로 감싸서 보여드리겠습니다. 각각 HTML, JSON, XML 데이터를 처리하는 방법에 대한 설명도 함

quant.i-whale.com

 

반응형
-

댓글