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인가?
-
널리 사용됨: 클라우드 서버의 40% 이상이 Ubuntu
-
패키지 풍부: apt 패키지 관리자로 쉬운 소프트웨어 설치
-
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