[스프링 부트와 AWS로 혼자 구현하는 웹 서비스]무작정 따라하기 6일차

민지킴·2021년 4월 12일
0
post-thumbnail

*모든 내용은 책에 있는 내용을 기반으로 작성하였습니다.

6장 ----

외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수이다.
24시간동안 작동하는 서버에는 3가지 선택지가 있다.
1) 집에 PC를 24시간동안 구동시킨다.
2) 호스팅 서비스(Cafe24, 코리아호스팅 등)을 이용한다.
3) 클라우드 서비스(AWS, AZURE, GCP 등)을 이용한다.

일반적인 비용은 2번이 저렴하지만, 특정시간에만 사용량이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다.

클라우드란?
클라우드 서비스는 인터넷(클라우드)를 통해 서버, 스토리지(파일 저장소), 데이터베이스, 네트워크 ,소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것이다. 단순히 물리 장비를 대여하는것이 아니다.
AWS, EC2는 서버 장비를 대여하는 것이지만,실제로는 그안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리 등을 기본적으로 지원한다.

클라우드 서비스에는 몇가지 형태가 있다.
클라우드 서비스 유형 참고

클라우드 서비스 AWS, Azure, GCP들 중에서 AWS의 장점

  • 첫 가입 시 1년간 대부분 서비스가 무료이다. 단, 서비스마다 제한이 있다.
  • 클라우드에서 기본적으로 지원하는 기능이 많아 개인이나 소규모일때 개발에 집중할 수 있다.
  • 많은 기업이 AWS를 사용중이며, 사용자가 많아 국내 자료와 커뮤니티가 활성화 되어있다.

배포할때마다 서버가 다운되면 제대로 된 서비스를 만들 수 없으니 무중단 배포는 필수이다!!

6.1 AWS 회원가입

책보고 따라하기

6.2 EC2 인스턴스 생성하기

(항상 책 참고하기)

EC2

EC2는 AWS에서 제공하는 성능,용량, 등을 유동적으로 사용할 수 있는 서버이다. 보통 AWS에서 리눅스 서버 혹은 윈도우 서버를 사용합니다 라고 하면 이 EC2를 이야기 하는 것이다.

EC2의 제한

AWS에서 무료로 제공하는 프리티어 플랜에서는 다음과 같은 제한이 있다.
1) 사양이 t2.micro만 가능하다.
2) 월 750시간의 제한이 있고, 초과하면 비용이 부과된다.
24*31 = 744이다. 즉, 1대의 t2.micro만 사용한다면 24시간 사용할 수 있다.

리전

AWS 서비스가 구동될 지역. AWS는 도시별로 클라우드 센를 지어 해당 센터에서 구축된 가상머신들을 사용할 수 있으며 이를 리전이라고 부른다.

1) 리전 선택 -> 서울로 바꿔주기

2) EC2 인스턴스 생성(EC2 서비스에 생성된 가상머신을 이야기한다.)

3) 인스턴스를 생성하는 첫단계는 AMI를 선택하는것이다.(Amazon Machine Image, 아마존 머신 이미지)

  • AMI는 인스턴스를 생성하는데 필요한 정보를 이미지로 만들어 둔것이다. 인스턴스라는 가상 머신에 운영체제 등을 설치할 수 있게 구워 넣은 이미지로 생각하면 된다.

  • 아직까지는 Amazon Linux AMI 2보다는 1을 사용많이한다. -> 아직까지는 국내 자료가 더 많기 때문이다.

사용 이유

  • 아마존이 개발하고 있어서 지원받기가 쉽다.
  • 레드햇 베이스이므로 레드햇 계열의 배포판을 많이 다뤄볼수록 유리하다.
  • AWS의 각종 서비스와 상성이 좋다.
  • Amazon 독자적인 갭라 repository를 사용하고 있오 yum이 매우 빠르다.

4) 인스턴스 유형은 t2.micro

  • t시리즈는 범용 시리즈라고 부른다. t는 요금타입, micro는 사양을 이야기함
  • 크레딧이라는 일종의 CPU를 사용할 수 있는 포인트 개념이 있다. 인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는 크레딧을 축적학 사용할때 이 크레딧을 사용한다.
    여기서 이 크레딧을 다 사용하면 더이상 EC2를 사용할수 없게 된다.

5) 서버 용량은 프리티어의 경우 30기가 최대

6) 태그 추가 : Name에 본인 서비스의 인스턴스를 나타낼 수 있는 값으로 등록한다.

7) 보안그룹설정 : 기본적으로 방화벽을 의미하며, 서버로 80포트 외에는 허용하지 않는 다는 역할을 하는 방화벽이 AWS에서는 보안그룹으로 사용된다.

유형 항목에서 SSH이면서 포트 항목에서 22인 경우는 AWS EC2에 터미널로 접속할 때를 이야기한다.
pem 키가 없으면 접속이 안되니 전체오픈 하는 경우도 있는데 이경우는 pem키가 노출되는 순간에 큰일이 발생한다.

