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


1. 핵심 개념 정리

# 핵심 개념 간결한 설명 실무/보안 관점에서의 중요성
1 EC2 (Elastic Compute Cloud) AWS 클라우드에서 제공하는 가상 서버입니다. 운영체제(OS), CPU, 메모리, 스토리지 크기 등을 사용자 요구에 맞게 선택하여 구축 및 운영할 수 있습니다. 컴퓨팅 파워를 유연하게 확장/축소할 수 있습니다. IaaS(서비스형 인프라)의 기본이며, 전통적인 서버 환경을 클라우드에 구축하는 핵심입니다. 보안 그룹, IAM 역할 등으로 접근 제어를 철저히 해야 합니다. OS/애플리케이션 계층 보안은 사용자 책임입니다.
2 Amazon EBS (Elastic Block Store) EC2 인스턴스에 연결하여 사용하는 블록 레벨의 영구 스토리지입니다. EC2와 별도로 독립적인 수명 주기를 가지며, 스냅샷 기능을 통해 데이터 백업 및 복구가 용이합니다. SSD/HDD 등 다양한 유형 선택 가능. 데이터 영속성 및 백업 전략에 필수적입니다. EBS는 특정 가용 영역(AZ) 내에서만 사용 가능하므로, AZ 장애 대비를 위해 스냅샷을 다른 AZ나 리전으로 복사해야 합니다. 볼륨 암호화를 통해 민감한 데이터를 보호해야 합니다.
3 ELB (Elastic Load Balancing) 여러 EC2 인스턴스 또는 컨테이너/Lambda에 걸쳐 들어오는 트래픽을 자동으로 분산하는 서비스입니다. Application Load Balancer (ALB), Network Load Balancer (NLB), **Gateway Load Balancer (GLB)**가 있습니다. 고가용성 및 확장성 확보의 핵심입니다. ALB는 HTTP/HTTPS 트래픽 분산(L7), NLB는 TCP/UDP 트래픽 분산(L4)에 사용됩니다. ELB 자체는 장애 지점이 없으며 DDoS 공격 방어 역할도 수행합니다.
4 EC2 오토스케일링 (Auto Scaling) 애플리케이션의 트래픽 변화에 따라 EC2 인스턴스의 수를 자동으로 조정하는 기능입니다. 확장(Scale Out)축소(Scale In) 규칙을 정의할 수 있으며, 최소/최대 인스턴스 수를 설정합니다. 비용 최적화 및 안정적인 성능 유지에 필수입니다. 트래픽 폭주 시 자동으로 확장하여 서비스 중단을 막고, 트래픽 감소 시 축소하여 비용을 절감합니다. **헬스 체크(Health Check)**로 비정상 인스턴스를 자동으로 교체합니다.
5 서버리스 (Serverless) 컴퓨팅 서버를 직접 프로비저닝, 관리하거나 유지할 필요 없이 코드를 실행할 수 있도록 하는 클라우드 컴퓨팅 모델입니다. 사용량에 따라 자동으로 확장되고, 사용한 만큼만 비용을 지불합니다. 운영 부담 최소화 및 비용 효율 극대화에 탁월합니다. OS, 런타임 환경 관리가 AWS의 책임이 되므로 보안 패치 부담이 줄어듭니다.
6 AWS Lambda AWS의 대표적인 **서버리스 FaaS(Function as a Service)**입니다. 이벤트에 응답하여 코드를 실행하며, 서버 관리가 필요 없습니다. 실행 시간에 비례하여 비용이 부과됩니다. 수평 확장성이 매우 높습니다. 이벤트 기반 워크로드 (S3 파일 업로드, DynamoDB 변경, API Gateway 요청 등) 처리에 사용됩니다. Lambda 함수에 **실행 역할(IAM Role)**을 부여하여 최소 권한 원칙을 적용해야 합니다.
7 컨테이너 (Container) 코드, 런타임, 시스템 도구, 라이브러리 등 애플리케이션 실행에 필요한 모든 것을 포함하는 경량의 독립적인 실행 단위입니다. OS 커널을 공유하여 가상 머신(VM)보다 가볍고 빠르게 배포됩니다. Docker가 대표적입니다. 개발 및 배포 환경의 일관성을 제공합니다. 마이크로서비스 아키텍처 구축에 핵심이며, CI/CD 파이프라인과 결합하여 배포 속도를 높이고 롤백이 용이합니다.
8 AWS ECS (Elastic Container Service) AWS에서 컨테이너화된 애플리케이션을 배포, 관리 및 확장하는 완전 관리형 컨테이너 오케스트레이션 서비스입니다. EC2 기반 또는 서버리스인 AWS Fargate 기반으로 컨테이너를 실행할 수 있습니다. 컨테이너 환경의 운영 복잡도를 해소합니다. Fargate를 사용하면 서버(EC2) 관리 없이 컨테이너만 실행할 수 있어 운영 부담을 최소화합니다. ECS의 IAM 역할을 통해 컨테이너별로 접근 권한을 세밀하게 제어하는 것이 중요합니다.

