[졸업프로젝트] AWS를 이용한 배포

미루미·2023년 5월 16일
0

졸업프로젝트

목록 보기
2/2

졸업프로젝트도 마무리를 하는 단계에 접어들었다. 아직 완성하진 못했지만, 일단 지금까지 진행된 것을 배포하고자 한다. 책 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 참고하여 AWS를 이용한 배포를 할 수 있었다.

팀의 프로젝트는 백엔드에서 Node.js를 사용하고, 데이터베이스는 Mysql을 사용하여 워크벤치에서 작업하였다. 개발은 Visual Studio Code에서 하였으며 맥북을 사용하고 있다.
책에서는 스프링부트와 MariaDB, 그리고 인텔리제이를 사용하고 있지만, 크게 다른 내용이 없어 충분히 적용할 수 있었다.

1. EC2는 AWS의 관리형 가상 서버

AWS에 회원가입, 로그인을 차례대로 하고, EC2를 생성한다. 계정 생성은 생략하였다.

EC2: Elastic Computer Cloud의 줄임으로 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버이다.

  1. 리전 변경 (서울로)
  2. EC2 검색하여 인스턴스 생성 > 인스턴스 시작

  1. 이름 및 태그
    서비스의 이름으로 값을 넣어주었다(서비스의 인스턴스임을 알 수만 있다면 상관없다). 이때 Name이라는 태그를 키로 주면, 이후에 인스턴스의 이름을 Name이라는 키로 쉽게 확인 가능하다.

  1. AMI 선택
    AMI(Amazon Machine Image)를 Amazon Linux AMI로 선택한다.
    AMI는 EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔 것이다. 가상머신으로 리눅스를 설치할 때를 떠올리면 쉽다.

  1. 인스턴스 유형 선택
    General purpose / t2.micro (프리티어 사용 가능!)

  1. 키 페어 생성
    인스턴스로 접근하기 위해 필요한 pem 키는 비밀키이다. 인스턴스는 지정된 pem 키와 매칭되는 공개키를 가지고 있다. 이 pem 키는 절대 유출되면 안 되므로 키 페어를 다운로드하여 잘 관리할 수 있는 디렉토리로 저장한다!
    (아래의 생성 버튼을 누르면 다운로드 된다)

  2. 스토리지 선택
    최대치인 30기가로 변경한다.

  1. 보안 그룹 생성
    보안 그룹은 방화벽을 말한다. 보안 그룹을 유의미한 이름으로 변경하고, 내 IP를 기본적으로 추가한다. (다른 장소에서 접속할 때는 그 장소의 IP를 다시 SSH로 추가한다) 현재 프로젝트의 기본 포트인 3000을 추가한다.

2. EC2 인스턴스의 IP를 고정해주는 탄련적 IP에 대한 소개와 설정 방법

인스턴스도 하나의 서버이기 때문에 IP가 존재한다. 인스턴스 생성 시에 항상 새 IP를 할당하는데, 같은 인스턴스를 중지하고 재시작할 때도 새 IP가 할당된다. 매번 IP 주소가 변경되는 것은 너무 번거로우므로 고정 IP를 갖게 한다. 이러한 AWS의 고정 IP를 EIP(Elastic IP), 탄력적 IP라고 한다.

  1. 탄력적 IP 발급
    네트워크 및 보안 > 탄력적 IP > 새 주소 할당 > 할당

  2. 탄력적 IP와 EC2 주소 연결
    작업 > 주소 연결 > 연결

3. EC2 인스턴스 접근을 위한 pem 키 사용 방법

  1. pem 키 복사
    이전에 다운로드 받은 키페어 pem파일을 ~/ .ssh/로 복사한다. 디렉토리 아래에 옮겨놓으면 ssh 실행 시 pem 키 파일을 자동으로 읽기 때문에 매번 pem 키 위치를 길게 명령어로 입력할 필요가 없어진다.
cp pem 키를 내려받은 위치~/.ssh
  1. pem 키 권한 변경
chmod 600 ~/.ssh/pem 키 이름
  1. config 파일 생성
    pem 키가 있는 ~/.ssh 디렉토리에 config 파일을 생성한다. 그리고 다음과 같이 수정한다.
Host 본인이 원하는 서비스명
	HostName ec2의 EIP 주소
    User ec2-user
    IdentityFile ~/.ssh/pem 키 이름

Host를 앞으로 접속할 키 값으로 보면 된다. -> ssh HostName 명령어로 EC2에 접속할 수 있다

  1. config 파일 권한 변경
chmod 700 ~/.ssh/config
  1. 접속
ssh config에 등록한 서비스명 

