본문 바로가기

IT/FLASK

[FLASK] 1. Flask 설치와 실행

반응형

☞ 운영 체제 : Linux Ubuntu 20.04.5 LTS - focal
☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz
☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU

☞ IDE : Visual Studio Code

 

 

 


목차

 1. Flask 설치 & 실행

 2. Flask RESTful

 

 

 


 

 

 

① Flask 설치 & 실행

※ Flask란?

Flask는 웹 프레임워크이며 그중에서도 마이크로 프레임워크로 분류된다. 마이크로 프레임워크는 사용자가 필요로 하는 기능만 뽑아서 만들고자하는 형태로 확장하는 것을 의미하는 듯하다. (참고 : https://flask-docs-kr.readthedocs.io/ko/latest/foreword.html)

 

Python으로 작성한 내용의 결과를 웹 서버로 나타내기위해 Flask를 통해 간단한 API 서버를 만들어 배포하려고 한다.

 

※ 설치 & 설치 확인

# 터미널에서 설치
pip3 install flask

# 설치 확인
python3 -m flask --version

 

 

※ 기본 앱 소스코드

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'hello'

 

 

flask에서 제공하는 URL에서 '/' 경로에 hello 문자를 출력한다는 내용이다.

 

 

※ 실행

export FLASK_APP=app
flask run

# ~/.bashrc에 추가
export FLASK_APP=app

 

 

export FLASK_APP=app를 하지 않는 경우 에러가 발생한다. 에러 내용에 해결 방법이 있다. 현재 디렉터리에서 FLASK_APP 환경 변수에 'wsgi.py' 또는 'app.py' 중 한 가지를 설정하면 된다고 한다.

 

재부팅하면 터미널에 입력했던 export 설정은 사라지게 된다. Python 파일을 항상 app.py로 사용한다는 가정하에 위 과정이 귀찮은 경우 ~/. bashrc에서 export 내용을 추가하면 된다.(Python 파일명을 app_test.py로 한 경우 export FLASK_APP=app_test로 입력하면 된다.)

 

 

 

 

FLASK_APP 설정을 하고 나서 다시 'flask run' 명령을 실행하면 아래와 같이 소스코드 내용을 확인할 수 있는 웹페이지 주소를 반환해 준다. 해당 주소를 복사해서 인터넷 주소창에 입력하면 아까 소스코드에 적었던 hello를 확인할 수 있다. 그리고 접속하면 접속했다는 업데이트 내용이 출력된다.

 

flask run 명령은 FLASK_APP=값으로 설정한 디렉터리 내에서 해야 실행이 된다. 나는 workspace 디렉터리에 내에 flask/test1이라는 디렉터리를 생성했으므로 test1 디렉터리에 이동해서 명령을 입력했다.

 

 

 


② Flask RESTful

위에서는 기본 예제를 통해 flask의 작동 방법을 확인해 보았다. 내가 flask로 웹 개발을 시도하려는 이유는 Python으로 작성한 소스코드와 영상, 이미지와 같은 시각화 데이터를 Next.js 또는 WordPress와 함께 웹 또는 어플리케이션에 보여주고 싶기 때문이다. 엔진 개발을 주로 하여 웹 쪽 내용은 모르는 것들이 너무 많지만 구글링을 하면서 얻은 내용은 다음과 같다.

 

  • Python 웹 프레임 워크로는 Django(Heavy)와 Flask(Light)가 있다.
  • WordPress와 함께 사용하려면 Python에서 API 화하여 확장해야 한다.
  • Flask에는 RESTful이라는 REST API 확장 모듈이 있다.

 

※ REST API란?

REST : 클라이언트가 서버 데이터에 액세스 하는 데 사용할 수 있는 함수 집합(HTTP Method)의 정의

API : 서버-클라이언트(또는 두 소프트웨어)의 구성요소 간 통신 메커니즘

 

서버-클라이언트 간 데이터 통신을 할 때 REST에서 제공하는 함수를 통해 통신할 수 있도록 돕는 인터페이스 정도로 생각하면 될 것 같다. 개념적으로 어려운 내용이지만 하나씩 실습해 가면서 익혀나가보려 한다.

 

읽어본 내용 중에서 가장 눈에 띄는 것은 REST의 특징 중 '무 상태성(Stateless)'였다. 필요한 데이터 외에는 정보를 저장하지 않고 단순한 요청-응답 구조를 이루어져있다고 한다. 불필요한 정보를 관리하지 않기에 자유도가 높고 구현이 간단한 편이라는 내용이었다.

 

API 유형과 보안/성능 관리에 대한 얘기들도 살펴보았으나 아직 메커니즘의 메커니즘도 모르기 때문에 웹 서비스 신호 흐름도를 그릴 수 있을 정도에 다시 읽어보면 다른 생각을 가질 수 있을 것 같다. 아래에 학습에 참고한 AWS API 메뉴얼이 있다. 다양한 내용이 잘 표현되어 있어 보인다. 

 

 

AWS

 

API란 무엇인가요? - API 초보자를 위한 가이드 - AWS

GraphQL은 API용으로 특별히 개발된 쿼리 언어로서, 클라이언트에게 요청한 데이터만 제공하는 것을 우선으로 합니다. 또한 API를 빠르고 유연하며 개발자 친화적으로 만들도록 설계되었습니다. RES

aws.amazon.com

 

 NHN 클라우드

 

REST API 제대로 알고 사용하기 : NHN Cloud Meetup

REST API 제대로 알고 사용하기

meetup.nhncloud.com

 

※ 설치

# 터미널
pip install flask-restful

 

 

설치 방법은 아주 간단하다.

 

아래에 flask RESTful에 관한 학습 document가 있는데, 이곳에서 제공하는 내용을 순차적으로 따라 해보려 한다.

 

 

  RESTful Documentation

 

Flask-RESTful — Flask-RESTful 0.3.8 documentation

 

flask-restful.readthedocs.io

 

※ 소스코드

# api.py
from flask import Flask
from flask_restful import Resource, Api

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

class HelloWorld(Resource):
    def get(self):
        return {'hello': 'world'}

api.add_resource(HelloWorld, '/')

if __name__ == '__main__':
    app.run(debug=True)
    # 포트 변경
    # app.run(debug=True, port=8080)

 

※ 실행

# Terminal
python3 api.py

 

 

 

 

웹 페이지의 경우 http://127.0.0.1:5000/를 주소창에 입력하여 접속하고, curl 명령어의 경우 터미널에 입력하여 출력 값을 확인한다.

 

 

# 터미널
curl http://127.0.0.1:5000/

# cURL 설치 명령어
sudo apt install curl

 

 

 

 

실행하면 주소와 포트 값이 나온다. 웹 페이지와 curl 명령어에 의해 출력된 결과가 동일하다.

 

☞ 포트 변경

if __name__ == '__main__':
    # 포트 변경 -> port=숫자
    app.run(debug=True, port=8080)

 

 

포트의 기본값은 5000인데 만약 해당 포트를 시스템에서 사용 중(port busy)이라면 포트를 변경해야 한다. 포트를 변경하고 싶은 경우 소스코드 하단의 app.run에 port 인자를 추가해 주면 된다.

 

 

 

 

추가로 debug 인자에 True 값을 넣는 경우 소스코드가 변경되었을 시(정확히는 저장했을 시) 반응하여 내용을 웹 페이지에 변화를 준다. 그래서 port 인자 값을 변경하고 저장만 해주면 위와 같이 자동으로 변경 내용이 적용된다.

 

반응형

'IT > FLASK' 카테고리의 다른 글

[FLASK] 4. 웹 페이지에 동영상 띄우기(+ YOLOv5)  (0) 2023.02.24
[FLASK] 3. 간단한 API 만들기  (0) 2023.02.14
[FLASK] 2. DB 생성하기  (0) 2023.02.09