외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수
특정 시간에만 트래픽이 급격히 올라가는 경우가 아니라면 일반적으로 호스팅 서비스나 PC를 이용하는 저렴
-> 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴수 있는 클라우드가 유리
클라우드란 쉽게 말해 클라우드를 통해 서버, 스토리지, DB, 네트워크, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것(단순 물리 장비 대여 X)
AWS의 EC2는 서버 장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원
-> 개발자가 직접 해야할일을 AWS가 지원해주는 것
Infrastructure as a Service(Iaas
, 아이아스)
기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
가상 머신, 스토리지, 네트워크, 운영체제 등의 IT인프라를 대여해주는 서비스
ex) AWS의 EC2, S3 등
Platform as a Service(PaaS
, 파스)
laas에서 한번 더 추상화 한 서비스(한번더 추상화했기에 많은 기능이 자동화 되어있음)
ex) AWS의 Beanstalk(빈스톡), Heroku(헤로쿠) 등
Software as a Service(SaaS
, 사스)
소프트웨어 서비스를 의미
ex) 구글 드라이브, 드랍박스,와탭 등
EC2란 AWS에서 제공하는 성능,용량 등을 유동적으로 사용할 수 있는 서버
-> 보통 AWS에서 리눅스 서버 혹은 윈도우 서버를 사용합니다 하면 EC2를 의미
리전 : AWS의 서비스가 구동될 지역을 의미
(AWS는 도시별로 클라우드 센터를 지어 해당 센터에서 구축한 가상 머신을 사용할 수 있음)
리전을 서울로 변경하기
이후 EC2 서비스에서 인스턴스 시작하기를 클릭
-> 여기서 인스턴스란 EC2 서비스에 생성된 가상머신
인스턴스 생성
1단계 : AMI(Amazon Machine Image, 아마존 머신 이미지)를 선택하는 것
AMI는 EC2 인스턴스를 시작하는데 필요한 정보를 이미지로 만들어 둔 것
-> 즉 인스턴스라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 됨
이때 센토스 AMI가 아닌, 아마존 리눅스 AMI 사용한 이유
인스턴스 유형으로 t2.micro 선택
-> 여기서 t2는 요금타입, micro는 사양을얘기 함
스토리지 용량은 프리티어의 최대인 30GB로 설정
여러 인스턴스가 있을 경우 이를 태그별로 구분할 경우 검색이나 그룹 짓기가 편하므로 본인 서비스의 인스턴스를 나타낼수 있는 값으로 등록
보안 그룹
은 방화벽을 의미
-> ex) 서버로 80포트 외에는 허용하지 않는다는 역할을 하는 방화벽이 AWS에서는 보안그룹으로 사용 됨
이후 인스턴스로 접근하기 위해서는 pem키(비밀번호)가 필요함
-> 인스턴스는 지정된 pem키와 매칭되는 공개키를 가지고 있기 때문에 해당 pem 키 외에는 접근을 허용하지 않음
-> 이는 마스터키
이기 때문에 절때 유출되서는 안되며 pem키는 EC2서버로 접속할 때 필수 파일이기에 잘 관리할 수 있는 디렉토리로 지정
키페어 저장 이후 인스턴스 시작 시 정상적으로 실행이 되며, IP와 도메인이 할당 된것을 볼 수 있음
인스턴스도 결국 하나의 서버이기때문에 IP가 존재
-> 인스턴스는 생성시에 항상 새 IP를 할당받는데, 같은 인스턴스를 중지하고 다시 실행할때도 새 IP가 할당됨
-> 이를 막기 위해 매번 변경되지 않는 고정 IP를 가지게 해야함
AWS의 고정 IP를 Elastic IP(EIP: 탄력적 IP)라고 함
탄력적 IP를 눌러 선택하고 새 주소 할당을 클릭
방금 생성한 EIP, 방금 생성한 EC2 주소를 연결해주어야 함
EIP 생성 시 주의점
-> 생성하고 EC2 서버에 연결하지 않으면 비용이 발생
(즉 바로 연결해야 함, 사용할 인스턴스가 없으면 삭제해야함)
AWS와 같은 외부 서버로 SSH 접속을 하려면 매번 다음과 같은 긴 명령어를 쳐야 함
ssh -i pem 키 위치 EC2의 EIP 주소
좀더 줄이기 위해 받은 키페어 pem 파일을 ~/.ssh/로 복사
-> ~/.ssh/ 디렉토리로 pem 파일을 옮겨 놓으면 ssh 실행 시 pem 키 파일을 자동으로 읽어 접속을 진행
-> 이후 부터는 별도로 pem 키 위치를 명령어로 지정할 필요 없음
cp /Users/gim-ugjong/Documents/freelec-springboot-webservice.pem ~/.ssh/
// 확인
cd ~/.ssh/
ll
// 권한 변경
chmod 600 ~/.ssh/freelec-springboot-webservice.pem
권한 변경 이후 pem 키가 있는 디렉토리에 config 파일 생성
vim ~/.ssh/config
// 파일 형태
Host 본인이 원하는 서비스 명
HostName ec2의 Eip 주소
User ec2-user
IdentityFile ~/ssh/pem키 이름
위에서 유저 이름은 AMI에 따라 다름
작성 완료 후 :wq
작성한 config 파일은 실행 권한이 필요함
chmod 700 ~/.ssh/config
권한 설정 후 ssh 접속
ssh config에 등록한 서비스 명
ssh freelec-springboot-webservice
위 화면에서 yes 입력 시 EC2 서버 접속 성공
-> 이후부터는 ssh 서비스명만 입력하면 접속 가능한 상태가 됨
sudo yum install -y java-1.8.0-opdenjdk-devel.x86_64
sudo /usr/sbin/alternatives --config java
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
이후 date로 KST로 변경되었는지 확인
sudo vim /etc/sysconfig/network
안에서
NETWORKING=yes
HOSTNAME=freelec-springboot2-webservice
NOZEROCONF=yes
저게 안되어
sudo hostnamectl set-hostname freelec-springboot-webservice
이걸로 해결
호스트 네임 등록 이후
-> etc/hosts에 변경한 hostname 등록
-> 등록이후 curl 등록한 호스트 이름으로 체크해보기
위 경우 아직 80포트로 실행된 서비스가 없음을 뜻하는데
-> 즉 curl 호스트 이름으로 실행은 잘 되었다는 의미