📄 2025.12.05 (Day 30) [AWS 컴퓨팅 서비스: 서버, 서버리스, 컨테이너]


1. 핵심 개념 정리 (Concepts & Theory)

#핵심 개념간결한 설명
1EC2 (Elastic Compute Cloud)AWS 클라우드에서 제공하는 가상 서버 입니다. 운영체제(OS), CPU, 메모리, 스토리지 크기 등을 사용자 요구에 맞게 선택하여 구축 및 운영할 수 있습니다. 컴퓨팅 파워를 유연하게 확장/축소 할 수 있습니다.
2Amazon EBS (Elastic Block Store)EC2 인스턴스에 연결하여 사용하는 블록 레벨의 영구 스토리지 입니다. EC2 인스턴스와 별도로 독립적인 수명 주기를 가지며, 스냅샷 기능을 통해 데이터 백업 및 복구가 용이합니다. SSD/HDD 등 다양한 유형 선택이 가능합니다.
3ELB (Elastic Load Balancing)여러 EC2 인스턴스 또는 컨테이너/Lambda에 걸쳐 들어오는 트래픽을 자동으로 분산 하는 서비스입니다. Application Load Balancer (ALB), Network Load Balancer (NLB), Gateway Load Balancer (GLB) 가 있습니다.
4EC2 오토스케일링 (Auto Scaling)애플리케이션의 트래픽 변화에 따라 EC2 인스턴스의 수를 자동으로 조정 하는 기능입니다. 확장(Scale Out)축소(Scale In) 규칙을 정의할 수 있으며, 최소/최대 인스턴스 수를 설정합니다.
5서버리스 (Serverless) 컴퓨팅서버를 직접 프로비저닝, 관리하거나 유지할 필요 없이 코드를 실행할 수 있도록 하는 클라우드 컴퓨팅 모델입니다. 개발자는 코드를 작성하고 업로드만 하면 됩니다. 사용량에 따라 자동으로 확장 되고, 사용한 만큼만 비용을 지불합니다.
6AWS LambdaAWS의 대표적인 서버리스 FaaS(Function as a Service) 입니다. 이벤트에 응답하여 코드를 실행하며, 서버 관리가 필요 없습니다. 실행 시간에 비례하여 비용이 부과 됩니다. 수평 확장성이 매우 높습니다.
7컨테이너 (Container)코드, 런타임, 시스템 도구, 라이브러리 등 애플리케이션 실행에 필요한 모든 것을 포함 하는 경량의 독립적인 실행 단위입니다. OS 커널을 공유하여 가상 머신(VM)보다 가볍고 빠르게 배포됩니다. Docker가 대표적입니다.
8AWS ECS (Elastic Container Service)AWS에서 컨테이너화된 애플리케이션을 배포, 관리 및 확장 하는 완전 관리형 컨테이너 오케스트레이션 서비스입니다. EC2 기반 또는 서버리스인 AWS Fargate 기반으로 컨테이너를 실행할 수 있습니다.

2. 실습 코드 & 응용 (Practice & Code Walkthrough)

(A) EC2 인스턴스 생성 및 접근 제어

EC2 인스턴스 생성 (AWS CLI):

# 1. 키 페어 생성 (SSH 접근용)
aws ec2 create-key-pair \
  --key-name MyKeyPair \
  --query 'KeyMaterial' \
  --output text > MyKeyPair.pem
chmod 400 MyKeyPair.pem

# 2. 보안 그룹 생성 (SSH, HTTP 허용)
aws ec2 create-security-group \
  --group-name WebAccessSG \
  --description "Allow SSH and HTTP access"

# SSH 인바운드 규칙 추가 (특정 IP에서만)
aws ec2 authorize-security-group-ingress \
  --group-name WebAccessSG \
  --protocol tcp \
  --port 22 \
  --cidr 203.0.113.0/32 # 본인의 IP로 변경

# HTTP 인바운드 규칙 추가 (전체 인터넷에서)
aws ec2 authorize-security-group-ingress \
  --group-name WebAccessSG \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

