우리가 어떤 서비스를 만들고 24시간 이용하게 하려면 24시간 작동하는 서버가 필요하다.
이에는 3가지 옵션이 존재하는데 다음과 같다.
1. 집에 PC를 24시간 구동시키기
2. 호스팅 서비스(Cafe 24, 코리아호스팅)을 이용한다.
3. 클라우드 서비스(AWS, AZURE,GCP)를 이용한다.
1,2번 옵션이 일반적인 비용면에서 유리하나, 특정 시간에 트래픽이 몰렸을경우 유동적으로 사양을 늘릴 수 있는, 3번이 유리한 옵션이다.
클라우드 서비스란?
- 인터넷(클라우드)을 통해, 서버, 스토리지, 데이터베이스, 네트워크 등의 컴퓨팅 서비스를 제공하는 것을 말한다. 단순 물리 장비를 제공하는 것이 아닌 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리등 개발자가 직접할 일을 대신 지원해줌.
EX : AWS EC2는 서버장비를 대여하고 그 안의 모니터링, 로그관리, 하드웨어 교체, 네트워크 관리등 개발자가 직접할 일을 대신 AWS가 지원한다.
클라우드엔 다음과 같은 형태가 존재함
(1) Infrastructure as a Service (IaaS, 아이아스, 이에스)
- 기존 물리장비를 미들웨어와 함께 묶은 추상화 서비스
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT인프라를 대여해주는 서비스
- Ex : AWS EC2 S3등이 있음.
Q. 미들웨어란?
(2) Platform as a Service (Paas, 파스)
- Iaas에서 한 번 더 추상화한 서비스
- 추상화 되었기에 더욱 많은 기능이 자동화 되어있음.
- AWS의 Beanstalk, Heroku
Q. 어떤 기능이 추가?
(3) Software as a Service (Saas, 사스)
- 소프트웨어 서비스
- 구글드라이브, 드랍박스, 와탭등
딱 들었을때 3번의 예시는 직접 경험해보았기에 이해가 쉬운데 1,2번은 아직 크게 체감이 안된다. 국내 대부분 기업은 AWS를 사용하고 있고 (2)는 작업이 간소화되지만 프리티어로 무중단 배포가 불가능하기 때문에 일단! 하나하나 다뤄보자.
6.1 AWS 회원 가입
aws.amazon.com/ko 에서 무료 계정을 생성하자.
진행과정에서 큰 어려움은 없었다.
6.2 EC2 인스턴스 생성하기
EC2란?
- Elastic Compute Cloud의 약자로 AWS에서 제공하는 성능, 용량등을 유동적으로 사용할 수 있는 서버.
"AWS에서 리눅스, 윈도우 서버를 사용한다." == EC2를 사용한다는 이야기.
인스턴스란?
- 객체 지향 프로그램에서의 객체를 의미함.
제한사항
- 사양이 t2.micro만 가능함
- 월 750시간의 제약, 초과시 비용 (1대만 사용한다면 24시간 사용가능함.)
가입한 아이디로 AWS Management Console에 로그인을 한다. 로그인 이후에는, EC2를 검색하고, 인스턴스 시작을 누른다.
이후, AMI를 설정해야하는데 책에서는 Amazon Linux AMI2가 아닌 1을 선택하라고 했으나 알아보니 1은 2020.12.31에 서비스를 종료하였다고 한다. 따라서 나는 2를 선택해서 진행했다.
AMI란?
- Amazon Machine Image의 약자, EC2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것을 의미함. 인스턴스라는 가상 머신에 운영체제등을 사용할 수 있게 정보를 구워넣은 것이라고 생각하면 된다고 한다.
Amazon Linux AMI를 사용하는 이유?
- 아마존에서 개발 중이라 지원이 유리함
- AWS의 각종 서비스와 상성이 좋음
- 아마존의 독자적인 개발 리포지터리를 사용하고 있어 yum이 빠르다.
yum이란?
- Yellodog Update Modified의 약자로 레드햇 계열의 리눅스 배포판에서 사용하는 프로그램(패키지) 설치 관리 도구
따라서 sudo yum 뒤에 install 관련 명령어가 붙은것을 자주 볼 수 있다.
ㅍㅐ키지 관리도구! 정도로 이해하자.
인스턴스 유형은 t2.micro를 선택하자.
t2 : 요금 타입을 이야기함. 이 시리즈를 T시리즈라고 하는데 다양한 사양을 사용할 수 있다는 장점이 있음. 이 시리즈는 저사양에서도 사용이 가능하다는 점에서 활용도가 높음.
크레딧 : CPU를 사용할 수 있는 포인트. 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받음. 크레딧을 사용하지 않을땐, 축적. 정해진 사양보다 트래픽이 높아지면 축적한 크레딧을 더 쓰고 모두 소진시 EC2를 사용할 수 없음.
*이름 태그 : 웹 콘솔에 표기될 태그로 Name 태그를 등록한다. EC2의 이름을 붙이는 것.
보안 그룹 : 방화벽을 의미한다. 사용자 지정 TCP 포트를 8080으로 설정했는데, 이는 서버로 8080포트외에는 허용하지 않겠다는 것을 의미한다.
SSH , 포트항목 22 : AWS EC2 터미널로 접속할 때를 의미함. pem키가 없으면 접속이 안되니 전체 오픈을 하는 경우가 있다. 이 경우 pem키가 깃헙이나 구글에 노출되면 서버에서 가상화폐가 채굴되기도 한다.
보안을 높이기 위해 pem 키 관리와 지정된 IP에서만 접속을 위해 내 IP로 설정하고 다른장소에서 접속시에는 해당 장소의 IP를 다시 규칙에 추가하자.
인스턴스 시작 검토는 창을 못찾아서 따로 진행하지는 못했다.
pem키 : 비밀키로 EC2 서버로 접속할때 필요한 파일. 반드시 잘 관리되는 디렉토리에 저장됨.
생성된 인스턴스를 보면 다음과 같이 IP와 도메인ㅇ이 자동으로 할당되었다.
인스턴스 또한 하나의 서버로 IP가 존재하는데 인스턴스 생성 및 시작할 때 자동으로 새 IP를 할당한다, 매번 IP 주소가 변경되면 접속할 IP 주소를 다시 확인해야하므로 이 또한 비용이다. 따라서 고정 IP가 필요하다.
EIP ( Elastic IP, 탄력적 IP) 를 AWS의 고정 IP라고 한다.
이를 직접 생성하고 할당해주자.
책에 특별한 설명이 없어서 기본 설정으로 할당을 완료했다. 또한 [작업] - [주소연결]을 통해 생성한 EC2 인스턴스와 연결을 완료한다.
이후, 다시 인스턴스로 들어가 탄력적 IP가 제대로 설정되었는지 확인하자.
* 생성한 탄력적 IP는 EC2에 연결하지 않으면 비용이 발생하므로 바로 연결해주도록 하자. 만약 사용할 인스턴스가 없으면 탄력적 IP를 삭제하자.
6.3 EC2 서버에 접속하기
자, 이제 생성한 서버로 접속을 해보자. 윈도우는 putty를 이용하라네,,, 슈벌... 귀찮아.
우선, puttygen을 실행해 .pem -> .ppk로 변환을 진행한다. 변환을 진행하고 putty를 실행한다.
HostName(Or Ip address)
ec2-user@퍼블릭 IP 주소를 등록한다. 내가 생성한 탄력한 IP 주소를 등록하면 된다.
Port : SSH 접속 포트인 22로 설정한다.
Connection type : SSH를 선택함.
이후 왼쪽 사이드바에서 [conncetion] - [SSH] - [Auth]에 들어가서 Browse이후 ppk 파일을 불러온다.
해당 ppk 파일이 있어야 접속이 가능하다. 이후 Open을 하면 정상적으로 진행이 되는데 나는 집에서 인스턴스를 생성하고 카페에서 작업을 진행해 접속에 장애가 있었다.
따라서, 인스턴스에서 보안그룹 설정을 변경하고 다시 진행하니 제대로 접속이 되었다.
6.4 아마존 리눅스 1 서버 생성 시 꼭 해야할 설정들.
이 서버에서 몇 가지 설정이 필요하다. 자바 기반 웬 어플리케이션( 톰캣, 스프링 부트 )가 작동해야하므로 다음 설정이 필수다.
- Java 8 설치 : 현재 프로젝트의 언어이다.
콘솔창에 다음 명령을 입력한다.
sudo yum install -y java-1.8.0openjdk-devel.x86_64
sudo /usr/sbin/alternatives --config java
해당 명령을 입력하고 1번을 선택하자. 1.8.0을 보고 선택했다.
sudo 명령어란?
SuperUser do , Substitute user do의 약자로, 현재 계정에서 루트 권한 이용하여 명령어를 실행할 때 사용하는 명령어이다.
- 타임존 변경 : 기본적으로 미국 시간대이므로 한국시간대로 변경을 해야 서비스 운영이 가능하다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이후 date 명령어를 실행해 KST로 변경되었는지를 확인하자.
- 호스트네임 변경 : 현재 접속한 서버의 별명을 등록하자. 실무에선, 다양한 수십대의 서버가 작동되어 IP로만 서버 역할을 구분할 수 없기에 별명을 등록해 구분을 한다.
콘솔에 sudo vim /etc/sysconfig/network를 입력하고 HOSTNAME을 추가한다. 여기서 나는 기존 HOSTNAME이 존재하지 않아서 추가를 해줬다.
sudo reboot로 서버를 재실행했는데 그냥 연결이 끊겼는데 이게 맞는지 모르겠다...
확인하는 방법도 모르겠다
sudo vim /etc/hosts에 들어가서 127.0.0.1 등록한 HOSTNAME을 추가하고 curl 등록한이름으로 잘 등록했는지 확인해주자.
이렇게 EC2 설정을 완료했다. 이제 AWS의 데이터베이스인 RDS를 생성하고 설정해보자.
수정 02.17
버전이 달라서인가 책에서 제시한 방법대로 hostname을 변경하면 안된다고 한다.
sudo vim /etc/sysconfig/network에 들어가면 책과 달리 HOSTNAME에 대한 line이 없어서 추가를 해줬는데 윤정님 방법을 보니 그게 아니라 다른 방법으로 진행을 해야했다.
sudo hostnamectl set-hostname [변경할 hostname]
이렇게 설정을 진행해주고, 우선, 서버를 reboot한다. 다시 재접속을 하니 hostname이 다음과 같이 바뀌어있다.
HOSTNAME을 변경하는 목적이 해당 서비스가 어떤 서비스인지를 표현하기 위함임을 기억하고 추후에 다른 서비스에서 hostname을 바꿀땐 명시적으로 알 수 있는 이름을 설정하자.
이후, /etc/host에 들어가 hostname을 수정해주자.
이후 curl springboot1을 진행하면 다음과 같이 포트 80으로 접근이 불가능하다는 에러가 발생할 것이다.
일단 이부분을 해결했으니 뒤에 다시할 8장도 잘됐으면...!
참고 : hostname이 /etc/hosts/에 등록하지 않아 발생한 우아한 형제들의 장애가 있다.
woowabros.github.io/experience/2017/01/20/billing-event.html에서 확인해보자..
'BE > 6기 코테이토 - Spring Study' 카테고리의 다른 글
4회(1). Ch8 - EC2서버에 프로젝트를 배포해보자 (0) | 2023.02.15 |
---|---|
4회. Ch7 - AWS에 데이터베이스 환경을 만들어보자. - AWS RDS (0) | 2023.02.14 |
3회 - Ch.5(2) 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.02.08 |
3회 - Ch.5 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기 (0) | 2023.02.07 |
3회 - Ch4 머스테치로 화면 구성하기 (0) | 2023.02.03 |