반응형

먼저 배포할 프로젝트를 올려둔 github에서 clone 받아오기 위해서 EC2 인스턴스에 git을 설치해줘야 한다.

 

터미널을 통해 EC2에 접속한다.

 

# git 설치
sudo yum install -y git

위 명령어를 실행하면 git이 자동으로 설치된다.

 

# git version 확인
git --version

 

이렇게 버전 정보가 뜬다.

 

# git clone으로 프로젝트를 저장할 디렉토리 생성
mkdir ~/app && mkdir ~/app/test

# test 폴더로 이동
cd ~/app/test

# 프로젝트 clone
git clone (github프로젝트주소)

git clone (github프로젝트주소)를 하면 우리가 만든 test 폴더에 프로젝트가 clone된다.

 

클론이 완료된 모습.

 

# 프로젝트 폴더로 이동.
cd 프로젝트명

# 폴더 안에 파일 확인
ls

현재 프로젝트 폴더 안에 파일명들을 나열해준 화면.(필자의 경우 미리 빌드하고 실행했어서 target폴더에서 꺼내온 jar파일이 존재함.

 

프로젝트를 빌드하기 위해서 먼저 EC2 환경에 Maven을 설치해줘야 한다.

 

Maven 설치하기

먼저 헷갈릴 수 있으니 최상위 폴더로 이동한다.

최상위 폴더로 이동하는 명령어는 아래와 같다.

# 최상위 경로로 이동
cd

여기서 maven이라는 폴더를 만들고 그 경로로 이동한다.

 

# maven 폴더 생성
mkdir ./maven

# maven 폴더로 이동
cd maven

그리고 maven 파일을 받는다. 아래 코드를 실행해주자.

 

# wget maven 다운링크
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

코드를 실행한 후에 ls로 파일을 확인해보면 gz 파일이 잘 받아진 것을 확인할 수 있다. gz파일은 윈도우의 zip파일이라고 생각하면 된다.

 

# gz파일 압축 풀기
tar xvfs apache-maven-3.6.3-bin.tar.gz

위 명령어를 실행하면 아래와 같이 파일 두 개가 maven폴더에 존재하게 된다.

 

이제 환경변수를 설정해주자.

먼저 계정의 home으로 돌아온 후에 bash_profile을 연다.

 

# home으로 이동
cd ~

# bash_profile open
vi bash_profile

그리고 뜨는 창에 다음과 같이 입력해준다.

 

MAVEN_HOME=/home/ec2-user/maven/apache-maven-3.6.3
PATH=$PATH:$MAVEN_HOME/bin
export MAVEN_HOME

vi 편집기 기본 사용법은 다음에 정리하겠다. 우선 지금 쓰는 간단한 사용법은

vi bash_profile로 들어간 상태에서 i를 누르면 글을 작성할 수 있다.

거기에 위 코드를 작성해주고, esc를 누르면 다시 작성모드가 종료된다.

그 상태에서 :wq를 작성하면 변경된 내용을 저장하고 종료한다.

 

# 변경한 .bash_profile 파일을 반영
source. bash_profile

# maven 버전 확인
mvn -version

이제 위 코드를 실행해서 반영해주고 버전확인으로 maven 설치가 잘 되었는지 확인 해주자.

 

이렇게 설치가 잘 된 것을 볼 수 있다.

이제 다시 ls와 cd 명령어를 통해서 프로젝트 폴더로 이동해준다.

 

### maven ###
# mvnw 파일 접근 권한 변경
chmod +x mvnw

# maven 컴파일 + 빌드(pom.xml이 존재하는 폴더 안에서 실행)
mvn package

### gradle의 경우 ###
# gradle의 경우 파일 접근 권한 변경
chmod +x gradlelw

# 테스트 진행
./gradlew test

# 빌드
./gradlew build

이렇게 빌드를 하고 익숙하게 봐온 스프링 부트 화면도 나온다.

완료 후에 다시 ls로 파일명들을 보면 target 이라는 폴더가 생성된 것을 볼 수 있다.

 

# target 폴더로 이동
cd target

target 폴더 안에 *.jar 또는 *.war 파일이 만들어졌는지 확인한다.

 

정상적으로 빌드 됐다면 이렇게 .jar 파일이 생긴다.

이 파일을 실행해야 하는데 파일을 target폴더 안에서 실행시키지 말고 아래 명령어를 통해 jar파일을 한 경로 위로 가지고 온다.

 

# jar 파일 경로 옮기기
mv (jar파일명) ../

잘 옮겨진 것을 확인할 수 있다.

이렇게 해주는 이유는 target에서 실행할경우 경로 문제가 발생하여 제대로 열리지 않는 경우가 있기 때문이다.

이제 jar 파일을 실행해주자.

 

# jar 파일 실행
java -jar (jar파일명)

 

에러가 없다면 이렇게 잘 실행된 것을 확인 할 수 있을 것이다.

이제 우리가 만든 프로젝트를 웹으로 열어보자.

주소는 EC2 인스턴스에 걸어둔 탄력적 IP 주소와 프로젝트에서 설정한 포트번호이다. 필자의 경우 8080. 주소창에 아래 주소를 적는다.

 

(EC2에 적용된 탄력적 IP주소):8080

 

드디어 배포가 완료되었다~~~

 

여기서 ec2를 접속한 터미널을 그냥 끄게 되면 서버가 닫힌다.

그렇다면 ssh 연결을 끊어도 프로젝트를 배포상태로 두고 싶다면 어떻게 해야할까?

위의 jar파일 실행상태에서는 어떤 버튼을 눌러도 반응하지 않는 상태이다.

여기서

 

ctrl + z

 

를 누르면 터미널을 다시 사용할 수 있는 화면이 된다.

 

# bg 입력, 만약 bg로 되지 않는 다면 bg 1 입력
# bg는 백그라운드에서 작업을 실행하는 것이다.
bg

# disown 은 프로세스를 shell의 job control 에서 벗어나게 해준다.
disown

exit

위 명령어를 실행 한 후에는 EC2 접속을 끊고 터미널을 종료해도 언제 어디서든 내가 만든 프로젝트에 접속이 가능해진다.

이렇게 AWS를 이용한 24시간 무중단 배포를 완료하였다.

 

만약 다시 EC2에 접속해서 프로젝트 배포를 멈추고 싶다면

# 실행중인 포트가 사용중인 Process 확인
netstat -lnp | grep (포트번호)

# 실행 종료 시키기
kill -9 (확인한 Process번호)

이렇게 종료할 수 있다.

 

이상으로 AWS로 프로젝트 배포 포스팅을 마치겠다.👏

반응형
반응형

https://aws.amazon.com/ko/

 

클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

개발자, 데이터 사이언티스트, 솔루션스 아키텍트 또는 AWS에서 구축하는 방법을 배우는 데 관심이 있는 모든 사용자용 무료 온라인 교육 AWS 전문가가 구축한 500개 이상의 무료 디지털 교육 과정

aws.amazon.com

AWS 홈페이지에 접속해서 로그인 한다.

 

서비스에서 RDS 클릭.

 

주황색 데이터베이스 생성 버튼 클릭

 

표준 생성 선택

MariaDB 선택

버전 선택(버전은 기억해둬야 한다. 추후에 파라미터 그룹 설정 시 사용)

 

템플릿 - 프리티어 선택!!!(다른 것 선택 시 비용이 청구 될 수 있음)

DB 인스턴스 식별자 - 본인이 알아볼 수 있는 DB 이름

⭐️ 마스터 사용자 이름과 마스터 암호는 반드시 기억해놔야 한다.

 

프리티어를 선택하면 DB인스턴스 크기는 자동 선택되어 있다.

스토리지 - 할당된 스토리지 20GB가 맞는지 확인 / 나머지는 그대로

 

연결 → 퍼플릭 액세스 가능 → 예

VPC 보안 그룹 → 기존 항목 선택

 

추가 구성 → 데이터베이스 포트 3306

데이터베이스 생성 클릭!!!!

 

RDS가 생성되었다.(아직 생성중, 조금 걸린다. / 위에 DB는 기존에 만든 것)

이제 운영환경을 설정해줘야한다.

왼쪽 메뉴바에서 파라미터 그룹 클릭

 

파라미터 그룹 생성 클릭

 

파라미터 그룹 패밀리 → RDS 생성 시 선택했던 DB와 버전 확인 후 선택

이름, 설명 알아서 작성하면 된다.

다 작성 후에 생성 클릭.

 

내가 작성한 파라미터의 상세 페이지에 들어간 화면이다.

여기서 오른쪽에 수정 클릭

 

들어와서 입력해줘야 할 파라미터들을 검색해서 내용을 넣어준다.

설정해줘야 하는 파라미터 값들은 다음과 같다.

 

time_zone - Asia/Seoul

character_set_client - utf8mb4

character_set_connection - utf8mb4

character_set_database - utf8mb4

character_set_filesystem - utf8mb4

character_set_results - utf8mb4

character_set_server - utf8mb4

collation_connection - utf8mb4_general_ci

collation_server - utf8mb4_general_ci

max_connections - 150

 

위와 같이 다 설정 해준 후 변경 사항 저장을 눌러서 저장한다.

다음은 변경한 파라미터를 DB에 적용할 차례이다.

왼쪽 메뉴바에서 데이터베이스 클릭.

 

파라미터 설정할 데이터 베이스를 선택한 후 오른쪽 위 수정 버튼 클릭

 

추가 구성 → 데이터베이스 옵션 → DB 파라미터 그룹 → 내가 생성한 파라미터 그룹 선택.

 

맨 아래로 내려와서 오른쪽 아래 계속 버튼 클릭.

 

이런 화면이 나오는데 여기서

새 값에 내가 선택한 파라미터 그룹이 맞는지 확인하고

수정예약 → 즉시 적용 선택

DB 인스턴스 수정 클릭.

여기까지 RDS를 생성해서 변경한 파라미터 그룹을 적용하였다.

그럼 이제 생성한 EC2와 RDS를 연결해보자.

EC2 페이지의 인스턴스 상세 페이지로 간다.

 

보안 탭에 있는 보안 그룹의 상세 페이지로 이동.(왼쪽 아래 보안 그룹의 파란 글씨 클릭)

 

보안 그룹 ID를 복사

다시 RDS 페이지로 돌아간다.

 

생성한 RDS의 상세페이지로 들어가서 조금 내려보면

보안 그룹 규칙 탭이 있다. 여기서 보안그룹 하나 클릭해서 보안그룹 상세페이지로 이동.

 

아래에 인바운드 규칙 탭 클릭.

 

오른 쪽에 Edit inbound rules 클릭.

 

 

규칙 추가를 누르고

MYSQL/Aurora 선택 후, ec2 인스턴스의 보안그룹 id를 넣은 규칙 한개,

내 ip를 입력한 규칙 한개를 생성한다.(내 ip를 선택하면 알아서 들어감)

규칙 저장 클릭!

이제 EC2 인스턴스와 RDS가 연결되었다.

이제 생성한 원격 데이터베이스에 접속해보자.

다시 RDS 상세페이지에 들어간다.

 

연결 & 보안 탭의 앤드포인트를 복사한다.

필자는 IntelliJ를 이용하여 database 플러그인으로 원격 데이터베이스를 사용하려한다.

(Workbench 등 다른 것 사용 가능)

 

IntelliJ에서 오른쪽 구석에 Database를 클릭하면 다음과 같은 화면이 나온다.

 

+ 버튼 클릭 → Data Source → MariaDB 선택

 

여기서 앤드포인트와 RDS생성 시 작성했던 마스터 사용자 이름과 비밀번호가 사용된다.

잘 작성한 후에 아래쪽에 Test Connection을 해보자.

 

이렇게 잘 나온다면 접속 성공이다! OK를 눌러 DB를 추가한다.

 

추가한 DB에 Schema를 하나 생성한다.

 

쿼리문을 작성하여 방금 생성한 Schema를 사용할 스키마로 지정해주자.

 

## use 스키마이름;
use Test;

 

다음은 DB 설정들을 확인할 것이다

## character set, collation 설정 확인
show variables like 'c%';

위 쿼리문을 실행한 후 살펴보면

 

이렇게 결과를 볼 수 있는데 우리가 확인하고 수정할 부분은

character_set_database

collation_database

이 두 가지이다.

 

만약, 두 가지 외에도 latin1으로 시작하는 부분이 있다면 RDS 페이지로 돌아가서 데이터베이스를 재부팅한 후 다시 쿼리문을 실행하자.

RDS 선택 → 작업 → 재부팅

그러고 쿼리문을 다시 실행하면, 바꾸려고 했던것 외에 기존의 latin1으로 작성되어있던 부분이 변경된 것을 확인할 수 있을 것이다.

 

이를 수정하는 쿼리문은 아래와 같다.

ALTER DATABASE 데이터베이스명(Schema명)
CHARACTER SET = 'utf8mb4'
COLLATE = 'utf8mb4_general_ci';

이를 실행한 후 다시 확인해 보면 원하는대로 변경된 것을 확인할 수 있다.

 

## 타임존 확인
SELECT @@time_zone, now();

 

 

프로젝트 DB 설정해주기!!

src → resources → applicaion.properties(또는 yml 등 본인이 작성한 파일)

 

# MariaDB 연결
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://[ec2 앤드포인트]:3306/[사용할 db schema 이름]
spring.datasource.username=[db 마스터 이름]
spring.datasource.password=[db 마스터 비밀번호]

위 코드대로 내용을 적용해준다.(양식 달라도 내용만 같게 적용해주면 됨.)

 

EC2에서 RDS 접속하기

EC2에 접속한 터미널에서 먼저 MySQL을 설치해야한다.

(MariaDB는 MySQL 기반)

sudo yum install -y mysql

 

DB 접속

mysql -u 마스터사용자계정 -p -h 앤드포인트

 

EC2를 통해 생성한 RDS에 잘 접속됨을 확인할 수 있다. 우리가 생성한 Test DB도 확인.

반응형
반응형

학원에서 교육을 듣던 중간 쯤 지나가는 말로 친구 eva에게 생일 선무롤 간단한 페이지를 만들어 주겠다는 약속(?)을 지키기 위해 이지업 강의 - 포토그램 만들기를 토대로 만들은 cheolstagram을 evastagram으로 바꾸어서 aws를 이용해 생일글을 전달해 주려고 배포하면서 기록을 남긴다.

 

이지업 I 모두를 위한 코딩교육

 

이지업 I 모두를 위한 코딩교육

안녕하세요, 모두를 위한 코딩교육 이지업입니다! 풍부한 강의와 함께 지식을 공유할 수 있는 곳! 20년의 IT교육 역량, 이제 온라인에서 만나보세요!

www.easyupclass.com

 

우선 cheolstagram의 기반이 된 강의의 출처이다. 설명도 세세하게 잘해주시고, 확실히 보면서 많이 늘었다. 무엇보다 가격대비 최고이니 필요하신 분들은 들어보는 걸 강력 추천드립니다.

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링 시큐리티를 활용한 소셜 로그인 등으로 애플리케이션을 개발하고, 뒤이어 AWS 인프라의 기본 사용법과

www.aladin.co.kr

 

위 책의

Ch. 6 AWS EC2

Ch. 7 AWS RDS

Ch. 8 서버 연결

을 참고했습니다.

 

AWS Management Console

 

AWS Management Console

AWS Support 플랜은 AWS로 성공하는 데 도움이 되는 다양한 도구, 프로그램 및 전문 지식에 대한 액세스의 조합을 제공합니다.

aws.amazon.com

 

AWS 사이트에 들어가서 로그인을 한다. 아이디가 없다면 회원가입을 해야하는데 회원가입 과정에서 신용카드가 필요하다. 회원가입 과정에서 1달러가 결제됐다가 취소되기도(?) 한다.(가입한지는 오래돼서 정확히는 기억이 안난다.)

 

로그인을 하면 아래와 같은 화면이다.

여기서 왼쪽 상단의 서비스 → 모든 서비스 → EC2로 들어가준다.

 

주황색 인스턴스 시작 버튼을 눌러 인스턴스를 생성한다.

 

맨 위에 Amazon Linux 2 AMI (HVM), SSD Volume Type 을 선택한다.

Amazon Linux를 사용하는 이유는 아마존이 개발하고 있기 때문에 서비스와의 연동이 쉽고 yum이 빠르다.

🏀 ANDONE - yum이란 Yellow dog Update라고도 하고 Duke University에서 RPM 설치를 개선하기 위해 개발한 패키지 관리자이다.

 

배포 연습을 하는 것이기에 프리티어로 선택한다. 프리티어는 기간 1년동안 무상으로 사용할 수 있다.

다음: 인스턴스 세부 정보 구성 클릭.

 

여기선 설정할 것이 없다.

다음: 스토리지 추가

 

처음 들어가면 스토리지 크기가 기본 8(?)로 되어있는데 프리티어는 30GB까지 무료이므로 우리는 사용할 수 있는 최대로 사용해주자. 30으로 크기 변경 후 다음: 태그 추가.

 

여기서는 태그 추가를 클릭하여 키는 name으로 하고 값은 인스턴스 이름으로 지정하고 싶은 것으로 작성한다.

다음: 보안 그룹 구성

 

보안 그룹을 구성해야하는데 여기서 지정된 포트번호로 기본적인 통신을 하기 때문에 잘 해야한다.

 

방화벽의 기본요소는 다음과 같다.

  • Inbound: 외부에서 EC2 인스턴스로 들어오는 트래픽입니다. 대표적인 것들로는 HTTP, HTTPS, SSH, RDP 등이 있습니다.
  • Outbound: EC2 인스턴스에서 외부로 나가는 트래픽입니다. EC2 인스턴스 안에서 인터넷을 사용할 경우 Outbound라 할 수 있습니다. 대표적으로 파일을 다운로드하거나, 외부 SSH로 접속하는 것 등이 있습니다.
  • Type: 프토토콜 형태입니다. 프로토콜은 크게 TCP, UDP, ICMP로 나눌 수 있습니다.
  • Port, Port Range: 포트 번호입니다. TCP, UDP 프로토콜은 0~65535 사이의 포트 번호를 사용하게 됩니다(ICMP는 포트 번호를 사용하지 않습니다). 우리가 익히 알고 있는 HTTP는 80번 SSH는 22번처럼 각 서버 애플리케이션들은 고유의 포트 번호를 사용하고 있습니다.
  • Source/Destination: 연결 혹은 접속 가능한 IP 대역을 뜻합니다. Inbound 일 경우 Source, Outbound일 경우 Destination이라 부릅니다. IP 주소 하나만 지정할 수도 있고 CIDR 표기 방법을 이용하여 일정한 대역을 설정할 수 있습니다.
  • Rule: 지금까지 설명한 Inbound, Outbound, Type, Port, Source/Destination을 조합한 것을 Rule(규칙)이라고 합니다.

SSH에는 소스에 내 IP로 선택하면 오른쪽에 ip가 자동으로 적용된다.(추후에 인스턴스에 SSH로 접속할 ip)

규칙을 추가하여 HTTPS, 사용자 지정 TCP(8080 - Tomcat) 포트를 열어주자. 추후에 db를 위해 더 추가할 것

이제 모든 설정이 끝났다. 검토 및 시작을 눌러준다.

 

내용을 한번 더 검토해주고 시작하기를 누른다.

 

 

시작하기를 누르면 키페어 생성하는 창이 뜬다.

새 키 페어 생성을 선택한 후 키 페어의 이름을 입력해주고, 키 페어 다운로드를 본인이 기억하는 위치로 꼭 저장해둔다!!!!

추후에 SSH로 ec2 인스턴스에 접속할 때도 사용.

 

인스턴스가 생성된 화면이다. 인스턴스 보기를 눌러보자.

 

아래쪽에 새로운 인스턴스가 생성된 것을 볼 수 있다. (위에 것은 기존에 사용하던 인스턴스이니 무시하자.)

이제 EC2의 서버를 고정 IP로 사용하기 위해서 탄력적 IP를 생성해야 한다. 탄력적 ip를 사용하지 않으면 ec2 인스턴스를 재시작 할 때 마다 IP가 변경되어 번거로운 경우가 발생한다.

 

왼쪽 메뉴바에서 >네트워크 및 보안 >탄력적 IP를 클릭.

 

오른쪽 위에 탄력적 IP 주소 할당 클릭.

 

할당 클릭하면 바로 탄력적 IP 주소가 할당된다. 필자는 이미 받은 IP주소가 있어서 할당하진 않겠다.(알기로는 한개까지 무료이다.) 그리고 여기서 중요한 것은 생성된 탄력적 IP 주소를 인스턴스와 바로 연결해주어야 한다는 것이다. 그렇지 않으면 요금이 나가는 것으로 알고 있다. 그러므로 바로 연결해주자.

 

해당 IP 선택 후 작업 > 탄력적 IP 주소 연결 클릭

 

인스턴스를 선택해주고, 프라이빗 IP 주소를 선택해 준 후 연결 클릭.

 

탄력적 IP 주소에서 IP 주소에 연결된 인스턴스 ID를 확인할 수 있다.

 

인스턴스를 확인해보면 탄력적 IP가 지정된 것을 확인할 수 있다. (위의 인스턴스 확인 - 필자 기존 사용하던 것)

그럼 이제 EC2 인스턴스에 터미널로 접속을 해보자.

ssh ~i /경로/pem키파일명 ec2-user@인스턴스ip주소
# 인스턴스 ip 주소는 할당받은 탄력적 ip 주소

 

묻는 질문에 yes로 대답하면 EC2에 성공적으로 접속된다.

(Permisson denied 메세지가 뜨며 접속이 거부되는 경우가 있는데 이는 아까 받은 pem키 권한의 문제이다. 다음과 같이 권한을 변경해주면된다.)

chmod 600 /pem키경로/pem키파일명

이렇게 생성한 EC2 인스턴스에 접속까지 완료하였다.

반응형

+ Recent posts