□ AWS (Amazon Web Service)
: 아마존닷컴에서 개발한 클라우드 컴퓨팅 플랫폼으로, 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 지원합니다.
외부에서 내가 만든 서비스에 접근하려면 24시간 작동하는 서버가 필요한데, 24시간 작동하는 서버에는 3가지 종류가 존재합니다.
- PC를 24시간 구동
- 호스팅 서비스를 이용
- 클라우드 서비스를 이용
□ 클라우드 종류
- Infrastructure as a Service (IasS)
- 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
- 가상머신, 스토리지, 네트워크, 운영체제 등의 IT 인프라를 대여해 주는 서비스
- AWS의 EC2, S3 등
- Platform as a Service(PaaS)
- 앞에서 언급한 IasS에서 한 번 더 추상화한 서비스
- 많은 기능이 자동화 됨
- AWS의 Beanstalk, Heroku 등
- Software as a Service(SaaS)
- 소프트웨어 서비스를 이야기 함
- 구글 드라이브, 드랍박스, 와탭 등
■ AWS 사용하기
□ AWS 회원 가입
1. https://aws.amazon.com/ko/ 로 이동
2. AWS 회원 가입


* 영문 주소는 네이버에 검색하여 사용하시면 됩니다.

* 현재 단계에서는 비용이 들지 않습니다


□ EC2 인스턴스 생성하기
EC2 (Elastic Compute Cloud)
: AWS에서 제공하는 성능, 용량 들을 유동적으로 사용할 수 있는 서버입니다.
1. 리전(Resion) 설정

2. EC2 검색 후 인스턴스 시작 선택
단계 1 : AMI 선택

* 본 책에서는 리눅스1을 사용하라 하지만 책 발행 일자 기준으로 시간이 많이 지나 저는 리눅스2를 채택했습니다.
단계 2 : 인스턴스 유형 선택

단계3 : 인스턴스 세부 정보 구성

단계 4 : 스토리지 추가

단계 5 : 태그 추가

단계 6 : 보안 그룹 구성

단계 7 : 검토 후 이상이 없을 경우 시작하기

단계 8 : 인스턴스 검토

* 인스턴스로 접근하기 위해서는 pem 키(비밀키)가 필요합니다.
- 인스턴스로 지정된 pem 키와 매칭되는 공개키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지 않습니다.
- pem 키는 이후 EC2 서버로 접속할 때 필수 파일이니 잘 관리할 수 있는 디렉토리로 저장을 해야합니다.

* 인스턴스
- 인스턴스도 하나의 서버이기 때문에 IP가 존재
- 인스턴스 생성 시에 항상 새 IP를 할당
- 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당
- 매번 IP 주소를 확인해야하는 번거러움이 발생
이를 해결하기 위해 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야합니다.
□ EIP 할당 (Elastic IP, 탄력적 IP)
1. 탄력적IP

2. 새 주소 할당

3. 할당

4. 생성된 EIP 주소 연결

5. 탄력적 IP 주소 연결


'연결' 클릭시 EIP (탄력적 IP)에 연결되게 됩니다.

* 탄력적 IP는 매우 중요한 개인 정보이기 때문에 타인에게 공개되지 않도록 유의하시기 바랍니다
□ EC2 서버에 접속하기 (mac 기준)
- 책에는
ssh -i pem 키 위치 EC2의 탄력적 IP 주소
라는 명령어를 터미널에 입력합니다. 저는 이걸 터미널에 입력했더니 아래와 같은 오류가 발생하였습니다.

해당 오류는 다운로드 받은 pem(인증키)의 사용권한이 너무 개방되어 있어 사용을 제한한다는 뜻입니다.
그래서 매번 이 긴 명령어를 사용하지 않고 위와 같은 오류를 해결하기 위해 아래와 같이 수행하였습니다.
1. SSH 접속하기
* 매번 ssh 명령어를 입력하면 너무 번거롭기 때문에 파일을 ~/.ssh/로 복사합니다.
> ssh 실행 시 pem 키 파일을 자동으로 읽어 접속을 진행합니다. 이후부터는 별도로 pem 키 위치를 명령어로 지정할 필요가 없게 됩니다
2. 복사된 pem 키 확인

* cp pem 키가 위치하는 디렉토리 ~/.ssh/ : .ssh 아래 pem 키를 복사한다.
3. pem 키의 사용 권한을 변경

* 권한을 변경하는 이유는 첫번째와 같은 오류를 잡기 위해서입니다.
4. ~/.ssh 디렉토리에 config 파일을 생성


* 부연 설명
- I >> 입력 모드
- Host 이름 >> 앞으로 해당 이름으로 실행
- HostName >> EIP (탄력적 IP 주소 입력)
- ESC >> 명령 모드
- :wq >> w : 저장 / q : 종료

5. config 파일 사용 권한 변경

6. ssh 실행

* config에서 정한 Host 이름을 입력하면 작동하는 모습
■ 서버 생성 시 꼭 해야 할 설정들
□ JAVA 설치
: 자바 기반의 웹 애플리케이션 (톰캣과 스프링부트)가 작동해야 하는 서버들에선 필수로 해야하는 설정들
1. Java 8 버전 (책에서 사용한 버전)
# 자바 8 설치
sudo yum install -y java-1.8.0-openjdk-devel.x86_64
# 버전 변경
sudo /usr/sbin/alternatives --config java
# 사용하지 않는 버전 삭제
sudo yum remove java-1.7.0-openjdk
# 버전 확인
java -version
□ 타임존 변경
UTC : EC2 서버의 기본 타임존 (한국의 시간과는 9시간 차이 발생)
이기 때문에 한국 시간(KST)로 변경해야 합니다.
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

□ Hostname 변경
: 여러 서버를 관이 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어렵습니다.
이를 해결하기 위해 각 서버가 어느 서비스인지 표현하기 위해 HOSTNAME을 변경하겠습니다.
# 편집 파일 열기
sudo vim /etc/sysconfig/network

#서버 재부팅
sudo reboot
* 원래 그런건지 잘 모르겠는데 reboot 후 바로 ssh 접속을 하게 되면 계속 refused가 뜨는데, 조금 기다렸다 다시 하거나 터미널 종료 후 다시 작동하면 잘 작동했습니다.

* 추가 작업
: 호스트 주소를 찾을 때 가장 먼저 검색해 보는 /etc/hosts에 변경한 hostname을 등록합니다.
#파일 열기
sudo vim /etc/hosts


정상적으로 등록되었는지 확인을 위해
# HOSTNAME 등록 확인
# curl 등록한 호스트 이름
curl Spring-WebService

* 아직 80포트로 실행된 서비스가 없음을 의미하는 것일뿐, curl 호스트 이름으로 실행은 잘 되었음을 의미합니다.
* curl : (6) Could not resolve host : 호스트명
오류가 발생하게 되면 HOSTNAME을 잘못 등록하여 찾을 수 없다는 것을 의미합니다.
'Spring > 스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 카테고리의 다른 글
| (IntelliJ) Spring Data JPA 사용 (0) | 2021.10.30 |
|---|---|
| (IntelliJ) Run with --stacktrace 오류 해결 방법 (0) | 2021.10.28 |
| 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현... (2)연동하기 (0) | 2021.09.09 |
| 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현... (1)설정 (0) | 2021.09.08 |
| 자바 스프링 프레임워크와 스프링 부트 와 JPA (1) | 2021.09.01 |