EC2에 Spring Boot 배포하기

최진우·2020년 1월 28일
8
post-thumbnail

이 글은 Spring Boot 프로젝트를 AWS EC2에 배포하는 방법을 정리한 글이다. 개인적으로 이번에 배포를 하며 약 5개의 EC2인스턴스를 만들고 지웠던것 같다. 글의 시작에 앞서 배포할때 한대의 클라우드 서버에 DB서버와 API서버를 같이 두는 등의 방법을 사용한다. 이는 학습용으로 참고해주었으면 좋겠다.

기본설정

빌드 도구로는 gradle을 사용하였다. 또한 DB는 MySQL을 사용하였고, ubuntu환경에서 배포하였다. github을 통해 버전관리를 하였다.

EC2

기본적으로 ubuntu환경의 EC2를 받으면 된다. EC2를 받는 부분이 주요 내용이 아니므로 이 부분은 건너뛰도록 하겠다. 간단한 방법은 아래를 참고하면 될것 같다.( src/test/java/~ 안에 있는 .java파일이 빌드시 문제가 되어 제거한 상태이다)

1. AWS EC2-ubuntu 환경의 클라우드 서버를 받음
2. 8080포트가 열린 보안그룹을 적용
3. putty를 통한 접속

github 저장소받기

EC2는 기본적으로 git이 다운되어 있다. github에서 클론을 받는 방법은 자신의 github 저장소에 접속한다.


해당 저장소의 clone or download를 선택한후 보이는 url을 복사해주면 된다.

그 후 아래의 명령어를 사용하여 클론받는다.
(이후 나오는 명령어의 중괄호는 무시하면 된다)

$ git clone {복사한 URL}

이렇게 되면 root안에 방금 clone받은 폴더가 생기게 된다.

패키지 다운

이후 MySQL, jdk를 다운로드 받아야 한다.

$ sudo apt-get update
$ sudo apt-get install mysql-server
$ sudo apt-get install openjdk-8-jdk

중간 중간에 나오는 [Y/n]에서 Y를 입력해주면 된다.

DB 설정

MySQL을 통해 해당 DB를 만들어 주어야 한다.
나는 DB의 root가 아닌 새로운 user를 통해 접속할 생각이라 새로운 user를 만들어 주었다.

$ sudo mysql -u root -p

이후 password를 입력하라고 하는데 딱히 설정해준 것이 없다면 Enter를 통해 접속할 수 있다.

create user '{유저이름}'@'localhost' identified by '{유저비밀번호}';

grant all privileges on *.* to '{유저이름}'@'localhost';

create database {DB이름} default character set utf8 collate utf8_general_ci;
  • 새로운 유저 생성
  • 유저 권한 부여(모든 DB에 대한 권한을 부여함)
  • DB(utf-8) 생성

application.properties

위의 과정 이후 빌드/실행 시키면 된다. 하지만 작성자는 .gitignore를 통해 application.properties를 빼 DB 정보, 암호화 비빌번호등을 작성해 주어야 한다.

위와 같이 main으로 이동한 후 아래의 명령어를 통해서 resources 폴더를 생성한고 resources 폴더로 이동한다.

$ mkdir resources
$ cd resources

이후 application.properties파일을 만들어 주었다.

$ vim application.properties

vim의 사용법을 다루기에는 글이 길어질것 같아 다른 문서를 참고하면 좋을 것 같다.

빌드/실행

root/{프로젝트}로 이동을 한다.
그리고는 빌드를 진행한다.

$ sudo chmod 777 ./gradlew
$ sudo ./gradlew build

빌드가 되고 나면 root/{프로젝트}/build/libs 안에 .jar파일이 생기게 된다. 위의 경로로 아래의 명령어를 통해서 실행시킬 수 있다.

$ nohup java -jar ${해당 .jar파일} &

위의 명령어는 putty의 접속이 끊겨도 백그라운드 실행이 되는 명령어이다.

위와 같은 방식으로 Spring Boot 프로젝트를 EC2에 올려보았다. node서버와 크게 다른점은 없는 것 같다.

profile
대구소프트웨어고등학교 4기, 재학중

0개의 댓글