Kakao Chatbot x Python flask (1)
Python flask를 이용한 간단한 Kakaotalk chatbot API 서버 만들기 - 준비물편
서론
이 글은 Python의 웹프레임워크 Flask를 바탕으로 카카오톡 챗봇을 만드는 최소한의 과정을 작성하였습니다. 작성한 챗봇을 heroku를 통하여 배포하고 실제로 챗봇이 응답하는 것을 목표로 합니다.
준비물
virtualenv Python 가상환경 설정
virtualenv
이 깔려있지 않다면 pip
를 이용하여 설치합니다.
$ pip install virtualenv
작업할 폴더를 만들고 그 폴더에서 가상환경을 만듭니다. 버전은 Python3로 설정합니다.
$ mkdir chatbot
$ cd chatbot
$ virtualenv --python=python3 venv
가상환경을 불러옵니다. 이때 Python은 아무것도 깔리지 않고 기존의 쉘과는 독립된 환경을 갖게 됩니다.
$ . ./venv/bin/activate
가상환경에서 벗어나고 싶다면 아래와 같이 deactivate
를 실행합니다.
$ deactivate
가상환경의 이점은 다른 환경에서도 프로젝트 진행중 환경설정이 꼬여버리더라도 호스트 환경에 영향을 미치지 않는다는점. 다른 프로젝트에서 작업하는 경우 꼬이지 않도록 함입니다.
이후 프로젝트를 사용할 시에 항상 이 가상환경을 사용하는 것을 가정으로 합니다. 갑자기 모듈이 없다거나 분명 잘 작동했는데 껏다키니까 에러가 발생한다면 가상환경을 먼저 의심하는 것도 좋습니다.
pip 로 필요한 라이브러리 받기
pip
를 이용하여 프로젝트에 필요한 패키지를 일괄적으로 다운로드 받습니다. 필요한 패키지의 정보를 requirements.txt
에 적습니다.
requirements.txt
aniso8601==1.0.0
Flask-JSON==0.3.2
Flask==0.12.1
gunicorn==19.6.0
Jinja2==2.10
six==1.9.0
Werkzeug==0.13
위 파일을 불러드려 패키지를 일괄적으로 설치합니다.
$ pip install -r requirements.txt
Flask 웹서버 구동
간단한 Flask 앱을 위한 코드를 작성합니다.
app.py
from flask import Flask
app = Flask(__name__)
환경변수에 app.py
를 추가하고 flask
로 실행합니다.
$ FLASK_APP=app.py
$ flask run
* Serving Flask app "app"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
웹브라우저에서http://127.0.0.1:5000/ 로 접속합니다. 아직 보여줄 페이지를 작성하지 않았기 때문에 404 Not Found가 보인다면 정상작동입니다.
이제 ‘Hello world !’ 를 출력하는 페이지를 만듭니다.
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/') # <-- 추가된 3줄
def index(): # <
return "Hello world!" # <
Flask에서 정의된 @app.route
데코레이터를 이용하여 주소와 함수를 연결해줍니다. (여기서의 app
은 3번째 줄에서 정의한 Flask
객체 입니다.) @app.route('/')
는 http://127.0.0.1:5000/
으로 접속하였을때 페이지를 작성하는 코드임을 나타내주는 데코레이터입니다. 함수 index
는 페이지를 작성하여 return 합니다.
웹브라우저에서 접속하여 ‘Hello world!’ 가 보이는지 확인합니다.
이 글을 따라한 뒤 디렉토리의 구조
chatbot/
|- venv/
|- app.py
|- requirements.txt
'Dev > Python' 카테고리의 다른 글
[하루 1시간] 실시간 OCR 번역기 만들기 (1) | 2023.11.24 |
---|---|
[SublimeText] 플러그인 만들기 - URL Decoder (0) | 2022.01.08 |
Python 접근제어자 (0) | 2018.05.28 |
카카오톡 챗봇 (2) (1) | 2017.12.22 |