[DevOps] 스프링 서버 모놀리식 배포 - EC2 생성, GitHub에 코드 배포및 EC2에 옮기기

Doccimann·2022년 4월 12일
0

글을 본격적으로 작성하기 전

이번 포스트는 이전까지 작성한 스프링부트 서버를 ec2를 이용해서 배포하는 방법에 대해서 알아보겠습니다. 이를 위해서 이번 포스트에서 다룰 주제는 다음들과 같습니다.

  • EC2 생성 방법 (저는 VPC를 만들어둔게 있어서 개인 VPC를 사용해서 실습해볼 예정이지만, Default VPC를 이용해서 따라하셔도 문제는 없습니다!)
  • EC2 설정
  • GitHub Repository에 코드 배포
  • GitHub에 DeployKey를 등록해서 ec2에 git clone을 통해서 코드 받아오기

본격적으로 시작해봅시다!


우선 EC2 인스턴스를 하나 만들겠습니다. 그림을 통해서 알려드릴테니 천천히 따라오세요

일단 이미지부터 선택을 해봅시다. 저는 Amazon Linux 기준으로 설명을 드릴 예정입니다.

일단 여기서 Amazon Linux 2 이미지를 선택해줍니다.

다음으로는 인스턴스 유형을 선택해줍니다. 저는 프리티어 기준으로 설명을 드릴 예정이기에 t2 micro를 선택하겠습니다.

AWS 최초 가입시 1년동안 프리티어의 혜택을 받을 수 있습니다. 프리티어의 혜택을 통해서 EC2의 t2.micro 인스턴스 이용시간 매달 750시간 무료라는 헤택을 받을 수 있습니다! 개이득

여기서 t2 그룹의 t2.micro 유형의 인스턴스를 선택해주면됩니다.

여기서 네트워크및 서브넷을 설정만 하면 그 외에는 설정할 것이 없습니다. 네트워크 및 서브넷은 최초에 Default subnet으로 설정이 되어있기 때문에 따로 설정한 vpc가 존재하지 않으면 그대로 두고 넘어가시면 됩니다!

따로 VPC를 생성할 때는 인터넷 게이트웨이를 하나 만들어서 VPC에 붙여야만 VPC 내부에서 외부의 인터넷으로 나가는 통로가 만들어집니다.
그리고 서브넷에 라우팅테이블로 인터넷 게이트웨이를 이어주어야만 서브넷 내부에 ec2를 만들더라도 외부와 통신이 되기 때문에 이러한 점은 참고를 해주시길 바랍니다!

대충 따로 VPC를 만들면 일이 귀찮아지니 일단은 따라오라는 뜻

그 다음에는 딱히 설정할 것은 없긴한데, 대신에 보안그룹 설정은 엄청 중요합니다. 이거 설정 잘못하면 헤맵니다!

저희가 인바운드 규칙으로 열어야할 포트는 22번 포트(SSH 포트)와 80번 포트(HTTP 포트)입니다.

22번 포트의 경우 저희는 pem키를 통해서 접속을 해야하기 때문이고, 80번 포트의 경우 저희는 http 통신을 통해서 서버에 정보를 날리기 때문에 80번 포트를 개방하는 것입니다.

그 후에 키페어를 지정하고 인스턴스를 시작해주면 됩니다.

여기서 생성한 키페어는 외부에 노출하면 안됩니다. 노출하면 무슨 일이 생길지도 몰라요!

인스턴스가 생성되고 검사를 마치기까지 대충 4분이 걸립니다.

인스턴스가 생성 완료되면 접속을 해주도록 하겠습니다. 저는 mac을 사용하고 있으며, pem key의 경우 root directory의 ssh라는 폴더에 저장을 해둔 상태입니다.

이제 인스턴스에 접속을 하겠습니다.

mac기준 터미널에서 ec2에 접속하는 방법은 다음과 같습니다.

ssh -i <directory of your pem key> ec2-user@<your public ip of instance>

저의 경우에는 ssh 폴더로 이동해서 pem키에 접근을 하였고, 제 인스턴스의 public ip는 52.78.182.130 이기 때문에 아래와 같이 커맨드를 입력하였습니다.

cd ssh
ssh -i ./brianDYKim.pem ec2-user@52.78.182.130

이렇게 ec2 인스턴스에 접속을 완료하는 모습을 확인할 수 있습니다.

다음으로, ec2 instance를 설정하겠습니다.


EC2 인스턴스를 설정하겠습니다.

