섹션 6. AWS 서버 환경을 만들어보자 - AWS EC2

2023. 1. 30. 14:38· Spring/스프링부트와 AWS로 혼자구현하는 웹 서비스

이제 AWS(Amazon Web Services)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행해 보자.

 

외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수이다.

 

24시간 작동하는 서버는 3가지 선택지가 있다.

  • 집에 PC를 24시간 구동시킨다.
  • 호스팅 서비스(Cafe 24, 코리아 호스팅 등)을 이용한다.
  • 클라우드 서비스(AWS, AZURE, GCP) 등을 이용한다.

 

일반적으로 비용이 싼 것 -> 호스팅 서비스, 집에서 돌리기(전반적으로 일정한 트래픽이 유지될때)

 

특정시간에만 트래픽이 몰린다면 -> 클라우드 서비스 ( 유동적으로 사양을 늘릴 수가 있다.)

 

클라우드 서비스 -> 클라우드(인터넷)을 통해 서버, 스토리지(파일 저장소), DB, Network, 소프트웨어, 모니터링 등의 컴퓨팅 서비스를 제공하는 것.

 

단순히 물리장비를 대여하는 것으로 생각하지만 그것은 아니다.

 

ex) AWS의 EC2 는 서버장비를 대여하는 것이지만, 실제로는 그 안의 로그 관리, 모니터링, 하드웨어 교체, 네트워크 관리등을 기본적으로 지원하고 있다. 개발자가 직접 해야할일을 지원해줌.

 

클라우드의 형태

  1. Infrastructure as a Service(IaaS, 아이아스, 이에스)
    • 기존 물리 장비를 미들웨어와 함께 묶어둔 추상화 서비스
    • 가상머신, 스토리지, 네트웤, 운영체제 등의 it인프라를 대여해주는 서비스라고 보면됨.
    • AWS의 EC2, S3 등
  2. Platform as a Service(PaaS, 파스)
    • 앞에서 언급한 IaaS에서 한번더 추상화한 서비스
    • 한 번 더 추상화 했기 때문에 많은 기능이 자동화 되어있다.
    • AWS의 Beanstalk(빈스톡), Heroku(헤로쿠) 등
  3. Software as a Service (SaaS, 사스)
    • 소프트웨어 서비스를 이야기한다.
    • 구글 드라이브, 드랍박스, 와탭 등

이 책에서는 여러 클라우드 서비스 (AWS, Azure, GCP)중 AWS를 선택.

왜 와이??

  • 첫 가입시 1년간 대부분의 서비스가 무료. (서비스마다 다름)
  • 클라우드에서 기본적으로 지원하는 기능(모니터링, 로그관리, 백업, 복구, 클러스터링 등등) 이 많아 개인이나 소규모일 때 개발에 좀 더 집중할 수 있다.
  • 많은 기업이 AWS로 이전중이라 AWS 사용 경험은 도움이 된다.
  • 사용자가 많아 국내 자료와 커뮤니티가 활성화되어있다.

책에서는 AWS의 IaaS를 사용한다.

 

Paas서비스인 빈스톡의 경우 대부분 작업이 간소화되지만, 프리티어로 무중단 배포가 불가능.(돈을 내고 2대 사용하면 가능)

 

배포할 때마다 서버가 다운되면 제대로된 서비스를 만들수 없으니 무중단 배포는 필수이고 빈스톡은 사용할 수 없음.

 

그리고 AWS초보자 일때는 직접하나씩 다 다뤄 보는 것이 공부하는데에 도움이 된다.

 

6.1 AWS 회원 가입

 

준비물: master 혹은 visa 카드

 

회원가입 하면 됨

 

6.2 EC2 인스턴스 생성하기

 

EC2(Elastici Compute Cloud) 는 AWS에서 제공하는 성능, 용량 등을 유동적으로 사용할 수 있는 서버

 

보통 AWS에서 리눅스 서버 혹은 윈도우서버를 사용합니다 라고하면 EC2를 이야기함.

 

 

AWS에서 무료로 제공하는 프리티어 플랜에서는 EC2 사용에 다음과 같은 제한이 있다.

 

 

