600===Dev AWS/EC2

AWS EC2 완벽 가이드: 가상 서버의 모든 것 🚀

블로글러 2024. 10. 31. 00:47

오늘은 AWS EC2(Amazon Elastic Compute Cloud)에 대해 알아보겠습니다! AWS EC2는 클라우드 상에서 가상 서버를 손쉽게 생성하고 운영할 수 있는 핵심 서비스 중 하나입니다. 인터넷만 연결되어 있다면, 전 세계 어디에서든 서버 리소스를 요구사항에 맞춰 즉시 늘리고 줄일 수 있다는 유연성과 편의성을 제공합니다.


1. EC2란? 🤔

AWS EC2(Amazon Elastic Compute Cloud)는 아마존 웹 서비스(AWS)가 제공하는 IaaS(Infrastructure as a Service) 형태의 가상 서버 인스턴스 서비스입니다. 쉽게 말해, 필요할 때마다 원격지의 서버를 빌려 쓰는 서비스라고 할 수 있습니다.

  • 🔹 개념 요약
    • 사용자는 물리 서버(온프레미스)를 직접 구매하고 관리하지 않아도 됩니다.
    • AWS의 방대한 인프라를 통해 원하는 스펙의 가상 머신(인스턴스)을 생성해 사용 가능합니다.
  • 🔹 실생활 예시
    • 만약 스타트업으로 웹 서비스를 런칭한다면, 높은 트래픽을 대비해 처음부터 고성능 서버를 구매하기엔 비용이 큽니다. 이때 EC2를 사용하면 처음엔 소규모 인스턴스로 시작하고, 트래픽이 늘어나면 곧바로 인스턴스 스펙을 확장(Scaling up)하거나 여러 대로 스케일 아웃(Scaling out) 할 수 있어 리소스 낭비를 줄일 수 있습니다.
  • 🔹 어떤 문제를 해결하는지?
    • 물리 서버 준비, 설치, 유지보수, 확장에 따른 부담을 크게 줄여줍니다.
    • 비용 측면에서 유연한 과금 모델(종량제, 예약 인스턴스, 스팟 인스턴스 등)을 제공해, 초기 비용 없이 서비스를 시작할 수 있게 합니다.

2. 어떻게 동작하나요? 🎬

1) 기본 개념

EC2 인스턴스는 물리 호스트 위에 가상화 기술을 통해 구동됩니다. 사용자 입장에서는 AWS 콘솔이나 CLI를 통해 가상 머신을 만들고, 운영체제를 설치하고, 애플리케이션을 실행할 수 있습니다.

인스턴스 생성 과정 요약

  1. Amazon Machine Image(AMI) 선택
    • 리눅스, 윈도우 등 미리 만들어진 이미지를 선택하거나, 직접 커스텀 이미지를 생성해서 사용합니다.
  2. 인스턴스 유형(Instance Type) 선택
    • CPU, 메모리, 네트워크 성능 요구 사항에 맞춰 t2.micro, m4.large, c5.xlarge 등 다양한 유형 중 하나를 선택합니다.
  3. 네트워킹 및 보안 그룹 설정
    • VPC, 서브넷, 보안 그룹을 설정하여 외부 접근 권한(포트, IP)을 관리합니다.
  4. 키 페어(Key Pair) 설정
    • SSH 접속을 위해 키 페어를 생성하거나 이미 보유한 키를 사용합니다.
  5. 스토리지 설정
    • EBS(Elastic Block Store) 볼륨을 연결하거나, EFS(Amazon Elastic File System) 등 다른 스토리지 서비스를 사용할 수도 있습니다.
  6. 태그(Tag) 설정
    • 프로젝트 이름, 환경(개발/운영) 등을 태그로 붙여 리소스를 효율적으로 관리합니다.
# AWS CLI를 통한 인스턴스 생성 예시
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --count 1 \
  --instance-type t2.micro \
  --key-name MyKeyPair \
  --security-group-ids sg-0123456789abcdef0 \
  --subnet-id subnet-6e7f829e \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=MyEC2Instance}]'

2) 실제 적용 예시

  • 웹 애플리케이션 서버: Django, Node.js, Spring 등 원하는 프레임워크를 설치해 웹 서비스를 운영할 수 있습니다.
  • 개발 및 테스트 환경: 필요할 때마다 새로운 인스턴스를 띄워서 테스트를 진행하고, 필요 없으면 인스턴스를 제거해 비용을 절감할 수 있습니다.

🚀 동작 원리

  1. 호스트 서버에서 가상화: AWS 데이터 센터에 위치한 물리 서버 위에 하이퍼바이저가 구동되고, 이것이 여러 가상 서버(EC2 인스턴스)를 할당합니다.
  2. 사용자의 콘솔/CLI/API 요청: 사용자는 AWS 콘솔 또는 API를 통해 인스턴스를 생성, 시작, 중지, 재부팅 등의 제어를 합니다.
  3. 온디맨드 리소스 할당: 선택한 AMI와 인스턴스 유형에 따라, 필요한 자원만큼 즉시 할당되어 사용이 가능합니다.
  4. 자동 확장(오토 스케일링 연동): EC2만 단독으로 쓰기보다, Auto Scaling Group, Elastic Load Balancer(ELB)와 함께 사용하면, 트래픽 증가 시 자동으로 인스턴스를 늘리고, 감소 시 줄이는 동적 확장이 가능합니다.