# 3. 인스턴스 실행 (Public Subnet에)
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --count 1 \
  --instance-type t2.micro \
  --key-name MyKeyPair \
  --security-group-ids sg-0securitygroupid \
  --subnet-id subnet-0publicsubnetid \
  --associate-public-ip-address # Public IP 자동 할당

EC2 외부 접근 (SSH):

# Public IP 주소 또는 Public DNS 이름 확인 후 접속
ssh -i "MyKeyPair.pem" ec2-user@<EC2_Public_IP>

(B) Amazon EBS 스냅샷 및 볼륨 생성

EBS 볼륨 생성 및 연결:

# 1. 새 EBS 볼륨 생성 (ap-northeast-2a에 10GiB gp3)
aws ec2 create-volume \
  --availability-zone ap-northeast-2a \
  --size 10 \
  --volume-type gp3

# 2. 생성된 볼륨을 EC2 인스턴스에 연결
aws ec2 attach-volume \
  --volume-id vol-0volumeid \
  --instance-id i-0instanceid \
  --device /dev/sdf

EBS 스냅샷 (백업) 생성:

# 특정 볼륨의 스냅샷 생성
aws ec2 create-snapshot \
  --volume-id vol-0volumeid \
  --description "Daily backup of application data"

# 스냅샷으로 새 볼륨 생성 (복원)
aws ec2 create-volume \
  --snapshot-id snap-0snapshotid \
  --availability-zone ap-northeast-2c # 다른 AZ로 복원하여 재해 복구 준비

(C) Elastic Load Balancing (ALB) 및 EC2 Auto Scaling

ELB (ALB) 생성 흐름:

  1. 대상 그룹(Target Group) 생성: 트래픽을 받을 EC2 인스턴스들의 포트, 프로토콜 정의 (Health Check 설정 포함).
  2. EC2 인스턴스를 대상 그룹에 등록.
  3. 로드 밸런서(ALB) 생성: Public Subnet에 배포, 리스너(Listener, 80/443) 구성, 대상 그룹 연결.
  4. ALB DNS 이름을 통해 서비스 접근.

EC2 Auto Scaling Group 설정 흐름:

  1. 시작 템플릿(Launch Template) 생성: EC2 인스턴스 구성 정보(AMI, 인스턴스 유형, 키 페어, 보안 그룹 등) 정의.
  2. 오토스케일링 그룹(ASG) 생성:
    • 시작 템플릿 지정.
    • 최소/최대/희망 용량 설정.
    • Multi-AZ의 서브넷 지정.
    • 연결할 ELB 대상 그룹 지정.
    • 조정 정책(Scaling Policy) 설정: CPU 사용률 60% 이상 시 확장, 30% 이하 시 축소.

(D) AWS Lambda 함수 생성 및 실행

Lambda 함수 생성 (Node.js 예시):

// index.js
exports.handler = async (event) => {
    // 1. 이벤트 데이터 처리 (예: API Gateway 요청)
    const name = event.queryStringParameters && event.queryStringParameters.name ? event.queryStringParameters.name : 'World';

    // 2. 비즈니스 로직
    const message = `Hello, ${name}! This is a Serverless function.`;

    // 3. 응답 반환
    const response = {
        statusCode: 200,
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({ message: message }),
    };
    return response;
};

Lambda 함수 생성 (AWS CLI):

# 1. Lambda 실행 역할 생성 (S3 접근 권한 등 최소 권한 부여)
aws iam create-role --role-name lambda-basic-execution-role ...

# 2. 코드 패키징 (ZIP)
zip function.zip index.js

# 3. 함수 생성
aws lambda create-function \
  --function-name HelloWorldLambda \
  --runtime nodejs18.x \
  --role arn:aws:iam::123456789012:role/lambda-basic-execution-role \
  --handler index.handler \
  --zip-file fileb://function.zip \
  --timeout 30 \
  --memory-size 128

# 4. 함수 호출 (테스트)
aws lambda invoke \
  --function-name HelloWorldLambda \
  --cli-binary-format raw-in-base64-out \
  --payload '{"queryStringParameters": {"name": "AWS"}}' \
  output.txt

(E) AWS ECS (Fargate) 서비스 배포

