AWS

AWS를 이용하여 배포 환경을 구축해보자 번외1 - EC2에 Spring boot 프로젝트 배포하기(수동 배포)

집관리사 2021. 3. 6. 01:27

AWS를 이용하여 배포 환경을 구축해보자 2 - EC2부터 ssh 접속까지 (tistory.com)

 

AWS를 이용하여 배포 환경을 구축해보자 2 - EC2부터 ssh 접속까지

AWS를 이용하여 배포 환경을 구축해보자 1 - VPC (tistory.com) AWS를 이용하여 배포 환경을 구축해보자 1 - VPC 본 포스팅은 환경 구축이 주목적입니다. VPC(Amazon Virtual Private)는 무엇일까? AWS은 원래 단..

beemiel.tistory.com

EC2 생성은 ⬆ 참고 

 

 

EC2에 접속해서 아무것도 설치 하지 않은 상태라면 온갖걸 설치해줘야 한다.

 

1. 뭘 설치하기 전에 update와 upgrade를 먼저 해준다.

update -> 저장소에서 OS에 설치된 패키지들의 버전 리스트를 다운로드한다. 새로운 버전이 있는지 확인.

sudo apt-get update

업데이트 후에 업그레이드를 해주자.

upgrade -> update에서 받은 리스트에서 새 버전이 존재하면 업그레이드 한다.

sudo apt-get upgrade

중간에 y 눌러줌 혹은 

sudo apt-get upgrade -y

혹은 &&을 사용해서 한꺼번에 처리하는 것도 가능하다. 

sudo apt-get update && sudo apt-get upgrade

-y를 붙여주면 설치 도중 나타나는 물음에 yes를 한다는 의미

sudo apt-get update && sudo apt-get upgrade -y

 

2. mysql 설치

버전을 지정하지 않으면 현재(21년03월) 5.7로 설치됨

sudo apt install mysql-client

rds 관련된 내용은 아래 참고

AWS를 이용하여 배포 환경을 구축해보자 3 - RDS 생성부터 character set 설정까지 (tistory.com)

 

AWS를 이용하여 배포 환경을 구축해보자 3 - RDS 생성부터 character set 설정까지

AWS를 이용하여 배포 환경을 구축해보자 1 - VPC (tistory.com) AWS를 이용하여 배포 환경을 구축해보자 1 - VPC 본 포스팅은 환경 구축이 주목적입니다. VPC(Amazon Virtual Private)는 무엇일까? AWS은 원래 단..

beemiel.tistory.com

 

3. 자바 설치

1.8(8버전)을 설치해보았다.

sudo apt install openjdk-8-jdk

설치 후

java -version

로 자바 버전을 확인할 수 있다.

 

4. github같은 저장소에서 프로젝트 가져오기

난 github을 사용하였다.

git은 따로 설치하지 않아도 된다.

git clone [저장소 주소]

 

5. 프로젝트 빌드

가져온 프로젝트 디렉토리로 들어가서 gradlew에 +x 를 추가해주자.

sudo chmod +x ./gradlew

그리고 빌드

sudo ./gradlew build

빌드가 잘 되면 build 디렉토리가 생기고 build/lib 디렉토리 안에 jar가 있다.

 

6. jar 실행

java -jar [파일명].jar

만약 profile을 분리했다면

java -jar -Dspring.profiles.active=[원하는 profile 명] [파일명].jar

이렇게 하면 실행은 된다.

그런데 컨트롤+c 로 빠져나오거나 쉘을 꺼버리면 서버도 종료된다.

 

7. 그래서 백그라운드에서 실행시키자

nohup java -jar [파일명].jar &

& 은 백그라운드로 돌아가게 해주고

nohup은 서버 구동 시 기본적으로 쌓이는 로그들을 파일로 만들어준다.

cat nohup.out 으로 쌓인 로그들을 볼 수 있다.

 

이렇게 백그라운드에서 실행하면 쉘을 끄거나 해도 서버는 여전히 살아있다.

 

8. 접속

cat nohup 으로 started 땡땡Application~~ 이 제대로 떴는지 확인한 후

EC2의 public IP 혹은 DNS 의 8080포트로 요청을 보내면 된다.

[public IP 혹은 DNS]:8080/[원하는 경로]

예를 들면 3.35.135.158:8080/tests/1

 

9. 이제 끄고 싶어욧..

프로그램을 종료하기 위해서는 PID가 필요하다.

ps -ef 

를 사용하면 현재 실행중인 프로세스 목록들과 PID등이 함께 나온다.

프로세스 목록

 

문제는 너무 많이 나온다.. 

grep으로 걸러서 쓰자

ps -ef | grep '[원하는 단어]'

예를 들면 ps -ef | grep 'java' 

그래도 정보가 많다?

awk 로 원하는 필드만 보자

이 항목들을 말하는 것!

ps -ef | grep 'ssh' | awk '{print $[몇번째 필드인지]}'

예를 들면 ps -ef | grep 'ssh' | awk '{print $1, $2, $8}'

 

원하는 PID를 찾았다면

10. KILL

kill [PID 번호]

== kill -15 [PID 번호]

kill -9 는 강제 종료이니 -15로 일반 종료임을 알려주자. 

물론 kill이랑 똑같다. 

 

이렇게 하면 프로세스가 죽는다.

 


이렇게 하면 별다른 설정 없이 쉽게 서버를 구동할 수 있다.

하지만 api가 계속 늘어나고 test가 많아지면 프리티어용 EC2로는 빌드에만 시간을 할애하게 되거나 EC2가 아예 멈춰서 중지 후 재시작을 하는 경우가 종종 생긴다. (재시작하는데 겁나 오래 걸림🤬)

 

무엇보다도 프로세스를 멈추고 다시 돌리고 하는 이 과정이 너무나도 귀찮다는 걸 깨달을 것이다.

 

그러니 이 과정을 한 번 시도해 보았다면 하루라도 빨리 자동 배포로 넘어가도록 하자.