Multipass + Ubuntu로 놀면서 배우는 서버의 세계
보통 “서버”라고 하면 멀리 떨어진 커다란 컴퓨터를 떠올린다.
하지만 사실 서버는 단지 요청을 받고 응답을 주는 컴퓨터일 뿐이다.
그게 구름 위(AWS)든, 네 방 안의 노트북이든 상관없다.
즉,
서버 = 요청을 듣고, 결과를 돌려주는 컴퓨터.
예를 들어 웹사이트를 볼 때,
이런 관계다.
된다.
하지만 문제는 내 컴퓨터엔 이미 Windows나 macOS 같은 운영체제(OS) 가 깔려 있다.
거기에 서버용 프로그램을 마구 설치하면
엉망이 되거나, 지우기 힘들어질 수도 있다.
그래서 나온 게 바로 “가상환경” 이다.
가상환경은 내 컴퓨터 안에 작은 상자 하나를 만들어서,
그 안에 새로운 컴퓨터(운영체제) 를 넣는 기술이다.
이 상자는 밖의 세상(내 컴퓨터)과 어느 정도 분리되어 있다.
그래서 안에서 뭘 망쳐도 밖엔 영향을 안 준다.
[내 컴퓨터]
├─ Windows ← 네가 평소 쓰는 운영체제
│ └─ Multipass ← 상자를 만드는 도구
│ └─ Ubuntu ← 상자 안의 리눅스 서버
Ubuntu는 리눅스 운영체제의 한 종류다.
서버용으로 많이 쓰인다.
즉, 내 컴퓨터 안에 또 하나의 작은 “리눅스 서버 컴퓨터”가 생기는 셈이다.
Multipass는 “상자(가상 서버)”를 쉽게 만들어주는 도구다.
명령어 한 줄이면 Ubuntu 서버가 내 컴퓨터 안에서 바로 만들어진다.
예를 들어:
multipass launch --name myserver
이 한 줄로 Ubuntu 서버가 생긴다.
그리고 이렇게 접속할 수 있다.
multipass shell myserver
그럼 진짜 서버 안으로 들어간다.
이 안에서는 Linux 명령어를 마음껏 쓸 수 있다.
물리적으로는 하나지만, 논리적으로는 두 개다.
Ubuntu는 내 컴퓨터의 일부 CPU, 메모리, 저장공간을 빌려서 쓰지만,
자기만의 세상처럼 작동한다.
그래서 네 컴퓨터 안에 작은 우주 하나가 더 생긴다고 보면 된다.
학생은 교실 안에서 공부하고, 실험하고, 지워도 된다.
다만 학교 전체에는 영향을 주지 않는다.
서버 실습이 안전하다
언제든 새로 시작 가능하다
무료로 서버 공부 가능하다
인터넷이 안 돼도 학습 가능하다
Multipass는 내 컴퓨터 안에 “작은 Ubuntu 서버”를 만들어주는 마법 같은 도구다.
이를 통해 서버를 배우고 실험할 수 있다.
안전하고, 빠르고, 무료다.
로컬에서 클라우드 수준의 서버 환경을 만드는 기술적 근거
Multipass는 단순한 개발 툴이 아니라 하이퍼바이저(hypervisor) 를 제어하는 가상머신 관리 레이어다.
즉, 리눅스 커널 또는 OS 수준의 가상화 기능을 추상화해 손쉽게 Ubuntu VM을 띄우는 인터페이스다.
[Hardware]
├─ CPU / Memory / Disk / NIC
└─ Hypervisor Layer
├─ Windows: Hyper-V
├─ macOS: QEMU + HyperKit
└─ Linux: KVM (Kernel-based Virtual Machine)
└─ Multipass Daemon
└─ Ubuntu VM
Multipass 자체가 가상화를 수행하는 건 아니다.
실제 가상화를 담당하는 건 OS별 기본 하이퍼바이저이며,
Multipass는 그 위에서 VM 생명주기(lifecycle)를 관리한다.
하드웨어 위에 직접 올라가는 하이퍼바이저.
대표적으로 VMware ESXi, Xen 등이 있다.
클라우드 서비스(AWS EC2, Azure VM)는 이 방식을 사용한다.
운영체제 위에서 동작하는 가상화 계층.
Multipass는 이 방식을 사용한다.
즉, Windows나 macOS의 호스트 커널 자원(CPU, Memory, Disk) 을 부분적으로 나눠
Ubuntu에 할당한다.
| 자원 | 격리 방식 | 설명 |
|---|---|---|
| CPU | VT-x / AMD-V | 하드웨어 수준 가상화로 Guest OS에 CPU 코어 일부를 직접 매핑 |
| Memory | Hypervisor Memory Pool | VM별로 고정 크기의 메모리 페이지를 예약 |
| Disk | QCOW2 또는 RAW 이미지 파일 | 실제 파일 형태로 가상 디스크를 생성, Host 파일 시스템 위에 존재 |
| Network | 가상 NIC (bridge / NAT) | Host의 네트워크 인터페이스를 공유하거나 별도의 가상 브리지로 연결 |
→ 결과적으로 Guest OS(Ubuntu)는 물리적 하드웨어에 직접 접근하지 않고,
Hypervisor가 제공하는 가상 하드웨어 추상층(Virtual Hardware Abstraction Layer) 위에서 동작한다.
Ubuntu VM을 띄울 때 내부적으로 다음 단계가 수행된다:
이미지 다운로드
Canonical Cloud Images에서 최신 LTS Ubuntu 이미지를 자동으로 가져온다.
→ 위치: ~/.local/share/multipassd/vault/images
가상 디스크 생성
선택한 용량만큼 QCOW2 기반 디스크 파일을 생성 (myserver.img 등)
네트워크 설정
multipass exec, multipass mount 명령 시 Host와 Guest 간 포트 포워딩 및 공유 활성화VM 부팅 및 클라우드 이니셜라이즈
cloud-init 스크립트로 초기 사용자, SSH 키, 기본 패키지 설치 처리| 항목 | Multipass (가상머신) | Docker (컨테이너) |
|---|---|---|
| 운영체제 구조 | 완전한 Guest OS 실행 | Host OS 커널 공유 |
| 격리 수준 | 하드웨어 가상화 (Hypervisor) | 커널 네임스페이스 기반 격리 |
| 시작 속도 | 느림 (부팅 수십 초) | 매우 빠름 (수 초 이내) |
| 자원 사용량 | 많음 (RAM/디스크 고정 할당) | 적음 (프로세스 수준 격리) |
| 사용 목적 | OS 단위 실습, 서버 구성 테스트 | 애플리케이션 배포, 마이크로서비스 실행 |
| 보안/독립성 | 완전 분리 (커널까지 독립) | 커널 공유로 부분 분리 |
→ 결론적으로 Multipass는 OS 단위의 실습·테스트용,
Docker는 앱 단위의 배포·운영용 이다.
가상화는 단순히 여러 OS를 실행하는 것이 아니라,
시스템 자원을 논리적으로 분할하여 독립된 실행 환경을 제공하는 기술이다.
Multipass는 이 과정을 자동화하여 개발자 입장에서
명령어 몇 줄로 완전한 리눅스 서버를 생성할 수 있도록 해준다.
Multipass의 구조는 AWS EC2 인스턴스와 유사하다.
다만 EC2는 Type-1 Hypervisor(Xen, Nitro) 위에 구축되고,
Multipass는 Type-2 Hypervisor 위에서 로컬에서만 동작한다.
즉,
Multipass = 내 컴퓨터 안의 미니 클라우드
EC2 = 데이터센터 안의 글로벌 클라우드
Multipass에서 만든 Ubuntu VM을 Docker나 Kubernetes 클러스터의 노드로도 등록할 수 있다.
이것이 로컬에서 클라우드 인프라 학습이 가능한 이유다.
| 키워드 | 핵심 개념 |
|---|---|
| Hypervisor | 하드웨어 가상화 계층. OS가 아닌 VM이 직접 하드웨어처럼 자원을 사용하게 함 |
| Multipass | OS별 기본 하이퍼바이저를 활용해 Ubuntu VM을 자동 관리하는 CLI 툴 |
| Guest OS | 완전한 리눅스 서버로서 동작하며, 클라우드 인스턴스와 동일한 구조 |
| 격리 메커니즘 | CPU, Memory, Disk, Network를 하이퍼바이저 수준에서 분리 |
Multipass는 로컬 개발자가 클라우드 수준의 리눅스 서버 환경을 재현할 수 있게 하는 “가상화 추상화 도구”다.
하드웨어와 커널의 경계를 투명하게 가려서, “명령어 한 줄로 클라우드처럼” 서버를 띄우는 것이 그 본질이다.
“내 컴퓨터 안의 EC2” 만들기
“Download for Windows” 클릭
설치 중 “Hyper-V 사용” 허용 (Windows Pro 버전 이상)
설치 완료 후 PowerShell 실행 → 확인:
multipass version
Multipass 버전이 나오면 정상 설치됨.
Multipass는 명령 한 줄로 EC2 인스턴스처럼 서버를 만든다.
multipass launch --name myserver --mem 2G --disk 10G --cpus 2
| 옵션 | 의미 |
|---|---|
--name myserver | 생성할 서버의 이름. 식별용. |
--mem 2G | 2GB 메모리를 VM에 할당. |
--disk 10G | 최대 10GB의 가상 디스크 생성. |
--cpus 2 | CPU 2개 코어 할당. |
이 명령을 실행하면 자동으로 Ubuntu LTS 이미지를 다운로드하고 부팅한다.
multipass list
예시 출력:
Name State IPv4 Image
myserver Running 10.165.89.43 Ubuntu 24.04 LTS
이 IP가 SSH 접속 주소다.
.pem과 동일한 원리)Multipass는 기본적으로 SSH 서버를 실행 중이며,
ubuntu 사용자로 키 기반 인증을 지원한다.
새로운 키를 직접 만들어 등록하자.
PowerShell에서 실행:
ssh-keygen -t ed25519 -f C:\Users\<사용자이름>\.ssh\myserver_key -C "multipass"
결과:
myserver_key → 개인키 (보관용)myserver_key.pub → 공개키 (서버로 전송)Multipass를 이용해 Ubuntu VM 내부에 키를 복사한다.
multipass transfer C:\Users\<사용자이름>\.ssh\myserver_key.pub myserver:/home/ubuntu/tmpkey.pub
multipass exec myserver -- bash -lc "mkdir -p /home/ubuntu/.ssh && cat /home/ubuntu/tmpkey.pub >> /home/ubuntu/.ssh/authorized_keys && rm /home/ubuntu/tmpkey.pub && chmod 700 /home/ubuntu/.ssh && chmod 600 /home/ubuntu/.ssh/authorized_keys"
이제 ubuntu 계정은 해당 키로 SSH 접속 가능하다.
MobaXterm 실행 → Session → SSH
설정값 입력
10.165.89.43 (Multipass VM IP)ubuntu22Advanced SSH settings → Use private key
C:\Users\<사용자이름>\.ssh\myserver_key 선택OK 클릭
정상 접속 시, Ubuntu CLI가 뜨고
EC2 인스턴스 접속 화면과 동일하게 동작한다.
sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
ip -4 addr show eth0 | grep inet
브라우저 주소창에 VM IP 입력
http://10.165.89.43
→ “Welcome to nginx!” 페이지가 뜨면 성공.
Multipass의 VM은 기본적으로 NAT 네트워크에 있다.
즉, 호스트만 접근 가능하다.
외부 사용자(MobaXterm, 다른 PC)가 접속하려면 포트를 열어야 한다.
PowerShell (관리자 권한)에서 실행:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=10.165.89.43 connectport=22
New-NetFirewallRule -DisplayName "Allow SSH 2222" -Direction Inbound -Action Allow -LocalPort 2222 -Protocol TCP
이제 다른 PC에서 아래로 접속 가능:
ssh -i myserver_key -p 2222 ubuntu@<호스트PC의 공인IP>
🔒 주의:
공개망에 직접 노출 시 Fail2Ban, 방화벽, 포트 제한 등 보안조치 필요.
| 명령 | 설명 |
|---|---|
multipass stop myserver | 서버 일시 중단 (메모리 해제) |
multipass start myserver | 다시 켜기 |
multipass delete myserver | 인스턴스 삭제 (디스크 유지) |
multipass purge | 디스크 포함 완전 삭제 |
multipass info myserver | 리소스, IP, 이미지 정보 |
multipass mount <path> myserver:/mnt | 로컬 폴더 공유 |
multipass exec myserver -- uptime | 명령 한 줄 원격 실행 |
| 항목 | Multipass 환경 |
|---|---|
| 서버 생성 | multipass launch |
| SSH 접근 | 개인키 등록 후 MobaXterm 또는 ssh 명령 |
| 기본 계정 | ubuntu |
| 네트워크 | NAT 기본, 포트포워딩 또는 브리지로 외부 접근 가능 |
| 실습 목적 | 클라우드 환경 연습, 배포 테스트, Docker·Nginx·K8s 실험 |
✅ 결론
Multipass는 로컬에서 “EC2 한 대”를 만드는 가장 간단한 방법이다.
.pem키 개념 그대로 적용 가능하며, MobaXterm으로 접속하고
포트포워딩으로 외부에서도 연결할 수 있다.
서버 실습, 클라우드 모의 환경 구축, DevOps 테스트용으로 완벽하다.