우선 yum 패키지를 이용해서 업데이트부터 진행합니다.

sudo yum update -y

그 다음에 jdk를 설치하겠습니다. 저희는 java 11버전으로 진행을 하였기때문에 jdk11을 설치해야합니다.

아래의 커맨드를 따라 입력합니다.

# aws coreetto 다운로드
sudo curl -L https://corretto.aws/downloads/latest/amazon-corretto-11-x64-linux-jdk.rpm -o jdk11.rpm

# jdk11 설치
sudo yum localinstall jdk11.rpm -y

# jdk version 선택
sudo /usr/sbin/alternatives --config java

# java 버전 확인
java --version

# 다운받은 설치키트 제거
rm -rf jdk11.rpm

위의 커맨드를 모두 입력해보시면 jdk 11버전이 성공적으로 설치된 모습을 확인할 수 있습니다.

다음으로 GitHub Repository에 Spring 코드를 배포하는걸 해봅니다.


GitHub Repository에 코드를 배포해봅시다

IntelliJ IDEA 기준으로 GitHub에 Repository로 코드를 배포하는건 매우 간단합니다.

  • VCS -> Share Project on GitHub 를 클릭합니다.
  • Repository name을 설정하고, private/public 여부를 설정한 뒤 코드를 올립니다. 저는 여기서 private을 설정했습니다.

그 후에 GitHub로 들어가서 확인해보시면 Repository가 생성되어있는 모습을 확인할 수 있습니다.


GitHub에 Deploy Key를 등록합시다.

일단 ec2 instance에 접속해서 아래의 커맨드를 입력합니다.

ssh-keygen -t rsa

위의 커맨드를 통해서 deploy key를 하나 발급받을 수 있는데, 내용은 아래의 커맨드를 통해서 확인 가능합니다.

cd .ssh
cat id_rsa.pub

위의 커맨드를 설명드리자면, rsa키를 발급받으면 .ssh 폴더에 저장이 되어있습니다. 그래서 .ssh 폴더에 들어간 후에 id_rsa.pub에 저장된 키를 터미널에 출력을 해주는 것입니다.

출력된 키를 복사해서 project settings에 붙여줄 차례입니다. 일단 출력된 키를 복사해줍니다.

그리고 이 키를 repository에 들어가셔서 Settings -> Deploy Keys에 들어가서 Add deploy key라는 버튼을 클릭해서 등록해주면 됩니다. 아래의 그림만 잘 따라와주세요.

Repository에 키를 등록하는게 끝났다면, 이제 계정에 deploy key를 등록할 차례입니다.

위의 과정과 비슷하니 잘 따라오시면 됩니다. 우선 ec2 instance에 들어가서 아래의 커맨드를 입력합니다.

ssh-keygen -t rsa -C <your github email>

중간에 overwrite를 할것이냐 묻는게 있을텐데, overwrite를 허용해주면 됩니다. 그 후에 위와 마찬가지로 id_rsa.pub의 내용을 긁어와서 복사합니다.

cat id_rsa.pub

그리고 이 key를 계정에 등록합니다.

계정 설정에서 Settings로 들어갑니다.

Access에서 SSH and GPC Keys로 들어갑니다

여기서 New SSH Key를 통해서 키를 등록합니다.

위의 그림들과 같은 과정이 끝났다면, 인스턴스에 프로젝트를 가져올 시간입니다. 우선 ssh 폴더에서 벗어나서 메인 디렉토리에 project를 긁어오도록 하겠습니다.

아래의 커맨드를 입력합니다.

# 이전의 디렉토리로 옮겨가기
cd ..
# git 설치
sudo yum install git -y
# git clone
git clone <your address of repository (SSH Address)>

git clone 할 때의 주소는 이렇게 얻을 수 있습니다.

Code -> SSH -> 주소 복사

그러면 프로젝트가 ec2에 안정적으로 복사되는 모습을 확인할 수 있습니다.


이번 포스트까지 ec2를 생성하고, 어떻게 작성한 프로젝트를 ec2로 옮기는지까지 알아보았습니다. 다음 시간에는 쉘스크립트를 작성해서 빌드와 배포의 자동화까지 해보겠습니다.

다음 포스트에서 뵙겠습니다.

profile
Hi There 🤗! I'm college student majoring Mathematics, and double majoring CSE. I'm just enjoying studying about good architectures of back-end system(applications) and how to operate the servers efficiently! 🔥

0개의 댓글