사양이 t2.micro만 가능

  • vCPU(가상 CPU) 1Core, 메모리 1GB 사양이다.
  • 보통 vCPU는 물리 CPU 사양의 절반정도의 성능을 가진다.

월 750시간의 제한이 있다. 초과하면 비용이 부과됨.

  • 24시간 * 31일 = 744시간
  • 즉 1대의 t2.micro만 사용한다면 24시간 사용할 수 있다.

이제 리전을 확인해보자.

 

더보기

리전이란??

 

AWS의 서비스가 구동될 지역을 이야기함.

 

AWS는 도시별로 클라우드 센터를 지어 해당 센터에서 구축된 가상머신들을 사용할 수 있다.

 

서울 리전이 생기기전까지는 국내 서비스들은 도쿄 리전을 사용했다. 현재는 서울 리전이 있어 국내에서 서비스한다면 무조건 서울 리전을 선택하면 된다.

EC2 대시보드에서 인스턴스 시작을 누르자.

 

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

 

더보기

AMI란??

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

 

예를들어 아마존 리눅스1 AMI를 사용한다면 Amazon Linux 1 OS가 인스턴스에 설치되어 개발자가 사용할 수 있음을 의미합니다.

 

인스턴스 유형에서는 프리티어로 표기된 t2.micro 선택

 

t2 -> 요금 타입

micro -> 사양

 

t2 외에 t2도 있으며 보통 이들을 T시리즈 라고 한다.

 T시리즈는 범용 시리즈로 불리기도 한다.(다양한 사양을 사용할 수 있기 때문)

 

이들은 다른 서비스와 달리 크레딧이란 일종의 CPU를 사용할 수 있는 포인트 개념이 있다.

 

인스턴스 크기에 따라 정해진 비율로 CPU 크레딧을 계속 받게 되며, 사용하지 않을 때는 크레딧을 축적하고, 사용할 때 이크레딧을 사용한다. 

 

정해진 사양보다 더 높은 트래팩이 오면 크레딧을 좀 더 적극적으로 사용하면서 트래픽을 처리.

크레딧이 모두 사용되면 더이상 EC2를 사용할 수 없다.

 

그래서 트래픽이 높은 서비스들은 T 시리즈를 쓰지 않고 다른 시리즈를 사용하기도 한다.

다만 그전 까지는 활용도가 높아 시작하는 단계에서는 좋은 선택.

 

세부설정은 지금은 필요없다. 필요하면 나중에 아마존 서적 찾아보기.

 

다음 설정은 스토리지 선택

 

스토리지 -> 흔히 말하는 하드디스크(ssd포함), 서버의 용량을 얼마나 정할지 선택하는 단계

 

여기서 기본값은 8GB이다. 30GB까지는 프리티어로 가능.

 

다음은 태그

(인스타그램이나 페이스북의 태그와 동일한 역할)

 

태그에는 웹 콘솔에서 표기될 태그인 Name 태그를 등록한다.

 

태그는 해당 인스턴스를 표현하는 여러 이름으로 사용될 수 있다.

EC2의 이름을 붙인다고 생각하고 넣으면 됨.

 

다음은 보안 그룹

 

보안그룹은 방화벽을 이야기함.

 

'서버로 80포트 외에는 허용하지 않는다'는 역할을 하는 방화벽이 AWS에서는 보안 그룹으로 사용된다.

기존에 생성된 보안 그룹이 없으므로 보안 그룹이름엔 유의미한 이름으로 변경.

 

보안그룹 부분은 굉장히 중요한 부분.

 

유형 항목에서 SSH이면서 포트 항목에서 22인 경우는 AWS EC2에 터미널로 접속할 때를 이야기한다.

pem 키가 없으면 접속이 안되니 전체 오픈(0.0.0.0/0, ::/0) 하는 경우를 종종 발견

이렇게 되면 이후 파일 공유 디렉토리나 깃허브에 실수로  pem키가 노출되는 순간 서버에서 가상화폐가 채굴 되는 것을 볼 수 있다.

 

