목표
지금까지 한 로컬 PC에서 작업한 프로젝트를 빌드한 .jar파일을 클라우드 컴퓨터 상에서 실행시켜서 배포하기
클라우드 컴퓨팅
- 구글, 아마존, ... 같은 곳에 사용한만큼 비용을 지불하고 컴퓨팅 리소스를 인터넷으로 제공 받는 서비스
- IaaS : 컴퓨팅 및 스토리지 서비스
- PaaS : 클라우드 앱을 빌드하는 플랫폼 환경을 제공
- SaaS : 소프트웨어 앱 서비스를 제공
Amazon EC2
- Amazon EC2(Elastic Compute Cloud)
- 확장 가능 컴퓨팅 스토리지를 제공
- 애플리케이션을 개발할 때, 서버 하드웨어를 먼저 구축하지 않아도 됨
- 확장, 축소, 사용량 스파이크를 처리할 수 있어 트래픽 예측 필요성이 낮아짐
인스턴스 생성
인스턴스란?
- 가상 컴퓨팅 환경
- EC2 인스턴스는 가상 컴퓨터 1대를 의미한다
AMI 선택
- AMI
- 서버에 필요한 운영체제와 여러 소프트웨어들이 적절히 구성된 상태로 제공되는 템플릿


- AMI를 프리티어로 사용 가능한 우분투 서버 18.04 LTS로 선택한다
인스턴스 유형 선택
- 인스턴스의 CPU, 메모리, 스토리지, 네트워킹 용량등을 선택할 수 있다.
- 프리티어 선택지 중 가장 적절한 t2.micro를 선택한다.

키페어 생성 및 설정
- 키페어는 EC2 인스턴스에 연결할 때 자격을 입증하는 키
- 퍼블릭 키와 프라이빗 키로 구성
- 퍼블릭 키는 인스턴스에 저장
- 프라이빗 키는 사용자가 저장
- 개발 환경에서 SSH를 통하여 인스턴스에 연결할 예정
- SSH 접근 시, 키페어 지정해야함
- 퍼블릭 키에 해당되는 프라이빗 키로 지정
- .pem 형식으로 프라이빗 키 생성 후 다운로드

인스턴스 생성 확인

- 인스턴스 이름과 추가적인 설정을 마치고 인스턴스 시작 버튼을 누르면


- 인스턴스가
대기 중
상태에서 실행 중
상태로 바뀐다.
인스턴스 삭제를 원할 시 해당 인스턴스 우클릭을 하고 인스턴스 종료를 하면 된다.
보안 그룹
- 해당 인스턴스 더블릭 하고 들어와서
보안
탭에서 인바운드 규칙 추가
- EC2는 기본적으로 22번 포트가 열려있다.
- SSH로 EC2로 접근할 때 22번 포트를 사용한다.

- 기본 포트인 80와 해당 프로젝트에 설정해놓은 포트인 8090포트를 모든 IP에 대해서
수신을 허용
하는 작업이다.
server.port=8090
Amazon RDS
- Relational Database Service
- AWS환경에서 제공하는 관계형 데이터베이스
확장 가능
한 관계형 데이터베이스 서비스
RDS 생성
RDBMS 선택


- 프리티어 중 가장 현재 프로젝트 버전과 인접한 MySQL 8.0.28을 선택
식별자, 사용자 이름, 암호 설정

- 마스터 사용자 이름과 암호는 해당 DB에 접근할 때 필요하다
연결 설정
- 퍼블릭 엑세스를 허용하여, 위에서 만든 EC2에 올릴 애플리케이션에서 해당 RDS에 접근하거나, 다른 사용자가 접근 가능할 수 있도록 한다.
- 해당 설정은 위에서
사용자 이름
과 암호
가 있어야 연결할 수 있기 떄문에 킬 수 있다.
- 새 VPC 보안 그룹 설정
- 가용 영역은 임의로 선택

