Oracle Cloud 무료 서버로 나만의 인프라 구축하기
Oracle Cloud Always Free로 4 OCPU, 24GB RAM 서버를 무료로 구축하는 방법을 단계별로 설명합니다.
1. 왜 Oracle Cloud인가?
클라우드 서버를 무료로 쓰고 싶다면 선택지가 몇 가지 있습니다:
| 서비스 | 무료 제공 | 제한 |
|---|---|---|
| AWS Free Plan (신규) | t3/t4g 계열 + $200 크레딧 | 6개월 (2025.07.15 이후 가입) |
| AWS Free Tier (기존) | t2.micro (1GB RAM) | 12개월 (2025.07.15 이전 가입) |
| GCP Free Tier | e2-micro (1GB RAM) | Always Free (미국 리전 한정) |
| Azure Free | B1s (1GB RAM) | 12개월 한정 (공용 IP 유료화) |
| Oracle Cloud | 4 OCPU, 24GB RAM | Always Free |
Oracle Cloud의 Always Free Tier는 다른 서비스와 비교가 안 될 정도로 넉넉합니다. ARM 기반 Ampere A1 인스턴스를 최대 4 OCPU, 24GB RAM까지 무료로 사용할 수 있습니다. 이 정도면 웬만한 사이드 프로젝트, 블로그, 개인 서비스를 운영하기에 충분합니다.
Always Free Tier 주요 스펙
VM.Standard.A1.Flex (ARM)
├── OCPU: 최대 4개 (무료)
├── 메모리: 최대 24GB (무료)
├── 부트볼륨: 최대 200GB (무료)
├── 아웃바운드 트래픽: 월 10TB (무료)
└── 예약 IP: 1개 (무료)
주의: ARM 아키텍처(aarch64)이므로 x86 전용 소프트웨어는 호환되지 않을 수 있습니다. 하지만 Docker, Node.js, Python, Go 등 대부분의 개발 도구는 ARM을 지원합니다.
2. Oracle Cloud 계정 생성
2.1 계정 가입
- Oracle Cloud 무료 계정 페이지 접속
- Start for free 클릭
- 이메일, 국가, 이름 입력
- 신용카드 등록 (결제되지 않음, 본인 확인용)
중요: 신용카드 등록은 필수지만, Always Free 리소스만 사용하면 절대 과금되지 않습니다. 단, "Upgrade to Paid Account"를 누르지 않도록 주의하세요.
2.2 Home Region 선택
계정 생성 시 Home Region을 선택해야 합니다. 한번 선택하면 변경 불가이므로 신중하게 선택하세요.
추천 리전 (한국 기준):
├── ap-seoul-1 (서울) - 지연시간 최소
├── ap-tokyo-1 (도쿄) - 서울 다음 추천
└── ap-osaka-1 (오사카) - 대안
팁: 서울 리전은 인기가 많아 Always Free 인스턴스 생성이 어려울 수 있습니다. 도쿄나 오사카도 지연시간이 20-30ms 정도로 괜찮습니다.
3. VCN (Virtual Cloud Network) 생성
VM을 만들기 전에 네트워크를 먼저 구성해야 합니다.
3.1 VCN 마법사 사용
- Networking → Virtual Cloud Networks → Start VCN Wizard
- Create VCN with Internet Connectivity 선택
- 설정 입력:
VCN Name: my-vcn
Compartment: (기본 또는 새로 생성)
VCN CIDR Block: 10.0.0.0/16
Public Subnet CIDR: 10.0.0.0/24
Private Subnet CIDR: 10.0.1.0/24
- Next → Create
마법사가 자동으로 생성하는 리소스:
- VCN
- 퍼블릭/프라이빗 서브넷
- 인터넷 게이트웨이
- NAT 게이트웨이
- 서비스 게이트웨이
- 라우트 테이블
- 보안 목록
3.2 보안 목록에 HTTP/HTTPS 추가
기본 보안 목록은 SSH(22)만 열려 있습니다. 웹 서버를 운영하려면 80, 443 포트를 추가해야 합니다.
- VCN 상세 → Security Lists → Default Security List 클릭
- Add Ingress Rules 클릭
- 규칙 추가:
규칙 1 - HTTP:
├── Source CIDR: 0.0.0.0/0
├── IP Protocol: TCP
├── Destination Port: 80
└── Description: HTTP
규칙 2 - HTTPS:
├── Source CIDR: 0.0.0.0/0
├── IP Protocol: TCP
├── Destination Port: 443
└── Description: HTTPS
4. VM 인스턴스 생성
4.1 인스턴스 생성
- Compute → Instances → Create Instance
- 설정 입력:
Name: my-server
Compartment: (VCN과 동일)
# Image and Shape
Image: Canonical Ubuntu 24.04 (aarch64)
Shape: VM.Standard.A1.Flex
OCPU: 4 # ← 최대치 사용
Memory: 24 GB # ← 최대치 사용
# Networking
VCN: my-vcn
Subnet: Public Subnet
Public IP: Assign a public IPv4 address
# SSH Keys
Add SSH keys: Upload or paste public key
4.2 SSH 키 생성 (없는 경우)
# 로컬 머신에서 실행
ssh-keygen -t ed25519 -f ~/.ssh/oracle-server-key -C "oracle-cloud"
# 공개키 확인 (이것을 Oracle에 등록)
cat ~/.ssh/oracle-server-key.pub
4.3 인스턴스 생성 실패 시
Always Free 인스턴스는 리소스가 한정되어 있어 "Out of capacity" 에러가 자주 발생합니다.
해결 방법:
1. 시간대를 바꿔서 재시도 (새벽 시간대 추천)
2. Shape 변경 (OCPU 2개로 줄이기)
3. 다른 가용성 도메인(AD) 선택
4. 자동화 스크립트로 반복 시도
자동 재시도 스크립트 (oci-cli 사용):
#!/bin/bash
while true; do
oci compute instance launch \
--availability-domain "AD-1" \
--compartment-id "ocid1.compartment.oc1..xxx" \
--shape "VM.Standard.A1.Flex" \
--shape-config '{"ocpus":4,"memoryInGBs":24}' \
--image-id "ocid1.image.oc1..xxx" \
--subnet-id "ocid1.subnet.oc1..xxx" \
--assign-public-ip true \
&& break
echo "Failed, retrying in 60s..."
sleep 60
done
5. 예약된 IP 설정
기본 할당된 공용 IP는 인스턴스 재시작 시 변경될 수 있습니다. 고정 IP가 필요하면 예약된 IP를 사용하세요.
5.1 예약된 IP 생성
- Networking → IP Management → Reserved Public IPs
- Reserve Public IP Address 클릭
- 이름 입력 후 생성
5.2 인스턴스에 연결
- Compute → Instances → 인스턴스 선택
- Attached VNICs → VNIC 선택 → IPv4 Addresses
- 기존 IP 옆 ⋮ → Edit
- Reserved Public IP 선택 → 생성한 IP 선택
6. SSH 접속 및 초기 설정
6.1 SSH 접속
# 접속 (ubuntu는 기본 사용자)
ssh -i ~/.ssh/oracle-server-key ubuntu@<YOUR_PUBLIC_IP>
# 접속 확인
whoami # ubuntu
uname -a # Linux ... aarch64 GNU/Linux
6.2 시스템 업데이트
sudo apt update && sudo apt upgrade -y
업데이트 후 커널이 변경되었다면 재부팅이 필요합니다:
sudo reboot
7. Docker 설치
Ubuntu 24.04에 Docker를 공식 저장소에서 설치합니다.
7.1 기존 패키지 제거
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg 2>/dev/null || true
done
7.2 Docker 공식 저장소 추가
# 필수 패키지 설치
sudo apt-get update
sudo apt-get install -y ca-certificates curl
# GPG 키 추가
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 저장소 추가
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
7.3 Docker 설치
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
7.4 사용자 권한 설정
# docker 그룹에 현재 사용자 추가
sudo usermod -aG docker ubuntu
# 재접속 후 적용 확인
exit
ssh -i ~/.ssh/oracle-server-key ubuntu@<YOUR_PUBLIC_IP>
# sudo 없이 docker 실행 가능
docker ps
7.5 Docker 서비스 활성화
sudo systemctl enable docker
sudo systemctl start docker
7.6 설치 확인
docker --version
# Docker version 29.1.3, build f52814d
docker compose version
# Docker Compose version v5.0.0
# 테스트
docker run hello-world
8. 보안 설정
8.1 UFW 방화벽
Oracle Cloud 보안 목록과 별개로 서버 자체 방화벽도 설정합니다.
# UFW 설치
sudo apt install -y ufw
# 기본 규칙 설정
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 포트 허용
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
# 활성화
sudo ufw --force enable
# 상태 확인
sudo ufw status
출력 예시:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
8.2 fail2ban (SSH 보호)
무차별 대입 공격(brute force)으로부터 SSH를 보호합니다.
sudo apt install -y fail2ban
기본 설정으로 SSH 보호가 활성화됩니다. 커스텀 설정이 필요하면:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5 # ← 5회 실패 시 차단
bantime = 3600 # ← 1시간 차단
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
9. 시간대 설정 (선택)
서버 시간대를 한국 시간으로 설정하면 로그 확인이나 cron 스케줄링이 편리합니다.
# 현재 시간대 확인
timedatectl
# 한국 시간대로 변경
sudo timedatectl set-timezone Asia/Seoul
# 확인
date
# Sat Jan 18 22:30:00 KST 2026
10. 유용한 명령어 모음
시스템 정보
# 커널 버전
uname -r
# 디스크 사용량
df -h
# 메모리 사용량
free -h
# CPU 정보
lscpu | grep -E "(Architecture|CPU\(s\)|Model name)"
Docker 관리
# 실행 중인 컨테이너
docker ps
# 모든 컨테이너 (중지 포함)
docker ps -a
# 컨테이너 로그
docker logs <container_name>
# 사용하지 않는 리소스 정리
docker system prune -a
네트워크 확인
# 열린 포트 확인
sudo ss -tlnp
# 외부 IP 확인
curl ifconfig.me
11. 핵심 개념 정리
| 개념 | 설명 |
|---|---|
| Always Free Tier | Oracle Cloud의 평생 무료 리소스 (4 OCPU, 24GB RAM) |
| ARM (aarch64) | 에너지 효율적인 ARM 아키텍처, x86과 호환성 주의 필요 |
| VCN | Virtual Cloud Network, AWS VPC와 유사 |
| 보안 목록 | Oracle Cloud의 방화벽 규칙 (VCN 레벨) |
| UFW | Ubuntu의 간편한 방화벽 관리 도구 |
| fail2ban | SSH 무차별 대입 공격 방어 도구 |
| 예약된 IP | 인스턴스와 독립적인 고정 공용 IP |
12. 베스트 프랙티스
체크리스트
- [ ] Always Free 리소스만 사용 (Paid 업그레이드 주의)
- [ ] 예약된 IP 사용 (IP 변경 방지)
- [ ] 보안 목록 + UFW 이중 방화벽
- [ ] fail2ban으로 SSH 보호
- [ ] 정기적인 시스템 업데이트
- [ ] Docker로 서비스 컨테이너화
비용 발생 주의사항
무료 범위 초과 시 과금:
├── 부트볼륨 200GB 초과
├── 아웃바운드 트래픽 월 10TB 초과
├── 블록볼륨 추가 사용
└── "Upgrade to Paid Account" 클릭
13. FAQ
Q: Always Free 리소스는 정말 평생 무료인가요?
A: 네, Oracle의 공식 정책입니다. 단, 계정이 30일 이상 비활성화되면 리소스가 삭제될 수 있으니 주기적으로 접속하세요.
Q: "Out of capacity" 에러가 계속 발생합니다.
A: Always Free 리소스는 한정되어 있어 경쟁이 치열합니다. 새벽 시간대에 시도하거나, OCPU를 줄여서 시도해보세요. 자동화 스크립트를 사용하는 것도 방법입니다.
Q: ARM 서버에서 안 되는 것이 있나요?
A: x86 전용 바이너리나 Docker 이미지는 작동하지 않습니다. 대부분의 공식 이미지는 multi-arch를 지원하지만, 확인이 필요합니다.
Q: 여러 개의 VM을 만들 수 있나요?
A: 총 4 OCPU, 24GB RAM 한도 내에서 여러 VM으로 분할 가능합니다. 예: 2 OCPU/12GB VM 2개.
Q: 서버가 갑자기 삭제될 수 있나요?
A: Always Free 계정이 30일 이상 비활성화되면 리소스가 회수될 수 있습니다. 정기적으로 로그인하거나 서비스를 운영하세요.
Q: "Out of capacity" 에러를 빠르게 해결하는 방법이 있나요?
A: "Upgrade to Paid Account"를 누르면 리소스가 바로 할당됩니다. 겁먹지 마세요. 유료 계정으로 전환해도 Always Free 사용량 내에서만 쓰면 비용이 청구되지 않습니다. 새벽에 재시도하거나 스크립트 돌리는 것보다 훨씬 빠릅니다.
14. 다음 단계
서버 세팅이 완료되었습니다! 다음 글에서는 이 서버에 Ghost 블로그를 Docker로 설치하는 방법을 다룹니다.
시리즈 목차:
- Oracle Cloud 무료 서버 세팅 ← 현재 글
- Ghost 블로그 Docker 설치
- Ghost 블로그 백업 자동화
- 검색엔진 등록 (Google/Naver)
- Ghost 6.0 업그레이드
- Ghost ActivityPub 설정 (Fediverse)
- Ghost Analytics 설정 (Tinybird)