1. 클라우드란?
외부에서 본인의 서비스에 접근하려면 24시간 작동하는 서버가 필수이고 이를 구축하기 위해서는 3가지 선택지가 있다.
- 집에 PC를 24시간 구동
- 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용
- 클라우드 서비스(AWS, AZURE 등)을 이용
일반적으로 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴하고, 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴수 있는 클라우드가 유리하다.
1) 클라우드란?
클라우드 서비스는 클라우드(인터넷)을 통해 서버, 스토리지, 데이터베이스, 네트워크 등의 컴퓨팅서비스를 제공하는 것이다.
2) 클라우드 형태
(1) Infrastructure as a Service(IaaS)
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해 주는 서비스
- AWS의 EC2, EC3등
(2) Platform as a Service(PaaS)
- IaaS에서 한번더 추상화한 서비스로, 많은 기능이 자동화로 되어있다.
- AWS의 Beanstalk, Heroku
(3) Software as a Service(SaaS)
- 소프트웨어 서비스를 말한다.
- 구글 드라이브, 드랍박스, 와탭 등
3) AWS를 선택한 이유
- 첫 가입 시 1년간 대부분의 서비스가 무료
- 클라우드에서는 기본적으로 지원하는 기능이 많아야 개인이나 소규모일 때 개발에 더 집중 가능
- 사용자가 많아 국내 자료와 커뮤니티가 활성화 되어 있다.
2. AWS EC2 인스턴스 생성
EC2는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버로, 보통 "AWS에서 리눅스 혹은 윈도우 서버를 사용한다"라고 하면 EC2를 이야기 하는 것이다.
1) 리전을 서울로 변경
초기에는 리전이 오아이주로 선택되어 있음
2) EC2 검색 > EC2 인스턴스 시작
인스턴스 : EC2 서비스에 생성된 가상머신
3) 태그 등록 > AMI 선택 > 인스턴스 유형 선택 > 키페어 생성 > 보안 규칙 생성
태그에는 웹 콘솔에 표기될 Name 태그 등록한다. EC2의 이름을 붙인다고 생각.
AMI : EC2 인스턴스를 시작하는 데 필요한 정보를 이미지로 만들어 둔것으로, 인스턴스라는 가상머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 된다.
t2는 요금 타입을 이야기하고, micro는 사양을 말한다. t2외에 t3도 있으며 이들을 T시리즈 또는 범용 시리즈로 불린다.
그리고 이들은 크레딧이라는 일종의 CPU를 사용할 수 있는 포인트 개념이 있다.
인스턴스로 접근하기 위해서는 pem키(비밀 키)가 필요하다. 인스턴스는 지정된 pem키와 매칭되는 공개 키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지 않기에 절대 유출되어서는 안된다.
보안 그룹은 방화벽을 이야기하며, '서버로 80 포트 외에는 허용하지 않는다'는 역할을 하는 방화벽이 AWS에서는 보안그룹으로 사용된다.
- SSH이면서 포트 번호가 22인 경우 : AWS EC2에 터미널로 접속할 때
- 지정된 IP에서만 ssh 접속이 가능하게 구성하고, 다른 장소에서 접속할 때는 해당 장소의 IP를 다시 SSH 규칙에 추가하는 것이 안전
서버의 용량을 얼마나 정할지 선택, 설정 기본값은 8GB이지만 프리티어로 30GB까지 가능
4) 인스턴스 생성 확인
인스턴스도 결국 하나의 서버이기에 IP가 존재한다. 인스턴스 생성시 항상 새 IP를 할당하는데, 한 가지 조건이 더 있다. 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다는 것이다. 이렇게 되면 매번 접속해야하는 IP가 변경되어 PC에서 접근할 때마다 IP주소를 확인해야 한다. 때문에 인스턴스의 IP가 매번 변경되지 않고 고정 IP(EIP)를 가지게 해야한다.
5) EIP 할당
탄력적 IP 주소 할당 > EIP와 방금 생성한 EC2 주소 연결
방금 생성한 EIP는 생성하고 EC2 서버에 연결하지 않으면 비용이 발생하기 때문에 무조건 EC2에 바로 연결해야 하며 더는 사용할 인스턴스가 없을 때도 EIP를 삭제해야 한다.
3. EC2 서버에 접속
윈도우에서는 ssh에 접속하기에 불편한점이 많아 별도의 클라이언트 putty를 설치
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
실행 파일 putty.exe와 puttygen.exe를 설치한다.
1) puttygen에서 pem 키를 ppk로 변환
putty는 pem키로 사용이 안 되며, pem키를 ppk 파일로 변환을 해야한다.
2) putty 실행 방법
Session에서 HostName, Port, Connection Type을 지정해준다.
- HostName : username@public_ip를 등록한다. 생성한 Amazon Linux는 ec2-user가 username이라 ec2-user@탄력적 주소를 등록하면 된다.
- Port : SSH 접속 포트인 22 등록
- Connection type : SSH 선택
Connection > Auth > Credentials > Private key file to authentication Browse 로드
Session > 현재 설정들을 저장할 이름 등록 > Save
SSH 접속 성공
4. 아마존 리눅스 서버 생성시 꼭 해야할 설정들
1) Java 11 설치
sudo yum install java-11-amazon-corretto
- 버전확인
java -version
- 자바 선택
sudo /usr/sbin/alternatives --config java
2) 타임존 변경
EC2 서버의 기본 타임존은 UTC이다. 이는 세계 표준 시간으로 한국의 시간대가 아니라 9시간의 차이가 있다. 이렇게 되면 서버에서 수행되는 Java 애플리케이션에서 생성되는 시간도 모두 9시간이 차이가 나기 때문에 꼭 수정해야 한다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul etc/localtime
3) 호스트 네임 변경
여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어렵다. 그래서 각 서버사 어느 서비스인지 표현하기 위해 HOSTNAME을 변경해야한다. 호스트 이름 업데이트를 유지하려면 preserve_hostname cloud-init 설정이 true로 설정되어 있는지 확인해야 한다.
sudo vim /etc/cloud/cloud.cfg
preserve_hostname 설정이 되어있지 않으면 파일 끝에 다음 텍스트 줄을 추가한다.
sudo hostnamectl set-hostname springboot-webservice
HostName을 변경하여 원하는 호스트 이름을 반영하고, 인스턴스를 재부팅해 새 호스트 이름을 적용한다.
sudo reboot
그리고 호스트 주소를 찾을 때 가장 먼저 검색해 보는 /etc/hosts에 변경한 hostname을 등록해야한다.
다음 명령어로 /etc/hosts 파일을 연다.
sudo vim /etc/hosts
방금 등록한 HOSTNAME을 등록하고 :wq 명령어로 저장하고 종료
127.0.0.1 방금 등록한 HOSTNAME
정상적으로 등록되었는지 확인
curl springboot-webservice
80 포트로 접근이 안된다는 에러가 발생한다. 이는 아직 80포트로 실행된 서비스가 없음을 의미하기에 curl 호스트 이름으로 실행은 잘되었다는 의미이다.
'스프링부트와 AWS로 혼자 구현하는 웹서비스' 카테고리의 다른 글
Part13. AWS RDS 구축 (0) | 2024.01.19 |
---|---|
Part11. 로그인 기능 구현 (2) (1) | 2024.01.16 |
Part 10. 로그인 기능 구현 (1) (1) | 2024.01.15 |
Part 9. 게시글 화면 만들기 (2) (0) | 2024.01.13 |
Part 8. 게시글 화면 만들기 (1) (2) | 2024.01.13 |