서버 배포 도전기(1) - EC2

정민주·2024년 11월 21일

스프링 스터디

목록 보기
14/17

1. EC2 개념

EC2란 한마디로 Amazon Elastic Compute Cloud의 줄임말로서 AWS에서 제공하는 클라우드 컴퓨팅이다.


2. EC2 구성

일반적인 서버를 보면 보통 컴퓨팅(CPU/RAM), 하드디스크, 랜카드 로 나누어진다.
이것을 EC2에 대입해보면 다음과 같이 된다.

  1. 컴퓨팅에 해당하는 인스턴스 (=가상머신)
  2. 하드디스크에 해당하는 EBS
  3. 랜카드에 해당하는 ENI 가 있다.

컴퓨팅(CPU/RAM) : 데이터를 처리하고 계산하는 과정
하드디스크 : 데이터를 영구적으로 저장하는 장치

랜카드 : 컴퓨터가 네트워크에 연결되도록 돕는 장치
ex1) 유선 - LAN 케이블을 통해 연결
ex2) 무선 - 와이파이를 통해 네트워크에 연결

  • 역할 : 컴퓨터가 외부 네트워크(인터넷)과 데이터를 송수신할 수 있게 함
  • IP 주소와 MAC 주소를 기반으로 통신이 가능하게 함

2-1. EC2 인스턴스

2.1.1 개념

EC2 instance is simply a virtual server in Amazon Web Services terminology.

EC2 인스턴스란, 간단히 그냥 가상 서버이다. 해당 EC2 인스턴스로 우린 AWS 클라우드 내의 컴퓨터 서버를 요청하고 제공받을 수 있다.

그렇기 때문에 배포에서 꼭 필요한 존재이다!

2.2.2 유형

EC2에는 해당 서버의 사용 목적에 따라 여러 인스턴스 유형을 가진다. 돈이 없는 지금 프리미어에서만 사용할 것이기에 이 부분은 넘어간다.


-> 프리미어에서는 범용타입인 t, m을 사용한다.

2.2.3 사이즈

인스턴스 크기는, 인스턴스 cpu 갯수, 메모리 크기, 성능 등으로 사이즈가 결정됨을 말한다.

인스턴스 사이즈가 클수록 더 많은 메모리, 더많은 cpu, 더많은 네트워크 대역폭을 가질 수 있다는 것을 의미한다.

아래로 갈 수록 사이즈가 점점 커지고 있다. 즉 성능이 더 좋다는 의미이다.
프리미어 티어의 최대 사이즈는 1GiB이다. 넘으면 돈 낸다.

2.2.4 읽는 법

지금까지 설명한 것들을 외우는 게 아니라, 인스턴스를 읽는 것만으로도 모두 알 수 있다.

  1. m은 인스턴스 타입(패밀리) (범용 애플리케이션 서버용)을 의미한다.
  2. 5는 5세대를 의미한다. 지금 이글을 쓰는 순간도 6세대, 7세대가 개발되어지고 있으며 앞으로도 세대가 업그레이드 될 것이다.
  3. a는 amd기반의 CPU 프로세서를 사용한다는 의미이며, (t4g = t4인스턴스 중 AWS Graviton 프로세서를 사용)
  4. xlarge는 큰 사이즈를 의미한다고 보면 된다.

2-2. 인스턴스 EBS

위에서 배운 인스턴스가 연산에 관한 (CPU,메모리 등) 처리를 한다고 하면, 데이터를 저장하는 역할은 바로 EBS가 한다고 보면 된다.

즉, 클라우드에서 사용하는 가상 하드디스크(HDD) 인 셈이다.

2-3. AMI

An Amazon Machine Image (AMI) is an image that provides the software that is required to set up and boot an Amazon EC2 instance.

AMI란 EC2라는 가상 서버를 실행시키기 위해, 해당 가상 서버의 정보들을 미리 저장해둔 설정 파일이라고 생각하면 된다.

즉 EC2 인스턴스를 실행할 때 반드시 AMI를 지정해야 한다.

2.3.1 EC2 내에서의 역할