포트 설정
- DB를 연결할 떄 사용할 포트를
3306
으로 설정
초기 데이터베이스 설정

- 이 데이터베이스에 앞으로 프로젝트 테이블을 저장할 예정
RDS 생성 확인

인바운드 규칙

3306
포트의 모든 수신을 허용하는 규칙을 추가하고 저장
프로젝트와 연결
- 모든 3306 포트의 수신을 열어 두었기 때문에 프로젝트에서 접근 가능
Application.properties
파일에 위에서 설정해 두었던 username
과 password
를 통하여 프로젝트에서 DB Source
를 설정
# DB Source URL
spring.datasource.url=jdbc:mysql://"RDS의 엔드포인트":3306/"접속하려는 MySQL의 데이터베이스 이름"
# DB username
spring.datasource.username="마스터 사용자 이름"
# DB password
spring.datasource.password="비밀번호"
배포
스프링 부트 빌드
EC2에 접속
- SSH로 접속
- 앞 전에 다운받은 키페어 파일의 권한을 열기
sudo chmod 400 "키페어 파일 경로"
ssh -i "키페어 파일 경로" ubuntu@"EC2 인스턴스의 아이피"

- 위와 같이
ubuntu@xxx.xxx.xx.xx
와 같은 형식으로 나오면 연결 완료되어 shell명령어로 해당 인스턴스를 컨트롤할 수 있게 됨
자바 설치
- .jar 파일을 실행시키기 위해서 해당 EC2 인스턴스에 자바가 설치되어 있어야 함
sudo apt-get update
sudo apt-get install openjdk-11-jdk
- apt
- Advanced Packaging Tool
- 리눅스에서 제공하는 .deb 형식의 패키지들을 관리하는 툴
java -version
- JDK 설치 확인이 되으면, 이제 EC2는 .jar파일을 실행 시킬 준비가 되었다.
FileZilla로 파일 전송

- 좌측 상단의 아이콘을 눌러 사이트 관리자에 들어간다

- 키페어를 등록하여 해당 EC2 인스턴스를 등록한다.

- 좌측은 로컬 우측은 EC2 인스턴스이다.
- 실행을 원하는 .jar파일을 드래그해서 EC2 인스턴스로 전송
- EC2 연결된 shell 창에서 명령어 입력해서 파일 옮겨진 것을 확인
ls

SpringBoot .jar 파일 실행
java -jar 파일명.jar
- 위 명령어를 입력하면 스프링 부트 프로젝트가 실행되며, 배포가 되었다.
- URL로
"EC2 IP 주소":8090
을 입력하면 애플리케에션으로 접속이 가능하다.
- 해결할 문제점 2가지
- 인스턴스의 연결을 끊으면 스프링 부트 프로젝트도 종료됨
- 서비스를 위해서는 기본포트인 80 즉 포트 번호를 입력하지 않아도 애플리케이션에 접근이 가능하도록 해야함
nohup java -jar 파일명.jar &
nohup
명령어는 세션 연결을 종료해도, 프로그램을 중지하지 말고 실행하라는 명령어이다.
- 뒤에
&
는 해당 프로그램을 백그라운드에서 실행하라는 의미
- 이렇게 되면 인스턴스의 연결을 끊어도 접속이 가능하다
ps -ef | grep java
- 실행 중인 것 확인하고 kill 명령어로 종료
kill -9 번호

포트포워딩 등록
- 이제 포트번호를 입력하지 않아도 애플리케이션으로 접근할 수 있게 해야한다.
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8090
- 위 명령어는 80포트로 접근을 할떄 8090 포트로 리다이렉트하라는 의미이다.
이제 해당 EC2 인스턴스 IP 주소만 URL로 입력해도 빌드 시킨 .jar파일로 접근이 된다.
도메인 등록
- 이 과정은 도메인을 사서 EC2 인스턴스 IP를 등록해주면 되는 과정이라 생략