위의 명령어들을 사용한 ssh 실행까지의 캡쳐화면이다.

4. RDS는 AWS의 관리형 데이터베이스 서비스

RDS는 Relational Database Service의 줄임으로 AWS에서 지원하는 클라우드 기반 관계형 데이터베이스를 의미한다.

AWS에서는 데이터베이스를 직접 설치했을 때 해야 하는 작업들을 모두 지원하는 서비스 RDS를 제공한다. RDS는 조정 가능한 용량을 지원하여 추가 비용을 지불한다면 데이터의 양에 있어 유동적으로 대응할 수 있다.

5. RDS로 서비스를 하는 데 필요한 여러 파라미터 설정들

  1. RDS 인스턴스 생성

Mysql을 사용하고 있으니 똑같이 선택한다.

템플릿은 프리티어로, 스토리지는 20으로 할당한다.
설정 부분에서 사용자 정보를 등록한다. 마스터 사용자 이름과 마스터 암호는 이후 데이터베이스의 Username과 Password로 사용되는 것이므로 기억해두어야 한다.

네트워크에서 퍼블릭 액세스 가능 여부를 '예'로 체크한다.(외부 접근 허용을 위해 필요하다)

이 부분은 이후 보안 그룹에서 지정된 IP만 접근하도록 할 수 있다.
데이터베이스 옵션에서는 포트를 3306으로 설정하였다.

데이터베이스가 생성되었다면 파라미터 설정을 한다.

  1. RDS 운영환경에 맞는 파라미터 설정

2-1. 파라미터 그룹 생성
파라미터 그룹 > 파라미터 그룹 생성

파라미터 그룹 패밀리는 이전 단계에서 생성한 Mysql와 같은 버전의 DB 엔진으로 선택한다.

2-2. 파라미터 그룹 편집

  • time_zone: Asia/Seoul
  • character_set
    character 항목들: utf8mb4 (utf8과 달리 이모지 저장 가능)
    collation 항목들: utf8mb4_general_ci
  • max_connections: 150 (인스턴스 사양에 따라 자동으로 정해진다)

2-3. 파라미터 그룹을 데이터베이스에 반영: 데이터베이스 수정 > DB 파라미터 그룹을 변경한다

이 수정사항은 즉시 적용한다

2-4. 데이터베이스 재부팅 (파라미터 그룹의 정상 작용)

  1. 로컬 PC에서 RDS 접근

3-1. RDS 보안 그룹에 내 PC의 IP 추가
RDS > 데이터베이스 에서 데이터베이스를 누르면 상세 정보 페이지로 이동한다. 연결&보안 > 보안의 VPC 보안 그룹을 확인한다.

보안 그룹을 누르니 default만 보이도록 필터링 된 보안 그룹 페이지로 이동하였다.

EC2 > 보안 그룹
EC2에 사용된 보안 그룹의 그룹 ID를 복사하여, RDS 보안 그룹의 인바운드 규칙에 추가한다. 그리고 본인의 IP도 추가한다. 인바운드 규칙 유형으로 MYSQL/Aurora를 선택하면 포트번호가 자동으로 3306으로 선택된다.

두 번째 규칙은 EC2의 보안 그룹을, 세 번째 규칙은 현재 내 PC의 IP를 추가한 것이다. -> EC2와 RDS 간의 접근이 가능하다.

6. 워크벤치에서 RDS Connection 추가 방법

워크벤치 메인 화면에서 MySQLConnections 옆 + 버튼을 누른다.
아래 사진과 같이 새로운 connection을 만들 수 있다.

  • Hostname: 엔드포인트

  • Port: RDS 생성 시 선택했던 포트번호
  • Username: RDS 생성 시 마스터 사용자 이름
  • Password: RDS 생성 시 마스터 암호

아래의 Test Connection을 해서 성공 시 OK 버튼을 누르면 새로운 Connection이 생성된 것을 볼 수 있다. 여기서

create database 데이터베이스 이름;

으로 새로운 데이터베이스도 만들어주었다.

Node.js 프로젝트에서 데이터베이스 관련 설정을 저장하던 config.json 파일에도 새로운 데이터베이스 정보로 수정한다. 그리고 server를 실행했더니 sql 코드도 잘 실행되어 워크벤치로도 확인이 가능했다.

이렇게 무사히 데이터베이스까지 만들었다.

7. AWS EC2 서비스에 프로젝트를 배포하는 방법

깃허브에서 코드를 받아오기 위해 아래의 코드로 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

쉘 스크립트를 사용하면 이 과정을 더 빠르게 할 수 있다.

profile
미루미루지마

0개의 댓글