DevOps/AWS

[AWS] EC2에 SpringBoot 배포하기

샤아이인 2022. 3. 20.

다른 여타 어느 블로그의 글 보다 자세하게 설명 하였습니다. 도움이 될 수 있길!!!

 

총 3개의 글 시리즈로 작성할 것 입니다!!

1. EC2 인스턴스 만들기 (이전 글)

2. AWS의 EC2에 MySQL을 설치하고, Sequal Ace로 EC2의 mysql에 접속하기 (이전 글)

3. SpringBoot project 배포하기 (현재 글)

 

3. EC2에 Spring프로젝트 배포하기

우선 이전 까지의 글들에서 설치한 mysql이 있다는 가정하에 진행하겠다.

또한 당연히 자신이 배포한 SpringBoot 프로젝트는 있어야 한다!

또한 나는 build 툴로 Gradle을 사용했다!! 

 

1. 보안 그룹 추가해주기

우선 당장 사용할것은 아니지만, 프로젝트 배포를 한 후 접속하기 위해 TCP로 8080번 포트를 열어주자.

SpringBoot는 따로 포트를 설정하지 않으면 기본적으로 8080 포트를 이용하기 때문에 8080으로 열어주는 것 이다.

 

2. EC2 서버에 Java 설치해주기

당연히 서버에 Java가 있어야 한다. 다음과 같은 명령으로 설치해 주자.

다 설치가 되면 java --version 명령어를 통해 설치가 됬는지 확인해보자!

 

3. Local 컴퓨터 에서 프로젝트 build 하기 (Free Tier 한정)

음 우선 이 방식은 free tier 사용자에게 해당되는 방식일것 같다.

Free Tier는 서버가 t2.micro라 성능이 딸려서 git으로 clone해와서 build 하면 정상적으로 build가 진행되지 못한다.

 

따라서 우리는 local 컴퓨터에서 직접 build 해준 후, scp를 이용해 EC2 서버로 build된 파일을 보내 줄 것 이다.

(만약 좋은 인스턴스를 사용 중 이라면, 직접 EC2 서버에서 git clone을 통해 클론한 후 빌드해도 된다!!)

 

우선 프로젝트가 있는 폴더로 이동 한후, gradlew에게 실행 권한을 주자. (프로젝트가 gradle 프로젝트여야 gradlew가 있다)

이렇게 빌드에 성공하면 다음과 같이 build/libs 폴더 안에 jar 파일이 생긴다.

참고로 나는 plainJar를 생성되지 않도록 설정해줘서 생성되지 않았는데, 일반적으로 빌드하면 plainJar(의존성이 없는 버전)이 함께 생성된다. plainJar는 필요 없으니 삭제해도 된다. 우리는 그냥 jar만 필요하다.

 

3. EC2 서버로 jar 파일 보내기

우리는 Local 에서 EC2 server로 파일을 보내야 한다.

다른 블로그에서 추가적으로 뭘 설치하던데... 나는 귀찮아서 그냥 scp 를 사용하겠다. 추가적인 설치가 필요 없다!!

 

다음과 같은 방식으로 지정해주면 된다!

scp -i [pem파일경로] [보낼려는파일경로] [사용자계정]@[AWS-EC2주소]:[받으려는위치]
// [받으려는위치]는 mkdir 등으로 리눅스 서버에 미리 생성해야한다.

예시는 다음가 같다.

엔터를 눌러주면 정상적으로 파일이 보내진다. 서버에서 확인해보면 정상적으로 도착해있다!

 

4. jar 파일 실행해 주기 (nohup을 통한 무중단 서비스)

나는 nohup을 이용하겠다. 그냥 실행한후, EC2 터미널을 닫으면 서버 또한 종료되어 접속할수가 없다...

이럴때  nohup을 통해 백그라운드로 항상 실행되도록 해줘야 한다!! 매우 간단하다!!

 

nohup 명령어는 리눅스에서 process를 실행한 터미널의 세션 연결이 끊어지더라도 지속적으로 동작 할 수 있게 해주는 명령어다.

기본적으로 터미널에서 세션 로그아웃(logout)이 발생하면 리눅스는 해당 터미널에서 실행한 프로세스들에게 HUP signal 이 전달하여 종료시키게 되는데, 이 HUP signal을 프로세스가 무시(ignore)하도록 하는 명령어라서 nohup 이라는 이름인 것입니다. 

 

그래서 결과적으로 터미널에서 연결이 끊기거나 터미널을 종료해도 실행했던 프로세스들이 계속 실행될 수 있는 것입니다

 

다음과 같이 실행시켜 주자!

nohup java -jar cafe-0.0.1-SNAPSHOT.jar 1> /dev/null 2>&1 &

 

기본적으로 nohup명령어는 표준 출력(standard output : 1)을 nohup.out 파일로 재지향(redirection) 합니다.

 

터미널이 종료되어도 표준 출력은 nohup.out 파일에 계속해서 기록되기 때문에 프로세스의 상태를 확인하는데 유용 할 수 있습니다.

그러나 필요 이상의 로그를 화면에 계속해서 출력하게 되면 nohup.out 파일의 용량이 매우 커지기 때문에  디스크 공간을 낭비하게 될 수 있습니다.

 

따라서 뒤에 1> /dev/null 2>&1 로 로그파일을 남기지 않도록 설정할 수 있습니다!

1>/dev/null 은 표준 출력(1)을 사용하지 않겠다는 의미이고, 2>&1 은 표준 에러(2)를 표준 출력과 같게 만드는 명령어입니다.

 

위와 같은 명령을 치면 [1] 1717 과 같이 백그라운드 실행되며 process 번호 1717을 보여주면서 백그라운드로 실행된다!!

 

끝이다!! 배포를 완료했다!!!

댓글