보안은 언제나 높은 것이 좋으니 pem 키 관리와 지정된 IP에서만 ssh 접속이 가능하도록 구성하는 것이 안전.

 

따라서 본인의 집의 IP를 기본적으로 추가(내 IP를 선택하면 현재 접속한 장소의 IP가자동지정)

 

카페와 같이 집 외에 다른 장소에서 접속할때는 해당 장소의 IP를 다시 SSH규칙에 추가하는 것이 안전

 

현재 프로젝트의 기본 포트인 8080을 추가한다.

 

 

인스턴스로 접근하기 위해서는 pem 키(비밀키) 가 필요하다. 그래서 인스턴스 마지막 단계는 할당할 pem키를 선택하는 것.

인스턴스로 지정된 pem키(비밀키)와 매칭되는 공개키를 가지고 있어, 해당 pem 키 외에는 접근을 허용하지않음.

 

일종의 마스터키 이기 때문에 절대 유출되면안된다. pem 키는 이후 EC2서버 접속할 때 필수 파일이니 잘관리할 수있는 디렉토리에 저장하자.

 

인스턴스 시작을 누르면 생성완료

 

인스턴스도 하나의 서버이기 때문에 IP가 존재한다.

인스턴스 생성 시에 항상 새 IP를 할당하는데, 한가지 조건이 더있다.

같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다.

 

즉, 요금을 아끼기 위해 잠깐 인스턴스를 중지하고 다시 시작하면 IP가 변경되는 것이다.

이렇게 되면 매번 접속해야 하는 IP가 변경돼서 PC에서 접근할 때마다 IP 주소를 확인해야함.

굉장히 번거로우므로 인스턴스의 IP가 매번 변경되지 않고 고정 IP를 가지게 해야 한다. 그래서 고정 IP를 할당해보자.

 

EIP 할당

 

AWS의 고정 IP를 Elastic IP (EIP, 탄력적 IP)라고 한다.

 

왼쪽 메뉴탭에서 탄력적 IP를 할당 받고. 작업을 눌러 방금 만든 인스턴스와 연결시켜준다.

(인스턴스, IP 클릭해서 설정후 연결)

 

더보기

주의!

탄력적 IP를 생성하고 EC2서버에 연결하지 않으면 비용이 발생한다.

즉 생성한 탄력적 IP는 무조건 EC2에 바로 연결해야 하며 더 사용할 인스턴스가 없으면 탄력적 IP를 삭제해야함.


EC2 접속하기

 

윈도우 기준 으로 설명

 

putty 사용해야함. 자세한 내용은 252p 부터 참고.

 

key gen 실행

putty는 pem 키로 사용이 안되며 pem 키를 ppk 파일로 변환을 해야만 한다.

 

pem 키 선택

다음과 같이 자동변환이 진행 키를 눌러 save 진행하고 경고 메세지 뜨면 예 클릭하고 넘어감.

 

다음과 같이 putty 실행해서 항목 등록

 

- HostName: username@public_Ip 등록

  • 우리가 생성한 Amazon Linux는 ec2-user가 username이라서 ec2-user@탄력적 IP 주소를 등록하면 됨.

- Port: ssh 접속 포트인 22를 등록

 

- ConnectionType: SSH를 선택

 

아까 생성한 ppk 파일 로드

 

다시 세션으로 이동해 현재 설정들을 저장할 이름을 등록하고 save버튼 클릭

 

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

 

이 설정들은 모두 자바기반의 웹어플리케이션 (톰캣과 스프링부트)가 작동해야하는 서버들에선 필수로 해야하는 설정들.

 

  • Java 11설치
  • 타임 존변경
    • 기본 서버의 시간은 미국 시간대. 한국 시간대가 되어야만 우리가 사용하는 시간이 모두한국시간으로 등록되고 사용됨.
    • 즉 한국의 시간과는 9시간 차이가 발생. 이렇게 되면 서버에서수행하는 java 애플리케이션에서 생성되는 시간도 모두 9시간씩 차이가 나기 때문에 꼭 수정해야 할 설정이다.
    •  $ sudo rm /etc/localtime $ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 차례로 명령어 수
  • 호스트 네임 변경
    • 현재 접속한 서버의 별명을 등록한다. 실무에서는 한 대의 서버가 아닌 수십대의 서버가 작동되는데, IP 만으로 어떤 서버가 어떤 역할을 하는지 알 수 없다. 이를 구분하기 위해 보통 호스트 네임을 필수로 등록합니다.

 $ sudo hostnamectl set-hostname springboot-webservice

 $ sudo vim /etc/sysconfig/network

