gi_dor

AWS 배포 EC2 인스턴스 생성과 연결 배포 , MobaXterm 본문

AWS/CI CD

AWS 배포 EC2 인스턴스 생성과 연결 배포 , MobaXterm

기돌 2024. 6. 14. 18:39
728x90

프로젝트 당시 날짜가 안되어 선생님이 배포를 하셨기에 이렇게 학원 종료후
RDS 도 연결해 보고 이번에 EC2 를 만들어 배포 까지 해보려고합니다

https://product.kyobobook.co.kr/detail/S000001019679

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 | 이동욱 - 교보문고

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 | 가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현합니다

product.kyobobook.co.kr

책이 19년도여서 버전이 많이 안맞는다 .. 또한 사람들은 Ubuntu 또는 리눅스2 를 사용하고 책에서는 리눅스1을
사용하기에 쉽지 않아서 여러 블로그를 보며 하기에 시간이 오래걸렸습니다.


 

 AWS 는 Amazon 에서 제공하는 클라우드 서비스 입니다 
간단하게 생각하면 Amazon에서 가상의 컴퓨터를 대여해서 사용한다고 생각하면 됩니다

 

1. EC2

  • 가상의 컴퓨터를 대여해준다
  • 서버 , 스토리지 , 데이터베이스 등의 서비스를 제공
  • 손쉽게 운영체제 ,CPU , RAM , 용량 구성

2. RDS Relational Database Service

  • 관계형 데이터베이스 서비스
  • 관계형 DB를 대여

Windows 
Ubuntu
Java17
Springboot
EC2
RDS
Gradle
MySQL8

 

1. 인스턴스 생성

 

2. 새로운 키 생성

3. 네트워크 설정

 

3. 스토리지 구성

최대 30GB 까지 사용 할수 있다고 합니다

 

4. 생성


EC2 연결

 

인스턴스 생성시 만든 key 파일이 있는 곳에서 Git Bash 를 통해 터미널 실행합니다
ssh  명령어를 입력해 인스턴스에 접속


MobaXterm으로 EC2접속 

'스프링부트와 AWS로 혼자 구현하는 웹서비스' 책에서는 putty 라는 프로그램을 사용했지만
학원에서는 MobaXterm 이라는 것을 사용하는 것을 볼수 있었다

Windows 만 지원하고 Mac 에서는 사용할수 없다

  • SSH 원격 접속(원격 Linux 서버 접속) 가능
  • FTP / SFTP 가능
  • 윈도우 즐겨 찾기처럼 서버를 등록하고 로그인 및 비밀번호 등 접속 정보를 저장 후 자동 로그인 가능
  • 보안 키 또한 저장 가능하여 매우 편리함.

FTP -  File Transfer Protocol의 약자이며, 빠른 파일 전송이 주된 목적이다. 쉽게 말해서 Linux(원격 서버)에서 내 PC로 양 방향으로 파일 전송 

SFTP - SSH의 파일 전송 버전을 뜻하고, 네트워크 프로토콜 중 하나이다. 

https://backendcode.tistory.com/270

 

https://mobaxterm.mobatek.net/

 

MobaXterm free Xserver and tabbed SSH client for Windows

The ultimate toolbox for remote computing - includes X server, enhanced SSH client and much more!

mobaxterm.mobatek.net

 

생성한 인스턴스의 상세보기로 들어가 퍼블릭IPV4 주소를 입력한다 - 탄력적 IP 발급받아서 연결해서 사용 

리눅스로 인스턴스 생성 시 ec2-user 를 사용한다고 한다

2월이후로 탄력적 IP 사용시 요금이 청구된다 하루에 0.17달러가 청구되어있더라..

인스턴스 생성시 만든 key  

EC2 접속 완료

sudo apt update

0. 시간대 한국으로 변경

sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
date;		// KST

1. Java17  , 환경변수

sudo apt install openjdk-17-jdk
java -version

