2020. 5. 6. 17:11ㆍ프로젝트/LOL 전적 검색 App
배포
ngrok
완성된 웹 페이지를 배포하는 방법은 여러 가지가 있습니다.
가장 빠른 배포 방법은 ngrok를 사용하는 방법입니다.
ngrok는 Flask에서 라이브러리로 지원하며 테스트 환경에서. py 코드를 실행시키면 배포가 완료됩니다.
ngrok로 실행시 터미널에 띄워지는 주소로 접속할 수 있습니다.
하지만 24시간 서버를 열어놓기 위해서는 터미널을 계속 열어두어야 하고 주소가 매번 바뀐다는 단점이 있습니다.
Heroku
heroku는 배포를 하기 위해 몇가지 조건이 필요합니다. 설치된 라이브러리가 들어있는 requirements.txt 파일이 필요하고 Procfile에서 서버의 구동 방식과 시작할 파이썬 파일을 지정해줘야 합니다. 처음 배포할 때 자잘한 오류로 인해 배포하는데 오래 걸렸지만 익숙해지면 배포하기 정말 편한 서비스인 것 같습니다.
장점으로는 배포시 인증서 발급, 주소 고정, 클라우드 서비스이므로 배포가 완료된 후에는 언제든 접속 가능합니다.
헤로쿠 배포에 대한 자세한 내용은 아래 게시글에서 확인할 수 있습니다.
AWS
서버관리부터 데이터베이스 도메인 등 모든 걸 한 번에 해결할 수 있는 서비스입니다.
원하는 운영체제로 서버를 구동시킬 수 있다는 장점이 있고 heroku처럼 배포하기 위한 파일이 필요하지 않습니다.
원하는 운영체제로 인스턴스를 생성하고 프로젝트 파일을 가져오고
배포에 필요한 조건(debug mode = off, host = '0.0.0.0')을 맞춰주면 배포하는데 필요한 준비가 끝납니다.
단점은 위 2개의 서비스와는 다르게 기간제(12개월) 무료라는 점입니다.
AWS배포에 대한 자세한 내용은 아래 게시글에서 확인할 수 있습니다.
LOL전적 검색 App은 AWS로 배포했습니다.
배포과정은 위에 첨부된 'Flask를 AWS에 Deploy 하기'라는 글에서 확인할 수 있습니다.
배포 과정에서 생긴 오류
OSError: [Errno 98] Address already in use
인스턴스에 연결 후 터미널에서 파이썬 파일을 열어 Flask를 작동시키려고 할 때 생기는 오류입니다.
이 오류가 방생한다는 것은 이미 같은 포트를 사용하는 프로세스가 작동중이기 때문입니다.
따라서 강제로 프로세스를 종료시켜야 하는데
터미널에 다음과 같은 명령어를 입력하면 됩니다.
방법 1
>> sudo lsof -i :포트번호
위 명령어로 PID를 알아낸 후
>> sudo kill -9 PID
해당 PID를 kill 하기
방법 2
>> fuser -k 포트번호 / tcp
오류가 생긴이유 Flask실행 후 종료 시 Ctrl + z를 눌러서 백그라운드에서 실행되도록 했기 때문인 것 같습니다.
Ctrl + c 를 눌러서 종료했을 때는 위와 같은 문제가 발생하지 않았습니다.
부트스트랩 모달 오류
부트스트랩 모달마다 html파일을 따로 만들어두고 jinja의 macro를 이용해 불러오기를 할 때 경로를 찾지 못하는 문제가 발생합니다. 테스트 환경인 Windows10 + Python3.6에서는 문제없이 작동하지만 리눅스 환경에서는 제대로 작동하지 않았습니다.
macro를 사용하지 않고 모든 모달 태그를 모달을 요청하는 html에 넣어주었습니다.
코드가 많이 길어졌지만 오류는 해결되었습니다.
배포된 페이지