$ sudo python manage.py runserver 0.0.0.0:8000

로컬에서만 접근이 가능하도록 Django 서버를 실행할 때는 문제가 없었으나 이를 외부에서 접속 가능하게끔 했더니 Invalid HTTP_HOST_ header: ‘IP’. You may need to add u’IP’ to ALLOWED_HOSTS라는 에러가 발생했다. 이를 해석해보면 필자의 IP에 대한 HTTP_HOST_header가 이용가능하지 못하므로 ALLOWED_HOST에 해당 IP를 추가할 필요가 있다는 뜻이다. ALLOWED_HOST는 장고 프로젝트의 settings.py에 있으므로 settings.py에서 설정을 해주면 된다.
vim ~/pooh_chatbot/settings.py
필자의 경우 ~에 프로젝트를 생성해서 경로가 이렇게 된다. settings.py를 열어보면 ALLOWED_HOSTS 부분이 있는데 2가지 방법 중 하나를 택해서 바꿔주면 된다.
ALLOWED_HOSTS = [‘*’] 또는 ALLOWED_HOSTS = [‘해당 IP’, ‘localhost’, ‘127.0.0.1’]
이렇게 해주면 된다. 필자는 주로 전자를 많이 쓰지만 이번엔 후자의 방법으로 해보겠다.
저장을 하고 다시 Django 서버를 띄워보자.
$ sudo python manage.py runserver 0.0.0.0:8000
이제 해당 에러가 나지 않고 잘 동작한다.
참고 사이트 :
,
파이썬을 서버에서 원격으로 작업하기 위해 Pycharm이라는 툴을 이용해보기로 했다.
먼저 https://www.jetbrains.com/pycharm/download/ 에서 Pycharm을 설치한다. 필자의 경우 Professional을 설치했다. Pycharm 버전은 pycharm-professional-2018.2.3이며 설치했다고 가정하고 바로 진행을 하겠다.
Pycharm을 연 다음 File -> New Project를 클릭한다.
여기를 들어가면 다음과 같은 화면이 나오게 되는데 빨간색 부분을 클릭해준다.
Existing interpreter를 체크해주고 오른쪽에 …을 클릭한다.
그러면 이런 화면이 나오게 되는데 왼쪽의 SSH Interpreter를 눌러서 오른쪽의 Host에 서버 IP와 포트 번호를 밑에는 계정을 입력해준다. 그 다음 Next를 눌러주면
Password를 체크해 준 후 계정의 비밀번호를 입력해준다. 그 다음 Next를 누르면
여기서는 바로 Finish를 눌러주면 된다.
다 설정하고 나니 초기 상태와 달라졌음을 확인할 수 있는데 필자가 설정한 서버의 IP도 보인다(물론 여기서는 가렸지만…). 이렇게 나오면 잘 설정된 것이다.
밑의 Open Project 화면은 방금까지 설정해준 프로젝트를 열 때 나오는 문구인데 현재 창에서 열 것이냐 아니면 새로운 창에서 열 것이냐라는 메시지이다. 현재 프로젝트를 설정하기 전에 이미 다른 프로젝트를 진행하고 있는 상태라면 필자처럼 Open in new window를 눌러주면 되고 그게 아니라 처음 여는 것이라면 Open in current window를 눌러줘도 된다(Open in new window 눌러줘도 상관없어용).
프로젝트를 열었더니 아직 서버에 있는 디렉토리나 파일들은 보이지 않는다. 보이도록 설정해주자.
Tools -> Deployment -> Browse Remote Host로 들어간다.
Remote Host가 생기면서 현재 서버에 있는 디렉토리와 파일들이 나타났다.
작업하려고 하는 경로로 가서 파일을 열어보면 코드들이 잘 나온다.
마지막으로 코드가 수정되거나 할 때 자동으로 파일 동기화를 할 수 있도록 하고 싶으면 메뉴에 있는 Tools -> Deployment - Automatic Upload를 클릭해주면 된다.
참고 사이트 :
Django를 이용하여 개발용 서버를 띄울 때
$ sudo python manage.py runserver
이렇게 사용하게 되면 포트 번호는 기본적으로 8000번으로 지정된다.
하지만 이건 디폴트값이고 내가 마음대로 지정해 줄 수도 있다. 만약 다른 포트 번호를 사용하고 싶다면
$ sudo python manage.py runserver 8888
이런 식으로 사용하면 포트 번호를 변경할 수 있다. 잘 작동되는지 확인해보면
잘 작동한다. 하지만 이는 포트 번호만 변경해 줄 뿐 외부 접속을 허용하는 것은 아니다. 외부 접속을 허용하려면
$ sudo python manage.py runserver 0.0.0.0:8000
이렇게 해주면 된다. 포트 번호 또한 마음대로 지정해 줄 수 있다. 이렇게 해줘야 외부에서 Django 서버를 띄운 컴퓨터에 할당된 IP와 해당 포트번호를 사용하여 접속할 수 있다. 하지만 공유기를 연결하여 사용하는 경우는 공유기에서 외부 접속을 막고 있기 때문에 포트 포워딩이 필요하다. 내 서버를 기준으로 포트포워딩을 통해 외부에서 접속되도록 설정해보겠다.
필자는 따로 서버가 없어서 VM을 서버로 두었다. VM에서 8000포트로 Django 서버를 띄우면 필자가 살고 있는 건물의 특정 포트를 포트포워딩을 통해 VM의 8000 포트로 연결시켜준다. 이렇게 하면 외부에서는 해당 건물의 IP와 포트로 접속했을 때 VM의 8000포트로 들어가 Django 서버를 이용할 수 있게 된다. 포트포워딩을 해주기 위해 브라우저를 켠 후 URL 창에 192.168.0.1을 입력해주자.
로그인을 한 다음
관리도구를 클릭한 후 고급 설정 -> NAT/라우터 관리 -> 포트포워드 설정을 들어가서
외부포트는 지정해주고 싶은 포트 번호를 입력해주면 되고 내부포트는 VM이 Django 서버를 띄워주는 포트인 8000으로 해준다. 하지만 이 역시 무조건 8000은 아니다. 예를 들어, VM에서 Django 서버를 8888 포트로 띄웠으면 내부 포트도 8888이 되는 것이다. 필자는 Django 서버를 8000 포트로 띄웠기 때문에 8000을 써준 것이다. 내부 IP 주소는 VM 서버의 IP를 입력해주면 된다. 이렇게 하면 ‘필자가 살고 있는 건물의 IP:8000’ 으로 접속해서 Django 서버를 이용할 수 있다(이에 대한 예시는 ‘[Django 챗봇] 2.2 버튼 만들기(2)’ 포스팅을 참고해주세요!!).
참고 사이트 : http://compunication.tistory.com/4
,
PHP 챗봇에서도 다루었지만 카카오톡 플랫폼을 이용하기 위해서는 카카오톡 플러스 친구에서 앱을 등록해야 한다. 이 역시 ‘[PHP 챗봇] 2. 플러스 친구 가입하기’ 포스팅을 참고하길 바란다. 가입을 했다고 가정하고 API 부분부터 시작하겠다. 카카오톡 플러스 친구에서 지원해주는 여러 API들이 있지만 이번 챗봇도 입력값을 넣었을 때 응답만 해주면 되기 때문에 keyboard와 message기능만 구현해주면 된다. 따라서, keyboard API와 메시지 수신 및 자동응답(message) API에 대해서만 다룰 것이다.
카카오톡 서버에서 keyboard API는 http://서버주소/keyboard, 메시지 수신 및 자동응답 API는 http://서버주소/message 에 요청하게 되는데 이에 맞춰 개발자가 해당 응답을 return하도록 Django로 구현해주면 된다.
카카오톡 플러스 친구는 http://서버주소/keyboard 에서 아래와 같이 받는다.
{
“type” : “buttons”,
“buttons” : [“선택 1”, “선택 2”, “선택 3”]
}
따라서, 우리는 위와 같이 동작하도록 pooh_app의 views.py 파일에 해당 내용을 추가해주면 된다.
그 전에 카카오톡은 REST API이기 때문에 Json 방식으로 통신을 해서 views.py에 해당 모듈을 import해줘야 한다.
vim ~/pooh_app/views.py
이제는 버튼을 추가해주자. 필자 학교의 경우 각 식당과 도움말 그리고 내일 메뉴도 보여주기 위해 ‘내일 메뉴’ 버튼까지 포함시켰다.
이런 식으로 작성해주면 된다.
이제 http://서버주소/keyboard 에 접속할 때 방금 작성한 내용들을 보내야 하므로 url을 설정해줘야 한다. pooh_chatbot의 urls.py를 열어보자.
vim ~/pooh_chatbot/urls.py
아래 표시된 부분들을 추가해주면 된다. views.py의 keyboard 함수를 이용할 것이기 때문에 pooh_app의 views.py를 import 해줘야 한다(from pooh_app import views).
해당 내용들이 잘 전달되는지 확인하기 위해 실행을 해보자. manage.py가 있는 경로로 가서
$ sudo python manage.py runserver
빨간색 글자들을 보면 migrate를 하지 않았다고 뜨는데 우리는 지금 keyboard가 잘 되는지만 확인하려는 것이기 때문에 신경쓰지 않아도 된다. 127.0.0.1:8000/keyboard에 접속해보면
이런 식으로 나오면 성공이다. 왜 한글이 나오지 않고 이런 글자가 나오냐면 한글이 유니코드로 저장이 되기 때문이다. 대신 JSON 부분을 클릭하면 한글이 잘 나온다.
물론 카카오톡에서는 정상적으로 한글이 나온다.
python manage.py runserver를 하게 되면 디폴트로 8000번 포트가 지정이 된다. 또한 이렇게만 입력하면 로컬에서만 접속이 가능하고 외부에서는 접속을 할 수 없다. 이에 관한 자세한 설명은 ‘[Django] 서버 외부 접속 허용 및 포트 번호 변경’ 포스팅을 참고하길 바란다.
참고 사이트 : http://codeac.tistory.com/11?category=731564
,
저번에 간단한 버스 챗봇을 만들어봤다면 이번엔 학식 챗봇을 만들어 보려고 한다. 저번에 만든 버스 챗봇은 사실 너무나 미숙한 것들도 많았고 글자를 완전히 챗봇의 안내에 맞게 입력해야 하는 불편함도 있었다. 그래서 이번에는 모두 버튼으로 만들어봐야겠다는 생각을 했다.
챗봇의 구조를 보게 되면 서버가 필요함을 알 수 있다. 필자는 따로 서버를 가지고 있지 않아서 VM을 서버로 두었다. 이 부분은 PHP 챗봇에 자세하게 적어두었기 때문에 모르겠으면 ‘[PHP 챗봇] 1. VM서버 셋팅’ 편을 참고하길 바란다. 지금은 이러한 서버 환경을 셋팅하는 방법에 대해서는 다루지 않겠다. 환경은 PHP 챗봇일때와 마찬가지로 Ubuntu 16.04 LTS이며 셋팅이 다 되어 있는 상태라고 하고 진행할 것이다.
Django를 사용하기 위해서는 Django를 설치해줘야 하는데 설치하기 전에 먼저 pip가 최신 버전으로 되도록 업그레이드를 시켜준다.
$ sudo pip install –-upgrade pip
pip를 최신 버전으로 해줬으면 이젠 Django를 설치해보자.
$ sudo pip install Django
장고를 설치한다.
$ django-admin startproject pooh_chatbot .
pooh_chatbot이라는 이름의 프로젝트를 생성한다.
해당 경로에 pooh_chatbot이 생성되었음을 확인할 수 있다.
$ python manage.py startapp pooh_app
프로젝트를 생성해줬으면 manage.py가 있는 경로로 가서 어플리케이션을 생성한다.
pooh_app이 생성된 것을 볼 수 있다. 이제 pooh_chatbot의 settings.py 파일을 수정해야 한다. 왜냐하면 프로젝트에 pooh_app을 만들었다는 것을 알려줘야 하고 시간대도 한국으로 맞춰줘야 하기 때문이다.
$ vim ~/pooh_chatbot/settings.py
이렇게 INSTALLED_APPS에서 pooh_app을 추가해준다.
언어와 시간대를 한국으로 맞추기 위해 LANGUAGE_CODE와 TIME_ZONE을 수정해준다.
생성된 프로젝트의 구조를 보면 다음과 같다.
다음 포스팅에서는 카카오톡 API 테스트를 진행해보자.
참고 사이트 : http://codeac.tistory.com/11?category=731564
,
언젠가는 쓸 일이 있을 거 같아 포스팅해보려고 한다. Edit plus를 FTP 설정을 통해 서버에 원격 접속해보자.
파일 -> FTP -> FTP 설정 으로 들어간다.
여기를 들어가면 다음과 같은 화면이 나오게 되는데
FTP Group 3라고 써있는 곳을 클릭하면 해당 그룹을 지정해줄 수 있고 오른쪽에 …을 클릭하면 그룹의 이름을 지정해줄 수 있다. 해당 그룹을 지정했으면 이제 오른쪽에 추가 버튼을 누른 후 아래 표시되어 있는 곳을 모두 채워준다. 필자가 IP를 가려서 저렇게 빈 칸처럼 보이는 것이지, 저 부분에 해당 서버의 IP를 입력해주어야 하고 디렉토리는 서버에 접속되는 디렉토리를 지정해주는 곳이다. 다 입력했으면 밑의 ‘고급 옵션’ 버튼을 클릭한다.

