[AWS] EC2, RDS 생성 - .jar 배포 (우분투)

dooboocookie·2022년 10월 11일
0
post-thumbnail

목표

지금까지 한 로컬 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파일에 위에서 설정해 두었던 usernamepassword를 통하여 프로젝트에서 DB Source를 설정
# DB Source URL
spring.datasource.url=jdbc:mysql://"RDS의 엔드포인트":3306/"접속하려는 MySQL의 데이터베이스 이름"
# DB username
spring.datasource.username="마스터 사용자 이름"
# DB password
spring.datasource.password="비밀번호"

배포

스프링 부트 빌드

  • 빌드 툴을 Gradle사용 중

  • 인텔리제이의 우측 메뉴에서 GradleTasksbuildbuild더블클릭

  • 프로젝트폴더/build/libs 디렉토리 위치에 .jar파일 생성됨

    • Plain Archive : -plain이 이 붙은 .jar파일은 jar에 의해서 생성된 파일로 의존관계를 포함하지 않고 소스코드에 대한 파일만 포함한다
    • Executable Archive : bootjar에 의해 새성되어 의존관계를 모두 포함하여 바로 실행 가능하다.
    • Executable Archive를 서버에 올려서 실행시켜야 함

EC2에 접속

  • SSH로 접속
  • 앞 전에 다운받은 키페어 파일의 권한을 열기
sudo chmod 400 "키페어 파일 경로"
  • 우분투 EC2 연결
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를 등록해주면 되는 과정이라 생략
profile
1일 1산책 1커밋

0개의 댓글