본문 바로가기
BackEnd

[AWS] EC2란?

by SoriKim 2023. 10. 4.
반응형

🔑 AWS 란? 

Amazon Web Services의 약자로 아마존닷컴의 클라우드 컴퓨팅 사업부 입니다. 

아마존 웹 서비스는 다른 웹 사이트나 클라이언트 측 응용 프로그램에 대해 온라인 서비스를 제공하고 있다. 

각종 서비스는 REST 프로토콜 및 SOAP 프로토콜을 통해 접근, 이용 및 관리가 가능합니다. 

비용은 실제 사용량에 따라 결정되며, 일부 서비스의 경우 미리 고정된 금액을 지불하는 형태도 있습니다. 

 

1. EC2란? 


EC2는 Elastic Compute Cloud의 약자로

AWS에서는 기본적으로 EC2라는 서비스를 통해 확장 가능한 compute를 사용자에게 제공해 줍니다. 

AWS의 가장 대표적인 IaaS(Infrastructure as a Service)인 EC2를 통해 사용자는 본인에게 필요한 사양을 쉽게 골라 가상 서버를 지칭하는 EC2 인스턴스를 생성해서 원하는 시간만큼 사용할 수 있습니다. 

EC2는 운영 서버에 필요한 대부분의 OS를 지원하며 사용 목적에 맞게 수십가지의 사양들(ex. cpu, memory, storage 등)을 제공합니다. 해당 서비스는 확장성을 고려해 만들어져 특정 서버에 트래픽이 집중되면 즉각적으로 새로운 서버를 추가할 수 있으며 트래픽이 감소하면 추가했던 서브를 즉시 제거할 수 있습니다. 

 

이런 EC2는 인스턴스 타입에 따라 시간 단위 또는 초 단위로 실제 사용한 만큼만 지불하는 구조로 하드웨어에 따로 투자를 하지 않고 On-demand[요구 사항에 따라 즉시 제공, 공급하는 방식]로 원하는 사양의 가상화된 서버를 신속하게 만들고 사용할 수 있습니다. 

 

2. EC2 장점 


위의 소개드린 것처럼 EC2는 On-demand로 원하는 시간에 원하는 사양의 가상 서버를 신속하게 만들어 사용하고 제거 도한 바로 할 수 있어 유연하게 사용할 수 있습니다. 

이런 가상 컴퓨터를 대여 받아 빠른 제품 출시 및 사용한 만큼만 비용을 지불한다는 면에서 비용 절감이 가능하며 이외 다양한 장점들이 존재합니다. 

 

2-1. 확장성과 탄력성

자동으로 EC2 인스턴스 수를 조절할 수 있는 Auto Scaling 기술과 접목해 필요에 따라 자동으로 서버를 스케일 업 또는 스케일 다운이 가능합니다. 

이를 통하여 성능은 최대화하고 비용은 최소화할 수 있는 장점이 있습니다. 

 

2-2. 보안성

가상 방화벽의 기능을 수행하는 Security Group(SG)을 이용하여 연결된 리소스에 도달하거나 이를 떠날 수 있는 트래픽을 제어하며 사용자 수준에서 네트워크 보안 수준을 높일 수 있습니다. 

 

2-3. 다양한 AWS 서비스와의 통합

AWS내의 VPC, RDS 등 다양하게 제공되는 서비스들과 호환성이 뛰어나 연동이 잘되기 때문에 잘 통합하여 

각 기업의 니즈에 맞는 운영 서버를 구축하고 광범위한 애플리케이션 간 클라우드 스토리지에 대해 완전하고 안전한 솔루션을 제공할 수 있습니다. 

 

3.  EC2 인스턴스 유형 


위에서 설명드린 바와 같이 EC2는 사용자의 요구에 맞게 서버를 만들 수 있어 비용에 대해 최적화 또한 가능합니다. 

이런 EC2 인스턴스를 생성할 때는 OS와 Security Group 외 다양한 인스턴스 유형을 지정할 수 있습니다. 

 

EC2 인스턴스는 특정 유형 작업에 최적화된 패밀리로 그룹화 되어 있습니다. 

 

- 범용 인스턴스 

균현있는 컴퓨팅, 메모리 및 네트워킹 리소스를 제공해 다양한 워크 로드에 사용가능합니다. 

웹 서버 및 코드 레포지토리 같이 균등한 비율로 리소스를 사용하는 애플리케이션에 적합합니다. 

 

- 컴퓨팅 최적화 인스턴스 

고성능 프로세서를 활용한 컴퓨팅 집약적인 애플리케이션에 적합합니다. 

 