3. 주요 장점 🌟

  1. 유연한 확장성(Scalability)

    • 클릭 몇 번(또는 API 호출)만으로 서버 스펙 업그레이드 혹은 서버 수 증대가 가능합니다.
    • 오토 스케일링 기능을 이용하면, 설정한 지표(CPU 사용률 등)에 따라 서버를 자동으로 증감하여 탄력적인 트래픽 대응이 가능합니다.
  2. 다양한 인스턴스 유형

    • 범용(General Purpose), 컴퓨팅 최적화(Compute Optimized), 메모리 최적화(Memory Optimized), GPU 등 다양한 유형이 존재합니다.
    • ML/AI 워크로드에는 GPU 인스턴스(P2, P3), 빅데이터 처리에는 메모리 최적화(R5) 등을 적절히 선택할 수 있습니다.
  3. 비용 효율성

    • 온디맨드: 사용한 시간(또는 초)만큼 과금되므로, 초기 비용(선 투자) 부담이 없습니다.
    • 스팟 인스턴스: AWS가 운영에 유휴로 남는 인스턴스 자원을 경매 형태로 저렴하게 제공하며, 일시적인 워크로드나 유연한 작업에 매우 유리합니다.
    • 예약 인스턴스: 장기간 사용이 확실한 경우, 예약 인스턴스를 구매해 더 낮은 요금으로 운영할 수 있습니다.

4. 주의할 점 ⚠️

  1. 인스턴스 종료 시 데이터 유실 위험

    • EC2 인스턴스가 중지·종료되면, 임시 스토리지(인스턴스 스토어)는 사라집니다.
    • 중요한 데이터는 EBS, S3, EFS 등 외부 스토리지에 저장해야 합니다.
  2. 보안 그룹(Security Group) 및 네트워크 설정

    • 잘못된 보안 그룹 설정으로 인해, 공격에 노출되거나 접속이 불가능해질 수 있습니다.
    • 최소 권한 부여 원칙(Principle of Least Privilege)에 따라, 필요한 포트와 IP만 허용하도록 설정해야 합니다.
  3. 비용 관리

    • EC2는 실행 중인 시간만큼 과금됩니다. 사용하지 않는 인스턴스가 방치되면 비용이 계속 청구됩니다.
    • 스토리지, IP 등 부가적인 리소스도 별도 과금이 이뤄지므로, 꼼꼼히 모니터링해야 합니다.

5. 실제 사용 예시 📱

아래는 간단한 Node.js 웹 서버를 EC2 위에서 구동하는 예시입니다.

1) 인스턴스 생성:

  • AMI: Amazon Linux 2
  • 인스턴스 유형: t2.micro
  • 보안 그룹: 22번 포트(SSH), 80번 포트(HTTP) 오픈
  • 키 페어: MyKeyPair

2) Node.js 설치 및 웹 서버 실행

# SSH 접속
ssh -i "MyKeyPair.pem" ec2-user@ec2-xx-xx-xx-xx.compute-1.amazonaws.com

# Node.js 설치 (Amazon Linux 2)
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs

# 간단한 웹 서버 파일 생성
echo "const http = require('http');
const hostname = '0.0.0.0';
const port = 80;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello from AWS EC2 Node.js Server!');
});

server.listen(port, hostname, () => {
  console.log(\`Server running at http://\${hostname}:\${port}/\`);
});
" > app.js

# 서버 실행
node app.js

3) 웹 확인:

  • 브라우저에서 http://<EC2-퍼블릭-IP> 혹은 http://<EC2-퍼블릭-DNS>를 열어 “Hello from AWS EC2 Node.js Server!” 문구를 확인합니다.

6. 마치며 🎁

AWS EC2는 클라우드 컴퓨팅의 대표적인 서비스로, 가상 서버 인프라를 손쉽고 탄력적으로 확보할 수 있도록 도와줍니다. 위 예시처럼 쉽게 인스턴스를 생성하고 어떤 애플리케이션이든 자유롭게 배포할 수 있기 때문에, 스타트업의 초기 서버 비용과 확장 고민을 획기적으로 줄여줄 수 있습니다.

이 기술을 사용하면, 초기 투자 비용 없이도 원하는 순간에 서버 리소스를 늘리고 줄여서 프로젝트 규모와 예산을 균형 있게 운영할 수 있습니다!


참고 자료 및 출처

728x90

'600===Dev AWS > EC2' 카테고리의 다른 글

How does the pricing of Amazon EBS volumes vary based on the volume type?  (0) 2024.06.11
EC2 Pricing Policy  (0) 2024.06.11
EC2 Introduced  (0) 2024.05.29