API 개발

홍진우·2022년 3월 22일
0

Back-End

목록 보기
2/10
post-thumbnail

목차

  • Flask 소개 및 설치
  • API 기초적인 기능 구현
  • API 실행

Flask 소개 및 설치


플라스크는 micro web framework라는 소개에서도 느껴지든이 아주 가벼운 웹프레임워크다.
장고와 같은 다른 파이썬 웹 프레임워크들은 여러 모듈과 기능들을 제공하느라, 프레임워크 자체가 무겁고, learning curve가 높을 수 있지만, flask는 비교적 쉽게 배워서 사용할 수 있으므로 API 개발 입문용으로 사용하기에 적합한 프레임워크이다.

프레임워크
특정 시스템을 구현하기 위해서 공통적으로 요구되는 기능과 구조를 재사용이 가능하도록 구현해놓은 것이다. 웹 프레임워크를 에를 들어본다면, 모든 웹 시스템은 소켓(socket)을 통해서 네트워크와 연결하여 외부 시스템으로부터 통신을 주고받을 수 있어야 하며, 이를 필수로 구현해야 하지만, 이미 규격화되어서 이미 구현되어 있는 코드를 재사용하기만 하면 된다! 즉, Flask와 같은 웹 프레임워크를 사용하믕로써 개발자는 웹 시스템을 통해 제공하고자 하는 비즈니스 로직에만 집중할 수 있음!

conda create --name api python=3.7

conda를 사용하여 api라는 이름으로 가상환경 설치

//가상환경 활성화
source activate api

//비활성화
source deactivate

//현재 생성 되어 있는 가솽환경 확인
conda env list

가상환경 활성화 후 (api)로 가상환경에 진입했음을 확인 가능

현재 생성되어 있는 가상환경 리스트 확인

pip install flask

가상환경 내에 플라스크 프레임워크 설치

정상적으로 설치가 이루어졌는지 확인하기 위해 터미널에서 python 명령어를 실행아여 python interactive mode로 진입 후 다음의 코드 실행

from flask import Flask

app = Flask('test')

API 기초적인 기능 구현 - Ping 엔드포인트 구현하기

엔드포인트

API 서버가 제공하는 통신 채널 혹은 접점
프론트 엔드 서버 등의 클라이언트가 백엔드 API 서버와 통신할 때 엔드포인트에 접속하는 형태로 통신하게 됨. 각 엔드 포인트는 고유의 URL 주소를 가지게 되며, 고유의 URL 주소를 통해 해당 엔드포인트에 접속
예를 들어, SNS 서비스를 위한 API는

  • 사용자 sign up 엔드포인트
  • 사용자 로그인 엔드포인트
  • 새로운 포스팅 엔드포인트
  • 다른 사용자와 친구 맺기 엔드포인트
    등으로 구성되어 있음

ping 엔드포인트는 단순히 'pong'이라는 텍스트를 리턴하는 엔드포인트이다. 정말 단순한 API지만, 현재 서버가 운행되고 있는 상태인지, 정지된 상태인지를 간단히 확인하는 health check point로 기능할 수 있다.

먼저 API 코드가 위치할 디렉토리를 생성한다.

// 디렉토리 생성
mkdir -p ~/Projects/api

//해당 디렉토리로 이동
cd ~/Projects/api

~는 해당 사용자의 홈 디렉토리를 의미
-p 옵션은 디렉토리의 중간 경로에 해당하는 디렉토리가 존재하지 않는다면 자동으로 생성해주라는 의미

api 디렉토리로 이동 후 해당 디렉토리 안에 app.py 파일 생성
파이참 ide를 사용해 생성한 화면

#Flask class import
from flask import Flask

# import한 Flask 클래스를 객체화 시켜서 app이라는 변수에 저장함
# 이 app 변수가 Flask 웹 어플리케이션이 되며, 이 app 변수에 API의 설정과 엔드포인트들을 추가하면 API가 완성됨
app = Flask(__name__)

# Flask의 route 데코레이터(decorator)를 사용하여 엔드포인트 등록
# 이후 나오는 ping 함수를 엔드포인트 함수로 등록하였으며, 고유주소는 "ping", HTTP 메소드는 GET으로 설정
@app.route("/ping", methods=['GET'])

# ping함수 정의. route 데코레이터를 통해서 엔드포인트로 등록된 함수이며, "pong"이라는 string을 리턴함
# Flask가 알아서, HTTP response로 변환하여 해당  HTTP 요청을 보낸 클라이언트에게 전송함
def ping():
    return "pong"

플라스크에서는 일반적으로 route 데코레이터를 사용해서 함수들을 엔드포인트로 등록함. 즉, 플라스크에서 엔드포인트를 구현한다는 것은 결국 일반 함수를 구현하는 것과 큰 차이가 없으며, 백엔드 API 개발도 구조적으로는 크게 어렵거나 복잡할 것이 없다. 쫄지 말자!

해당 API가 제공하는 서비스, 즉 비즈니스 로직을 구현하는 함수를 개발하는 것이 백엔드 API에서 가장 중요한 개념이며, API 코드의 전체적인 구조가 일단 잡히면 그 다음부터는 엔드포인트들, 즉 함수들을 구현하는 것이 개발의 대부분이다.

API 실행

앞서 구현한 API 코드 실행
가상환경 활성화 및 ~/Project/api 디렉토리로 이동의 다음의 명령어 실행

Flask_APP=app.py FLASK_DEBUG=1 flask run 
  • Flask_APP
    해당 환경 변수에는 Flask 애플리케이션을 실행시키는 파일을 지정해 준다.
  • FLASK_DEBUG
    해당 환경 변수를 1로 설정해 놓으면 디버그 모드가 활성화 되며, 코드가 수정되었을때, Flask 애플리케이션을 직접 재시작할 필요없이 자동으로 재시작되어 새로 수정된 코드가 곧바로 자동으로 반영되도록 하는 모드

명령어 실행 화면

출력화면의 http://127.0.0.1:5000/ 는 방금 실행시킨 app.py API가 로컬 호스트의 IP 주소인 127.0.0.1:5000에서 돌아가고 있다는 뜻이다.

로컬 호스트

로컬호스트는 시스템이 실행되고 있는 해당 컴퓨터를 이야기 함.
운영 시스템 상에서 고정된 호스트 이름과 IP주소이며, 일반 IP 주소로는 사용 불가함

ping 엔드포인트가 제대로 돌아가는지 실제로 API에 접속해서 테스트해보자. ping 엔드포인트에 접속하기 위해서는 ping 엔드포인트에 HTTP request를 보내면 된다.

// 터미널 환경에서 HTTP 요청을 보낼수 있게 해주는 httpie 툴 설치
brew install httpie

//터미널에서 요청 보내기
http -v GET http://localhost:5000/ping

해당 HTTP 요청이 전송되어야 할 엔트포인트의 고유주소를 지정
즉, 127.0.0.1 주소의 포트 5000번에서 실행되고 있는 API의 "/ping"주소에 지정되어 있는 엔드포인트로 HTTP 요청을 보내라고 명령
최종 실행화면

profile
Yonsei Univ. Sports Industry studies/ Computer Science / Applied Statistics

0개의 댓글