ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Heroku에 올려진 프로젝트 AWS Lightsail로 이전 작업기 - 초기작업
    소소한 IT 이야기 2020. 4. 29. 22:29

    기존에 Heroku에 업로드된 Node.js 프로젝트를 항상 AWS로 옮겨야겠다는 생각은 하고 있었습니다. 현재 제 프로젝트는 아래와 같은 장비로 구성되어있습니다.

     

    1. Node.js - Heroku Node.js Hosting

    2. MySQL - 개인 서버

     

    사실 이렇게 사용하면서 불편했던 점들이 몇 가지 있었습니다.

     

    첫째, Heroku의 Nodejs 호스팅은 무료이지만 서버가 유럽에 있어 한국, 미국 사용자들에게 모두 지연시간이 느리다.

    둘째, Heroku의 Nodejs 앱은 유휴시간이 30분 이상되면 자동으로 Sleep모드로 들어가서 초기 시작이 굉장히 느려진다. (하지만 이 부분은 10분마다 자동으로 접속하는 프로그램을 개발하여 해결하였습니다. 관련 블로그문서)

    셋째, MySQL 서버가 개인 서버에 올려져있다 보니, 집의 네트워크 환경에 문제가 발생할 때나, 전력문제가 발생할때 그 기간 동안 서비스가 모두 멈춰있다.

    넷째, 웹앱, DB, 스토리지 DB가 전부 각각 Heroku, 개인 서버, AWS S3 서버에 업로드되어있다 보니 서비스를 관리하기가 쉽지 않다.

    다섯째, 보안 및 우분투 서버를 실제 운용하는데 드는 관리 시간이 너무 많이 든다.

     

    사실 3번째의 문제가 가장 컸습니다. 1분만 멈추어도 문제가 발생하는 웹서비스로서 외부 환경에 서비스가 언제든지 멈출 수 있다는 부분, 그리고 관리하기가 유지하기 쉽지 않다는 부분 때문에 이 모든 프로젝트를 AWS로 이전 작업을 진행하기로 하였습니다.

     

     

     

    인스턴스의 위치는 기본적으로 서울로 설정되어있었지만 지연시간 감소를 위해 미국 오레곤 주를 선택하였습니다.

    우선 이번 작업을 하면서 든 생각은 DB를 다시 재구성하기로 하였습니다. 현재 저는 MySQL을 사용하고 있지만 이를 다시 MongoDB로 변경하기로 하였습니다. 사실 처음에 이 프로젝트의 프로토타입을 MongoDB로 작성하였다가 싹 다 MySQL 문으로 수정한 사례가 있어 사실 굉장히 번거롭고 아까운 일이지만 여러 가지 이유로 (나중에 요 부분도 블로깅 해볼까 합니다) MongoDB로 다시 돌아가기로 하였습니다.

     

    서버를 세팅하였습니다

    AWS의 장점답게 서버를 추가하고 삭제하는 게 버튼 몇 번으로 이루어집니다. 게다가 SSH 연결 또한 브라우저 단에서 사용이 가능합니다. 다만 저의 경우에는 브라우저 속도가 조금 느리게 느껴져서 Putty를 사용하였습니다. 이를 위해서는 PEM 키를 puttygen을 이용하여 ppk 파일로 변경시켜주어야 합니다. 이후에 이 키로 Filezilla나 putty에서 접속하는 보안키로 사용이 가능합니다.

     

    기본적으로 Node.js 기반으로 코드가 작성되었기에, Node.js와 MongoDB를 설치하였는데 처음에 MongoDB를 외부에서 접속하는 방법을 찾느라 조금 헤매었습니다. 전에 EC2서버를 사용할 때에는 콘솔에서 포트 설정하는 부분이 명확하게 보였는데 Lightsail의 경우에는 네트워킹 항목에 이게 있었습니다.

     

    기존 프로젝트를 Heroku에서 AWS 서버로 옮기면서 여러 불편한 점들이 있었는데 이 부분들에 대해서 차차 해결 해나고자 합니다.

     

    첫째, Heroku 사용 시에는 Github과 연동이 되어서 개발환경에서 Github으로 커밋을 하면 Heroku 서버에 변경된 부분이 전달되어 자동으로 배포되었는데, AWS 서버를 사용하니 이런 연결점이 없어서 일일히 다시 커밋된 파일을 받아서 배포해야함. (이 부분은 Travis CI를 활용해서 해결가능할것같은데, 이 작업이 없으면 개발 속도가 아주 느려질것같으니 반드시 해결해야할 부분입니다.)

     

    둘째, Heroku 사용 시에는 XXXX.herokuapp.com 이라는 도메인이 제공되었는데, AWS 사용시에는 IP주소로만 작동합니다. 현재 구입한 도메인에 1차적으로는 연결되어 SSH와 Filezilla 연결은 확인했으나, 여기에 HTTPS 연결을 위해 Let's Encrypt 공인인증서를 연결하고, 발생할 수 있는 수많은 문제점들을 개선해야 합니다.

     

    셋째, Heroku 사용 시에는 Config Vars라고 하는 환경변수 설정이 가능하여 API키나 DB 관련 데이터들의 변수를 여기에 저장했는데, Heroku 환경에서 벗어나니, 이 부분을 다 일일이 해당 Key값으로 변경하거나 대체할 수 있는 방법을 찾아야 합니다. 현재는 dotenv라는 NPM 패키지가 있는 것을 확인하여 이걸로 해결할 수 있을 것으로 기대하고 있습니다.

     

    넷째, MySQL로 작성된 쿼리문을 모두 MongoDB 코드로 변경하여야 합니다. 지난번에 MySQL -> MongoDB 코드 작업만 해도 꽤나 머리가 아팠었는데 코드가 더 많아진 상황에서 반대로 할 생각을 하니 아득하긴 한데, 이번 기회에 너무나도 복잡해진 MySQL DB 구조를 최대한 중복도를 낮추고 간단하게 개선해보려고 합니다. 그리고 기능적인 면에서도 몇몇 가지를 변경시켜보려 합니다.

     

    현재 생각나는 큰 문제점으로는 요 네 가지 정도가 되는 것 같은데, 꽤나 할게 많은 것 같습니다. 그리고 Heroku에서 제공하는 편리한 점들이 꽤나 많았다는 걸 깨달았습니다. 사실 AWS의 Lightsail에서도 이런 게 있지 않을까 했는데, 간소화된 EC2 서버 같더군요.

    댓글 0

Designed by Tistory.