1. AWS(= Amazon Web Services)
클라우드 + AWS의 기본 개념
- 클라우드 컴퓨팅
- 서버, 스토리지, 데이터베이스, 네트워크 등을 인터넷 상의 서비스로 빌려 쓰는 것
- 자체 물리 서버를 관리하지 않아도 되고, 필요할 때만 쓰고 비용 지불 → 유연성 & 비용 효율성
- 분산된 데이터 센터(리전 & 가용 영역) 위에서 이런 클라우드 서비스를 제공하는 플랫폼
- 리전(Region) / AZ(Availability Zone)
- WS는 여러 지역(예: 서울 리전, 도쿄 리전 등)에 데이터 센터를 두고 있음
- 각 리전은 여러 가용 영역(AZ)으로 나뉘고, AZ는 물리적으로 분리된 데이터 센터 단위
- 서비스 설계 시 가용성과 내구성을 고려해 리전/ AZ 구조를 이해해야 함
- 비용과 과금 모델
- 대부분의 서비스는 종량 요금(pay-as-you-go) 방식
- 사용한 리소스 (컴퓨팅 시간, 저장 용량, 데이터 전송량 등)에 기반
- 무료 티어(Free Tier)가 있고, 처음 1년은 일부 서비스가 무료로 제공되기도 함
- 비용 빠르게 나가버리는 함정이 있으니, 리소스 할당 시 주의
- (예: EC2 인스턴스 켜 놓고 안 끄는 경우)
IAM (Identity and Access Management)
- AWS 계정의 사용자(User), 그룹(Group), 권한(Policy) 을 관리하는 서비스
| 구성요소 | 설명 | 예시 |
|---|
| User (사용자) | AWS 리소스에 접근하는 개별 계정 | developer1, admin, intern |
| Group (그룹) | 비슷한 역할을 가진 사용자 묶음 | Developers, Admins |
| Role (역할) | 특정 권한 세트를 가진 ‘임시 신분’ | EC2가 S3에 접근할 때 쓰는 역할 |
| Policy (정책) | 실제 권한을 JSON 형식으로 정의 | "Action": "s3:ListBucket" |
| MFA (다중 인증) | 계정 보안을 강화하는 2단계 인증 | 휴대폰 OTP로 로그인 |
Role

- AWS 서비스가 각 학생들에게 반장이라는 역할(Role)를 주고 있다.
권한 구조(Policy 구조 예시)
- Effect: 허용(Allow) 또는 거부(Deny)
- Action: 가능한 작업들 (예: s3:GetObject)
- Resource: 어떤 리소스(S3 버킷 등)에 적용할지
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": "*"
}
]
}
⚠️ 주의사항 ⚠️
- Root 계정은 절대 일상용으로 사용하지 말것
- 처음 가입할 때 만든 계정은 루트(root) 계정
- 이 계정은 “신용카드 관리자 + 신 관리자 권한” 을 가짐
- IAM User를 따로 만들어서 사용하는 것이 좋음
- “최소 권한 원칙(Least Privilege)”
- 꼭 필요한 권한만 줘야 함.
- ex. S3 읽기만 필요하다면 ReadOnlyAccess 정책만 부여.
- MFA는 무조건 켜두기
- 휴대폰 OTP나 Authenticator로 로그인 2단계 보호.
S3 (Simple Storage Service)
- 파일(객체)을 저장하는 클라우드 스토리지 서비스
- 이미지, 동영상, 로그, 백업 등 모든 형태의 파일을 저장 가능
| 개념 | 설명 | 예시 |
|---|
| Bucket (버킷) | 최상위 폴더 (파일 저장소 단위) | my-first-bucket |
| Object (객체) | 버킷 안에 저장된 파일 | images/cat.png, logs/app.log |
| Key (키) | 객체의 경로 이름 | folder1/photo.jpg |
| Region (리전) | 버킷을 저장할 지역 | ap-northeast-2 (서울) |
DB랑 다른점은?
- 정형 데이터: 형태가 고정된 데이터 -> 행과 열로 구분되는 데이터
- 비정형 데이터: 형태가 고정되는 않은 데이터
.jpeg / .png / .pdf = 바이너리 데이터
S3 접근 제어 방식
- S3는 IAM과 연결돼서 접근 통제가 매우 정교
- IAM Policy: 사용자 단위로 접근 제어
- Bucket Policy: 버킷 전체에 접근 규칙 설정 (JSON)
- ACL (Access Control List): 객체 단위의 접근 (지금은 거의 안 씀)
# 예시: 버킷을 “읽기 전용 공개”로 설정
## 실제 운영에서는 조심해야 함
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": ["s3:GetObject"],
"Resource": ["arn:aws:s3:::my-bucket/*"]
}
]
}
⚠️ 주의사항 ⚠️
- 버킷 이름은 전 세계에서 유일해야 함
my-bucket 이런 버킷 이름은 무조건 중복이 생겨서 충돌 가능
ozhoonbucket 처럼 중복될 가능성이 없는 이름으로 하는게 좋음
- 퍼블릭 접근 주의
- “모두 접근 가능”은 매우 위험 (특히 개인정보, 백업 데이터)
- 테스트용이 아니면 절대 Public Access 해제 금지
- 버전 관리(Versioning) 켜두기
- 파일을 실수로 덮어쓸 때, 이전 버전 복원 가능
- 수명 주기(Lifecycle Rule)
- 오래된 파일은 자동으로 Glacier(저비용 보관소)로 이동하게 설정 가능
사용
- 1.버킷만들기
- 객체 소유권(ACL): 객체에 대한 액세스를 지정할 수 있는 사용자를 결정 (비활성화 권장)