Fargate 기반 ECS 서비스 배포 흐름:

  1. Docker 이미지 생성 및 ECR(Elastic Container Registry)에 푸시.
  2. ECS 클러스터 생성.
  3. 작업 정의(Task Definition) 생성: 실행할 컨테이너 이미지, CPU/메모리, 포트 매핑, 환경 변수 등 정의. (Fargate: 네트워크 모드 aws-vpc)
  4. 서비스 생성:
    • 작업 정의 지정.
    • 실행할 작업 수, ELB 연결 정보 지정.
    • 서브넷(Private Subnet 권장) 및 보안 그룹 지정.
    • Auto Scaling 정책 설정 (CPU, 메모리 사용률 기반).

3. 실무/보안 관점 분석 (Insight & Scenario Mapping)

분야적용 시나리오
컴퓨팅 유형 선택EC2 (VM): 장기적으로 꾸준한 부하, OS 레벨의 완전한 제어(GPU 등), 레거시 애플리케이션, 온프레미스 마이그레이션 시 적합. Lambda (서버리스): 짧은 실행 시간, 간헐적 트래픽, 이벤트 기반 데이터 처리(이미지 리사이징, 로그 분석), API 백엔드에 적합. ECS/Fargate (컨테이너): 마이크로서비스, 일관된 배포 환경, 빠른 배포/롤백, CI/CD에 적합. 운영 부담은 Lambda와 EC2의 중간.
확장성 및 고가용성EC2: Auto Scaling GroupELB 를 사용하여 고가용성 및 수평 확장(Scale-out) 구현. 최소 2개 이상의 AZ에 분산 배치. Lambda: 기본적으로 무제한에 가깝게 자동 수평 확장 됩니다. 동시 실행 한도(기본 1,000개) 관리가 중요합니다. ECS/Fargate: ECS Service Auto Scaling 을 사용하여 컨테이너 인스턴스(Task) 수를 조정.
보안 강화 전략EC2: 보안 그룹 으로 인스턴스 방화벽, IAM Role 을 인스턴스에 할당하여 AWS API 접근 권한 제어. EBS 볼륨 암호화 를 통해 미사용 데이터 보호. 정기적인 OS 및 애플리케이션 패치 실행. Lambda: 함수에 할당된 실행 역할(IAM Role) 에 최소 권한 원칙 적용. 민감 정보는 AWS Secrets Manager 를 통해 관리. ECS/Fargate: 작업 실행 역할 (컨테이너 인스턴스 역할)과 작업 역할 (애플리케이션 역할)을 분리하여 최소 권한 적용.
비용 최적화EC2: Auto Scaling 을 통한 인스턴스 수 조절로 유휴 리소스 비용 절감. Reserved Instance(RI) 또는 Savings Plan 을 통한 장기 사용 할인. Spot Instance 를 통한 비핵심 워크로드 비용 절감. Lambda: 실행 횟수 + 실행 시간 (ms 단위) 기반 과금. 유휴 비용 0. 짧게 실행될수록 저렴. ECS/Fargate: Fargate 사용 시 EC2 인스턴스 관리 비용 없이 컨테이너의 CPU/메모리 사용량 에 대해서만 과금.
모니터링 & 로깅EC2: CloudWatch 로 CPU, 네트워크, 디스크 I/O 등 기본 메트릭 모니터링. CloudWatch Agent 로 OS 레벨 지표(메모리, 디스크 사용률) 수집. Lambda: CloudWatch Logs 에 함수 실행 로그 및 성능 지표 자동 저장. X-Ray 를 통해 분산 추적 활성화. ECS/Fargate: 컨테이너 로그를 CloudWatch Logs 로 통합.

