1. 기술 개념 이해

🔧 기술 스택 구조


┌─────────────────────────────────────┐

│ macOS (Host) │ ← 우리의 M2 Mac

├─────────────────────────────────────┤

│ VirtualBox │ ← 가상화 소프트웨어

├─────────────────────────────────────┤

│ Vagrant │ ← VM 관리 도구

├─────────────────────────────────────┤

│ Ubuntu VM 1 │ Ubuntu VM 2 │ ... │ ← 가상 서버들

├─────────────────────────────────────┤

│ Kubernetes │ ← 컨테이너 오케스트레이션

└─────────────────────────────────────┘

💡 각 기술의 역할

VirtualBox란?

  • 정의: 물리적 컴퓨터 위에서 여러 개의 가상 컴퓨터를 실행할 수 있게 해주는 소프트웨어

  • 비유: 하나의 집(Mac) 안에 여러 개의 독립적인 방(가상머신)을 만드는 것

  • M2 Mac 특징: ARM64 아키텍처 지원으로 성능 향상

Vagrant란?

  • 정의: 가상머신을 코드로 관리할 수 있게 해주는 도구

  • 비유: 건축 도면(Vagrantfile)으로 집(VM)을 자동으로 지어주는 건축업체

  • 장점:

  • 코드로 인프라 관리 (Infrastructure as Code)

  • 재현 가능한 환경 구축

  • 팀 협업 시 동일한 환경 보장

Ubuntu란?

  • 정의: Linux 기반의 무료 운영체제

  • 선택 이유:

  • 서버 환경에서 가장 널리 사용

  • Kubernetes와 완벽한 호환성

  • 풍부한 패키지 생태계

Kubernetes란?

  • 정의: 컨테이너화된 애플리케이션을 자동으로 배포, 확장, 관리하는 플랫폼

  • 비유: 여러 서버에 분산된 애플리케이션들을 관리하는 지휘관

  • 핵심 개념:

  • Pod: 가장 작은 배포 단위 (하나 이상의 컨테이너)

  • Node: 물리적/가상 서버 (우리의 Ubuntu VM)

  • Cluster: 여러 Node들의 집합

🛠 필수 도구 설치

 
# Homebrew 설치 (패키지 관리자)
 
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
 
  
 
# 기본 도구들 설치
 
brew install --cask virtualbox
 
brew install vagrant
 
brew install kubectl
 

3. VirtualBox 설치와 이해

📦 VirtualBox 설치

 
# VirtualBox 설치
 
brew install --cask virtualbox
 
  
 
# 설치 확인
 
VBoxManage --version
 

🔍 VirtualBox 기본 개념

가상머신(VM)이란?


물리적 컴퓨터 (Host)

├── CPU: 8코어 → VM1: 2코어, VM2: 2코어, VM3: 2코어

├── RAM: 16GB → VM1: 4GB, VM2: 4GB, VM3: 4GB

└── 디스크: 500GB → VM1: 20GB, VM2: 20GB, VM3: 20GB

M2 Mac 최적화 설정

 
# VirtualBox 최적화 명령어 예시
 
VBoxManage modifyvm "VM이름" --audio none # 오디오 비활성화
 
VBoxManage modifyvm "VM이름" --uart1 off # 시리얼 포트 비활성화
 
VBoxManage modifyvm "VM이름" --uart2 off # 시리얼 포트 비활성화
 

🎮 VirtualBox 실습

 
# 1. 사용 가능한 운영체제 타입 확인
 
VBoxManage list ostypes | grep -i ubuntu
 
  
 
# 2. VM 목록 조회
 
VBoxManage list vms
 
  
 
# 3. 실행 중인 VM 확인
 
VBoxManage list runningvms
 
  
 
# 4. VM 상세 정보 확인
 
VBoxManage showvminfo "VM이름"
 

4. Vagrant 설치와 활용

📦 Vagrant 설치 및 개념

 
# Vagrant 설치
 
brew install vagrant
 
  
 
# 설치 확인
 
vagrant --version
 

💡 Vagrant 핵심 개념

Infrastructure as Code (IaC)

 
# Vagrantfile 예시 - 이것이 바로 코드로 된 인프라!
 
