본문 바로가기
Server

Spring boot 애플리케이션 ec2에 jar로 배포

by Ahngyuho 2023. 7. 23.

진행 동기

현재 프로젝트는 웹 서버의 access log를 필요로 합니다. 그래서 ec2에 Java를 설치하고 jar 파일을 실행하여 Nginx와 연동해서 access log를 저장할 예정입니다.

 

우선 이번 포스팅의 주제는 ec2에 jar 파일을 실행하는 것이므로 이 부분만 다룰 것이고 해당 주제와 연관되는 포스트는 링크를 걸어두겠습니다...

 

IntelliJ ssh 연결 및 파일 전송

https://agh-dev.tistory.com/11

 

ec2 서버와 내 컴퓨터 ssh 연결 - IntelliJ IDEA에서 ssh 연결

진행 동기 프로젝트 진행을 aws ec2로 진행하고 있는데, aws에서 브라우저로 ec2에 접속할 수 있는 방식을 지원하고 있습니다. 하지만 설정 파일 작성이나, 로컬 pc에 파일 전송 등 기능이 제한되거

agh-dev.tistory.com

진행 환경

저는 aws ec2 t2.small 인스턴스를 사용중이고 Ubuntu-22.04 버전 사용했습니다.

jdk는 11버전, DB는 mysql 사용했습니다.

전 JPA를 사용했기 때문에 따로 table ddl 작성은 하지 않았습니다. 그래서 mysql은 설치하는 부분만 보여드릴 거 같아요.

 

 

Java 설치

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install openjdk-11-jdk
java -version

openjdk version "11.0.19" 이런 문구가 나오면 잘 설치된 겁니다.

 

Mysql 설치

sudo apt-get install mysql-server

 

- Mysql root 계정 비밀번호 바꾸기...

해당 부분은 제 애플리케이션 데이터베이스 설정(application.yaml) 파일에 root 계정 비밀번호를 설정해 두었기 때문에

그 설정값 비밀번호로 ec2에 설치된 Mysql root 계정 비밀번호를 바꾸려고 합니다...

 

sudo su 
mysql -u root -p

리눅스 root 계정 접속 후 mysql의 root 계정 접속 명령어

Enter password 가 나올텐데 Enter 입력해주시면 정상 접속 가능합니다!

 

//root 계정 비밀번호 변경...
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass';

//데이터베이스 생성
create database shop

 

이제 Java와 Mysql 설치 및 root 계정 관련 설정 변경까지 완료했습니다. 이제 제 local pc 에 있는 jar 파일을 ec2 서버로 전송해서 jar까지 실행해 보겠습니다.

 

Build 도구에 따른 jar파일 생성 방법과 jar 파일 전송

 

파일 전송은 JetBrains의 IntelliJ IDEA를 사용해서 ec2 서버와 ssh 연결을 맺어서 파일을 전송했습니다.

IntelliJ 의 ssh 연결 방법 및 jar 파일 생성 방법은 따로 포스팅 해두겠습니다.

 

jar 파일 실행

jar 파일 실행시 주의하셔야 할 부분은 

1. sudo로 명령어 실행

2. jar 파일이 존재하는 폴더에서 명령어 실행

2가지 존재합니다.

 

cd 파일이 존재하는 폴더
//예) ec2 user 폴더에 넣어두셨다면 cd /home/ec2-user 입니다. 
sudo java -jar jar파일명
// 리눅스는 폴더명 혹은 파일명을 모두 다 적지 않으셔도 됩니다.
// 예를들어 jar 파일명이 shop.jar 라면 s 입력 후 tab키를 누르면 자동으로 s로 시작하는 파일을 찾아줍니다.
// s 로 시작하는 파일들이 많을 경우 좀 더 구체적으로 작성하고 tab 키를 눌러주시면 됩니다.

 

정상작동하는지 확인하기 위해서는 netstat 명령어를 통해 tcp 포트가 LISTEN 상태로 되어 있는지 확인하시면 됩니다.

sudo apt-get install net-tools

설치는 위 명령어 입력해주시면 됩니다!

 

이렇게 잘 실행되는 것 까지 잘 확인이 되었습니다!

애플리케이션을 멈추고 싶으시면 ctrl + c를 누르시면 됩니다.

그리고 다시한번 netstat -antp | grep 8080으로 포트가 다시 반환되었는지 확인하셔야 합니다!

아마 ctrl + c 직후 netstat -antp | grep 8080 해보시면 LISTEN 상태가 아니라 TIME-WAIT 상태로 되어 있을겁니다.

시간이 조금만 더 흐른 후 다시 실행해보시면 아무것도 안 나오는데 그때가 완전히 포트가 반환된 상태입니다.

다음 해볼 것

그런데 이렇게 리눅스의 terminal을 이용한다거나 IntelliJ 의 terminal을 통해 ssh를 사용하는 경우 jar 파일을 실행하는 순간 실시간으로 애플리케이션이 실행되는 것을 볼 수만 있고, 다른 작업을 하지 못하게 됩니다. 그리고 IntelliJ는 ssh 접속이 끊기는 순간 애플리케이션 작동까지 중단됩니다. 

그래서 저는 저의 애플리케이션을 systemd에 서비스로 등록하고 enable 까지 하여 재부팅하면 다시 켜지도록 해보려고 합니다!