본문 바로가기
코딩/flask

[python Flask] 아주아주 쉽게 서버 만들기

by 오늘도 작심삼일 2021. 8. 8.

다음과 같은 경우에 flask를 이용하는 것을 고려해보면 좋다. 

  • 서버를 처음 배우는 사람
  • 서버가 처리해 줄 일이 매우 단순해서 서버를 무겁게 만들고 싶지 않은 사람
  • 파이썬에서 메인 작업을 하고 다른 곳으로 데이터를 전송해야 하는 사람

필자는 두번째, 세번째의 경우에 해당되어서 flask를 처음 접하게 되었고, 프로젝트 종료 후 flask에 대해서 더 알아보다 보니 서버를 처음 배우는 사람들에게도 입문하기가 좋겠다는 생각이 들었다.

flask는 파이썬으로 작성된 마이크로 웹 프레임워크 - 라고 소개되어있다. 프레임워크는 대부분 이미 짜여진 틀을 채워나가야 하다보니 개발할 때 자유도가 낮다는 단점이 있다. 파이썬으로 웹개발을 할 때 가장 유명한 프레임워크는 django인데 이는 무겁고 기능이 많아서 가벼운 서버를 만들기에는 적합하지 않다. flask는 굳이 마이크로라는 수식어가 붙어있듯이 요구 사항이 최소한으로 이루어져 있다. 또한 결과를 바로바로 눈에 볼 수 있고 코딩이 쉬운 파이썬 프레임워크이다 보니 서버 입문에 최적화되어 있다고 볼 수 있겠다.

백문이 불여일견이라고, 다음의 코드를 보자. 

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_3days():
    return '작심삼일 안녕!'

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

 

그리고 웹브라우저를 켜서 주소창에 localhost:5000 또는 127.0.0.1:5000을 쳐보자. @app.route() 데코레이터가 붙은 함수에서 return한 값이 서버에 출력되는 것을 볼 수 있다. 

서버 만들기 끝~~! 실제로 필자가 프로젝트에서 사용했던 코드도 이와 별반 다르지 않다.

import os
from flask_cors import CORS
from flask import Flask, jsonify, request
import main


app = Flask(__name__)
app.config['DEBUG'] = True
CORS(app)


@app.route('/react_to_flask', methods=['POST'])
def react_to_flask():
    parsed_request = request.files.get('file')
    fileName = request.form.get('fileName')

    dir_path = os.path.dirname(os.path.realpath(__file__))
    dir_path = dir_path + "\data"
    saved_file_path = os.path.join(dir_path, fileName)
    parsed_request.save(saved_file_path)

    notes = main.audio_to_MIDI_notes(saved_file_path)

    data = {}
    i = 0
    for n in notes:
        tmp = {
            'second': n[0],
            'code': n[1]
        }
        data['note' + str(i)] = tmp
        i = i + 1

    data = jsonify(data)
    return data


if __name__ == '__main__':
    app.run(host="0.0.0.0", port="5000",  debug=True)

 

post 요청에 첨부되어 있는 파일을 받아서 parsing한 후 json data로 만들어 return해주는 코드이다. post 요청을 처리하는 코드이기에 아까처럼 단순하게 실행시켜볼 수는 없는 코드이지만 어쨌든 서버라는 단어가 주는 위압감에 비해 굉장히 짧다는 것을 느낄 수 있으며 정말 딱 이정도의 간단한 서버가 필요할 때 flask가 제격이라는 것을 알 수 있다. 위의 코드에서 return한 값을 시각적으로 보기 위해서는 localhost:5000/react_to_flask에 접속하면 된다. 이정도면 @app.route()부분의 역할이 대략적으로 감이 올 것이라 생각한다. 


하지만 서버가 항상 이렇게 단순한 작업만 할 리는 없다. flask로 서버에 입문하려는 사람들에게 좋은 링크가 있어서 첨부하겠다. 

[점프 투 플라스크] https://wikidocs.net/book/4542

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

 

댓글