2025. 4. 12. 15:39ㆍ개념 공부
가상화(Virtualization)란?
가상화는 복잡한 컴퓨터 시스템을 더 단순하고 유연하게 사용할 수 있도록 추상화(Abstraction)하는 기술이에요.
실제 하드웨어를 직접 다루지 않고, 가짜(논리적인) 자원처럼 만들어서 더 효율적으로 활용할 수 있도록 해줘요.
대표적인 가상화 기술
- 가상 메모리 (Virtual Memory) - 메모리 자원 가상화
- 가상 머신 (Virtual Machine) - 시스템 전체 가상화
- 컨테이너 (Containers) - 경량 가상화 (OS 수준)
- 하드웨어 가상화 (Hypervisor) - 물리 자원 분리
- Java Virtual Machine (JVM) - 언어 실행 환경 가상화
왜 가상화가 중요할까?
가상화는 단순히 기술이 멋있어서 쓰는 게 아니라, 현실의 여러 문제를 해결하고, 시스템을 더 효율적으로 운영</strong하게 해줘요.
가상화의 핵심 장점
- 자원의 효율적 활용: 하나의 물리 자원을 여러 작업이 공유함으로써 낭비 줄이기
- 격리 및 보안성 향상: 서로 다른 환경을 안전하게 분리
- 개발과 운영의 일관성: 어디서 실행해도 똑같이 작동하는 환경 제공
- 빠른 배포 및 테스트: 새로운 환경을 몇 초 안에 만들 수 있음
- 비용 절감: 하드웨어 수 줄이고, 유지비용 감소
- 확장성과 유연성: 클라우드 환경과 찰떡궁합!
예전에는 하나의 서버에 하나의 운영체제만 올릴 수 있었지만, 가상화 덕분에 하나의 서버에서 수십 개의 가상 머신 또는 컨테이너를 동시에 운영</strong할 수 있게 되었어요.
덕분에 클라우드 컴퓨팅, DevOps, 마이크로서비스</strong 같은 현대 소프트웨어 개발이 가능해졌죠!
가상 메모리 (Virtual Memory)
프로세스가 자신만의 독립적이고 넓은 메모리 주소 공간을 갖는 것처럼 보이게 해주는 기술이에요.
실제로는 가상 주소 → 물리 주소로 변환(address translation)되어 작동하죠.
가상 메모리의 3가지 주요 기능
- 효율적인 메모리 사용: RAM과 디스크를 조합해 캐시처럼 사용. 자주 쓰는 데이터만 메모리에 올림.
- 간단한 메모리 관리: 모든 프로세스가 동일한 주소 구조 사용 (코드, 힙, 스택 등).
- 보호 기능: 프로세스 간 메모리 침범을 방지해 안정성과 보안 향상.
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
이 코드에서 p는 arr[0]의 가상 주소를 가리켜요. 우리가 C에서 사용하는 포인터, malloc, 스택, 배열 접근은 모두 가상 메모리 위에서 동작해요.
가상 머신 (Virtual Machine)
하드웨어 전체(CPU, 메모리, 저장소 등)를 가상으로 흉내내는 시스템이에요.
여러 운영체제를 하나의 물리 머신에서 동시에 실행할 수 있게 해주죠.
예시: VMware, VirtualBox, KVM 등
사용 예시
- 서로 다른 운영체제 동시 실행 (Windows + Linux)
- 개발 환경 격리
- 서버 가상화로 자원 분배 최적화
컨테이너 (Containers, 예: Docker)
OS 수준에서 프로세스를 격리하여 실행하는 경량 가상화 기술이에요.
하드웨어 전체를 흉내 내는 VM보다 훨씬 가볍고 빠르게 실행돼요.
컨테이너의 특징
| 특징 | 설명 |
|---|---|
| 격리성 | 서로 독립된 환경에서 실행됨 (다른 컨테이너/호스트와 분리) |
| 가벼움 | VM보다 작고 빠름. OS 전체를 포함하지 않음 |
| 이식성 | 어디서든 동일한 환경으로 실행 가능 |
| 빠른 실행 | 몇 초 내 실행. 부팅 필요 없음 |
| 확장성 | 마이크로서비스 구조에 적합. 수백 개도 무리 없이 관리 |
하드웨어 가상화 (Hardware Virtualization)
하이퍼바이저(Hypervisor)를 이용해 물리적 CPU, 메모리, 디스크 자원을 여러 개의 가상 머신으로 나누어 제공해요.
예시 도구
- KVM, Xen, VMware ESXi
- AWS EC2 같은 클라우드 서비스
Java Virtual Machine (JVM)
Java 코드는 바이트코드로 컴파일되고, JVM이라는 가상 머신 위에서 실행돼요.
덕분에 Java 프로그램은 운영체제에 상관없이 실행 가능하죠.
슬로건: Write once, run anywhere!
---
요약: 가상화 vs 추상화 차이
- 추상화: 복잡한 내부를 감추고 필요한 것만 보여주는 것 (예: 파일 시스템, 함수)
- 가상화: 물리 자원을 소프트웨어적으로 나누거나 흉내내서 사용하는 것 (예: VM, 컨테이너)
가상화는 추상화의 일종으로 볼 수 있어요. 추상화를 활용해 실제와 다른 환경을 제공하니까요!
'개념 공부' 카테고리의 다른 글
| 컴퓨터 시스템 7장-링커(Linking) 1-1 (0) | 2025.04.19 |
|---|---|
| 포인터 (0) | 2025.04.14 |
| CS:APP 3장 – 기계 수준 프로그램 표현 (중요 개념 정리) (0) | 2025.04.09 |
| 컴퓨터 시스템 2주차 (0) | 2025.04.03 |
| 파이썬 List는 과연 무엇인가? (2) | 2025.03.27 |