[AWS] SpringBoot 프로젝트 EC2 배포하기

정재현·2024년 3월 14일
0

AWS

목록 보기
1/4
post-thumbnail

방법

… AWS 인스턴스 띄운 후(참고자료)

Github에 있는 프로젝트를 AWS EC2에 git clone을 통해 내려받아 jar 파일 빌드하기

배포용 버전

Gradle-groovy
Java : 17
Gradle : 8.1
Spring Boot 플러그인 : 3.0.5

Thymeleaf : implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'

// MySQL 대신 h2 DB 로 대체 (추후에 MySQL 연동)
DB : H2 (runtimeOnly 'com.h2database:h2')

배포전 주의사항

  • 만약 테스트코드가 통과되지 않는다면 배포가 안될 수 있기 때문에 배포 전에 확인해봐야한다.
  • 특히 SpringBootTest에서 contextLoads 함수가 비어있으면 jar 파일을 만들지 못해 배포가 불가능하니 출력문이라도 추가해주자!

1. AWS 세팅하기

AWS Region 설정

  • 우측에서 지역을 서울로 설정해주자!
  • 만약 만들어둔 인스턴스가 없다면 지역을 확인해보자!

인스턴스 생성하기

  • 좌측 상단에 EC2 를 입력해서 EC2 대시보드 로 이동하자
  • EC2 대시보드에서 인스턴스 시작을 눌러 인스턴스를 생성해보자

원하는 인스턴스 명 지어주기

OS 설정

  • 여기서는 Ubuntu 64비트(x86) 으로 진행을 할 것이다.
  • AMI 의 경우 프로젝트의 크기에 따라 자유롭게 설정하면 되며, 여기서는 프리티어 사용 가능한Ubuntu Server 22.04 LTS (HVM), SSD Volumn Type 을 사용할 것이다.
    • 프리티어가 아닌 다른 AMI 는 과금이 발생할 수 있으니 주의하자.

인스턴스 유형 선택

  • 인스턴스 유형 또한 프리티어에서 사용가능한 t2,micro 를 사용할 예정이다.

키 페어 생성하기

키 페어는 EC2 인스턴스에 원격으로 접속하기 위해 필수적으로 필요하기 때문에 생성해줘야한다.
또한, 키 페어는 한번 생성하면 두번다시 다운로드 받을 수 없기 때문에 잘 보관하고 있어야한다.

  • 우측의 새 키 페어 생성 혹은 이미 존재한다면 선택

  • 다음과 같이 키 페어 이름을 설정해주고 생성해주고 다운을 받아두자.

네트워크 세팅

보안 그룹은 방화벽에 관한 내용으로 추후에 따로 생성해 세팅할 예정이다. 만약 기존에 보안 그룹을 설정해두었다면 기존 보안 그룹을 사용해도 된다.

  • SSH 트래픽 허용 부분 체크하기
    • EC2 인스턴스를 생성하고 생성한 인스턴스에 로컬 머신(노트북, 데스크탑)으로 접속하기 위한 부분으로써 이때 SSH 통신을 사용한다.
    • SSH 통신을 할 때 ip 제한을 어떻게 할것인지에 관한 내용으로
      • 고정된 ip로만 접근할 경우에는 내 ip 를 선택해주면 된다.
      • 이동하면서 사용할 경우 위치무관(0.0.0.0/0)으로 설정해주면 된다.

해당 설정은 추후에 보안 그룹 탭에서 변경 가능하므로 넘어가도 좋다.

스토리지 세팅

  • 프리티어의 경우 최대 30 GIB 까지 지원해주므로 30으로 설정

인스턴스 최종 생성

  • 우측의 인스턴스 시작 을 눌러서 최종 생성을 완료하자

인스턴스 생성이 완료된 모습

  • 다음과 같은 창이 나오고 EC2 대시보드-인스턴스로 이동하면 인스턴스가 추가된걸 확인할 수 있다.

2. 보안그룹 설정하기

생성된 인스턴스를 눌러 인스턴스 요약으로 들어가보자

보안 그룹이란?
AWS 에서 제공하는 방화벽으로 인바운드 규칙, 아웃바운드 규칙이 존재

  • 인바운드 규칙(inbound) : 외부에서 EC2나 RDS 등의 내부로 접근할때 사용되는 방화벽 규칙
  • 아웃바운드 규칙(outbound) : EC2나 RDS 등의 내부에서 외부로 접근할때 사용되는 방화벽 규칙

인스턴스 요약의 보안 을 눌러 보안 그룹 확인

보안 그룹으로 이동

  • 좌측의 네트워크 및 보안 - 보안 그룹 혹은 인스턴스 요약 - 보안 - 보안 그룹 을 눌러서 이동

보안그룹 생성하기(이미 존재한다면 생략 가능)

  • 보안 그룹 생성을 눌러 새로운 보안 그룹을 생성하기

그룹 이름과 설명 작성

인바운드 규칙 설정

  • 인바운드 규칙 - 규칙 추가를 눌러 다음과 같이 인바운드 규칙을 설정하자
  • 이때 0.0.0.0/0Anywhere-IPv4 이다.