FTP는 File Transfer Protocol, 즉, 파일전송 프로토콜로 포트번호 21번을 사용하는 반면, SFTP는 Secure File Transfer Protocol, 즉, 암호화된 파일전송 프로토콜로 포트번호 22번을 사용한다. 우리는 sftp 사용에 체크를 했기 때문에 22번을 사용할 것이지만 필자의 경우 포트포워딩을 해놓아서 2222번으로 해놓은 것이다. 이처럼 해당 서버마다 환경이 다르니 해당 환경에 맞게 설정해주면 된다.
또한 만약 접속하고자 하는 서버가 UTF-8을 사용한다면 밑의 ‘UTF-8 파일명 사용’을 체크하기 바란다. 그 외의 설정들도 역시 필요하다면 해당 서버의 환경에 맞게 체크해주면 되고 확인을 누르면
이런 화면이 나오게 되는데, 왼쪽 디렉토리 밑부분을 클릭하게 되면 아까 지정해 준 학식 챗봇이 있다. 이를 클릭한다.
아까 지정해 준 디렉토리인 /home/pooh/app이다. 다른 디렉토리의 코드들도 다룰 수 있으며 맨위에 pooh@~ 여기에도 표시가 된다. 필자가 IP 때문에 통째로 가려서 해당 디렉토리가 안보이는 것뿐이다. 여기에서 작업하고 싶은 코드를 열어 작업하면 된다.
해당 서버에서 작업을 하다가 코드가 길어져서 툴을 이용해 원격으로 작업을 하려고 했다. 좋은 툴들이 많지만 설치하기가 귀찮아 달랑 하나 있는 Edit plus로 서버에 붙으려고 했더니 이러한 에러가 났다.
이 에러는 Edit plus 암호화 알고리즘이 일치하지 않는다는 에러로 검색해보니 서버의 ssh 버전이 높으면 나타나는 것이라고 한다. 이런 경우는 서버에서 설정을 해줘야 한다. Ubuntu에서는 /etc/ssh/sshd_config에다가 밑의 내용을 추가해주면 된다.
vim /etc/ssh/sshd_config
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,blowfish-cbc,aes128-cbc,3des-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha1
그 다음에 ssh를 restart해준다.
service sshd restart
그러고 나서 다시 Edit plus로 서버에 접속해보면
이런 화면이 나오면 성공한 것이다(서버IP같은 것은 가렸습니다). ‘예’ 버튼을 누르면
이렇게 서버에 있는 코드들이 나오게 된다.
참고 사이트 :
배터리가 없는 것을 확인 못 하고 VM을 작업하고 있다가 배터기가 다 되어 컴퓨터가 꺼졌다. 다시 배터리를 연결하고 VM을 켰더니 다음과 같은 오류가 발생했다.
This virtual machine appears to be in use. 즉, 가상머신이 이미 사용 중이라는 뜻이다. 이는 비정상적으로 Virtual Machine이 종료되었을 때 발생하는데 잘못하면 가상 이미지 파일을 손상시킬 수도 있다.
해결 방법은 간단하다. 메시지 중간 부분을 보면 press the “Cancel” button to avoid damaging it. 즉, 파일이 손상되는 것을 피하려면 Cancel 버튼을 누르라고 한다. 일단 메시지대로 Cancel을 누른 다음 에러 메시지의 맨 밑에 나와 있는 경로로 들어가서 현재 서비스되고 있는 Virtual Machine과 관련된 임시 파일이 있는 .lck 폴더를 삭제해주면 된다. 삭제하고 난 후 다시 해당 VM을 실행시켜주면 된다.
에러 메시지에 나와있는 경로에 .lck 파일이 있다. 또한 날짜와 시간을 보면 VM을 실행시켰을 때 해당 오류 메시지가 떴던 날짜와 시간이다. 이 파일을 지워준 후 다시 VM을 실행시키면
VM이 잘 실행된다.
참고 사이트 :