졸업프로젝트도 마무리를 하는 단계에 접어들었다. 아직 완성하진 못했지만, 일단 지금까지 진행된 것을 배포하고자 한다. 책 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 참고하여 AWS를 이용한 배포를 할 수 있었다.
팀의 프로젝트는 백엔드에서 Node.js를 사용하고, 데이터베이스는 Mysql을 사용하여 워크벤치에서 작업하였다. 개발은 Visual Studio Code에서 하였으며 맥북을 사용하고 있다.
책에서는 스프링부트와 MariaDB, 그리고 인텔리제이를 사용하고 있지만, 크게 다른 내용이 없어 충분히 적용할 수 있었다.
AWS에 회원가입, 로그인을 차례대로 하고, EC2를 생성한다. 계정 생성은 생략하였다.
EC2: Elastic Computer Cloud의 줄임으로 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다.
키 페어 생성
인스턴스로 접근하기 위해 필요한 pem 키는 비밀키이다. 인스턴스는 지정된 pem 키와 매칭되는 공개키를 가지고 있다. 이 pem 키는 절대 유출되면 안 되므로 키 페어를 다운로드하여 잘 관리할 수 있는 디렉토리로 저장한다!
(아래의 생성 버튼을 누르면 다운로드 된다)
스토리지 선택
최대치인 30기가로 변경한다.
인스턴스도 하나의 서버이기 때문에 IP가 존재한다. 인스턴스 생성 시에 항상 새 IP를 할당하는데, 같은 인스턴스를 중지하고 재시작할 때도 새 IP가 할당된다. 매번 IP 주소가 변경되는 것은 너무 번거로우므로 고정 IP를 갖게 한다. 이러한 AWS의 고정 IP를 EIP(Elastic IP), 탄력적 IP라고 한다.
탄력적 IP 발급
네트워크 및 보안 > 탄력적 IP > 새 주소 할당 > 할당
탄력적 IP와 EC2 주소 연결
작업 > 주소 연결 > 연결
cp pem 키를 내려받은 위치~/.ssh
chmod 600 ~/.ssh/pem 키 이름
Host 본인이 원하는 서비스명
HostName ec2의 EIP 주소
User ec2-user
IdentityFile ~/.ssh/pem 키 이름
Host를 앞으로 접속할 키 값으로 보면 된다. -> ssh HostName 명령어로 EC2에 접속할 수 있다
chmod 700 ~/.ssh/config
ssh config에 등록한 서비스명
위의 명령어들을 사용한 ssh 실행까지의 캡쳐화면이다.
RDS는 Relational Database Service의 줄임으로 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스를 의미한다.
AWS에서는 데이터베이스를 직접 설치했을 때 해야 하는 작업들을 모두 지원하는 서비스 RDS를 제공한다. RDS는 조정 가능한 용량을 지원하여 추가 비용을 지불한다면 데이터의 양에 있어 유동적으로 대응할 수 있다.
Mysql을 사용하고 있으니 똑같이 선택한다.
템플릿은 프리티어로, 스토리지는 20으로 할당한다.
설정 부분에서 사용자 정보를 등록한다. 마스터 사용자 이름과 마스터 암호는 이후 데이터베이스의 Username과 Password로 사용되는 것이므로 기억해두어야 한다.
네트워크에서 퍼블릭 액세스 가능 여부를 '예'로 체크한다.(외부 접근 허용을 위해 필요하다)
이 부분은 이후 보안 그룹에서 지정된 IP만 접근하도록 할 수 있다.
데이터베이스 옵션에서는 포트를 3306으로 설정하였다.
데이터베이스가 생성되었다면 파라미터 설정을 한다.
2-1. 파라미터 그룹 생성
파라미터 그룹 > 파라미터 그룹 생성
파라미터 그룹 패밀리는 이전 단계에서 생성한 Mysql와 같은 버전의 DB 엔진으로 선택한다.
2-2. 파라미터 그룹 편집
2-3. 파라미터 그룹을 데이터베이스에 반영: 데이터베이스 수정 > DB 파라미터 그룹을 변경한다
이 수정사항은 즉시 적용한다
2-4. 데이터베이스 재부팅 (파라미터 그룹의 정상 작용)
3-1. RDS 보안 그룹에 내 PC의 IP 추가
RDS > 데이터베이스 에서 데이터베이스를 누르면 상세 정보 페이지로 이동한다. 연결&보안 > 보안의 VPC 보안 그룹을 확인한다.
보안 그룹을 누르니 default만 보이도록 필터링 된 보안 그룹 페이지로 이동하였다.
EC2 > 보안 그룹
EC2에 사용된 보안 그룹의 그룹 ID를 복사하여, RDS 보안 그룹의 인바운드 규칙에 추가한다. 그리고 본인의 IP도 추가한다. 인바운드 규칙 유형으로 MYSQL/Aurora를 선택하면 포트번호가 자동으로 3306으로 선택된다.
두 번째 규칙은 EC2의 보안 그룹을, 세 번째 규칙은 현재 내 PC의 IP를 추가한 것이다. -> EC2와 RDS 간의 접근이 가능하다.
워크벤치 메인 화면에서 MySQLConnections 옆 + 버튼을 누른다.
아래 사진과 같이 새로운 connection을 만들 수 있다.
아래의 Test Connection을 해서 성공 시 OK 버튼을 누르면 새로운 Connection이 생성된 것을 볼 수 있다. 여기서
create database 데이터베이스 이름;
으로 새로운 데이터베이스도 만들어주었다.
Node.js 프로젝트에서 데이터베이스 관련 설정을 저장하던 config.json 파일에도 새로운 데이터베이스 정보로 수정한다. 그리고 server를 실행했더니 sql 코드도 잘 실행되어 워크벤치로도 확인이 가능했다.
이렇게 무사히 데이터베이스까지 만들었다.
깃허브에서 코드를 받아오기 위해 아래의 코드로 EC2에 깃을 설치한다.
sudo yum install git
설치 후 설치 상태를 확인한다.
git --version
깃이 설치됐다면 git clone으로 프로젝트를 저장할 디렉토리를 생성한다.
mkdir ~/app && mkdir ~/app/step1
생성한 디렉토리로 이동한다.
cd ~/app/step1
깃허브 웹페이지에서 http 주소를 복사해 git clone을 진행한다.
git clone 복사한 http 주소
코드들이 수행되는지 테스트로 검증한다.
./gradlew test
테스트가 실패했다면 수정하고 깃허브에 푸시한 다음 아래의 명령어를 실행한다.
git pull
쉘 스크립트를 사용하면 이 과정을 더 빠르게 할 수 있다.