AWS에 배포하기

개발자 왜?전·2020년 11월 14일
0
post-thumbnail

완성된 개발물을 배포해보자!

AWS가 뭐야?

클라우드 컴퓨팅

클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것을 말한다. 물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신 클라우드 공급자로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 접근할 수 있다.

AWS는 이러한 클라우드 컴퓨팅을 지원하는 거대 플랫폼이다.

왜?

프리티어를 이용해보자

신규계정에서 12개월간 무료로 사용할 수 있다. 그러나 사용량이 한도를 초과하면 표준요금이 부과된다. 따라서 비용 발생을 막기위해 AWS 예산 프리 티어 사용량 알림을 사용해서 만일의 상황을 대비하면 좋을 것 같다.

기타

빠르다, 규모의 경제, 이런 말 말고 일단 써보자.

어떻게?

EC2 인스턴스 생성

EC2는 독립된 컴퓨터를 임대해주는 시스템이다.

먼저 서울 리전(지역)을 선택해주자

리전은 서버의 위치를 말하는 것으로 내가 서비스하려는 상품의 주 고객층의 위치와 같을수록 더 빠른 서비스 제공이 가능하다.

이후 EC2를 사용하여를 클릭하자.

이후 화면은 AMI, 운영체제를 선택하는 화면이 나온다. 이후 Ubuntu server를 선택

클릭 후 가용한 프리티어 상품은 딱 하나다. 선택해주자.

이후 검토 및 시작이 아니라 인스턴스 세부 정보 구성을 누르자.

3번탭인 인스턴스 구성 탭이 뜰텐데 프리티어에서는 고려할 사항이 많지 않으니 패스해준다. 그리고 6번 보안 그룹 구성에서 규칙추가를 해준다.

이렇게하면 HTTP와 HTTPS의 모든 IP에서 접근이 가능하다. SSH는 Secure Shell Protocol로 원격지의 shell을 안전하게 제어하기 위해 내IP로 설정해두었다. 설정 후 검토 밑 시작을 누른다. 누르면 키페어 관련하여 창이 뜬다.

비밀번호 사용시 해킹위험이 크기 때문에 키페어를 통해 연결하도록 만들어졌다. 또한 해당 키페어는 한 번 발급시 절대 재발급이 안되니 주의 해야한다. 발급 받은 키페어는 키페어이름.pem로 이루어져있으며 해당 키페어는 안전한 장소에 보관해야 한다. 키페어는 AWS에서 .ssh폴더에 보관하도록 유도하고 있다.

이후 서비스 - 컴퓨팅 - EC2에 들어가면 해당화면을 볼 수 있다.

추가적으로 실행중인 인스턴스에 들어가면 아래화면이 나온다. 아무것도 없다고 걱정하지 말자 아직 준비중일 것이다.(조금 기다리면 뜬다, 그것도 급하면 인스턴스 상대: running에 X 버튼을 누르자)

인스턴스 연결

실행중인 인스턴스에서 생성한 인스턴스를 클릭 후 연결을 누르면 해당 창이 나온다.

해당 창에서 예:ssh -i ~~~~~라고 나온 부분을 복사한다.

프로젝트 폴더로 터미널을 이동 후 복사 한 내용을 입력한다. 만약 .ssh 폴더에 pem을 넣어뒀을 경우 복사한 내용에서 "./.ssh/~~.pem"으로 바꿔준다.

그런데!

이와 같은 에러가 뜬다면

chmod 400 pem이 있는 경로를 입력하여 권한을 막아주면 된다.

이후 다시 복사한 내용을 입력하고 yes/no/[fingerprint]를 물어본다면 yes를 입력하면 된다. 생성한 인스턴스 ubuntu에 연결된다.

ubuntu에서 node 사용하기

먼저 npm i를 하기전에 node를 설치해야한다.

  1. sudo apt-get update
  2. sudo apt-get install -y build-essential
  3. curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash --
  4. sudo apt-get install -y nodejs

