[2026] 클라우드 컴퓨팅 기초 — 가상화·VPC·스토리지·프로덕션 패턴까지
이 글의 핵심
클라우드는 “원격에 있는 Linux 박스”가 아니라, 가상화·네트워크·스토리지가 겹겹이 쌓인 공유 인프라입니다. 하이퍼바이저 종류, 테넌트 격리, VPC·서브넷 설계, 디스크·오브젝트 스토리지의 성능 차원, 운영 패턴까지 한 번에 잡습니다.
이 글의 핵심
클라우드 서비스를 “API로 켜지는 서버”로만 보면, 비용·성능·보안 이슈가 생길 때 원인을 좁히기 어렵습니다. 가상화 스택, 다중 고객(멀티테넌시) 격리, 가상 네트워크(VPC)와 서브넷, 스토리지 계층, 프로덕션 패턴을 이해하면 설계와 장애 대응이 한 단계 정교해집니다.
들어가며
퍼블릭 클라우드는 데이터센터의 물리 서버를 여러 고객이 동시에 나누어 쓰는 구조 위에, API·과금·자동화 레이어가 얹혀 있습니다. 같은 “vCPU”라도 호스트 배치, 네트워크 경로, 디스크 종류에 따라 체감 성능이 달라지며, 이는 모두 아래 내부 구조와 연결됩니다. 이 글은 특정 벤더 한 곳에 묶이지 않도록 개념 중심으로 서술하되, 운영자가 실제로 마주치는 용어(VPC, 서브넷, IOPS 등)를 함께 짚습니다.
가상화와 하이퍼바이저
물리 서버에서 VM까지
가상화는 한 대의 물리 머신 위에 가상 머신(VM) 또는 컨테이너 여러 개를 올려, CPU·메모리·디바이스를 논리적으로 나누는 기술입니다. 이를 조율하는 소프트웨어가 하이퍼바이저(hypervisor) 입니다. 게스트 OS는 “진짜 하드웨어”인 것처럼 동작하지만, 실제로는 하이퍼바이저가 CPU 명령·메모리 매핑·I/O를 중재합니다.
타입 1(베어메탈) 하이퍼바이저
타입 1은 호스트 OS 없이(또는 최소한의 관리 도메인만 두고) 하이퍼바이저가 물리 하드웨어에 직접 올라갑니다. 대규모 퍼블릭 클라우드의 컴퓨트 노드는 이 구조에 가깝게 설계되어, 스케줄링·메모리 오버커밋·디바이스 가상화 경로를 데이터센터 규모에 맞게 최적화합니다.
특징은 다음과 같습니다.
- 오버헤드 최소화: 레이어가 적어 컨텍스트 전환·I/O 경로가 상대적으로 짧습니다.
- 리소스 스케줄링: 수천 대의 VM을 한 클러스터에서 돌리기 위한 CPU 핀(pinning), NUMA 인지 배치, 대형 페이지 같은 기법이 중요해집니다.
타입 2(호스티드) 하이퍼바이저
타입 2는 Windows·Linux 같은 호스트 OS 위에서 하이퍼바이저가 동작합니다. VirtualBox, 데스크톱용 VMware Workstation 등이 대표적입니다. 개발자 PC에서 VM을 띄우거나, 소규모 온프레미스에서 쓰기 쉽습니다. 다만 호스트 OS의 스케줄링·파일 I/O·드라이버 스택을 한 번 더 거치므로, 동일 스펙 대비 타입 1 데이터센터 솔루션보다 지연 분산이 커질 수 있습니다.
전가상화와 반가상화(역사적·개념적 이해)
초기 x86 가상화는 민감한 명령을 트랩(trap) 처리하는 전가상화(full virtualization) 로 구현되었고, Xen 등에서는 게스트가 하이퍼콜을 쓰는 반가상화(paravirtualization) 로 성능을 보완하기도 했습니다. 현재는 Intel VT-x / AMD-V 같은 하드웨어 보조 가상화가 표준이며, KVM·Hyper-V 등은 이를 기반으로 게스트를 돌립니다. 클라우드 문서에서 보는 “HVM”“PV” 용어는 이 계보에서 나온 경우가 많습니다.
컨테이너와의 관계
컨테이너는 호스트 커널을 공유하고 프로세스·파일시스템·네트워크를 네임스페이스(namespace) 와 cgroups(또는 cgroup v2)로 격리합니다. VM보다 가볍지만, 커널을 공유하므로 격리 강도는 VM과 다릅니다. 퍼블릭 클라우드에서는 고객 워크로드가 VM(또는 베어메탈) 위에 올라가고, 그 위에 Kubernetes 파드(컨테이너)가 얹히는 다층 구조가 흔합니다. “클라우드 네이티브”를 논할 때 이 스택을 함께 떠올리면 설계가 명확해집니다.
멀티테넌시와 리소스 격리
멀티테넌시란
멀티테넌시(multi-tenancy) 는 하나의 물리 인프라를 여러 고객(테넌트)이 나누어 쓰는 모델입니다. 퍼블릭 클라우드의 경제성은 이 모델에서 나옵니다. 대신 보안·성능·규정 준수 측면에서 “서로의 데이터·연산·네트워크가 섞이지 않도록” 격리 메커니즘이 필수입니다.
격리의 층위
격리는 한 가지 기술로 끝나지 않고 여러 층이 겹칩니다.
- 하이퍼바이저·하드웨어: VM 간 메모리·CPU 상태 분리, EPT/NPT 등 2단 주소 변환으로 게스트 물리→호스트 물리 매핑.
- 네트워크: VPC, 보안 그룹, NACL, 라우팅으로 패킷 경로 제어.
- 스토리지: 볼륨 암호화, 접근 정책, 테넌트별 네임스페이스(버킷·파일시스템).
- 관리 플레인: IAM·역할·감사 로그로 “누가 API로 무엇을 했는지” 분리.
Noisy neighbor와 성능 변동
같은 호스트에 올라간 이웃 VM이 CPU·디스크·네트워크를 몰아쓰면, 내 VM의 지연·IOPS가 흔들릴 수 있습니다. 이를 noisy neighbor 문제라고 부릅니다. 이를 줄이기 위해 클라우드는 전용 호스트, 인스턴스군의 성능 보장, 버스트 가능 크레딧(크레딧 기반 버스트 디스크 등), 네트워크 향상형 SKU 같은 상품을 둡니다. 아키텍처 측면에서는 수평 확장, 큐 기반 비동기 처리, 캐시, 디스크·인스턴스 계층 업그레이드로 흡수합니다.
“공유”와 “전용”의 스펙트럼
- 공유 인스턴스: 비용 효율이 높고 변동이 클 수 있음.
- 전용/단일 테넌트 옵션: 규정·라이선스·극단적 성능 안정성이 필요할 때 선택.
- 베어메탈: 가상화 오버헤드를 피하고 특정 워크로드(예: 특정 HPC, 레거시 라이선스)에 맞출 때.
클라우드 네트워킹: VPC와 서브넷
VPC(Virtual Private Cloud)의 역할
VPC는 퍼블릭 클라우드 안에 만드는 논리적 격리 네트워크입니다. 여기에 서브넷, 라우트 테이블, 인터넷 게이트웨이, NAT, 프라이빗 연결(VPN·전용선·프라이빗 링크 등)을 붙여, 온프레미스 네트워크 설계를 클라우드로 옮긴 것과 유사한 모델을 만듭니다.
서브넷과 가용 영역(AZ)
서브넷은 VPC CIDR 블록의 일부에 해당하는 IP 범위를 가진 세그먼트입니다. 퍼블릭 클라우드는 보통 가용 영역(Availability Zone) 이라는 물리적으로 분리된 위치마다 서브넷을 두고, 로드밸런서 뒤에 다중 AZ로 서비스를 배치하는 패턴이 기본이 됩니다. 한 AZ 장애 시 다른 AZ가 트래픽을 받도록 헬스 체크·세션·데이터 복제 설계가 따라옵니다.
퍼블릭 vs 프라이빗 서브넷
- 퍼블릭 서브넷: 인터넷 게이트웨이로의 라우트가 있어 공인 IP를 가진 리소스가 직접 인바운드·아웃바운드할 수 있습니다(설계에 따라 제한).
- 프라이빗 서브넷: 인터넷에 직접 나가지 않고, NAT 게이트웨이/인스턴스 또는 프라이빗 엔드포인트를 통해 아웃바운드만 하거나, 완전 폐쇄망으로 둡니다.
DB·내부 API·배치 워커는 프라이빗에 두고, ALB/NLB 등 엣지만 퍼블릭에 노출하는 구성이 흔합니다.
보안 그룹과 NACL
- 보안 그룹(스테이트풀): ENI(네트워크 인터페이스)에 붙는 방화벽 규칙. 허용 규칙 중심이며, 응답 트래픽은 관련 연결로 연동되는 경우가 많습니다.
- NACL(스테이트리스): 서브넷 경계의 추가 필터. deny 규칙을 세밀히 넣을 때 유용하지만, 운영 복잡도가 올라갑니다.
실무에서는 보안 그룹으로 대부분 해결하고, 규정·레거시·대규모 네트워크에서 NACL을 보강하는 식이 일반적입니다.
DNS와 내부 이름 해석
VPC 내부 프라이빗 DNS로 서비스 디스커버리를 하면, IP 대신 이름으로 부하를 분산할 수 있습니다. 하이브리드 환경에서는 온프레미스 DNS와 조건부 포워딩을 맞추는 것이 운영 포인트입니다.
스토리지 유형과 성능 계층
블록·파일·오브젝트
- 블록 스토리지: 디스크 블록 단위로 마운트합니다. OS 부팅 볼륨, DB 데이터 디렉터리 등 랜덤 I/O가 많은 워크로드에 적합합니다. 성능은 프로비저닝 IOPS, 처리량(throughput), 볼륨 유형(SSD vs HDD 계열)에 따라 갈립니다.
- 파일 스토리지: NFS·SMB 등 파일 프로토콜로 여러 인스턴스가 동시에 공유합니다. 레거시 앱·콘텐츠 저장소에서 자주 씁니다.
- 오브젝트 스토리지: 버킷·키 모델로 대용량을 수평 확장합니다. HTTP(S) API, 버전 관리, 라이프사이클(티어링), 정적 웹 호스팅에 강합니다. 일반적으로 POSIX 파일시스템처럼 mmap이나 작은 랜덤 쓰기에 쓰기 어렵고, 그런 용도는 블록/파일이 맞습니다.
성능을 말할 때의 축
- IOPS: 초당 입출력 연산 수. 작은 랜덤 I/O가 많은 DB에 중요합니다.
- 처리량(MB/s): 대용량 순차 읽기·쓰기, ETL, 미디어에 중요합니다.
- 지연(latency): P99 지연이 SLA에 직결됩니다. 로컬 NVMe 임시 디스크는 빠르지만 영속성이 없거나 제한적인 경우가 많아, 애플리케이션 캐시·스풀 용도와 영구 데이터를 구분해야 합니다.
스냅샷·복제·백업
블록 볼륨 스냅샷은 증분 복사에 유리하고, 다른 리전으로 복제하면 재해 복구(DR) 전략의 한 축이 됩니다. 오브젝트 스토리지는 버전 관리·교차 리전 복제로 데이터 보호를 구성합니다. 복구 목표 시간(RTO)·복구 시점(RPO)을 문서화해 두면 장애 시 혼선이 줄어듭니다.
프로덕션 클라우드 패턴
가용성: 멀티 AZ와 헬스 체크
단일 AZ는 전원·네트워크·패치 이벤트에 취약합니다. 프로덕션은 최소 두 AZ 이상에 상태 비저장(stateless) 애플리케이션을 두고, 로드밸런서 헬스 체크로 불량 노드를 제외합니다. 세션 고정에 의존하면 AZ 장애 시 사용자 경험이 깨질 수 있어, 세션 외부화(Redis 등)나 무상태 JWT 등을 검토합니다.
확장: 오토스케일링과 큐
트래픽 급증에 수평 오토스케일링을 걸되, DB·외부 API가 병목이면 인스턴스만 늘어나도 소용없습니다. SQS·Kafka 등 큐로 유입을 평준화하고, 워커 풀을 스케일하는 패턴이 흔합니다. 아이템포턴시, 재시도 백오프, 데드 레터 큐는 필수 운영 지침입니다.
보안: 최소 권한과 시크릿 관리
IAM 역할을 인스턴스·파드에 붙이고, 키는 코드에 넣지 않습니다. 시크릿 매니저·환경별 계정 분리·감사 로그로 누가 무엇에 접근했는지 추적합니다. 네트워크 세그먼테이션(퍼블릭/프라이빗, DB는 프라이빗만)과 프라이빗 엔드포인트로 데이터 플레인 노출을 줄입니다.
관측 가능성: 메트릭·로그·트레이스
프로덕션은 메트릭(RED/USE 등), 구조화 로그, 분산 트레이싱으로 “어디가 느린지”를 끊김 없이 봐야 합니다. 클라우드 관리형 서비스를 쓰더라도 애플리케이션 레벨 지표는 직접 노출해야 합니다.
인프라 as 코드와 환경 일관성
Terraform·Pulumi·클라우드 전용 CDK 등으로 VPC·서브넷·보안 그룹을 코드화하면, 검토 가능한 변경 이력과 재현 가능한 환경을 얻습니다. 스테이징 = 프로덕션의 축소판이 되도록 네트워크 토폴로지를 맞추는 것이 장기적으로 비용을 줄입니다.
비용: 예약·스팟·라이프사이클
온디맨드는 유연하고 비쌀 수 있고, 예약/세이빙스 플랜은 베이스 부하에, 스팟/선점형은 낙관적 워크로드에 맞춥니다. 오브젝트 스토리지는 라이프사이클 정책으로 오래된 데이터를 저비용 티어로 내립니다.
정리
클라우드의 “기초”는 서비스 이름 암기가 아니라, 가상화로 자원을 나누고, 멀티테넌시에서 격리하고, VPC·서브넷으로 트래픽 경로를 고정하며, 스토리지 종류별 성능 축을 맞추고, 멀티 AZ·오토스케일·관측·IaC로 운영을 닫는 구조입니다. 이 지도를 머릿속에 두면, 이후 특정 벤더의 EC2·GCE·Azure VM 문서를 읽을 때도 같은 뼈대로 빠르게 정렬할 수 있습니다.
참고로 읽을 글
같은 블로그의 AWS 입문 가이드(EC2·S3·RDS)는 콘솔 실습 흐름과 연결하기 좋고, Astro + Cloudflare Pages 스택 비교는 엣지·정적 배포 관점을 보완합니다.
심화 부록: 구현·운영 관점
이 부록은 앞선 본문에서 다룬 주제(「[2026] 클라우드 컴퓨팅 기초 — 가상화·VPC·스토리지·프로덕션 패턴까지」)를 구현·런타임·운영 관점에서 다시 압축합니다. 도메인별 세부 구현은 글마다 다르지만, 입력 검증 → 핵심 연산 → 부작용(I/O·네트워크·동시성) → 관측의 흐름으로 장애를 나누면 원인 추적이 빨라집니다.
내부 동작과 핵심 메커니즘
flowchart TD A[입력·요청·이벤트] --> B[파싱·검증·디코딩] B --> C[핵심 연산·상태 전이] C --> D[부작용: I/O·네트워크·동시성] D --> E[결과·관측·저장]
sequenceDiagram participant C as 클라이언트/호출자 participant B as 경계(런타임·게이트웨이·프로세스) participant D as 의존성(API·DB·큐·파일) C->>B: 요청/이벤트 B->>D: 조회·쓰기·RPC D-->>B: 지연·부분 실패·재시도 가능 B-->>C: 응답 또는 오류(코드·상관 ID)
- 불변 조건(Invariant): 버퍼 경계, 프로토콜 상태, 트랜잭션 격리, FD 상한 등 단계별로 문장으로 적어 두면 디버깅 비용이 줄어듭니다.
- 결정성: 순수 층과 시간·네트워크·스케줄에 의존하는 층을 분리해야 테스트와 장애 분석이 쉬워집니다.
- 경계 비용: 직렬화, 인코딩, syscall 횟수, 락 경합, 할당·GC, 캐시 미스를 의심 목록에 둡니다.
- 백프레셔: 생산자가 소비자보다 빠를 때 버퍼·큐·스트림에서 속도를 줄이는 신호를 어디에 둘지 정의합니다.
프로덕션 운영 패턴
| 영역 | 운영 관점 질문 |
|---|---|
| 관측성 | 요청 단위 상관 ID, 에러율·지연 p95/p99, 의존성 타임아웃·재시도가 대시보드에 보이는가 |
| 안전성 | 입력 검증·권한·비밀·감사 로그가 코드 경로마다 일관적인가 |
| 신뢰성 | 재시도는 멱등 연산에만 적용되는가, 서킷 브레이커·백오프·DLQ가 있는가 |
| 성능 | 캐시·배치 크기·커넥션 풀·인덱스·백프레셔가 데이터 규모에 맞는가 |
| 배포 | 롤백 룬북, 카나리/블루그린, 마이그레이션·피처 플래그가 문서화되어 있는가 |
| 용량 | 피크 트래픽·디스크·FD·스레드 풀 상한을 주기적으로 검증하는가 |
스테이징은 데이터 양·네트워크 RTT·동시성을 프로덕션에 가깝게 맞출수록 재현율이 올라갑니다.
확장 예시: 엔드투엔드 미니 시나리오
앞선 본문 주제(「[2026] 클라우드 컴퓨팅 기초 — 가상화·VPC·스토리지·프로덕션 패턴까지」)를 배포·운영 흐름에 맞춰 옮긴 체크리스트입니다. 도메인에 맞게 단계 이름만 바꿔 적용할 수 있습니다.
- 입력 계약 고정: 스키마·버전·최대 페이로드·타임아웃·에러 코드를 경계에 둔다.
- 핵심 경로 계측: 요청 ID, 단계별 지연, 외부 호출 결과 코드를 로그·메트릭·트레이스에서 한 흐름으로 본다.
- 실패 주입: 의존성 타임아웃·5xx·부분 데이터·락 대기를 스테이징에서 재현한다.
- 호환·롤백: 설정/마이그레이션/클라이언트 버전을 되돌릴 수 있는지 확인한다.
- 부하 후 검증: 피크 대비 p95/p99, 에러율, 리소스 상한, 알림 임계값을 점검한다.
handle(request):
ctx = newCorrelationId()
validated = validateSchema(request)
authorize(validated, ctx)
result = domainCore(validated)
persistOrEmit(result, idempotentKey)
recordMetrics(ctx, latency, outcome)
return result
문제 해결(Troubleshooting)
| 증상 | 가능 원인 | 조치 |
|---|---|---|
| 간헐적 실패 | 레이스, 타임아웃, 외부 의존성, DNS | 최소 재현 스크립트, 분산 트레이스·로그 상관관계, 재시도·서킷 설정 점검 |
| 성능 저하 | N+1, 동기 I/O, 락 경합, 과도한 직렬화, 캐시 미스 | 프로파일러·APM으로 핫스팟 확인 후 한 가지씩 제거 |
| 메모리 증가 | 캐시 무제한, 구독/리스너 누수, 대용량 버퍼, 커넥션 미반납 | 상한·TTL·힙/FD 스냅샷 비교 |
| 빌드·배포만 실패 | 환경 변수, 권한, 플랫폼 차이, lockfile | CI 로그와 로컬 diff, 런타임·이미지 버전 핀 |
| 설정 불일치 | 프로필·시크릿·기본값, 리전 | 스키마 검증된 설정 단일 소스와 배포 매트릭스 표준화 |
| 데이터 불일치 | 비멱등 재시도, 부분 쓰기, 캐시 무효화 누락 | 멱등 키·아웃박스·트랜잭션 경계 재검토 |
권장 순서: (1) 최소 재현 (2) 최근 변경 범위 축소 (3) 환경·의존성 차이 (4) 관측으로 가설 검증 (5) 수정 후 회귀·부하 테스트.
배포 전에는 git add → git commit → git push 후 npm run deploy 순서를 권장합니다.