- 퍼블릭 액세스(Public Access): 인터넷을 통한 접근

- 안전을 위해서 차단하는게 좋음
- 퍼블릭 엑세스를 차단했다면 콘솔 상에서 dev_user 는 버킷에 접근 가능
- 관리자로 권한(IAM Policy)을 다 열어놨기 때문에 접근 가능
- dev_user(AdministratorAccess)
- 권한을 부여 받은 사람만 가능하다 -> Public Access 차단
- 버전관리 (유료)
- 버전 관리를 사용하여 Amazon S3 버킷에 저장된 모든 객체의 각 버전을 보존,
- 검색 및 복원 가능, 의도치 않은 사용자 작업과 애플리케이션 장애를 모두 복구
- LifeCycle
- 시간을 지정해서 지우기 가능(ex. 10일뒤에 지우기)
S3 데이터 관리
- 공개적인 데이터 관리할 경우 (ex. 웹사이트 회사 로고)
- 퍼블릭 엑세스 차단: 비활성
- bucket policy 추가 (모두 Allow)
- 비공개 버킷 + 개발자는 허용(ex. 대외비문서, 회사 백업자료)
- 퍼블릭 엑세스 차단: 활성
- bucket policy (특정 계정만 Allow)
- 비공개 버킷 + 개발자도 비허용 (ex. 회원 개인정보)
- 퍼블릭 엑세스 차단: 활성
- bucket policy (모두 Deny)
정적 웹 사이트 호스팅
스토리지 클래스
- 데이터의 접근 빈도, 내구성, 비용 등을 기준으로 적절한 저장 방식을 선택할 수 있게 해주는 요금제·성능 구분 개념
- “자주 쓰는 파일인가?”, “장기간 보관만 하면 되는가?”에 따라 다른 클래스를 쓰는 것
| 클래스 이름 | 특징 | 사용 사례 | 비용 | 복원 속도 |
|---|
| S3 Standard | 높은 내구성(99.999999999%)과 가용성, 빠른 접근속도 | 웹사이트, 자주 조회되는 데이터 | 💰 비쌈 | 즉시 |
| S3 Standard-IA (Infrequent Access) | 가끔 접근하지만 즉시 접근 필요, 저장비용↓·요청비용↑ | 백업, 로그 | 💰 중간 | 즉시 |
| S3 One Zone-IA | 한 가용영역(AZ)에만 저장 → 저렴하지만 내구성 낮음 | 재생성 가능한 데이터 | 💰↓ | 즉시 |
| S3 Intelligent-Tiering | 접근 패턴 자동 분석 → 자동으로 Standard ↔ IA 전환 | 접근 패턴이 불규칙한 데이터 | 💰 중간 (자동 전환 수수료 있음) | 즉시 |
| S3 Glacier Instant Retrieval | 거의 접근 안 하지만 접근 시 빠른 복원 | 오래된 이미지, 아카이브 | 💰↓ | 수초~분 내 |
| S3 Glacier Flexible Retrieval (구 Glacier) | 저비용, 복원에 수분~수시간 | 장기 보관 백업 | 💰 아주 저렴 | 느림 |
| S3 Glacier Deep Archive | 최저비용, 장기 아카이브용 (복원 12시간 이상) | 법적 문서, 규제 보관 데이터 | 💰 가장 저렴 | 매우 느림 |
EC2(Elastic Compute Cloud)
- AWS에서 제공하는 가상 서버(가상 머신, Virtual Machine) 서비스
- 사용자가 직접 물리 서버를 사지 않아도 AWS 클라우드에서 필요한 만큼
- 즉, “필요한 만큼, 원하는 스펙으로, 즉시 실행할 수 있는 클라우드 서버”
주요 구성 요소
- 인스턴스(Instance)
- 실제로 실행되는 가상 서버. OS(리눅스/윈도우 등)를 선택해서 실행함
- AMI (Amazon Machine Image)
- 인스턴스 생성 시 사용하는 템플릿 (운영체제 + 설정 포함)
- EBS (Elastic Block Store)
- 인스턴스에 연결하는 하드디스크 역할 (데이터 저장소)
- 보안 그룹(Security Group)
- 방화벽 규칙. 인바운드(들어오는) / 아웃바운드(나가는) 트래픽을 제어
- 키 페어(Key Pair)
- SSH(리눅스) 또는 RDP(윈도우) 접속용 비밀키/공개키 쌍
- 인스턴스 유형 (Instance Type)
- CPU, RAM, 네트워크 성능 등 스펙 조합 (예: t2.micro, m5.large 등)
동작 과정 요약
- AWS 콘솔에서 EC2 인스턴스를 생성(Create Instance)
- 사용할 AMI(예: Ubuntu, Amazon Linux 등)와 인스턴스 유형 선택
- 키 페어(Key Pair) 생성 → 이걸로 SSH 접속
- 보안 그룹(Security Group) 설정 → 접근할 포트 지정 (예: 22, 80 등)
- EBS 볼륨 크기 설정 → 디스크 용량
- 런칭(Launch) → 클라우드 상에 서버가 실행됨
- 퍼블릭 IP로 접속해서 직접 서버 관리 가능
장점
- 유연성
- 확장성
- 필요 시 인스턴스 수를 자동으로 늘리거나 줄일 수 있음 (Auto Scaling)
- 다양한 OS 지원
- Linux, Ubuntu, Amazon Linux, Windows 등
- 비용 효율적
- 사용한 시간만큼만 과금 (초 단위 과금도 가능)
- 통합 관리
- VPC, IAM, S3, RDS 등 다른 AWS 서비스와 쉽게 연동 가능
인스턴스 중지
- 인스턴스를 중지한다면, 인스턴스 내에 실행되고 있던 프로그램이 종료된다.
- 인스턴스의 httpd의 실행이 날라감
- 인스턴스 내부에 있는 내용들은 유지됨
sudo systemctl start httpd 를 재실행할 때마다 해주어야 함
- 이를 해결하기 위해
sudo systemctl enable httpd 를 사용
sudo systemctl enable httpd : 컴퓨터가 재시작 될 때, httpd를 재시작
Auto Scaling(오토 스케일링)
- 애플리케이션의 트래픽이 증가하면 자동으로 EC2 인스턴스를 추가(Scale Out) 하고,
- 트래픽이 줄면 자동으로 인스턴스를 제거(Scale In) 하는 기능
- 즉, “필요할 때만 자원을 쓰고, 쓸데없이 비용이 나가지 않게 하는 자동화된 시스템”

