Multipass + Ubuntu

HelloPong·2025년 10월 23일

공부

목록 보기
36/39
post-thumbnail

🧩 내 컴퓨터 안에 또 다른 컴퓨터가 생긴다면?

Multipass + Ubuntu로 놀면서 배우는 서버의 세계


🌱 "서버"가 뭐야?

보통 “서버”라고 하면 멀리 떨어진 커다란 컴퓨터를 떠올린다.
하지만 사실 서버는 단지 요청을 받고 응답을 주는 컴퓨터일 뿐이다.
그게 구름 위(AWS)든, 네 방 안의 노트북이든 상관없다.

즉,

서버 = 요청을 듣고, 결과를 돌려주는 컴퓨터.

예를 들어 웹사이트를 볼 때,

  • 네 컴퓨터는 “클라이언트(손님)”
  • 페이지를 돌려주는 쪽은 “서버(요리사)”

이런 관계다.


💡 그런데 내 컴퓨터로 서버를 만들 수 있을까?

된다.
하지만 문제는 내 컴퓨터엔 이미 Windows나 macOS 같은 운영체제(OS) 가 깔려 있다.
거기에 서버용 프로그램을 마구 설치하면
엉망이 되거나, 지우기 힘들어질 수도 있다.

그래서 나온 게 바로 “가상환경” 이다.


🧱 가상환경은 “상자”다

가상환경은 내 컴퓨터 안에 작은 상자 하나를 만들어서,
그 안에 새로운 컴퓨터(운영체제) 를 넣는 기술이다.

이 상자는 밖의 세상(내 컴퓨터)과 어느 정도 분리되어 있다.
그래서 안에서 뭘 망쳐도 밖엔 영향을 안 준다.

[내 컴퓨터]
 ├─ Windows  ← 네가 평소 쓰는 운영체제
 │    └─ Multipass  ← 상자를 만드는 도구
 │         └─ Ubuntu  ← 상자 안의 리눅스 서버

Ubuntu는 리눅스 운영체제의 한 종류다.
서버용으로 많이 쓰인다.
즉, 내 컴퓨터 안에 또 하나의 작은 “리눅스 서버 컴퓨터”가 생기는 셈이다.


🧠 Multipass가 하는 일

Multipass는 “상자(가상 서버)”를 쉽게 만들어주는 도구다.
명령어 한 줄이면 Ubuntu 서버가 내 컴퓨터 안에서 바로 만들어진다.

예를 들어:

multipass launch --name myserver

이 한 줄로 Ubuntu 서버가 생긴다.
그리고 이렇게 접속할 수 있다.

multipass shell myserver

그럼 진짜 서버 안으로 들어간다.
이 안에서는 Linux 명령어를 마음껏 쓸 수 있다.


🧩 진짜로 두 개의 컴퓨터가 되는 걸까?

물리적으로는 하나지만, 논리적으로는 두 개다.

  • 겉은 Windows (내가 쓰는 컴퓨터)
  • 속은 Ubuntu (Multipass가 만든 가상 서버)

Ubuntu는 내 컴퓨터의 일부 CPU, 메모리, 저장공간을 빌려서 쓰지만,
자기만의 세상처럼 작동한다.

그래서 네 컴퓨터 안에 작은 우주 하나가 더 생긴다고 보면 된다.


🎨 비유로 이해하기

  • 내 컴퓨터: 학교
  • Multipass: 교실 하나 빌려주는 선생님
  • Ubuntu: 그 교실에서 공부하는 학생

학생은 교실 안에서 공부하고, 실험하고, 지워도 된다.
다만 학교 전체에는 영향을 주지 않는다.


🚀 그러면 뭐가 좋은데?

  1. 서버 실습이 안전하다

    • 잘못 설정해도 내 컴퓨터가 망가지지 않는다.
  2. 언제든 새로 시작 가능하다

    • Ubuntu를 몇 초 만에 지웠다가 새로 만들 수 있다.
  3. 무료로 서버 공부 가능하다

    • AWS나 EC2처럼 돈이 들지 않는다.
  4. 인터넷이 안 돼도 학습 가능하다

    • 모든 게 내 컴퓨터 안에서 돌아간다.

🧰 Multipass로 할 수 있는 것들

  • 리눅스 명령어 연습
  • Nginx, MySQL, Docker, Kubernetes 실습
  • 클라우드 배포 전에 미리 서버 구성 테스트
  • 네트워크 구조나 CI/CD 환경 실험

💬 정리하자면

Multipass는 내 컴퓨터 안에 “작은 Ubuntu 서버”를 만들어주는 마법 같은 도구다.
이를 통해 서버를 배우고 실험할 수 있다.
안전하고, 빠르고, 무료다.


⚙️ Multipass 내부 구조와 가상화의 원리

로컬에서 클라우드 수준의 서버 환경을 만드는 기술적 근거


🧠 Multipass의 본질: 하이퍼바이저 기반 가상화

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)를 관리한다.


🔩 하이퍼바이저(Hypervisor)의 역할

1️⃣ Type-1 (Bare Metal)

하드웨어 위에 직접 올라가는 하이퍼바이저.
대표적으로 VMware ESXi, Xen 등이 있다.
클라우드 서비스(AWS EC2, Azure VM)는 이 방식을 사용한다.

2️⃣ Type-2 (Hosted)

운영체제 위에서 동작하는 가상화 계층.
Multipass는 이 방식을 사용한다.
즉, Windows나 macOS의 호스트 커널 자원(CPU, Memory, Disk) 을 부분적으로 나눠
Ubuntu에 할당한다.