2. 실습 내용

(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. 보안 그룹 생성:

    • aws ec2 create-security-group –group-name WebAccessSG –description “Allow SSH and HTTP access”
    • SSH 허용: 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: 사용 리전의 Amazon Linux 2 AMI ID
      • –count 1 → 인스턴스 1개
      • –instance-type t2.micro → 프리 티어 가능 유형
      • –key-name MyKeyPair → 키 페어 지정
      • –security-group-ids sg-xxx → 보안 그룹
      • –subnet-id subnet-public → Public Subnet
      • –associate-public-ip-address → Public IP 자동 할당

EC2 외부 접근 (SSH):

  • ssh -i “MyKeyPair.pem” ec2-user@< EC2 Public IP > → EC2 인스턴스에 SSH 접속

(B) Amazon EBS 스냅샷 및 볼륨 관리

EBS 볼륨 생성 및 연결:

  1. aws ec2 create-volume –availability-zone ap-northeast-2a –size 10 –volume-type gp3 → 10GiB gp3 볼륨 생성
  2. aws ec2 attach-volume –volume-id vol-xxx –instance-id i-xxx –device /dev/sdf → EC2에 볼륨 연결

EBS 스냅샷 (백업) 생성:

  • aws ec2 create-snapshot –volume-id vol-xxx –description “Daily backup of application data” → 스냅샷 생성
  • aws ec2 create-volume –snapshot-id snap-xxx –availability-zone ap-northeast-2c → 다른 AZ로 복원 (재해 복구 준비)

(C) Elastic Load Balancing (ALB) 및 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 예시 - 이벤트 처리 흐름):

  • 이벤트 데이터 처리: API Gateway 요청에서 queryStringParameters 파싱
  • 비즈니스 로직 실행: name 파라미터에 따라 인사말 메시지 생성
  • 응답 반환: statusCode 200, Content-Type application/json, body에 메시지 포함

Lambda 함수 생성 (AWS CLI):

  1. Lambda 실행 역할 생성 (S3 접근 권한 등 최소 권한 부여)
  2. 코드 패키징: 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 (MB)
  4. 함수 호출 테스트: aws lambda invoke –function-name HelloWorldLambda –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. 실무/보안 관점 분석

