AWS 실습 동의서 제출 완료
[클라우드 컴퓨팅]
기존 컴퓨터로 관리하던 방식의 한계 발생 (주기적인 유지 관리 필요. 공간의 한계)
-> 데이터 센터의 등장, 유휴자원 대여 (온프레미스)
-> 클라우드 서비스 발생 (사용한 만큼 요금 지급, 스냅샷 이용해 다른 컴퓨터로 즉시 이주 가능)
클라우드의 단점 : 클라우드 제공자에게 종속. 서버 지연. 특정 회사의 기술로만 구성해야 할수도
클라우드 종류 : SaaS, PaaS, IaaS
SaaS(Software as a Service) : 당장 사용 가능한 소프트웨어 제공
Paas(Platform as a Service) : 데이터베이스, 개발 플랫폼까지 제공
IaaS(Infrastructure as a Service) : 가상 컴퓨터까지 제공
[Deploy]
배포 : 사용자가 서비스를 이용할 수 있게 하는 과정
Deployment -> Intergration -> Staging -> Production
Deployment : 각자의 컴퓨터에서 코드를 작성하고 테스트. 모든 구서우언이 각자의 환경에서 진행
Intergration : 각자의 환경에서 개발된 부분 추합. 코드간 충돌 없는지 확인
Staging : Production 단계와 가장 유사한 환경에서 테스트 진행. 복제된 실제 데이터 사용
Production : 개발된 서비스를 출시하는 단계. 실제 데이터로 서비스 제공
여러 명이 함께 작업시 환경 다를 수 있음. 환경 설정을 코드와 분리하는 것이 중요!
-> 절대경로 대신 상대경로 사용. 환경 따라 포트 분기할 수 있도록 환경변수 설정. Docker와 같은 개발 환경 통일 솔루션 사용
[EC2]
Elastic Compute Cloud.
아마존 웹 서비스에서 제공하는 클라우드 컴퓨팅 서비스
AWS에서 원격으로 제어할 수 있는 가상의 컴퓨터를 한 대 빌리는 것
사용한 만큼 비용을 지불한다 : Elastic
EC2 장점 : 구성하는데 필요한 시간 짧다. 다양한 운영체제, 구성 등 선택 가능
인스턴스 : AWS에서 빌리는 1대의 컴퓨터
AMI : Amazon Machine Image. 사용 용도에 맞게 운영체제, 런타임 등이 구성된 Setting 선택 가능
인스턴스를 생성 : AWS에서 AMI를 토대로 setting된 PC를 빌린다
[RDS]
AWS에서 제공하는 관계형 데이터베이스 서비스
위험요소, 유지 보수 등 모두 AWS에 이전
다양한 선택지 존재
[S3]
클라우드 스토리지 : 인터넷 공간에 데이터를 저장하는 저장소. 뛰어난 접근성, 확장성, 내구성, 가용성
Standard(자주 액세스), Glacier(장기보관)
S3 사용시 이점 : 정적 웹사이트 호스팅 가능
정적 파일 : 서버의 개입 없이 생성된 파일
(<-> 동적 파일 : 서버가 클라이언트의 요청에 맞추어 그 자리에서 생성한 파일)
웹 호스팅 : 서버의 한 공간을 임대해 주는 서비스
버킷 : 파일을 담는 바구니. 최상위 디렉토리. 무한히 많은 파일 저장 가능. 버킷의 이름은 고유해야.
객체 : S3에서 버킷에 담기는 파일. 키 - 값 페어 형식으로 저장. url 주소로 객체에 접근 가능(http://버킷이름.S3.amazonaws.com/객체키)
[3티어 배포전략]
3티어 : Client, Server, Database
Client 배포 : S3, CouldFront 이용하여 client application 제공. 정적 파일로 빌드하여 제공
(빌드 : 불필요한 데이터 없애고, 통합/압축하여 배포하기 최적화된 상태로 만드는 것. 데이터 용량 줄고 웹 사이트 로딩 속도 빨라진다 정적 파일 형태로 만들어줘야.)
Server Application 배포 : AWS EC2 (가상의 PC 빌려 서버 코드 구동)
Database 배포 : AWS RDS (EC2 배포된 Server Application 데이터 저장, 제공하는 데이터베이스 배포)
도메인 통해 서비스 접속하려면 AWS에서 제공하는 Route53 이용
DNS
[aws에서 가상 서버 돌리기 - EC2]
코드 스테이츠에서 알려준 아이디와 비밀번호, 인스턴스 이름 적용
(이 때 region이 도쿄로 되어 있어서 검색 불가 -> 서울로 바꿔주니 잘 떴다)
$bash // 세션 매니저 동작
이후 터미널 환경에서 실습
$ sudo apt update
$ sudo apt install openjdk-11-gre-headless // java 11 버전을 가상 터미널에 설치해줌
github에서 ssh 키 받아오기
포크 후 클론 ssh key
(클론 시 권한이 없다고 뜰 때 참고 사이트 : https://velog.io/@skyepodium/Github-SSH-Key-%EB%93%B1%EB%A1%9D%ED%95%98%EA%B8%B0 )
$ cd // 홈으로 이동
$ git clone ssh주소 // ssh 등록
$ cd be-sprint-deployment/DeployServer // DeployServer 디렉토리로 이동
$ ./gradlew build // 빌드
$ java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar
자바 빌드 후 EC2 인스턴스에서 서버 실행시 8080이 중복으로 run되는 에러 발생
-> 가상 터미널에서 kill 해주면 된다
$ ps -ef|grep java
// 8080 돌아가는 서버 아이디 PID 확인 후
$ kill -9 PID
// PID 주소 적어준다
https 에서 s를 지우고 맨 뒤에 :8080 을 붙여준다
[(Optional) Shell Script]
java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar
내용을 입력하세요.
위의 코드로 AWS에서 EC2 실행시 창 항상 열어놔야 하는 단점 존재
-> 실행 스크립트(Shell Script) 필요.
셀 스크립트는 셀이나 명령 중 인터프리터에서 돌아가도록 작성된 스크립트
인스턴스에서
$ bash
$ cd 설치할파일경로
$ nano restart.sh // nano 에디터로 restart.sh 파일 생성
// 이후 nano 에디터에서 아래 내용 붙여넣기
#!/bin/bash
ps -ef | grep "DeployServer-0.0.1-SNAPSHOT.jar" | grep -v grep | awk '{print $2}' | xargs kill -9 2> /dev/null
if [ $? -eq 0 ];then
echo "my-application Stop Success"
else
echo "my-application Not Running"
fi
echo "my-application Restart!"
echo $1
nohup java -jar build/libs/DeployServer-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev > /dev/null 2>&1 &
// -jar 이후 설치파일경로 잘 적어주기!
나노 에디터에서 파일 저장 하고 나온다
이후 아래 명령어
chmod 755 restart.sh // 실행 권한 부여
// 이후
./restart.sh // 해당 명령어로 실행 가능
!종료! 할 때는 항상 종료 버튼 눌러야 백그라운드에서 돌아가지 않는다!
$ bash
$ cd
$ cd be-sprint-deployment/DeployServer
$ ./restart.sh

./restart.sh 칠 때 마다 어플리케이션 재실행 되는 것 확인!