AWS 를 사용해 Spring boot 프로젝트 서비스를 배포해 보도록 하겠다.
배포전 알아볼 내용은 다음과 같다.
AWS 와 AWS EC2
AWS
기업 및 개발자가 다양한 클라우드 서비스 및 리소스를 제공받을 수 있는 클라우드 컴퓨팅 플랫폼이다.
클라우드 컴퓨팅
AWS EC2
위와같은 설명으로 알 수 있는 AWS 에서 EC2를 생성해 서비스를 배포해 보도록 하겠다.
서비스 배포 과정
AWS EC2 를 생성하는 자세한 과정은 생략 하고 키 페어를 생성 하는 부분만 살펴보도록 하겠다.
추가적으로 알아두면 좋을 정보로 AWS EC2 는 가상서버를 프로비저닝 하고 관리하기 위한 AWS 서비스 이고 인스턴스는 EC2 에서 실행 되는 가상 서버 자체를 의미한다.
위의 이미지는 인스턴스를 생성할 때 생성하는 키 페어로 이 키페어는 생성한 EC2 인스턴스에 대한 보안 및 인증을 관리하는데 사용된다.
보안 설정
위의 그림과 같이 인스턴트에 접근할 수 있는 포트를 열어주도록 한다.
22 포트는 SSH 를 이용해 접근할 수 있는 포트로 기본적으로 활성화 되어 있다
다음 포트 들은 직접 활성화를 시켜준다.
80 포트는 HTTP 접속을 위한 기본 포트 이다.
6379 포트는 Rredis 가 접근 할 수 있도록 허용해 준것으로 Rredis에 관련된 내용은 이번 내용에선 다루지 않는다.
8080 포트는 주로 웹 애플리케이션 또는 웹 서버가 기본적으로 HTTP 트래픽을 처리하기 위한 포트이다.
EC2 접속
SSH 를 이용해 EC2 에 접속할 예정으로 Git 명령 뿐만 아니라 SSH 사용할 수 있는 Git Bash를 이용하도록 하겠다.
위의 그림과 같이 인스턴스를 생성하던 과정중 함께 생성한 키 페어가 있는 경로로 이동한다.
ssh -i 키 페어 ubuntu@(AWS IP 또는 퍼블릭 IPv4 DNS)
위와 같은 형식으로 입력해 주면 생성한 인스턴스에 접속 할 수 있다.
여기까지의 과정이 AWS 에서 가상서버를 생성하고 생성한 서버에 접속하는 방법이다.
서비스 배포
해당 게시글에선 Spring boot 로 구현한 프로젝트 파일을 .Jar 형태로 생성한 서버에 배포하도록 하겠다.
우선 배포 파일을 서버에 업로드 하기 위해서 FileZilla를 사용한다
FileZilla
FTP
FTP란 파일을 로컬 컴퓨터와 원격 서버 간에 전송하고 공유하기 위해 사용되는 프로토콜
FileZilla
FileZilla 는 FTP 를 사용하여 파일을 원격서버와 주고 받을 때 사용하는 도구 중 하나
위의 그림과 같이 FIleZilla 로 호스트, 포트, 키 페어 관련 정보를 입력한 후 연결 버튼을 클리하면
위와 같이 왼쪽은 우리가 사용하는 로컬 컴퓨터 이고 오른쪽은 생성한 서버를 나타낸다.
로컬 컴퓨터에 에서 배포할 파일의 .Jar 파일을 찾은 후 오른쪽 으로 드래그 하는 방식으로 서버에 파일을 업로드 한다.
Git bash 에서 ls 명령어를 통해 FileZila 에서 업로드한 Jar 파일을 확인 할 수 있고 이 Jar 파일을 실행 시켜 서버에 서비스를 배포 시킨다.
우선 서버에 알맞은 JDK 를 설치 후 업로드한 Jar 파일이 정상적으로 실행 될 수 있게 한다.
sudo apt-get install openjdk-(버전)-jdk
JDK 버전은 업로드한 파일의 버전과 맞춰 설치하도록 한다.
마지막으로 Jar 파일을 명령어를 통해 실행하면 되는데 이번 게시글 에선 SSH 접속이 끊겨도 서버는 계속 돌아가도록 하는 명령어를 통해 실행하겠다.
nohup java -jar Jar파일명.jar &
위와 같은 명령어로 원격 접속을 종료하더라고 서버가 계속 돌아가도록 파일을 실행 할 수 있다.
추가 적으로 실행된 서버를 종료 하는 명령어는 다음과 같다
ps -ef | grep java
위의 명령어로 java와 관련된 실행 파일들을 살펴 볼 수 있는데 그중 프로세스 번호를 가지고있는 파일의 pid값(프로세스 번호) 을 확인 후
kill -9 (pid값)
위와 같은 명령어로 서버를 종료 한다.
서비스 접속
배포한 서비스를 접속 하는 방법은 다음과 같다
http://AWS public ip:8080
인스턴스를 생성하면서 확인 할 수 있는 ip와 활성화 시켰어 8080 포트를 함께 url에 입력 함으로 서비스에 접속 할 수 있다.
추가적으로 :8080 포트를 입력하지 않고 ip 만 입력 하는것으로 서비스에 접속 하기 위해선 포트포워딩이 필요하다
포트포워딩
HTTP 요청에서는 80 포트가 기본이기 때문에 :80 을 붙이지 않아도 자동으로 연결이 된다.
이러한 점을 이용해 80 포트로 오는 요청을 8080 포트로 전달하게 하는 포트포워딩을 사용해 :8080 포트를 입력하지 않고 서비스에 접속 하도록 한다.
방법은 Git bash 에서 다음과 같은 명령어를 입력한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
위의 명령어를 입력후 서비스를 다시 시작 하면 :8080 포트를 입력하지 않고 서비스에 접속 할 수 있다.