4. 개인 인사이트 및 다음 단계 (Reflection & Next Steps)

  • 배운 점/느낀 점:

    • 컴퓨팅의 패러다임 변화: 전통적인 서버 관리(EC2)부터 인프라 관리 부담을 완전히 덜어낸 서버리스(Lambda), 그리고 그 중간 단계인 컨테이너(ECS/Fargate)까지, AWS는 모든 컴퓨팅 요구사항을 만족시킬 수 있는 다양한 옵션을 제공함을 이해했습니다.
    • 책임 공유 모델의 이해: 특히 EC2와 Lambda에서 AWS와 사용자 간의 책임 영역(OS 패치, 런타임 관리 등)이 명확히 구분되는 것을 파악했습니다. 서버리스는 보안 관리 부담을 크게 줄여줍니다.
    • Auto Scaling의 중요성: 고가용성, 비용 최적화, 성능 유지라는 세 마리 토끼를 잡기 위해 Auto Scaling과 ELB의 연동이 필수적임을 깨달았습니다.
    • EBS의 영속성: EC2와 EBS의 생명 주기가 분리된다는 점을 통해 인스턴스가 종료되어도 데이터가 보존되는 원리를 이해했습니다. 스냅샷을 통한 백업 및 재해 복구 시나리오가 실질적인 가치를 제공합니다.
  • 심화 방향:

    • EC2 & Auto Scaling 실습 심화: 시작 템플릿에 사용자 데이터(User Data)를 사용하여 초기 배포 스크립트 실행 실습. 다양한 조정 정책(Step Scaling, Target Tracking) 설정 및 부하 테스트.
    • Lambda 함수 심화: Lambda를 VPC 내 Private Subnet에 배포하여 RDS 같은 내부 리소스에 접근하는 실습. API Gateway와 Lambda 연동하여 Restful API 백엔드 구성.
    • ECS/Fargate 실습: Dockerfile 작성부터 ECR 푸시, Task Definition, Service 생성까지 CI/CD 파이프라인(CodePipeline, CodeBuild)과 연동하여 자동 배포 환경 구축.
    • 컴퓨팅 비용 비교 분석: 동일한 워크로드(예: 웹 서비스)를 EC2, Lambda, Fargate로 각각 구성했을 때의 성능, 관리 복잡도, 최종 비용을 비교 분석하는 프로젝트 수행.

5. 추가 참고사항 (Quick Reference)

EC2 인스턴스 유형 (Family)

Family용도예시
T범용 버스터블(Burstable)T2, T3, T4g
M범용 (균형 잡힌 자원)M5, M6g
C컴퓨팅 최적화 (CPU 집중)C5, C6g
R메모리 최적화 (RAM 집중)R5, R6g
P/G가속 컴퓨팅 (GPU)P3, P4, G4
I스토리지 최적화 (NVMe SSD)I3, I4i

ELB 유형 비교

유형계층주요 특징사용 사례
ALBL7 (HTTP/HTTPS)경로/호스트 기반 라우팅, 컨테이너, Lambda 지원마이크로서비스, 웹 애플리케이션
NLBL4 (TCP/UDP/TLS)초고성능, 고정 IP 주소, 낮은 지연시간극단적인 성능 요구사항, 게임, IoT
GLBL3 (IP)서드파티 가상 어플라이언스 체이닝방화벽, 침입 탐지 시스템 (IDS)
CLBL4/L7 혼합레거시(새 워크로드에는 권장하지 않음)이전 버전과의 호환성

Lambda 제한 사항 (기본값)

항목기본 제한
메모리 크기128MB ~ 10,240MB
실행 시간(Timeout)최대 15분 (900초)
동시 실행 수리전당 1,000개
배포 패키지 크기50MB (압축)
환경 변수 크기4KB

컨테이너 서비스 비교

서비스기반 환경특징적합한 사용 사례
ECS (EC2)사용자 관리형 EC2서버와 컨테이너를 모두 제어, 더 많은 사용자 정의저렴한 비용(Spot), OS 레벨 접근 필요
ECS (Fargate)AWS 관리형 서버리스서버 관리 불필요, 컨테이너에 집중운영 복잡도 최소화, 유연한 확장성
EKS사용자 관리형/AWS 관리형Kubernetes 기반, 표준 컨테이너 오케스트레이션Kubernetes 전문가, 멀티 클라우드 전략
App Runner완전 관리형소스 코드 또는 컨테이너 이미지에서 바로 웹 앱 배포개발 속도 우선, 간단한 웹 앱/API