// 자바 환경변수1
sudo nano /etc/environment  

// 파일 맨 밑으로 가서
JAVA_HOME=/path/to/java/jdk
PATH=$PATH:$JAVA_HOME/bin


// 자바 환경변수2
 nano ~/.bashrc
 
 // 파일 맨 밑
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

2. Gradle

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install gradle // 여기서 아마   4.4.1버전 오래된 버전 설치되었다.

// 신상 gradle
// 알집으로 gradle 설치
wget https://services.gradle.org/distributions/gradle-8.3-bin.zip -P /tmp

// 알집 풀기
sudo unzip -d /opt/gradle /tmp/gradle-7.6.1-bin.zip

gradle --version

Please install unzip on your system using your favourite package manager.  오류 발생시 

sudo apt-get update
sudo apt-get install unzip
sudo apt install gradle

3.MySQL

sudo apt install mysql-server // 설치
mysql -u RDS아이디 -h 호스트주소,엔드포인트 -P 3306 -p

// id , password 입력후 
show databases;  // DB확인
use DB이름; // 사용한 DB 선택
show tables; // DB안에 테이블 확인

// workbench에서 이미 import를 해놨기때문에 DB안에 테이블과 데이터들이 저는 조회가 되었습니다

mysql 에서 빠져 나오기

exit;

4. git , git clone

git clone -b 브랜치명 repository주소

c;one 판 파일을 MobaXterm으로 들어가 application.properties에 DB 접속정보 확인해주세요

저는 VSCode 가 설치되어서 코드가 보이는데 다른분들은 모르겠네요

5. 인텔리제이 - 프로젝트 실행  jar 파일빌드

./gradlew clean
./gradlew build 또는 ./gradlew bootJar

chmod +x gradlew

 

./gradlew build 를 했을시 72% 에서 30분이 지나도 안되어서 강제종료후 EC2인스턴스 접속이안되서
1시간 ? 정도 기다리면서 EC2 인스턴스 정지도 해보고 재시작도 해보고 재부팅도 했다가 다시 접속되어서
./gradlew bootJar 하니깐 바로 되었습니다

DB 2중화 이후 ./gradlew clean → ./gradlew build bootJar 하니깐 또또또 76%에서 멈추네


./gradlew build bootJar 라고 입력해서 계속 안되는 거였네요

 

주소를 복사해 해당 파일이 있는 폴더로 이동 MobaXterm에  myapp 폴더 생성 .jar 파일 붙여넣기

cd myapp
java -jar BookHub-0.0.1-SNAPSHOT.jar



nohup java -jar BookHub-0.0.1-SNAPSHOT.jar 1>log.out 2>err.out &
// nohup를 사용하면 프로세스를 실행하고 백그라운드로 이동시킨다고 한다
// 이렇게하면 터미널 세션이 종료되어도 계속 실행된다고 한다

cat err.out // err.out : 2는 에러출력을 뜻한다. 문제가 있을 때는 err.out에 출력
cat log.out // log.out : 1은 표준출력을 뜻한다. 문제가 없을 때는 log.out 파일에 로그를 기록
tail -f // 파일의 마지막만 보여준다고함 , -f를 붙이면 실시간 업데이트 된다고합니다

끼야옷! 

http://인스턴스IP 또는 탄력적IP:8080

 

 

  • 1일차 EC2 , RDS 가 뭔지 
  • 2일차 RDS 적용 해보기 , EC2인스턴스가 필요하다고함 
  • 3일차 RDS 프로젝트 적용 됨 , 배포 설정_java git 등등설치
    배포 도전 ./gradlew build 74% 1hr 에서 화나서 강제종료 , Ec2 인스턴스 접속안됨
  • 4일차 배포안됨 ./gradlew build 74% 30m 에서 화나서 강제종료 , Ec2 인스턴스 접속안됨
    ./gradlew bootJar 라는게 있어서 사용 
    배포 성공

 

참고 블로그

728x90