들어가서 호스트 이름 바기

$ sudo reboot

 

잘 바뀌었다.

 

HostName이 등록되었다면 한가지 작업을 더해야 한다.

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

 

sudo vim /etc/hosts 실행

 

127.0.0.1 springboot-webservice 입력 후 wq

 

curl spring boot-webservice 실행하면


curl: (7) Failed to connect to springboot-webservice port 80 after 0 ms: Connection refused

 

위의 에러가 뜨는데  이는 80 포트로 접근이 안된다는 에러이다.

 

이는 아직 80포트로 실행된 서비스가 없음을 의미한다. 즉 curl 호스트 이름으로 실행은 잘 되었음을 의미한다.

 

 

EC2 설정을 완료했으니 이제 AWS의 데이터베이스 서비스인 RDS를 생성하고 설정해 보겠다.

 

이번장에서 배운것.

  • AWS와 클라우드 서비스란??
  • AWS의 관리형 가상 서버인 EC2 서비스 소개와 생성 방법
  • EC2 인스턴스의 IP를 고정해주는 탄력적IP에 대한 소개와 설정 방법
  • EC2 인스턴스 접근을 위한 pem키 사용 방법
  • 리눅스 서버 생성 시 해야 할 설정들

'Spring > 스프링부트와 AWS로 혼자구현하는 웹 서비스' 카테고리의 다른 글

섹션8. EC2 서버에 프로젝트를 배포해 보자.  (0) 2023.02.06
섹션7. AWS RDS  (1) 2023.02.05
5장. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기  (0) 2023.01.29
4장. 머스테치로 화면 구성하기  (0) 2023.01.25
3장. 스프링 부트에서 JPA로 DB를 다뤄보자  (0) 2023.01.24
'Spring/스프링부트와 AWS로 혼자구현하는 웹 서비스' 카테고리의 다른 글
  • 섹션8. EC2 서버에 프로젝트를 배포해 보자.
  • 섹션7. AWS RDS
  • 5장. 스프링 시큐리티와 OAuth 2.0으로 로그인 기능 구현하기
  • 4장. 머스테치로 화면 구성하기
LTSGOD
LTSGOD
TS's logLTSGOD 님의 블로그입니다.
LTSGOD
TS's log
LTSGOD
전체
오늘
어제
  • 분류 전체보기 (138)
    • 언어 공부 (18)
      • C++ (6)
      • Python (12)
    • AI (39)
      • Numpy (2)
      • Pandas (5)
      • Pytorch (11)
      • Deep Learning (9)
      • CV (11)
      • 과제에서 얻은 것 (1)
    • 수학 (17)
      • 확률론 (8)
      • AI Math (9)
    • Spring (24)
      • 스프링입문 (8)
      • 스프링 원리 - 기본편 (5)
      • 스프링부트와 AWS로 혼자구현하는 웹 서비스 (10)
      • JPA (1)
      • spring MVC (0)
    • CS 기본 (25)
      • 네트워크 (5)
      • OS (4)
      • 자료구조 (9)
      • DB (7)
    • Git (2)
    • 백준 (1)
    • 활동 (8)
      • 2023 겨울 (1)
      • 네이버 부스트캠프 AI Tech (7)
    • HTML,CSS (2)
    • 도커 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 붓캠
  • 5기
  • BOOSTCAMP
  • AWS
  • pytorch
  • 후기
  • AI
  • AI Tech 5기
  • 부스트캠프
  • Camper
  • 백준
  • 회고

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
LTSGOD
섹션 6. AWS 서버 환경을 만들어보자 - AWS EC2
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.