- 메모리 최적화 인스턴스 

메모리에서 대규모 데이터를 처리하는 워크로드를 위한 빠른 성능을 제공하기 위해 설계된 인스턴스입니다. 

 

- 스토리지 최적화 인스턴스

로컬 스토리지의 대규모 데이터에 대하여 많은 읽기 및 쓰기를 요구하는 워크로드를 위해 설계된 인스턴스입니다. 

 

- 가속화된 컴퓨팅 인스턴스

GPU를 기반으로 하여 그래픽 처리, 데이터 패턴 일치 등의 기능을 CPU에서 실행되는 소프트웨어보다 훨씬 더 효율적으로 수행하는 인스턴스입니다. 

 

이런 특정 유형의 작업에 따라 패밀리로 그룹화 된 인스턴스 타입은 CPU, 메모리, 스토리지 및 네트워킹 용량의 다양한 조합으로 구성되며 애플리케이션에 따라 적합한 조합을 선택할 수 있는 유연성을 제공합니다. 

 

4.  Security Group & Ports 


- 보안그룹(Security Groups) 이란? 

보안 그룹은 AWS에서 가장 기본이 되는 네트워크 보안 기술로 EC2 인스턴스로 들어오고 나가는 트래픽들을 직접 설정하여 제어가 가능합니다.

 

- 보안 그룹 규칙(Security Groups Rules) 

이런 보안 그룹을 생성하기 위해서는 필요한 규칙들을 추가해줘야 합니다. 

1. Port [네트워크 서비스 혹은 특정 프로세스를 식별하는 논리적 단위, IP내 프로세스를 정확히 식별하기 위해 사용] 

- 포트는 번호를 가지고 프로세스를 식별하게 되며 그 번호는 16비트 범위의 숫자로 구성되며 크게 3가지로 분류됩니다. 

  • Well-known Ports - 0 ~ 1023
    (Internet Assigned Numbers Authority에서 할당한 TCP/UDP 포트/ HTTP: 80/ HTTPS: 443)
  • Registered Ports - 1024~49151
    (특정 용도로 사용되기 위해 등록된 포트/ MYSQL: 3306)
  • Dynamic Ports - 49152~65535
    (사용자가 임의로 등록하여 사용 가능한 포트)

2. 인증된 IP 범위 ( IPV4 AND IPv6) 

3. 인스턴스 밖에서 안으로 들어오는 InBound Network 

4. 인스턴스 안에서 밖으로 나가는 Outbound Network

위의 4가지를 추가해주어 인바운드 규칙에 정해진 IP와 Port를 통과해야 인스턴스에 접속이 가능하며 

허용되지 않은 IP나 Port가 아니라면 접속이 불가합니다. 

또한 아웃바운드 규칙으로 모든 트래픽을 허용했기 때문에 IP, Port와 상관없이 바깥으로 내보낼 수 있습니다. 

 

여기까지 EC2에 대해 알아봤는데요. 이제는 EC2 Instance를 생성하는 방법에 대해서 알아보겠습니다. 

 


1. EC2 Instance 생성 

1️⃣ Launch EC2 Instance

- AWS 접속하여 로그인 한 후 EC2 Instance 페이지로 이동 하여 Launch Instances 를 클릭합니다. 

- 실행시킬 EC2 Instance의 이름을 작성합니다. 

- Amazon Machine Image는 Linux 계열의 이미지를 선택합니다. 

- Instance Type은 t2.micro를 선택합니다. Free tier가 아닌 타입을 선택하게 되면 요금이 부가될 수 있는 점 꼭 확인해 선택 해주세요. 

- Key Pair 는 실행할 EC2 Instance를 접속하기 위한 열쇠 역할을 하는 것으로 Create new key pair를 선택해 새로 생성합니다. 

- 생성할 Key Pair의 이름과 유형을 Private Key의 파일 형식을 선택한 후 Create key pair를 클릭합니다. 

- 생성한 Key Pair는 자동으로 다운로드 되며 해당 EC2 Instance의 Key Pair로 선택됩니다. 

( 🔴 Key Pair를 분실하게 되면 해당 EC2 Instance로 접속할 수 없어 잘 보관해주시길 바랍니다. )

- 실행할 EC2 Instance의 네트워크 설정을 우측 Edit를 클릭하여 세부적으로 설정합니다. 

- 그리고 Auto-assign public IP 설정을 하기 위해 Enable 옵션을 선택해 Public IP를 할당하여 외부 접속이 가능하도록 설정 해주세요. 

