[AWS] Spring Boot EC2에 배포하기

J-Cheol·2024년 3월 28일

AWS

목록 보기
3/3
post-thumbnail

1. EC2 Git 설치하기


1.1 git 설치

sudo apt-get install git

1.2 git 설치 확인

git --version

1.3 github SSH Key 생성

1.3.1 ssh key 생성

cd ~/.ssh
ssh-keygen -t rsa -C "your_email@example.com"

1.3.2 ssh key 저장 경로 및 이름 설정

ssh-keygen -t rsa -C "your_email@example.com"을 입력하게 되면 저장할 파일의 경로와 이름을 입력하라는 요청이 뜨게 됩니다.
기본 경로인 /home/ubuntu/.ssh/ 디렉토리 아래의 id_rsa(개인 키), id_rsa.pub(공개 키)라는 이름으로 저장됩니다.
특별히 다른 이름이나 경로를 원하지 않는다면, 엔터 키를 눌러서 기본 설정으로 사용할 수 있습니다.
만약 다른 키와 구분하고 싶거나 특정 용도의 키를 만들고 싶다면, 다음 예시를 참고해주세요.

/home/ubuntu/.ssh/my_custom_key

1.3.3 패스프레이즈(Passphrase)

기본 경로에서 엔터를 눌렀을 경우 Enter passphrase가 나타나게 됩니다.
이때 아무것도 입력하지 않고 엔터를 누르게 되면 패스프레이즈 생략이 가능합니다.
패스프레이즈는 개인 키가 노출되었을 경우에도 무단 사용을 방지하는 추가 보안 계층이라고 생각하시면 됩니다.
단점은 ssh 연결을 맺을 때마다 패스프레이즈를 입력해야 하므로, 사용의 편리성이 떨어질 수 있습니다.

1.3.4 ssh key 설정 완료

정상적으로 SSH KEY가 만들어졌습니다.

1.4 git SSH KEY에 저장하기

1.4.1 git hub SSH and GPG keys

1.4.2 New SSH Key

Title을 입력하고 SSH Key를 등록해야합니다.

1.4.3 SSH Key 확인

cat id_rsa.pub

cat은 현재 있는 위치의 파일을 읽어주는 것이기때문에 경로를 확인해야합니다.
만약 경로가 /.ssh가 아니라면
cd ~/.ssh를 통해 접속된 위치를 변경해주세요.

이렇게 가져온 키 값을 1.4.2 New SSH Key 항목의 Key에 입력해주세요

2. Git clone

2.1 git hub repository ssh 주소 가져오기

원하는 repository로 이동 -> Code -> SSH -> 주소 복사

2.2 git clone 하기

git clone git주소붙여넣기

아래의 사진은 서버 신뢰 여부를 묻는 메시지입니다. yes 하시면 됩니다.
그렇게 되면 서버의 호스트 키가 클라이언트의 ~/.ssh/known_hosts 파일에 저장됩니다. 추후 같은 서버에 다시 연결할 때 해당 서버를 인식하고 추가적인 확인 없이 바로 연결할 수 있게 해줍니다.

git clone 성공 확인

ls 를 사용하여 정상적으로 파일이 생성되었는지 확인

3. 빌드하기


기본적으로 EC2에는 자바가 설치되어 있지 않기 때문에 직접 설치해주어야합니다.
저의 프로젝트는 OpenJDK17을 사용하고 있기에 17버전으로 설치하겠습니다.

3.1 패키지 업데이트

OpenJDK17의 경우 기본적으로 패키지 목록에 없기 때문에 시스템의 패키지 목록을 업데이트하여 최신 정보를 반영해주었습니다.

sudo apt update

3.2 OpenJDK 17 설치

sudo apt install openjdk-17-jdk

아래의 항목은 182 MB 다운로드 하고 531MB의 추가 디스크 공간이 사용된다는 뜻입니다. y 입력후 진행
Need to get 182 MB of archives. After this operation, 531 MB of additional disk space will be used. Do you want to continue? [Y/n]

3.3 OpenJDK 17 설치 확인

java -version

설치 완료

3.4 빌드 실행

처음 실행하는 코드는 아래로 하셔도 무방합니다.

./gradlew build

git pull을 새로 받고 재빌드를 하고 싶다면 아래 명령어를 입력해주세요.

./gradlew clean build

빌드를 할때 test를 제외하고 싶다면 아래 명령어를 입력해주세요

./gradlew clean build -x test

빌드 성공

3.4.1 빌드 실행시 권한 문제

아래와 같이 권한이 안되는 경우가 있습니다. 이럴때는 chmod를 사용하여 권한을 수정해주면 됩니다.

실행 권한 부여

chmod +x gradlew

4. Spring Boot 실행하기


4.1 libs 폴더로 이동

cd 명령어를 이용하여 libs 폴더로 이동합니다.

cd build/libs

4.2 백그라운드에서 빌드파일 실행

nohup, java, jar, &를 함께 사용하여, 백그라운드에서 Java 애플리케이션을 실행하고 터미널 세션이 종료되더라도 애플리케이션이 계속 실행하게 할 수 있습니다.

  • nogup : "No Hang Up", 터미널 세션이 종료되거나 사용자가 로그아웃해도 실행중인 프로세스를 종료하지 않도록 합니다.
  • java -jar techtree-0.0.1-SNAPSHOT.jar : JAR 파일을 실행하는 명령어 입니다. techtree-0.0.1-SNAPSHOT.jar는 실행하려는 JAR 파일의 이름입니다.
  • & : 명령어를 백그라운드에서 실행하도록 지시합니다.

명령어를 실행하게 되면 아래와 같이 실행이 됩니다.
실행하고 나서 enter를 입력하여 터미널 프롬프트로 돌아갈 수 있습니다.

nohup java -jar techtree-0.0.1-SNAPSHOT.jar &

4.3 log 파일 확인하기

cat nohup.out

4.4 실행종료

4.4.1 jobs

현재 쉘 세션에서 백그라운드로 실행중인 작업 목록을 보여줍니다. 새로운 세션에서 시작했다면 백그라운드 실행중인 작업 목록이 보이지 않습니다.

jobs

4.4.2 fg %[index]

fg를 이용하여 백그라운드에서 실행중인 프로그램을 가져올 수 있습니다.
jobs로 확인한 인덱스 번호를 입력하여 실행중인 프로그램을 불러옵니다.
불러온 다음 control + c 를 이용하여 프로그램을 꺼줍니다.

4.4.3 jobs가 아닌 ps aux를 이용하여 프로세스 찾기

전체 프로세스 보기

ps aux 

java 필터링하여 찾기

ps aux | grep java

4.4.4 fg %[index]가 아닌 kill로 프로그램 종료

ps aux로 프로세스 확인 후 PID값 입력하기
저의 PID는 4464였습니다.

kill [PID 입력하기]
예시
kill 4464

5. 브라우저 접속하기


퍼블릭 IPv4 주소 혹은 퍼블릭 Ipv4 DNS를 URL에 입력해주면 접속할 수 있습니다.
주소를 입력했을때 저의 경우 포트 8080으로 스프링부트가 실행됨으로 :8080을 붙여주어 실행합니다.

스프링부트 배포 성공

만약 도메인을 구매했을때 들어오는 port가 80이라면

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
profile
신입 백엔드 개발자(JAVA, Spring Boot, MYSQL)

0개의 댓글