라이브러리: 개발자의 코드 안에서 라이브러리가 실행된다
프레임워크: 프레임워크가 개발자의 코드를 실행한다
일단 설치할 때부터 '맥에 유해하다', '맥에 악영향을 줄 수 있다'
이렇게 겁주는 멘트가 나와서 겁났다.
일단 설치를 하기는 했다.
그런데 설치 후 $ conda list
로 설치를 확인해보니
'conda command not found' 이러고 있다.
$ export PATH="/root/anaconda3/bin:$PATH"
경로를 잡아주는 것으로 해결했다.
하여간 뭔가 설치하는 건 방심할 수가 없다.
대체가 좀 깔끔하게 되는 게 많지 않은 것 같다.
$ conda create --name api python=3.7
일단 python=3.7은 입력하지 않았다.
python 버전을 선택한다는 게 나한텐 너무 무서운 일이다.
아무튼 입력하기만 하면 가상환경을 만들어주긴 만들어준다.
그리고 생성된 가상환경을 사용하기 위해서는 활성화 코드를 입력해야 한다
다음의 명령어를 사용한다
$ source activate api
희한하게 이게 또 그냥 된다.
Virtualenv를 사용할 때는 해당 디렉터리에 들어가서 가상 환경을 실행해줘야 했는데
conda의 경우엔 그냥 $ source activate api
를 입력하는 것만으로 실행이 되었다.
비활성화는 $ source deactivate
를 입력한다.
conda 가상환경 상태를 지속적으로 확인해주기 위해서
$ conda env list
를 사용한다.
일단 커맨드라인 가장 앞에 (api)가 떠 있는 걸 확인한다.
이게 진짜 개중요함.
무조건 가상환경 안에서 개발하는 걸로 약속임.
커맨드라인 가장 앞에 (api)를 확인했다면
$ pip install flask
하니까 안 된다 ㅋㅋ
혹시나해서
$ pip3 install flask
됨 ㅋㅋ
그냥 Virtualenv 쓸걸 그랬나? 이런 생각이 벌써 든다.
뭔가 불안하다.
일단 이게 설치가 제대로 됐는지부터 확인해봐야겠다.
from flask import Flask
app = Flask("test")
터미널에 한 줄씩 넣어볼 것임.
>>
로 계속 이어진다는 건 문제없다는 이야기네.
다행이다.
각 엔드포인트는 고유의 기능을 담당하고 있다. 이러한 기능들을 가진 엔드포인트가 모여서 하나의 API를 구성하게 된다.
GraphQL의 경우 단 하나의 엔드포인트로 모든 기능을 제공한다
'ping' 엔드포인트를 호출하면 'pong'으로 응답이 돌아오게 만들 거임.
그렇게 단순한 걸 어디 써먹음?
헬스체크 기능에 사용한다.
해당 API서버가 현재 운행되고 있는지 아닌지를 간단하게 확인할 때 사용하는 기능이다.
이제부터 진짜로 만들어볼 것임.
일단 디렉터리 아무거나 하나 판다.
그리고 코드를 하나 짤 건데 파일의 이름은 app.py로 할 것임.
# Flask를 사용하기 위해 import
from flask import Flask
# import한 Flask 클래스를 객체화(instantiate)하고 변수에 할당
# app변수가 바로 API 어플리케이션이 된다(Flask 웹 어플리케이션)
# app 변수에 API의 설정과 엔드포인트를 추가하면 API가 완성된다
app = Flask(__name__)
# Flask의 route 데코레이터를 사용하여 엔드포인트 등록
# 고유 주소는 /ping HTTP메소드의 종류는 GET
@app.route("/ping", methods=['GET']
# "pong"만을 리턴하는 함수 구현
# Flask가 알아서 HTTP Response로 변환하여 클라이언트에게 전송
def ping():
return "pong"
이 코드에서 주목할 점은 '어떻게 엔드포인트를 지정하는가'이다.
API 코드의 전체적인 구조가 일단 잡히면 그 다음부터는 엔드포인트들, 즉 함수들을 구현하는 것이 개발의 대부분이 된다.
작성한 코드 파일을 실행하려면 해당 디렉터리에 들어간 상태여야 한다.
$ FLASK_APP=app.py FLASK_DEBUG=1 flask run
로컬호스트 http://127.0.0.1:5000/ 에서 실행되었다.
이제 실제로 엔드포인트가 잘 돌아가는지 API에 접속해서 테스트해볼 것이다. ping 엔드포인트에 HTTP Request를 보내면 된다.
HTTP 요청을 보내는 방법에는 여러 가지가 있는데, httpie라는 툴을 사용해볼 것이다.
$ brew install httpie
설치가 됐으면 다음 명령어를 통해 HTTP Request를 해본다.
$ http -v GET http://localhost:5000/ping
-v
는 verbose옵션이다.
해당 HTTP 요청과 응답에 관한 추가적인 정보를 제공한다.
GET
은 HTTP메소드를 'GET'으로 지정한 것이다.
마지막의 주소는
127.0.0.1 ip주소의 5000번 포트에서 실행되고 있는 API의 /ping에 지정되어 있는 엔드포인트에 HTTP요청을 하는 것이다
터미널에 pong이라고 뜨는 걸 볼 수 있다.
오른쪽 터미널에서는 API가 실행되고 있다.
왼쪽에서는 오른쪽의 API에 요청을 보내고 있다.
API가 클라이언트의 요청과 서버의 응답을 매개하고 있는 것이다.
외에도 브라우저에서 해당 url을 입력하면
마찬가지로 pong 응답이 나옴을 볼 수 있다.
점점 더 자세히 배울 것이고 HTTP 외에 다른 프로토콜을 사용하는 API도 있을 수 있지만 지금 고려할 것은 아니다.