- 새로운 보안 그룹을 생성하기 위해 초기 설정되어 있는 (0.0.0.0/0)은 모두 IP로부터 SSH 접속을 허용합니다. 

- 이후 Launch Instance를 클릭해 EC2 Instance를 실행합니다. 

- Instance state가 Running으로 올바르게 실행된다면 정상적으로 생성 된 것입니다. 

 

2️⃣ SSH 를 이용하여 EC2 Instance 접속

SSH란? 

SSH(Secure Shell)은 명령어를 입력하여 보다 안전하게 원격 서버를 제어하고 통신하기 위한 프로토콜 혹은 프로토콜을 사용하는 프로그램들을 의미합니다. 

 

소스코드를 Github와 같은 원격 저장소에 push하거나 EC2와 같은 원격 서버를 제어하기 위해 해당 서버로 접속할 때는 SSH가 사용되는 대표적인 경우 입니다. 

 

- Instacne 생성 시 받았던 Key pair가 준비되어 있어야 합니다. 

- EC2 Instance에 해당하는 key-pair는(.pem) 해당 파일이 위치한 디렉토리로 이동하여 

- SSH 접속을 하기 위해 명령어를 입력합니다. 

# EC2 Instance Type이 Ubuntu인 경우
ssh -i 파일명.pem ubuntu@EC2-PublicIP

# EC2 Instance Type이 Linux인 경우
ssh -i 파일명.pem ec2-user@EC2-PublicIP

명령어 입력 시 Permissions 0644 for 'Demo.pem' are too open. 이라는 문구가 뜹니다. 

해당 내용은 pem 파일의 권한 0644는 너무 많이 오픈 되어 있다는 것으로 안전하게 관리 되어야 할 파일이 너무 많은 권한이 주어졌을 경우 발생하는 경고로 아래와 같은 명령어를 통해 권한을 수정합니다. 

chmod 400 Demo.pem

.pem 앞에 Demo는 예시로 넣은 파일명으로 각자 사용하시는 파일명을 넣어주시면 됩니다. 

수정 후 다시 접속하게 되면 잘 접속되는 것을 확인할 수 있습니다. 

만약 접속이 되지 않고 다른 에러 발생 시 EC2 Instance 보안 그룹 규칙 확인 과 Public IP를 통해 접속했는지 확인해주세요. 

 

3️⃣ PM2를 활용한 프로세스 

PM2란? 

PM2는 애플리케이션 무중단 운영 및 다양한 시스템 관리 업무르르 가능하게 해주는 Node.js 프로세스 매니저입니다. 

해당 PM2는 node.js에서 활용할 때 사용하는 프로세스 입니다. 

 

- PM2 설치 

npm install -g pm2

# Ubuntu 
sudo npm install -g pm2

 

- PM2로 프로세스 백그라운드로 실행

서버를 배포하게 되면 24시간 동안 쉬지 않고 서버를 가동해야 하므로 항상 서버가 켜져 있어야 하며 터미널이 종료된다면 서버 프로세스가 종료되는 것으로 큰 문제가 발생하게 됩니다. 

배포를 위해 EC2 Instance에 SSH 접속하여 서버를 켜 SSH세션에서 exit하지 않고 계속 접속을 유지할 수 있어야 합니다. 

만약 exit 하게 되면 배포한 서버 또한 종료되고 SSH 접속의 경우 보안상 이유로 지속해서 사용되지 않으면 접속이 종료되므로 이러한 문제를 해결하기 위해 서버를 백그라운드로 실행시킬 필요가 있습니다. 

// app.js
const express = require("express")

const app = express()

app.get('/ping', (req, res) => {
  res.send('pong')
})

app.listen(3000, () => {
  console.log('running')
})

- pm2 start app.js 명령어를 통해  먼저 ping 테스트가 가능한 애플리케이션을 백그라운드로 실행합니다. 

- localhost(127.0.0.1) 3000포트로 request를 보내 올바르게 동작하는지 확인합니다. 

- pm2 list 명령어를 입력해 SSH세션에서 exit 하고 다시 접속해도 해당 프로세스가 계속하여 동작하는 것을 확인합니다. 

 

위의 내용들을 통하여 EC2에 대해 알아보았습니다. 

반응형

'BackEnd' 카테고리의 다른 글

Node.js에 대해 알아보기, Node.js 설치 방법  (0) 2023.11.02
Server Communication(HTTP/S)  (0) 2023.10.28
Git & GitHub  (0) 2023.10.02
Wecode 3st Project 회고록  (0) 2023.09.24
Wecode 2st Project 회고록  (0) 2023.09.03

댓글