| 구성 요소 | 설명 |
|---|
| Launch Template / Launch Configuration | EC2 인스턴스의 템플릿. 어떤 AMI, 인스턴스 타입, 보안 그룹, 키 페어 등을 사용할지 정의 |
| Auto Scaling Group (ASG) | 실제로 스케일링이 일어나는 단위 그룹. 최소/최대/기본 인스턴스 수를 설정 |
| Scaling Policy (스케일링 정책) | 언제, 어떤 조건에서 인스턴스를 늘리거나 줄일지를 정의 (예: CPU 사용률 70% 이상일 때 2대 추가) |
| CloudWatch Alarm | 스케일링 조건을 감시하는 모니터링 시스템 (CPU, 메모리, 네트워크 트래픽 등 지표 기반) |
동작 원리
- ASG 생성
- 먼저 Auto Scaling Group을 만들고, 사용할 Launch Template(인스턴스 설정)을 연결
- CloudWatch와 연동
- 예를 들어 “CPU 사용률이 70%를 초과하면 스케일 아웃” 이라는 정책을 추가
- 트래픽 증가
- 실제 서비스 트래픽이 늘어나면 CloudWatch가 CPU 사용률을 감지
- 스케일 아웃 (확장)
- 설정된 조건에 따라 새로운 EC2 인스턴스를 자동으로 생성
- 트래픽 감소
- CPU 사용률이 일정 시간 30% 이하로 떨어지면 CloudWatch가 알람을 발생
- 스케일 인 (축소)
- 불필요한 인스턴스를 자동으로 종료하여 비용을 절감
| 유형 | 설명 | 예시 |
|---|
| Dynamic Scaling (동적 스케일링) | CloudWatch 지표를 기반으로 자동 조정 | CPU 80% 초과 → 인스턴스 2대 추가 |
| Scheduled Scaling (예약 스케일링) | 특정 시간에 맞춰 자동 조정 | 평일 오전 9시에 5대, 오후 6시에 2대로 줄이기 |
| Predictive Scaling (예측 스케일링) | 과거 트래픽 패턴을 분석해 미리 스케일링 | 매일 점심시간 트래픽 급증 예상 시 사전 확장 |
Auto Scaling 장점
- 비용 효율성 – 필요한 시점에만 인스턴스를 실행해 비용 절감
- 가용성 향상 – 인스턴스 장애 시 자동으로 새 인스턴스 생성
- 확장성 – 갑작스러운 트래픽 급증에도 자동 대응
- 운영 자동화 – 인력 개입 없이 시스템이 자체 조정
auto_scailing
대상 추적 크기 조정 정책(Target Tracking Scaling Policy)
- 가장 많이 쓰이는 자동 확장 방식으로,
- 사람이 일일이 규칙을 짜지 않아도 지표(Target Metric) 를 기준으로 인스턴스 개수를 자동으로 조절
- ex. CPU 사용률을 50%로 유지하겠다고 설정하면,
- 사용률이 80%로 오르면 인스턴스를 추가하고, 30%로 떨어지면 인스턴스를 줄이는 식
로드 밸런서(Load Balancer)
- 사용자 요청(트래픽)을 여러 서버(EC2 인스턴스)에 균등하게 분배하는 장치
- 로드 밸런서 서비스: ELB (Elastic Load Balancing)
- AWS에서 제공하는 관리형 로드 밸런서 서비스로,
- 부하 분산, 헬스 체크, 보안, SSL/TLS, Auto Scaling 연동을 자동으로 처리
ELB의 주요 종류
| 종류 | 이름 | 주요 특징 |
|---|
| 🌐 ALB (Application Load Balancer) | HTTP / HTTPS | 7계층 (애플리케이션 레벨)에서 작동 URL·경로·헤더 기반 라우팅 가능 FastAPI, Flask 등 웹 API에 가장 자주 사용 |
| ⚙️ NLB (Network Load Balancer) | TCP / UDP | 4계층 (전송 레벨)에서 작동 고성능, 저지연 트래픽 처리용 실시간 게임, 금융, IoT 등에 적합 |
| 🧩 CLB (Classic Load Balancer) | HTTP / TCP | 구버전 로드 밸런서 (현재는 거의 비추천) |
| 🧭 GWLB (Gateway Load Balancer) | VPC 네트워크 트래픽 분산용 | 보안/방화벽 장비 앞단에 배치하는 특수용도 |
핵심기능
| 기능 | 설명 |
|---|
| 트래픽 분산 | 여러 EC2 인스턴스에 자동 부하 분산 |
| Health Check | 인스턴스 상태를 주기적으로 확인, 비정상 인스턴스 제외 |
| SSL/TLS 암호화 | HTTPS 통신용 인증서 적용 (ACM과 통합 가능) |
| 라우팅 규칙 | URL 경로(/api, /admin 등), 호스트 기반(www.example.com) 분기 |
| Auto Scaling 연동 | 인스턴스가 늘어나거나 줄어도 자동으로 Target Group 업데이트 |
| Sticky Session | 특정 사용자를 동일 인스턴스에 고정 가능 (세션 유지용) |
RDS (관계형 데이터베이스 서비스)
- AWS가 제공하는 완전관리형(Managed) 관계형 데이터베이스 서비스
- 사용자가 직접 DB 서버를 설치하고 운영하는 대신,
- AWS가 알아서 백업, 패치, 모니터링, 장애 복구 등을 처리해주는 서비스
특징
| 항목 | 설명 |
|---|
| 관리형 서비스 | DB 설치, 설정, 백업, 패치, 복구 등을 AWS가 자동으로 수행 |
| 확장성 | CPU, 메모리, 스토리지 크기를 즉시 조정 가능 (Auto Scaling도 가능) |
| 고가용성(HA) | Multi-AZ(다중 가용 영역) 배포로 장애 시 자동으로 대기 인스턴스로 전환 |
| 보안 | VPC, 서브넷, 보안그룹, 암호화(KMS), IAM 등과 통합 |
| 모니터링 | CloudWatch를 통한 성능, 연결 수, CPU, IOPS 모니터링 지원 |
| 자동 백업 | 매일 자동 백업 + 시점 복원(Point-in-Time Recovery) 가능 |
지원되는 데이터베이스 엔진
| 엔진 | 설명 |
|---|
| MySQL | 가장 널리 쓰이는 오픈소스 DB |
| PostgreSQL | 오픈소스 고급 DB, JSON/BLOB 등 지원 |
| MariaDB | MySQL 기반, 경량형 |
| Oracle | 상용 DB, 라이선스 필요 |
| Microsoft SQL Server | MS 환경용, .NET 연동 쉬움 |
| Amazon Aurora | AWS가 직접 개발한 MySQL/PostgreSQL 호환 DB, 성능 최대 5배↑ |