본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Boot

[Spring Boot] 프로젝트 AWS에 배포하기

by 김코더 김주역 2022. 1. 26.
반응형

이번 포스팅에서는 여러분들이 작업한 Spring 프로젝트를 AWS에 배포해서, 로컬 컴퓨터가 꺼져있더라도 언제 어디서든 웹 애플리케이션에 접근할 수 있도록 하는 방법을 순서대로 설명할 것이다.

 

 

1. 프로젝트를 Executable Jar File로 압축

- 프로젝트의 배포용 패키지 파일인 executable jar file를 생성한다. 아래 포스팅에서 설명대로 진행하고 오면 된다.

https://kimcoder.tistory.com/364

 

- 빌드 성공 시 출력 결과

 

- 빌드 성공 시 패키지 파일은 target 디렉토리에 저장된다.

 

 

 

2. EC2 인스턴스 접속

- (참고) 이전에 블로그를 통해 EC2 인스턴스를 생성하는 절차를 다룬 내용이 있었는데, 아래 링크를 누르면 EC2 인스턴스를 생성하는 부분으로 자동으로 이동될 것이다. 여기에서 [인스턴스 생성]만 진행하고 오면 된다.

https://kimcoder.tistory.com/377#ec2-instance

여러분의 EC2 컴퓨터가 미리 준비되어 있다면 이 과정은 건너 뛰어도 좋다.

 

- cmd를 실행하고 다음과 같은 명령어를 입력하여 EC2 인스턴스에 접속한다.

ssh ubuntu@[Public IP DNS or Address] -i [key pair 저장 위치]

[Public IP DNS or Address] : 여러분의 EC2 인스턴스의 퍼블릭 IP 혹은 DNS

※ [key pair 저장 위치] : 여러분의 컴퓨터에 키페어를 저장한 위치

 

 

 

 

3. EC2 컴퓨터에 JAVA 설치

- 여러분이 프로젝트를 진행했을 때 사용했던 jdk 버전에 맞게 EC2 컴퓨터에도 jdk를 설치해야 한다.

sudo apt-get install openjdk-8-jdk

※ JDK 8 버전 기준

 

- 아래 명령어를 통해서 jdk 설치가 잘 되었는지 확인할 수 있다.

java -version

 

 

 

4. EC2 컴퓨터로 Executable Jar File 전송

- FileZilla를 통해 로컬 컴퓨터에 있는 파일을 원격 컴퓨터로 손쉽게 전송할 수 있다.

https://kimcoder.tistory.com/389

 

[EC2] FileZilla로 EC2 컴퓨터에 파일 전송하기

1. FileZilla 설치 - 아래 링크에서 FileZilla Client를 설치한다. https://filezilla-project.org/ 2. key pem 추가 - 상단 메뉴의 [편집 ]-> [설정]에서 SFTP에 여러분들이 EC2 인스턴스를 생성했을 때 발급 받..

kimcoder.tistory.com

 

- 필자는 EC2 컴퓨터의 /var/myapp으로 executable jar file을 전송했다.

Permission denied 에러가 뜬다면, chmod 명령어를 통해 디렉토리에 대한 접근 권한을 변경한 뒤 다시 시도해보자.

https://kimcoder.tistory.com/274

 

[Linux] chmod로 접근 권한 지정하기

chmod : change mode 접근 모드를 변경하는 명령어 chmod 명령어를 설명하기 앞서 접근 모드가 무엇인지 알 필요가 있다. 아래 이미지가 명령어 "ls -l"에 대한 출력에서, 접근 모드에 해당하는 부분이다.

kimcoder.tistory.com

 

 

 

5. Executable Jar File에 실행 권한 부여

- /var/myapp에 있는 executable jar file의 접근 권한을 보니 실행(x) 권한은 없는 상태이다.

 

- executable jar file에도 chmod 명령어를 통해 실행 권한을 부여해주자.

sudo chmod +x otd-0.0.1-SNAPSHOT.jar

 

- 실행(x) 권한이 잘 추가 되었다.

 

 

 

6. EC2 컴퓨터에서 Executable Jar File 실행

- 다음 명령어를 통해서 터미널 세션의 유지 여부에 관계 없이 executable jar file이 계속 실행되도록 할 수 있다.

sudo nohup java -jar [Executable Jar File 위치] &

※ nohup : 터미널 세션이 끊겨도 실행을 유지하도록 하는 프로그램
※ & : 프로세스를 백그라운드에서 동작하도록 하는 명령

 

- 다음과 같은 문구가 나오면 잘 실행된 것이고, 명령 수행이 종료되지 않았다면 엔터를 한번 누르면 된다.

 

- "sudo cat nohup.out" 명령을 통해서 웹 애플리케이션의 로그를 확인할 수 있다. 정말 익숙한 로그가 출력되었다.

 

- "sudo netstat -tnlp" 명령을 통해서 컴퓨터에서 돌아가고 있는 포트들의 상태를 확인할 수 있다.

- 필자의 웹 애플리케이션의 포트 번호인 8080이 보인다.

 

- 만약에 이미 8080포트로 실행중인 다른 프로그램으로 인해 실행이 안되었다면, 다음 명령어로 기존의 프로세스를 죽일 수 있다.

sudo kill -9 [PID]

 ※ PID는 바로 위에서 실행했던 netstat에서 확인할 수 있다. 예를 들어, 필자의 웹 애플리케이션의 PID는 4100이다.

 

 

 

7. EC2 인스턴스의 인바운드 규칙 편집

- 배포한 웹 애플리케이션의 포트에 외부 접속을 허용하는 단계이다.

 

- 먼저, 여러분이 생성한 EC2 인스턴스의 보안 메뉴에서 보안 그룹에 들어간다.

 

- 하단에 있는 인바운드 규칙 메뉴에서 [인바운드 규칙 편집]을 통해서, 아래와 같이 웹 애플리케이션에 대한 포트를 추가해주면 배포 작업은 끝난다. 0.0.0.0/0은 모든 외부 접속을 허용하는 특수 주소이다.

 

 

외부 접속 화면

 

 

 

+ 추가) Google Cloud Kubernetes에 배포하기 (By 백기선)

DockerFile을 사용하여 Spring Boot 프로젝트를 구글 클라우드에 배포하는 방법을 소개하는 강의

참고로 이 강의에서는 gcloud 명령어를 사용하기 때문에 Google Cloud SDK를 미리 설치해놓아야 한다.

https://www.youtube.com/watch?v=3u9PY-43Sg4&t=791s 

 

반응형

댓글