본문 바로가기

Python

Flask를 설치하고 간단한 API 만들기

Flask는 파이썬으로 웹 애플리케이션을 만들 때 사용되는 프레임워크입니다. Flask를 이용하면 간단한 코드 몇 줄만으로도 서버를 띄우고 API를 만들 수 있습니다. Flask 말고도 Django 등과 같은 다른 파이썬 웹 프레임워크가 있지만, 다른 파이썬 웹 프레임워크들은 너무 기능이 복잡하고 무거워서 쉽게 배우기 어려운 단점이 있습니다. 실제로 Flask 홈페이지에 접속해보면 Flask is a lightweight web application framework 라고 언급하고 있습니다.

1.1 가상 환경 생성

API를 만드는 파이썬 프로젝트를 시작하기 위해 가상 환경을 만들어줍시다.

conda create --name FLASK_BASIC python=3.7

 

다음으로 가상환경을 활성화시켜 줍니다.

source activate FLASK_BASIC

 

만약, 가상환경을 비활성화하고 싶다면 다음 명령어를 실행시켜줍니다.

source deactivate

 

1.2 Flask 설치

Flask는 파이썬으로 작성된 패키지 소프트웨어인 pip을 통해서 쉽게 다운받을 수 있습니다.

pip install flask

 

1.3 간단한 엔드포인트 구현해보기

이번에는 간단하게 엔드포인트를 하나 구현해보겠습니다. 단순하게 "hello world !" 라는 문자열을 리턴하는 엔드포인트를 만들어볼텐데요. 엔드포인트의 정의와 설명은 아래와 같습니다.

  • 엔드포인트
    • API 서버가 제공하는 통신 채널 (=접점)
    • Frontend server 등의 클라이언트가 Backend API 서버와 통신할 때 엔드포인트에 접속하는 형태로 통신함
    • 각 엔드포인트는 고유의 URI 주소를 가지며 이 주소를 통해 엔드포인트에 접속할 수 있음

app.py 라는 파이썬 파일을 만들고 아래 코드를 작성해봅시다.

from flask import Flask

app = Flask(__name__)

@app.route("/hello", methods=['GET'])
def hello():
  return "hello world"

 

app 객체가 위에서 언급했던 Flask Web Application 입니다. Flask에서는 route decorator를 사용해서 엔드포인트로 등록하는데 사실 일반 함수를 만드는 것과 큰 차이는 없습니다. 또한 hello 엔드포인트의 고유 주소(URI)은 start 입니다. HTTP 메소드는 GET을 사용했습니다. HTTP 메소드는 HTTP 요청이 의도하는 액션을 정의하는 부분입니다. GET 메소드는 가장 자주 사용되는 HTTP 메소드 중 하나인데요. 데이터 의 생성이나 수정, 삭제등의 변경 사항 없이 단순히 데이터를 받아오는 요청을 할 때 GET 메소드를 사용합니다.

1.4 API 실행하기

1.3 절에서 만든 API를 실행해보겠습니다. 해당 코드를 만든 디렉터리에서 아래의 명령어를 실행해줍니다.

FLASK_APP=app.py FLASK_DEBUG=1 flask run

 

아래와 같은 결과를 확인할 수 있는데요. http://127.0.0.1:5000/hello 로 들어가서 확인해도 되지만, 터미널 환경에서 HTTP 요청을 보내기 위해 httpie라는 라이브러리를 사용해봅시다. httpie는 python 으로 개발된 콘솔용 http client 유틸리티로 http 개발 및 디버깅 용도로 사용 가능한 라이브러리 입니다.

Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

 

httpie를 설치해줍시다. mac, ubuntu 환경에서 각각 아래와 같은 명령어를 통해 설치할 수 있습니다. (윈도우 환경에서 설치하려면 이곳을 참고하면 되겠습니다.)

# mac
brew install httpie

# ubuntu
sudo apt install httpie

 

아래의 명령어를 통해 HTTP 요청을 보내면, "hello world" 라는 텍스트 응답을 확인할 수 있습니다.

http -v GET http://127.0.0.1:5000/hello
HTTP/1.0 200 OK
Content-Length: 11
Content-Type: text/html; charset=utf-8
Date: Sun, 02 May 2021 08:05:39 GMT
Server: Werkzeug/1.0.1 Python/3.7.10

hello world

1.4 HTTP method를 POST 방식으로 하는 API 만들어보기

위에서 만든 API는 GET 방식으로 HTTP 요청을 수행하는 API 입니다. 이번에는 POST방식으로 HTTP 요청을 수행하는 간단한 API를 만들어보겠습니다. POST 방식이란 GET 방식과는 다르게 데이터를 생성하거나 수정 및 삭제 요청을 할 때 주로 사용되는 HTTP 메소드 입니다.

POST 방식으로 만들 수 있는 간단한 API 중 하나인 회원가입 API를 만들어보겠습니다. 

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/hello", methods=['GET'])
def hello():
  return "hello world"

@app.route("/sign-up", methods=['POST'])
def sign_up():
    user = request.json
    response = {
        'name': user['name'],
        'email': user['email'],
        'password': user['password'],
        'profile': user['profile']
    }

    return jsonify(response), 200

 

회원가입을 할 수 있는 API를 만들었으면 실제로 요청을 보내봅시다. httie 를 활용해서 이번엔 POST 방식으로 API에 요청을 보내봅시다. 요청을 보내는 방식은 아주 간단합니다. name 필드의 값을 "황태용" 으로 전송하고 싶다면 name=황태용 이라고 지정해주기만 하면 됩니다.

http -v POST http://127.0.0.1:5000/sign-up name=크리스토프 email=rhswl2135@gmail.com password=tada1234 profile="타다 데이터팀의 크리스토프 입니다. 반갑습니다."

 

아래와 같은 형태의 응답을 확인할 수 있습니다. 

HTTP/1.0 200 OK
Content-Length: 222
Content-Type: application/json
Date: Wed, 05 May 2021 07:57:13 GMT
Server: Werkzeug/1.0.1 Python/3.7.10

{
    "email": "rhswl2135@gmail.com",
    "name": "크리스토프",
    "password": "tada1234",
    "profile": "타다 데이터 팀의 크리스토프 입니다. 반갑습니다."
}

'Python' 카테고리의 다른 글

Anaconda를 활용한 가상환경 만들기  (1) 2021.11.14
virtualenv를 활용한 가상환경 만들기  (0) 2021.10.27
MySQL과 Flask API를 연동하기  (0) 2021.10.26