ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • '잡'개발자의 고군분투 챗봇(Somenaeil) 만들기 1부
    🎁 토이 프로젝트/Somenaeil(챗봇) 2017. 10. 8. 06:27

    안녕하세요! '잡'개발자 JAY입니다.


    지금부터 제가 현재 개발하고 있는 챗봇 서비스에 대해서 포스팅하려고 합니다.


    챗봇을 만드는 과정부터 어떤 서비스를 할 것인지에 대해 순서대로 차근차근 정리하도록 해보겠습니다.


    1. 챗봇 개발환경 정하기

    챗봇 관련 API를 제공하는 서비스들은 다양한데요. 예를들어 카카오톡, 라인 등 메신저 애플리케이션에서 이런 API들을 제공합니다. 

    저같은 경우 가장 쉽게 접근할 수 있고 친근한 카카오톡을 사용하기로 했습니다.


    - 개발환경

    • 언어 : python
    • 웹프레임워크(서버) : Django
    • 서버 : AWS(아마존 웹 서비스)

    python을 사용한 이유는 그냥 평소에 제가 python 이라는 언어에 관심이 있었고, Django라는 웹프레임워크가 python으로 사용할 수 있기 때문에 Django를 서버쪽 웹프레임워크로 정했습니다. AWS는 1년동한 한달에 750시간이라는 프리티어를 이용할 수 있기 때문에 사용하였습니다.(역시 갓마존:D)



    2. 카카오톡 플러스친구 아이디 만들기(구 옐로우아이디)

    러스 친구 홈페이지 : https://center-pf.kakao.com/login


    카카오톡 계정으로 간단히 플러스친구를 만들수 있습니다. 그리고 카카오 자동응답 API를 사용하기 위해서는 별도의 서버가 필요합니다.


    AWS 사이트 : https://aws.amazon.com/ko/?nc2=h_lg  에 들어가셔서 가입하고 Amazon EC2 시작하기를 누르면 됩니다.


    그리고 아래 두 사이트를 참고하여 인스턴스 생성 후, Putty로 접속하면 사전준비는 끝입니다.


    - 참고 사이트 


    3. Django 설치 및 가상환경 실행


    프로젝트를 관리할 디렉토리를 하나 생성하고 들어간 뒤

    • mkdir Django --> cd Django

    python3 -m venv myvenv로 가상환경을 만듭니다. 가상환경을 만드는 이유는 필요한 경우 한 개발머신 안에 여러 개의 가상 환경을 만들고 각 가상 환경에서 다른 파이썬 버전이나 다양한 패키지들을 독립적으로 설치 사용할 수 있기 때문입니다. 요약하자면, 관리가 쉽도록 하기 위하여 만드는 것 입니다.


    이후, source myvenv/bin/activate를 치시면 가상환경을 실행할 수 있습니다.



    mkdir Django 했을때, 저는 이미 폴더가 만들어져 있기 때문에 에러가 뜨네요ㅎㅎ

    다음은  Django와 Apache 그리고 둘을 연동할 mod_wsgi를 설치합니다. 


    • pip install Django
    • sudo apt-get install appache2
    • sudo apt-get install libapache2-mod-wsgi-py3


    mode_wsgi는 Django와 같은 WSGI 인터페이스를 지원하는 파이썬 어플리케이션을 웹에 호스팅 할 수 있게 해주는 apache 모듈입니다. 


    WSGI 인터페이스 설명 : http://brownbears.tistory.com/350


    위 블로그에 가시면 WSGI, WAS, CGI에 대한 설명이 잘 나와있습니다!!


    4. Django 프로젝트 및 앱 생성

    • django-admin startproject bot(프로젝트 이름)
    • python manage.py startapp inform(앱 이름)  

    앱이름을 Somenaeil로 했어야 했는데 처음에는 어떠한 서비스를 할 지 몰라서 그냥 information을 줄여서 infrom이라고 했습니다.



    명령어를 다 치시면 이렇게 프로젝트와 앱 폴더가 생성된 걸 확인할 수 있습니다.(저는 이것저것 해보느라 폴더가 많이있네요..ㅎㅎ)


    프로젝트, 앱 폴더가 만들어진게 확인 되면, 프로젝트 폴더에가서 settings.py를 수정해줍니다.


    ALLOWED_HOSTS 부분을 '*'로 바꿔주어 모든곳에서 접근이 가능하도록 해줍니다.


    INSTALLED_APPS 에 자신이 만든 앱의 이름을 적어줍니다.



    TIME_ZONE 부분을 'Asis/Seoul'로 바꿔 줍니다.



    다음으로  프로젝트 폴더에 wsgi.py 파일을 들어가 경로를 추가해줍니다.



    마지막으로 apache 설정만 하면 됩니다. /etc/apache2/sites-available/000-default.conf에 들어가 가상환경(Virtualenv)을 설정하면 됩니다. 다른 것들은 건드리지 마시고 아래 표시한 부분을 추가하시면 됩니다.



    추가한 내용을 보시면 Require all granted라고 해서 모든요청을 허가하는 코드입니다.


    이제, sudo apachectl -k restart로 아파치를 재시작해줍니다.


    AWS에서 할당받은 인스턴스 아이피로 들어가 It worked! 라는 화면이 나오면 정상 실행 되는 것 입니다.

    (죄송합니다 캡처를 못했네요 ㅠ)


    만약 에러가 뜬다면 /var/log/apache2/error.log를 참고하시면 됩니다.


    5. 카카오 플러스친구(자동응답) API 형식에 맞게 Django 파일 설정

    카카오 플러스친구 API 깃헙 주소 : https://github.com/plusfriend/auto_reply


    첫번째로 Home Keyboard API 를 구현합니다.  이용자가 최초로 채팅방에 들어올 때 기본으로 키보드 영역에 표시될 자동응답 명령어의 목록을 호출하는 API입니다.


    API의 내용을 살펴보면



    Json 형식으로 예제와 같이 구현하면 됩니다.


    프로젝트 폴더에 있는 urls.py를 아래와 같이 변경합니다.

    다음은 앱 폴더의 urls.py 파일을 변경합니다.


    코드를 보면 http(s)://:your_server_url/keyboard로 요청이 왔을 때, views.py 파일의 keyboard함수를 부르게 하였습니다.


    다음은 views.py 파일을 수정합니다. 호출된 views.py 에서 그에따른 출력을 내야겠죠?!

    저는 제가 만들 서비스에 맞게 버튼을 추가하였습니다. 버튼의 내용을 보시면 알겠지만 제가 만들 챗봇 서비스의 주제는 '썸'입니다! ㅋㅋㅋ


    서비스 관련 내용은 챗봇만들기 포스팅을 하면서 천천히 설명드리도록 하겠습니다.


    항상 파일을 수정하면 sudo apachectl -k restart 로 아파치를 재시작 해줍니다. 그래야 변경된 사항이 적용됩니다.


    이제 플러스친구 홈페이지 메뉴중 '스마트 채팅'을 클릭하신 후, 


    API형 선택 그리고 앱 URL 부분에 자신의 서버 IP를 기입하여 API테스트를 진행하시면 됩니다.


    만약 Fail이 난다면 무언가 잘못 설정해주었기 때문입니다. 다시한번 코드를 확인하시길 바랍니다.


    여기까지 됬으면 실제로 카카오톡에서 챗봇이 동작하나 확인해 보겠습니다.



    카카오 이모티콘에 대한 이미지 검색결과

    (아주 잘나옵니다!! ㅋㅋㅋ)



    6. 플러스친구 버튼 클릭시 내용 출력

    이번에는 버튼을 클릭시 내용을 출력해보도록 하겠습니다.


    프로젝트 폴더의 urls.py 파일에 message url을 추가합니다.

    views.py 파일에 message 함수를 추가합니다.

    저는 한글을 입력받고 한글을 출력하기위해 'UTF-8' 인코딩, 디코딩 둘 다 사용하였지만 단순히 버튼테스트를 하실 분들은 아래처럼만 해주시면 됩니다. 추후 아주 짜증이나는 'UTF-8'에 관해서도 포스팅을 하도록 하겠습니다.

    *csrf_exempt는 middleware에 의해 자동으로 csrf portect 기능이 있는경우 이를 dissable 시켜주는 기능입니다. 특정 view에 csrf를 적용시키고 싶지 않을때 사용합니다.


    자! 이제 sudo apachectl -k restart 명령어로 아파치를 재시작 한 후, 플러스 친구 채팅창에서 제대로 응답하는지 확인하도록 해보겠습니다.



    와웈ㅋㅋ 정말 잘 됩니다!! 사실 챗봇이라는게 처음에는 엄청 어려울 것이라고 생각했는데, 개발환경 셋팅만 제대로 되면 API가 잘 되어있어서 구현 자체는 어렵지 않네요 ㅎㅎ(이러고 개발환경 셋팅만 이틀 헤멘건 안비밀ㅠㅠ ㅋㅋㅋ)


    다음 포스팅에서는 제가 구현할 '썸내일' 챗봇에 추가할 서비스를 만들어 보도록하겠습니다.


    네이버 검색API 사용하기, python에서 file open, static file 사용(AWS의 S3이용) 등에 대하여 설명드릴게요!


    처음 이렇게 길게 글을 써보는거라 정리가 많이 안된 것 같아요 ㅠㅠ 혹시라도 궁금하신 점 있으시면 언제든지 댓글이나 메일 주시면 답변드리겠습니다!!


    여러분 그럼 즐거운 코딩, 재밌는 코드 생산하세요~~:D

    * 아 그리고, 저는 웹개발자도 아니고 아직 신입개발자이며 취미로 웹쪽 개발을 해보는 거라 많이 부족합니다!ㅜ 혹시라도 제 글에 잘못된 점이나 고쳐야할 부분이 있으시면 언제든지 주저 마시고 말씀해주세요! 감사합니다:D



    댓글

운동하는 개발자 JAY-JI