완성된 개발물을 배포해보자!
클라우드 컴퓨팅은 IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것을 말한다. 물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신 클라우드 공급자로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 접근할 수 있다.
AWS는 이러한 클라우드 컴퓨팅을 지원하는 거대 플랫폼이다.
신규계정에서 12개월간 무료로 사용할 수 있다. 그러나 사용량이 한도를 초과하면 표준요금이 부과된다. 따라서 비용 발생을 막기위해 AWS 예산 프리 티어 사용량 알림을 사용해서 만일의 상황을 대비하면 좋을 것 같다.
빠르다, 규모의 경제, 이런 말 말고 일단 써보자.
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에 연결된다.
먼저 npm i
를 하기전에 node
를 설치해야한다.
sudo apt-get update
sudo apt-get install -y build-essential
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash --
sudo apt-get install -y nodejs
이후 노드 버전과 npm버전을 확인 후 설치를 확인한다.
확인 후 npm i
를 입력한다.
dependencies가 설정이 완료되고 이제 npm run build
를 통해 빌드해 볼 수 있다.
wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.11-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.11-1_all.deb
sudo apt-get update
sudo apt-get install mysql-server
sudo su
mysql_secure_installation
y
입력이렇게 설치가 끝난다. 출처
mysql을 사용하려면
service mysql status
로 현재 상태를 알 수 있고, service mysql stop
로 중단, service mysql start
로 시작할 수 있다.
접속하려면 sudo mysql -u root -p
를 입력 후 설정한 비밀번호를 입력하면 된다.
front는 Next js
를 사용중이기 때문에 next build
를 했다.
back은 node index
를 통해 실행했다.
그런데!
back에서 오류가 난다.
이유는 바로 .env로 설정해놓은 값이 gitignore로 등록되면서 AWS에는 파일이 존재하지 않기 때문에 오류가 뜬 것이다.
vim .env
를 입력해보자
위와 같은 에디터가 콘솔창에 뜬다. 이후 a를 입력하면 입력모드로 바뀌게 되고 .env파일을 작성해주면 된다.
입력 후 esc버튼을 누르고 :wq
를 누르면 저장(w)하고 나가지게(q) 된다.
이후 다시 콘솔창에 ls -a
를 입력하면 .env가 있는 걸 볼 수 있다.
참고로 리눅스에서 파일이나 폴더 앞에
.
이 있는 경우 숨김 폴더이고,-a
를 입력해야ls
를 했을 때 확인할 수 있다.
이게 무슨 말인가?
back에서 연결한 shell이 꺼지면 aws에서 부여한 ip로의 접속이 끊긴다.
왜냐면 node는 foreground process라서 그렇다.
아니 그러면 shell을 계속 켜놔야 하는거야?
pm2를 이용하면 background로 실행이 되며, 에러를 로그에 기록하고 서버가 죽으면 서버를 자동으로 재시작해준다.
npm i pm2
vim package.json
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 해상도에서 어떻게 작동할지 험난한 여정을 이제 시작한 것이다. 드디어 휴대폰에서도 태블릿에서도 내가 개발한 프로젝트를 만날 수 있었지만 너무 부족하다.
프로젝트 첫 시작할 때 마음가짐을 다시금 가질 때이다.
다시 처음으로.