AWS에서 AMI의 역할
AWS에서 이미지(AMI)는 EC2 인스턴스를 실행할 때 필요한 운영체제와 소프트웨어가 미리 준비된 상태이다.
즉, "미리 만들어둔 컴퓨터 상태를 복사해서 새로운 가상 컴퓨터를 실행하는 템플릿" 이다.

AMI에 포함된 내용

  • 운영체제 (Windows, Ubuntu 등)
  • 소프트웨어 (Java, Python, Apache 등)
  • 설정 정보 (사용자 계정, 네트워크 설정 등)

2.3.2 AMI 지정 요소

  • Region
    : AWS 데이터 센터가 위치한 물리적인 지리적 위치 (당연히 본인 위치와 가까운 region 선택)
  • Operating system
    : EC2 인스턴스는 AMI에 지정된 운영체제를 기반으로 부팅
  • Processor architecture
  • Root device type
  • Virtualization type

2.3.3. 인스턴스 생성 환경

1. 하나의 AMI(이미지)로 여러 개의 EC2 인스턴스 생성하기

You can launch multiple instances from a single AMI when you require multiple instances with the same configuration.

각 인스턴스는 동일한 설정(운영체제, 소프트웨어, 네트워크 설정 등)을 가지게 된다.

ex) 만약 3개의 웹 서버가 필요하다면, 동일한 AMI를 사용하여 3개의 인스턴스를 실행한다.
-> 이렇게 하면 모든 웹 서버가 같은 환경에서 동일한 작업을 수행할 수 있다.

2. 다른 AMI(이미지)로 각각의 EC2 인스턴스 생성하기

You can use different AMIs to launch instances when you require instances with different configurations.

서로 다른 설정이 필요한 경우, 다른 AMI를 사용하여 인스턴스를 실행할 수 있습니다.
AMI는 각기 다른 설정(운영체제, 소프트웨어 버전 등)을 포함할 수 있기 때문에, 특정 용도에 맞는 인스턴스를 생성할 수 있다.

ex) 한 대의 서버는 Ubuntu 운영체제를 실행해야 하고, 다른 서버는 Windows를 실행해야 한다.
-> 각각의 AMI(Ubuntu용 AMI, Windows용 AMI)를 선택하여 생성할 수 있다.

  • VPC (Virtual Private Cloud): AWS에서 제공하는 격리된 네트워크 환경
  • Subnet : VPC 내에서 생성되는 하위 네트워크. / 인스턴스가 외부와 연결될 수 있는지 여부를 결정.
    • Public Subnet: 외부와 연결 가능
    • Private Subnet: 내부에서만 사용 가능

이러한 점을 활용해보자.

  • 웹 사이트를 호스팅하는 서버는 외부(인터넷)에서 접근 가능해야 하기에 public subnet
  • 데이터베이스는 보안을 위해 private subnet
    -> 웹 서버가 데이터베이스 서버에 접근하여 데이터를 주고받을 수 있다.

3. EC2 구축 세팅&사용

해당 사진이 전체적인 ec2의 내부 상황을 표현해주고 있다.

이제 ec2 인스턴스를 생성해보자.

3-1. EC2 인스턴스 생성

3.1.1 OS 선택


해당 인스턴스를 실행시킬 AMI 속 OS를 설정해준다.
다른 OS를 선택하지 않고 아마존 리눅스를 선택한 이유는 다음과 같다.

  1. 아마존이 개발하는 OS이기에, AWS 내에서 적극 지원을 해준다.
  2. AWS의 각종 서비스와 상성이 좋다.
  3. Amazon 독자적인 개발 레포지토리를 사용하기에 yum이 매우 빠르다.
    -> Amazon Linux는 AWS 내부의 전용 리포지토리를 사용하기 때문에 네트워크 지연이 적고, 패키지 설치 속도가 빠르다는 의미.

출처 : <<스프링부트와 aws로 혼자 구현하는 웹 서비스 >> , 이동욱

해당 사진에서 밑줄 그어놨듯, 현재 프리티어에서 사용할 수 있는 가장 최대의 가상 서버 유형이 선택된 것을 알 수 있다.

참고로 [프리 티어 사용 가능] 이 붙지 않은 Instance는 컴퓨터를 시작하는 순간부터 과금이 발생할 수 있다.