Vagrant.configure("2") do |config|
 
config.vm.box = "bento/ubuntu-22.04" # OS 선택
 
config.vm.network "private_network" # 네트워크 설정
 
config.vm.provider "virtualbox" do |vb|
 
vb.memory = "2048" # 메모리 할당
 
vb.cpus = 2 # CPU 할당
 
end
 
end
 

Box(박스)란?

  • 정의: 미리 구성된 가상머신 템플릿

  • 비유: 빵을 만들 때 사용하는 틀과 같음

  • M2 Mac 호환 박스: bento/ubuntu-22.04 (ARM64 네이티브)

🎮 Vagrant 실습

1단계: 첫 번째 가상머신 만들기

 
# 작업 디렉터리 생성
 
mkdir ~/vagrant-tutorial && cd ~/vagrant-tutorial
 
  
 
# Vagrant 프로젝트 초기화
 
vagrant init bento/ubuntu-22.04
 

2단계: Vagrantfile 편집

 
# Vagrantfile 내용
 
Vagrant.configure("2") do |config|
 
# ARM64 호환 Ubuntu 박스
 
config.vm.box = "bento/ubuntu-22.04"
 
# 호스트명 설정
 
config.vm.hostname = "my-ubuntu"
 
# 메모리 2GB, CPU 2코어 할당
 
config.vm.provider "virtualbox" do |vb|
 
vb.memory = "2048"
 
vb.cpus = 2
 
vb.name = "my-first-vm"
 
end
 
# 포트 포워딩 (VM의 80포트를 호스트의 8080으로)
 
config.vm.network "forwarded_port", guest: 80, host: 8080
 
# 프라이빗 네트워크
 
config.vm.network "private_network", ip: "192.168.56.10"
 
end
 

3단계: 가상머신 생성 및 관리


# VM 생성 및 시작

vagrant up


# VM 상태 확인

vagrant status

  

# SSH로 VM 접속

vagrant ssh

  

# VM 일시정지

vagrant suspend

  

# VM 재개

vagrant resume

  

# VM 재시작

vagrant reload

  

# VM 완전 삭제

vagrant destroy

5. Ubuntu 가상머신 생성

🖥 Ubuntu 서버 이해하기

왜 Ubuntu인가?

  1. 널리 사용됨: 클라우드 서버의 40% 이상이 Ubuntu

  2. 패키지 풍부: apt 패키지 관리자로 쉬운 소프트웨어 설치

  3. Kubernetes 친화적: 공식 지원 및 최적화

GUI vs CLI


Desktop Ubuntu (GUI) Server Ubuntu (CLI)

├── 그래픽 인터페이스 ├── 텍스트 기반 인터페이스

├── 마우스 클릭 ├── 키보드 명령어

├── 브라우저, 에디터 ├── vim, nano 에디터

└── 4GB+ 메모리 필요 └── 512MB로도 실행 가능

🎮 Ubuntu 실습

1단계: 시스템 정보 확인

 
# VM에 SSH 접속
 
vagrant ssh
 
  
 
# 시스템 정보 확인
 
uname -a # 커널 정보
 
lscpu # CPU 정보
 
free -h # 메모리 사용량
 
df -h # 디스크 사용량
 
ip addr show # 네트워크 인터페이스
 

2단계: 패키지 관리 이해

 
# 패키지 목록 업데이트
 
sudo apt update
 
  
 
# 설치된 패키지 업그레이드
 
sudo apt upgrade -y
 
  
 
# 새 패키지 설치
 
sudo apt install -y curl wget git
 
  
 
# 패키지 검색
 
apt search docker
 
  
 
# 설치된 패키지 목록
 
dpkg -l | grep docker
 

3단계: 서비스 관리 (systemd)

 
# 서비스 상태 확인
 
sudo systemctl status ssh
 
  
 
# 서비스 시작/중지
 
sudo systemctl start ssh
 
sudo systemctl stop ssh
 
  
 
# 서비스 재시작
 
sudo systemctl restart ssh
 
  
 
# 부팅 시 자동 시작 설정
 
sudo systemctl enable ssh