🧬 Multipass의 자원 격리 메커니즘

자원격리 방식설명
CPUVT-x / AMD-V하드웨어 수준 가상화로 Guest OS에 CPU 코어 일부를 직접 매핑
MemoryHypervisor Memory PoolVM별로 고정 크기의 메모리 페이지를 예약
DiskQCOW2 또는 RAW 이미지 파일실제 파일 형태로 가상 디스크를 생성, Host 파일 시스템 위에 존재
Network가상 NIC (bridge / NAT)Host의 네트워크 인터페이스를 공유하거나 별도의 가상 브리지로 연결

→ 결과적으로 Guest OS(Ubuntu)는 물리적 하드웨어에 직접 접근하지 않고,
Hypervisor가 제공하는 가상 하드웨어 추상층(Virtual Hardware Abstraction Layer) 위에서 동작한다.


🧮 Multipass의 실행 프로세스

Ubuntu VM을 띄울 때 내부적으로 다음 단계가 수행된다:

  1. 이미지 다운로드
    Canonical Cloud Images에서 최신 LTS Ubuntu 이미지를 자동으로 가져온다.
    → 위치: ~/.local/share/multipassd/vault/images

  2. 가상 디스크 생성
    선택한 용량만큼 QCOW2 기반 디스크 파일을 생성 (myserver.img 등)

  3. 네트워크 설정

    • 기본은 NAT(Network Address Translation)
    • multipass exec, multipass mount 명령 시 Host와 Guest 간 포트 포워딩 및 공유 활성화
  4. VM 부팅 및 클라우드 이니셜라이즈

    • cloud-init 스크립트로 초기 사용자, SSH 키, 기본 패키지 설치 처리
    • 이 과정이 끝나면 VM은 독립된 리눅스 환경으로 완전히 부팅된다.

🧩 Multipass vs Docker 차이

항목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이 직접 하드웨어처럼 자원을 사용하게 함
MultipassOS별 기본 하이퍼바이저를 활용해 Ubuntu VM을 자동 관리하는 CLI 툴
Guest OS완전한 리눅스 서버로서 동작하며, 클라우드 인스턴스와 동일한 구조
격리 메커니즘CPU, Memory, Disk, Network를 하이퍼바이저 수준에서 분리

Multipass는 로컬 개발자가 클라우드 수준의 리눅스 서버 환경을 재현할 수 있게 하는 “가상화 추상화 도구”다.
하드웨어와 커널의 경계를 투명하게 가려서, “명령어 한 줄로 클라우드처럼” 서버를 띄우는 것이 그 본질이다.


🧰 Multipass + MobaXterm 로컬 서버 실습

“내 컴퓨터 안의 EC2” 만들기


🧩 1단계. Multipass 설치

Windows 기준

  1. https://multipass.run 접속

  2. “Download for Windows” 클릭

  3. 설치 중 “Hyper-V 사용” 허용 (Windows Pro 버전 이상)

  4. 설치 완료 후 PowerShell 실행 → 확인:

    multipass version

    Multipass 버전이 나오면 정상 설치됨.


⚙️ 2단계. 가상 Ubuntu 서버 생성

Multipass는 명령 한 줄로 EC2 인스턴스처럼 서버를 만든다.

multipass launch --name myserver --mem 2G --disk 10G --cpus 2

명령어 해설

옵션의미
--name myserver생성할 서버의 이름. 식별용.
--mem 2G2GB 메모리를 VM에 할당.
--disk 10G최대 10GB의 가상 디스크 생성.
--cpus 2CPU 2개 코어 할당.

이 명령을 실행하면 자동으로 Ubuntu LTS 이미지를 다운로드하고 부팅한다.


🔍 3단계. 서버 상태 확인

multipass list

예시 출력:

Name       State    IPv4             Image
myserver   Running  10.165.89.43     Ubuntu 24.04 LTS
  • IPv4: VM 내부 IP
  • State: 실행 중인지 여부

이 IP가 SSH 접속 주소다.


🧠 4단계. SSH 키 생성 (EC2의 .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 접속 가능하다.


🖥️ 5단계. MobaXterm으로 접속

  1. MobaXterm 실행 → Session → SSH

  2. 설정값 입력

    • Remote host: 10.165.89.43 (Multipass VM IP)
    • Username: ubuntu
    • Port: 22
  3. Advanced SSH settings → Use private key

    • C:\Users\<사용자이름>\.ssh\myserver_key 선택
  4. OK 클릭

정상 접속 시, Ubuntu CLI가 뜨고
EC2 인스턴스 접속 화면과 동일하게 동작한다.


🌐 6단계. 브라우저에서 접근 테스트 (Nginx 예시)

VM 내부에서 웹 서버 실행

sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

VM 내부 IP 확인

ip -4 addr show eth0 | grep inet

호스트에서 접근

브라우저 주소창에 VM IP 입력

http://10.165.89.43

→ “Welcome to nginx!” 페이지가 뜨면 성공.


🔄 7단계. 포트포워딩 (외부 접근 허용)

Multipass의 VM은 기본적으로 NAT 네트워크에 있다.
즉, 호스트만 접근 가능하다.
외부 사용자(MobaXterm, 다른 PC)가 접속하려면 포트를 열어야 한다.

Windows에서 포트포워딩

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, 방화벽, 포트 제한 등 보안조치 필요.


🧰 8단계. 자주 쓰는 관리 명령 정리

명령설명
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 테스트용으로 완벽하다.


0개의 댓글