3.1.2 키 페어 생성

인스턴스에 접근하기 위해서는 pem 키(비밀키)가 필요하다.
해당 키는 절대 재발급이 불가능하니 꼭꼭 잃어버리지 않도록 하자.

키 페어 유형은 2가지로 나뉜다.

  • RSA
    : RSA 암호화를 이용한 키 페어이다. 범용적으로 사용된다.
  • ED25519
    : 2021년 공개된 키 페어 유형으로 SSH 인증을 지원합니다. RSA보다 더 나은 퍼포먼스를 지닌다.
    : SSH 인증을 지원하지 않는 Windows와 같은 OS에는 사용할 수 없다.

3.1.3 네트워크 설정

보안 그룹 구성은 쉽게 방화벽을 설정하는 단계이다. 아주 중요한 부분이다!!!
네트워크를 통해 해당 인스턴스에 어떤 접속방식을 어디까지 허용할지 설정해준다.

네트워크 설정 옆 "편집"을 누르면 다음과 같은 창이 새로 열린다. 보안 그룹 이름엔 유의미한 이름으로 변경해주자.

보안 규칙

  • SSH(22) 트래픽 허용 : AWS EC2 터미널로 접속하는 것을 허용한다.
  • HTTP(80) 트래픽 허용 : 데이터를 암호화하지 않은 상태로 전송하는 비보안 웹 트래픽을 허용한다.
  • HTTPS(443) 트래픽 허용 : SSL/TLS를 사용한 보안을 강화한 프로토콜로 암호화된 웹 트래픽을 허용한다.

⚠️pem 키가 없으면 접속이 안되니 SSH를 전체 오픈 (0.0.0.0/0)을 하는 경우가 있다. ⚠️
이럴 경우 실수로 pem 키가 노출되면 모든 개인정보 및 해당 서버가 탈취당하니 되도록이면 지정된 ip에서만 ssh 접속을 허용하도록 하자.

3.1.4 스토리지 구성

스토리지 유형은 다양하게 있지만, 일단 2가지만 먼저 알아보자.

  • gp2/gp3 : 범용적으로 사용되는 SSD 볼륨 유형이다.

기본값은 8GB인데, 프리티어는 최대 30GB까지 가능하다. 물론 그 이상은 비용이 청구된다.

3.1.5 고급 세부 정보

현재 우리는 Root 계정으로 로그인 되어있다. 만약 Root 권한을 탈취당해서 과금이 발생하면 막을 방법이 없어진다. 따라서 부계정과 비슷한 의미의 IAM 계정을 나눠놓는것이 좋다.

지금은 배포 연습 중이라 해당 부분은 넘어가려고 한다. 참고 블로그는 아래 링크로 걸어두었다.
🔗고급 세부 정보 참고 블로그

3.1.6 인스턴스 시작

이제 설정은 다 끝났다!! 인스턴스를 시작해보자.

이제 IP와 도메인이 할당된 것을 알 수 있다!

3.1.7. EIP(탄력적 IP) 할당

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

인스턴스도 결국 하나의 서버이기에 IP가 존재한다.
인스턴스 생성 시 항상 새 IP를 할당하는데, 같은 인스턴스를 중지하고 다시 시작할 때도 새 IP가 할당된다.

즉 PC에서 접근할때마다 IP 주소를 매번 확인해야 한다.

이는 굉장히 번거로우므로 변경되지 않는 고정 IP를 가지게 해야한다.


이후 밑의 "할당" 버튼을 누르면 탄력적 IP가 발급된다!

이제 방금 생성한 탄력적 IP와 방금 생성한 EC2 주소를 연결해주어야 한다.

이제 EC2 인스턴스 생성이 정말 끝났다! 그래도 주의할 점이 있다.

⚠️⚠️ 생성한 탄력적 IP는 EC2에 연결해두지 않으면 비용이 발생한다. 더는 사용할 인스턴스가 없을 때 탄력적 IP를 삭제하는 걸 잊지말자!


출처
- EC2 개념 원리 & 사용 세팅

- EC2 인스턴스란?

- EC2 AMI란?

<<스프링부트와 aws로 혼자 구현하는 웹 서비스 >> , 이동욱

0개의 댓글