분야 적용 시나리오
컴퓨팅 유형 선택 EC2 (VM): 장기적으로 꾸준한 부하, OS 레벨의 완전한 제어(GPU 등), 레거시 애플리케이션, 온프레미스 마이그레이션 시 적합. Lambda (서버리스): 짧은 실행 시간, 간헐적 트래픽, 이벤트 기반 데이터 처리(이미지 리사이징, 로그 분석), API 백엔드에 적합. ECS/Fargate (컨테이너): 마이크로서비스, 일관된 배포 환경, 빠른 배포/롤백, CI/CD에 적합. 운영 부담은 Lambda와 EC2의 중간.
확장성 및 고가용성 EC2: Auto Scaling Group과 ELB를 사용하여 수평 확장(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: 컨테이너의 CPU/메모리 사용량에 대해서만 과금. EC2 인스턴스 관리 비용 불필요.
모니터링 & 로깅 EC2: CloudWatch로 CPU, 네트워크, 디스크 I/O 기본 메트릭 모니터링. CloudWatch Agent로 OS 레벨 지표(메모리, 디스크 사용률) 추가 수집. Lambda: CloudWatch Logs에 함수 실행 로그 및 성능 지표 자동 저장. X-Ray를 통해 분산 추적 활성화. ECS/Fargate: 컨테이너 로그를 CloudWatch Logs로 통합. ECS/Fargate 메트릭(CPU, 메모리 사용률) 자동 모니터링.

4. 개인 인사이트 및 다음 단계

  • 배운 점/느낀 점: AWS는 전통적인 서버 관리(EC2)부터 인프라 관리 부담을 완전히 덜어낸 서버리스(Lambda), 그 중간 단계인 컨테이너(ECS/Fargate)까지 모든 컴퓨팅 요구사항을 만족시키는 다양한 옵션을 제공합니다. 책임 공유 모델 측면에서 EC2는 OS 패치까지 사용자 책임이지만, Lambda는 런타임까지 AWS 책임이므로 보안 관리 부담이 크게 줄어듭니다. Auto Scaling과 ELB의 연동이 고가용성, 비용 최적화, 성능 유지를 동시에 달성하는 핵심임을 깨달았습니다.
  • 심화 방향: EC2 Auto Scaling 실습 심화(시작 템플릿 User Data, Step Scaling, Target Tracking 정책, 부하 테스트), Lambda VPC 배포(Private Subnet 내 RDS 접근), API Gateway + Lambda로 RESTful API 백엔드 구성, ECS/Fargate CI/CD 파이프라인(CodePipeline + CodeBuild) 연동 자동 배포 환경 구축.

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 유형 비교

유형 계층 주요 특징 사용 사례
ALB L7 (HTTP/HTTPS) 경로/호스트 기반 라우팅, 컨테이너, Lambda 지원 마이크로서비스, 웹 애플리케이션
NLB L4 (TCP/UDP/TLS) 초고성능, 고정 IP 주소, 낮은 지연시간 게임, IoT, 극단적 성능 요구
GLB L3 (IP) 서드파티 가상 어플라이언스 체이닝 방화벽, IDS/IPS 배포
CLB L4/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

컴퓨팅 서비스 책임 공유 모델

서비스 사용자 책임 AWS 책임
EC2 OS 패치, 미들웨어, 런타임, 애플리케이션, 데이터 물리적 인프라, 하이퍼바이저
ECS (EC2) OS 패치, Docker, 애플리케이션, 데이터 물리적 인프라
ECS (Fargate) 컨테이너 이미지, 애플리케이션, 데이터 OS, Docker, 물리적 인프라
Lambda 애플리케이션 코드, 실행 역할(IAM), 데이터 OS, 런타임, 물리적 인프라

AWS CLI 주요 명령어 (EC2 관리)

명령어 설명
aws ec2 describe-instances 인스턴스 목록 조회
aws ec2 start-instances –instance-ids i-xxx 인스턴스 시작
aws ec2 stop-instances –instance-ids i-xxx 인스턴스 중지
aws ec2 describe-security-groups –group-ids sg-xxx 보안 그룹 조회
aws ec2 create-volume –size 20 –volume-type gp3 EBS 볼륨 생성
aws ec2 create-snapshot –volume-id vol-xxx EBS 스냅샷 생성
aws lambda list-functions Lambda 함수 목록
aws lambda invoke –function-name MyFunc output.txt Lambda 함수 호출
aws ecs list-clusters ECS 클러스터 목록
aws ecs list-services –cluster MyCluster ECS 서비스 목록