pem 키 관리와 지정된 ip에서만 ssh 접속이 가능하도록 구성하는것이 안전하다.
그래서 본인 집의 ip를 기본적으로 추가하고, 다른 장소에서 접속할때는 해당 장소의 ip를 추가하는것이 안전하다.

현재 프로젝트의 기본 포트를 추가한다.

ssh 포트번호:22 내 IP
사용자 지정 TCP : 내 프로젝트의 기본포트
HTTPS : 443

인스턴스로 접근하기 위해서는 pem 키(비밀키)가 필요하다. 그래서 인스턴스 마지막 단계에서는 할당할 pem키를 선택하는 것이다.
인스턴스는지정된 pem키와 매칭되는 공개키를 가지고 있어 해당 pem키 외에는 접근을 허용하지 않는다.
일종의 마스터키 이기 때문에 관리를 잘 해야한다.

위의 과정이 모두 끝났다면 인스턴스가 생성되고, IP와 도메인이 할당된다.
인스턴스도 결국 하나의 서버이기 때문에 IP가 존재한다. 인스턴스 생성 시에 항상 새 IP를 할당하는데, 같은 인스턴스를 중지하고 다시 시작할때도 새 IP가 할당된다.

이렇게 되면 번거롭게 되므로 IP가 매번 변경되지 않고 고정 IP를 가지게 해야한다.

EIP 할당

EIP = Elastic IP(탄력적 ip)는 AWS의 고정 IP라고 생각하면 된다.
EC2 인스턴스 페이지 왼쪽 카테고리에서 탄력적 IP를 누르고 새 주소 할당 버튼을 클릭한다.
그렇게 되면 탄력적 IP가 발급된다.

그리고 EIP와 EC2주소를 연결한다. 만약에 방금 생성한 EIP는 생성하고 EC2 서버에 연결하지 않으면 비용이 발생한다. 즉 EIP는 생성하자 마자 바로 EC2에 연결해야 한다. 더는 사용할 인스턴스가 없다면 삭제해야한다.

6.3 EC2 서버에 접속하기

맥북의 & Linux의 경우 터미널로 접속한다.
AWS 같은 외부 서버로 SSH 접속을 하려면 매번 다음과 같은 명령어를 입력해야 한다.

ssh -i pem 키 위치 EC2의 EIP

ssh 접속을 쉽게 하기 위해서 pem키 파일을 자동으로 읽어 접속하도록 한다.

pem 파일을 .ssh 로 이동시킨다.

cp pem 키를 내려받은 위치 ~/.ssh/
ex) cp ~/Documents/pem/freelec-springboot2-webservice.pem ~/.ssh/

그 후에는 작 복사되었는지 cd ~/.ssh/ 가서 확인한다.
복사 되었다면 pem 키의 권한을 변경

chmod 600 ~/.ssh/pem키 이름

그후에 ~/.ssh 디렉토리에 config 파일을 생성한다.

vim ~/.ssh/config

#freelec-springboot2-webservice
Host freelec-springboot2-webservice
HostName 탄력적 IP 주소(EIP)
User ec2-user
IdentityFile ~/.ssh/freelec-springboot-webservice.pem

Host : 앞으로 접속할 키 값

생성된 config 파일은 실행권한이 필요하므로 권한 설정을 다음과 같이 설정한다.

chmod 700 ~/.ssh/config

ssh Host값
ex)ssh freelec-springboot2-webservice

6.4 아마존 리눅스 1 서버 생성 시 꼭 해야 할 설정들

  • 아마존 리눅스 1 서버를 처음 받았다면 몇 가지 설정들이 필요한데 이 설정들은 모두 자바 기반 웹 애플리케이(톰캣, 스프링부트)가 작동해야 하는 서버들에선 필수로 해야하는 설정들이다.

  • Java8 설치

  • 타임존 변경

  • 호스트네임 변경

Java 8 설치

sudo yum install -y java-1.8.0-openjdk-devel.x86_64

sudo /usr/sbin/alternatives --config java

java8 선택

sudo yum remove java-1.7.0-openjdk

java -version

타임존 변경

EC2 서버의 기본 타임존은 UTC 이므로 한국에서 서비스를 할것이라면 타임존을 KST(한국시간)으로 수정해야한다.

sudo rm /etc/localtime

sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

Hostname 변경

여러 서비스를 관리하는 경우에는 IP만으로 어떤 서비스의 서버인지 확인이 어렵다. 그래서 어느 서비스인지 표현하기 위해서 HOSTNAME을 변경한다.

sudo vim /etc/sysconfig/network

HOSTNAME=원하는 이름으로 변경

sudo reboot 실행

그후에 호스트 주소를 찾을 때 가장 먼저 검색해보는 /etc/hosts에 변경한 hostname을 등록한다.

sudo vim /etc/hosts

127.0.0.1 등록한 hostname

저장후 나가기

curl 등록한 hostname

결과가 아래처럼 나오면 성공이다.

curl: (7) Failed to connect to freelec-springboot2-webservice port 80: Connection refused

이는 아직 80포트로 실행된 서비스가 없다는 뜻이다.

profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글