위에서부터 순서대로

  • 사용자 지정 TCP : 스프링 부트 기반 서버를 열어줄것이기 때문에 사용자 지정으로 8080 포트를 설정해준 뒤 url을 아는 누구나 접속할수있도록 Anywhere-IPv4 로 설정
  • SSH : 원격 EC2 인스턴스에 접속할때 사용되는 ssh 관련 방화벽으로 자택의 고정 ip가 아닌 Anywhere-IPv4 로 설정
    • ssh는 기본 포트 연결로 22번 포트를 사용
  • HTTP : HTTP 연결시 사용
  • HTTPS : HTTPS 연결시 사용 (HTTPS 를 사용하려면 별도의 과정이 필요한데 그 과정은 여기서는 생략함)
    아웃바운드 규칙은 따로 세팅해주지 않고 기본세팅으로 설정

보안 그룹 설정하기

  • 다시 생성한 인스턴스의 인스턴스 요약으로 돌아와서 우측 상단의 작업 - 보안 - 보안 그룹 변경 클릭
  • 다음과 같이 생성한 보안 그룹을 선택해주고 저장해주면 된다.
  • 다음과 같이 인바운드 규칙이 추가된걸 확인할 수 있다.

3. EC2 우분투 콘솔에 접속하기

이제 EC2 생성을 완료했으니 Ubuntu 에 접속을 해야하는데 접속하는 방법으로는 2가지 방법이 있다.
1. EC2 를 생성할때 다운받은 ssh 키를 이용해 원격 접속하기 (window 의 경우 별도 작업 필요)
2. EC2 대시보드에서 접근(여기서는 이 방법을 사용할 예정)

인스턴스 요약에서 연결 클릭

  • 다음과 같은 창에서 연결을 눌러 Ubuntu와 연결하기
  • Ubuntu 가 연결된 모습

4. 우분투 콘솔에서 git ssh 연동후 git clone 하기

정적 파일 배포는 방식이 두 가지가 있는데 여기서는 1번 방식 사용
1. EC2에서 프로젝트 git clone 후 실행하기
2. 로컬 머신에서 jar 파일하여 EC2에 복사 후 실행

Ubuntu에서의 복사/붙여넣기는 ctrl+insert/shift+insert 를 이용하면 된다.

Git 설치하기

sudo apt-get install git

Git 설치 확인

git --version

Github에서 SSH KEY 생성하기

아래 명령어를 통해 .ssh 디렉토리에서 키페어를 생성하게 되고 id_res.pub 파일이 생성됩니다.

cd ~/.ssh
ssh-keygen -t rsa -C github계정 메일(example@github.com)

id_rsa.pub 을 통해서 ssh 키페어 확인

cat id_rsa.pub

Github 에 ssh 키페어 추가

  • cat 명령어로 id_rsa.pub 파일을 출력후 이것을 깃헙 ssh에 저장을 해야 함
  • github -> setting -> SSH and GPG keys 탭으로 이동후 new SSH key 버튼을 클릭
  • 타이틀에는 임의로 정해주시면 되고 key 부분에 복사한 위에서 출력한 id_rsa.pub 값을 넣어주면 된다.

git clone 하기

  • Github 레포지토리로 이동후 code 버튼 -> ssh 탭을 누르고 나온 주소를 복사

  • EC2에 접속한 터미널에서 git clone할 디렉토리로 이동후 복사한 값을 아래 명령어에 포함시켜 입력

    git clone [ 복사한 github ssh 주소 ]

  • 프로젝트 파일이 생성된 모습

5. 내려받은 파일로 빌드하고 jar 파일 실행시켜 스프링 부트 서버 실행시키기

시스템 패키지 업데이트하기

  • 자바 17이 없을수도 있기 때문에 미리 최신화

    sudo apt update

자바(17 버전) 설치하기

sudo apt install openjdk-17-jdk

build 를 위한 gradelw 의 권한 추가

  • 먼저 생성한 파일로 이동

  • 파일 권한 추가

    chmod +x ./gradlew

gradlew 파일 실행

./gradlew build

빌드가 성공적으로 끝났다면 build -> libs 디렉토리가 새롭게 생기고

// jar 파일이 생성되어 있음
cd build/libs			

ex.
cd build/libs

서버 실행파일을 이용해 백그라운드로 서버 실행

// 2개의 파일이 존재하는데 오른쪽 파일을 실행하면 된다.
nohup java -jar [생성한 파일]-0.0.1-SNAPSHOT.jar &	

ex.
nohup java -jar wuzuzu-0.0.1-SNAPSHOT.jar &

서버가 백그라운드에서 잘 돌아가고 있는지 확인

ps

서버가 돌아가고 있는 내용을 실시간으로 확인하기

tail -f nohup.out // 여기서 오류 확인도 가능

배포가 되었는지 확인하기 위해 CMD 에서 telnet 에 접근해보기

telnet [public 주소] 8080

백그라운드로 돌아가고 있는 파일 확인

jobs

백그라운드로 돌아가고 있는 파일 중지

fg %[jobs로 확인한 번호]
ctrl + c


profile
공부 기록 보관소

0개의 댓글