AWS EC2를 이용해 배포해보자 (5) - Springboot 프로젝트 실행

2722 단어 awsaws

이번에는 가장 중요한 저희의 어플리케이션을 서버에 배포해보도록 하겠습니다. 가장 쉬운 단계일 줄 알았지만 프리티어 이슈로 살짝 헤맸던 부분입니다.


마지막으로 서버에 우리의 springboot 프로젝트를 실행해야 한다. 방법은 간단하다.
서버 상에 적당한 디렉토리를 만들고 git을 이용해 프로젝트를 clone해온다.

$ git clone [프로젝트 저장소]
$ git switch [배포 branch]

그리고 gradle을 이용해 빌드하면 된다.

$ chmod +x ./gradlew # 실행 권한이 없다면 권한 추가
$ ./gradlew build

그런데 이렇게 하면 빌드 무간지옥에 빠지게 된다. (진짜 해보셨다면 죄송합니다..)
황급히 빌드를 취소하고(crtl+c) 대책을 생각해야 한다.
일단 빌드가 오래걸리는 원인은 호눅스의 말씀에 따르면 한 인스턴스에서 MySQL과 Springboot를 동시에 돌리기에 우리의 ec2 사양이 딸리기 때문이라고 한다.

여러 대책이 있을 것 같지만 필자는 가장 단순한 방법으로 해결해보도록 하겠다.
바로 로컬에서 빌드한 후 서버에 전송하는 방법이다.

먼저 로컬에서 프로젝트가 있는 경로에서 배포용 브랜치의 프로젝트를 빌드해준다.

$ ./gradlew build

이러면 /build/libs 경로에 우리 프로젝트가 빌드된 결과물인 jar 파일이 생긴다.

이 jar 파일을 scp를 통해 서버로 전송하면 된다. 아래와 같은 명령어로 전송할 수 있다.

$ scp -i {pem 키 경로} {jar 파일 경로} ubuntu@{ec2 public IPv4 DNS}:/home/ubuntu 

여기서 ec2 public IPv4 DNS는 ec2 인스턴스 요약에 가면 알 수 있다. ec2-ip 주소.ap-northeast 형식으로 써져있는 값이다.

이러면 서버의 홈 디렉토리에서 jar 파일을 확인할 수 있다.

맨 밑에 있는 jar 파일을 확인할 수 있다.
마지막 남은 것은 java로 jar파일을 실행하는 일이다.

$ java -jar {jar 파일 이름} &

맨 끝에 &를 붙여주면 jar 파일을 background에서 실행되도록 만들 수 있다.
우리가 터미널을 종료하더라도 서버에서 jar파일이 계속 실행되어야 하기 때문입니다.

마지막으로 우리 서버에 접속하려면 외부에서 8080포트를 접근해야 하므로 보안그룹을 업데이트 해줘야 합니다.
3306 포트를 열어줬을 때처럼 ec2 보안그룹 세팅에 가서 아래와 같이 8080포트를 모든 IP에 대해서 개방해줍니다.

스프링부트가 실행되는 화면이 나왔다면 정상적으로 실행되는지 서버의 Elastic IP의 8080 포트로 접속해봅니다.

정상적으로(?) Spring의 Whitelabel Error Page가 뜨는 것을 확인할 수 있습니다!


이로써 가장 기본적인 배포를 마쳤습니다. 이후에는 자동 배포나 IAM 을 통한 권한 관리가 남아있습니다. 시간이 된다면 후속으로 작성해보면서 적용해보도록 하겠습니다 !

배포 시 참고용으로 작성된 글입니다. 잘못된 내용이나 보완이 필요한 내용은 언제든지 댓글 부탁드립니다 :)

좋은 웹페이지 즐겨찾기