이후 노드 버전과 npm버전을 확인 후 설치를 확인한다.

확인 후 npm i를 입력한다.

dependencies가 설정이 완료되고 이제 npm run build를 통해 빌드해 볼 수 있다.

ubuntu에서 mysql 8버전 사용하기

  1. wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.11-1_all.deb
  2. sudo dpkg -i mysql-apt-config_0.8.11-1_all.deb
  3. sudo apt-get update
  4. sudo apt-get install mysql-server
  5. sudo su
  6. mysql_secure_installation
  7. 비밀번호 설정 및 y입력

이렇게 설치가 끝난다. 출처

mysql을 사용하려면

service mysql status로 현재 상태를 알 수 있고, service mysql stop로 중단, service mysql start로 시작할 수 있다.

접속하려면 sudo mysql -u root -p를 입력 후 설정한 비밀번호를 입력하면 된다.

front, back 서버 실행하기

front는 Next js를 사용중이기 때문에 next build를 했다.
back은 node index를 통해 실행했다.

그런데!

back에서 오류가 난다.

이유는 바로 .env로 설정해놓은 값이 gitignore로 등록되면서 AWS에는 파일이 존재하지 않기 때문에 오류가 뜬 것이다.

vim을 사용해 .env 만들기

vim .env를 입력해보자

위와 같은 에디터가 콘솔창에 뜬다. 이후 a를 입력하면 입력모드로 바뀌게 되고 .env파일을 작성해주면 된다.

입력 후 esc버튼을 누르고 :wq를 누르면 저장(w)하고 나가지게(q) 된다.

이후 다시 콘솔창에 ls -a를 입력하면 .env가 있는 걸 볼 수 있다.

참고로 리눅스에서 파일이나 폴더 앞에 .이 있는 경우 숨김 폴더이고, -a를 입력해야 ls를 했을 때 확인할 수 있다.

node는 foreground process다.

이게 무슨 말인가?

back에서 연결한 shell이 꺼지면 aws에서 부여한 ip로의 접속이 끊긴다.
왜냐면 node는 foreground process라서 그렇다.

아니 그러면 shell을 계속 켜놔야 하는거야?

pm2 이용하기

pm2를 이용하면 background로 실행이 되며, 에러를 로그에 기록하고 서버가 죽으면 서버를 자동으로 재시작해준다.

  1. 먼저 pm2를 back 인스턴스에 설치해준다.
    npm i pm2
  2. 설치가 완료되었으면 vim을 이용해 package.json 파일을 연다.
    vim package.json
  3. package.json에서 scripts에서 "start": "pm2 start index.js"로 바꿔준다.
  4. 저장 후 sudo npm start를 입력하면 pm2로 실행된다.

실행하면 background process로 실행되고 다른 명령어 실행이 가능하다.

추가적으로

npx pm2 monit을 통해 로그를 아래와 같이 확인할 수 있다.

종료하기 위해서는 sudo npx pm2 kill을 하면 된다.
로그를 보려면 sudo npx pm2 logs,
에러로그는 sudo npx pm2 logs --error를 입력하면 된다.
재시작하려면 sudo npx pm2 reload all
실행중인 프로세스를 보려면 sudo npx pm2 list

이후 CORS 등 자질구레한 사항을 해결해야 한다.

이제 시작

잠깐 접해본 AWS는 나에게 이제 진짜 웹 개발을 하고 있구나라는 생각을 주었다. mac에서 개발한 나는 window에서 어떻게 보여질지, 1300해상도에서 작업한 나는 1980 해상도에서 어떻게 작동할지 험난한 여정을 이제 시작한 것이다. 드디어 휴대폰에서도 태블릿에서도 내가 개발한 프로젝트를 만날 수 있었지만 너무 부족하다.

프로젝트 첫 시작할 때 마음가짐을 다시금 가질 때이다.

다시 처음으로.

profile
하고 싶어 개발하는, 능동개발자

0개의 댓글