이 글 요약
- 오라클 클라우드 Always Free ARM 서버(2 OCPU / 12GB)를 만드는 전 과정을 캡처 20장으로 정리
- 화면마다 무슨 설정인지, 왜 필요한지, 왜 그 값을 골랐는지까지 설명
- 생성 직후 공인 IP 붙이기와 SSH 접속까지. 걸리는 시간은 15분 정도다
2편에서 서버는 오라클 클라우드로 정했다. 이번 편은 실제로 만드는 과정이다.
화면 순서대로 따라 하면 서버 한 대가 생긴다. 단계마다 "무엇을 누르는지"만이 아니라 "그게 무슨 설정이고 왜 그 값인지"를 같이 적었다. 기본값을 그대로 둔 곳도 왜 그대로 두는지 적었다. 클라우드 콘솔은 기본값 하나 잘못 두면 요금이 나오는 곳이라서다. 생성 단계에서 오류가 나면 4편을 보면 된다.
시작 전에 알아둘 것
계정
- 오라클 클라우드 가입에는 신용카드 인증이 필요하다. 본인 확인용이고, 무료 범위에서만 쓰면 청구되지 않는다.
- 가입할 때 고르는 홈 리전은 나중에 바꿀 수 없다. 리전은 서버가 실제로 놓이는 데이터센터 위치다. Always Free 자원은 홈 리전에서만 만들 수 있으니 처음에 신중하게 고르자. 한국이라면 서울이나 춘천이 가깝다. 나는 춘천을 썼다. 서울은 사람이 몰려서 ARM 자원이 부족하다는 후기가 많다.
용어 몇 개
- 인스턴스: 클라우드에서 빌린 서버 한 대. 이 글에서는 "서버"와 같은 뜻이다.
- OCPU: 오라클의 CPU 단위. ARM(A1) 서버에서는 1 OCPU = CPU 코어 1개다.
- Shape: 서버의 사양(CPU 종류, 코어 수, 메모리) 묶음. AWS의 인스턴스 타입과 같다.
2026년 무료 한도
예전 글들은 "ARM 4코어 24GB 무료"라고 하지만, 2026년에 절반으로 줄었다.
| 항목 | Always Free 한도 |
|---|---|
| ARM(A1) CPU | 합계 2 OCPU |
| ARM(A1) 메모리 | 합계 12GB |
| 디스크(부트 + 블록) | 합계 200GB |
| 외부 전송량 | 월 10TB |
"합계"가 중요하다. 서버 한 대당 한도가 아니라 계정 전체의 한도다. 2 OCPU / 12GB 서버 한 대를 만들면 A1 무료 한도를 다 쓴다. 1 OCPU / 6GB짜리 두 대로 나눌 수도 있다. 나는 앱 두 개와 DB를 한 서버에 올릴 거라 한 대로 몰았다. 서버가 여러 대면 관리할 것도 여러 배가 된다.
1단계. 인스턴스 만들기 화면 열기
콘솔 왼쪽 위 ☰ 메뉴 → Compute → Instances로 들어가서 Create instance를 누른다.

인스턴스 목록과 Create instance 버튼
- Compute는 오라클에서 서버(가상 머신)를 다루는 메뉴다. 네트워크는 Networking, 디스크는 Storage에 따로 있다.
- 오른쪽 위 리전 표시가 홈 리전인지 먼저 확인하자. 다른 리전에서 만들면 무료 한도가 적용되지 않는다.
2단계. 이름과 배치(Placement)

이름 입력 화면
- Name: 콘솔에서 서버를 구분하는 이름이다. 나중에 바꿀 수 있다. 예시는
my-server. 나는 용도가 보이게backend로 지었다. - Create in compartment: compartment는 자원을 묶는 폴더 같은 것이다. 권한과 쿼터를 폴더 단위로 걸 수 있다. 혼자 쓰는 계정이면 기본값(root) 그대로 두면 된다.
- Availability domain(AD): 한 리전 안의 독립된 데이터센터다. 춘천은 AD가 하나뿐이라 고를 게 없다. 서울처럼 여러 개면 AD-1부터 시도하고, 자원 부족 오류가 나면 다른 AD로 바꿔 본다.
- Capacity type은 on-demand 그대로 둔다. preemptible(언제든 회수될 수 있는 싼 서버)이나 예약 용량은 무료 대상이 아니다.
3단계. 이미지(OS) 고르기: Ubuntu 24.04
이미지는 서버에 처음 설치될 운영체제다. 기본값은 Oracle Linux, Shape는 AMD로 잡혀 있다. 둘 다 바꿔야 한다.

기본값: Oracle Linux와 AMD
Change image를 누르고 Ubuntu를 고른다.

이미지 선택: Ubuntu
아래 목록에서 Canonical Ubuntu 24.04를 고르고 Select image를 누른다.

Canonical Ubuntu 24.04 선택
왜 Ubuntu인가
- 검색되는 자료가 가장 많다. 오류 메시지를 검색하면 대부분 Ubuntu 기준 답이 나온다.
- Docker, Java, cloudflared 같은 도구의 설치 안내가 Ubuntu 기준으로 먼저 나온다.
- Oracle Linux도 좋은 OS지만 명령어(
dnf)와 자료 양이 다르다. 처음이라면 익숙한 쪽이 낫다.
왜 24.04인가
- LTS(Long Term Support) 버전이다. 보안 업데이트를 5년 동안 받을 수 있다. 서버는 한 번 세우면 오래 쓰니 LTS가 기본이다.
- 22.04도 LTS지만 지원 기간이 먼저 끝난다. 새로 만든다면 최신 LTS를 고르자.
참고할 것
- 목록에 aarch64(ARM) 표시가 없어도 괜찮다. 다음 단계에서 ARM Shape를 고르면 ARM용 이미지가 자동으로 들어간다.
- 이름에 Minimal이 붙은 이미지는 기본 도구가 빠진 경량판이다. 처음이라면 일반 버전을 고르자.
4단계. Shape 고르기: VM.Standard.A1.Flex (가장 중요)
Shape는 서버의 CPU와 메모리를 정하는 곳이다. 여기서 잘못 고르면 요금이 나온다. 기본값으로 잡힌 AMD Shape는 무료 대상이 아니다. AMD 쪽 무료는 아주 작은 VM.Standard.E2.1.Micro(1/8 OCPU, 1GB)뿐이라 Spring Boot 하나 띄우기도 빠듯하다.
Change shape를 누르고 Shape series에서 Ampere를 고른다. Ampere는 ARM CPU 제조사 이름이고, 오라클 무료 ARM 서버가 이 칩을 쓴다. VM.Standard.A1.Flex에 Always Free-eligible 표시가 있는지 확인하고 선택한다.

Ampere 선택 후 A1.Flex 체크
- VM: 가상 머신. 물리 서버 하나를 나눠 쓴다. Bare Metal(물리 서버 통째)은 무료가 아니다.
- A1: Ampere ARM CPU 세대.
- Flex: 코어 수와 메모리를 직접 정할 수 있다는 뜻이다.
ARM이라도 괜찮은가? Java, Node.js, Python, MySQL, Docker 공식 이미지는 대부분 ARM을 지원한다. 맥북(애플 실리콘)도 ARM이라, 맥에서 돌던 앱이면 거의 그대로 돈다. 다만 x86 전용 바이너리를 쓰는 프로그램은 미리 확인하자.
빨간색 Service limits status 경고가 보일 수 있다. 에러가 아니다. View critical resources를 눌러 보면 이렇게 나온다.

Service limits: A1 메모리 0 of 12, 코어 0 of 2
"내 계정의 A1 한도는 코어 2개, 메모리 12GB이고 지금 0개 쓰는 중"이라는 뜻이다. 한도를 꽉 채워 쓰려고 하니 critical이라고 경고하는 것뿐이다. Request Increase는 누르지 말자. 한도를 늘리면 무료 범위를 넘어 요금이 나올 수 있다. 이 화면은 2026년 무료 한도가 2코어 12GB로 줄었다는 걸 내 계정에서 직접 확인하는 용도로도 쓸 수 있다.
A1.Flex 왼쪽의 ▸를 눌러 펼친 뒤 Number of OCPUs를 2로 올린다. 메모리는 OCPU당 6GB씩 자동으로 따라와서 12GB가 된다.

OCPU 2, Memory 12GB
- 왜 한도를 꽉 채우나: 2편에서 잰 내 짐은 메모리 1.5GB 남짓이었다. 그래도 무료라면 남겨 둘 이유가 없다. 빌드, 백업, 나중에 붙일 앱까지 생각하면 여유는 많을수록 좋다. 다른 무료 서버를 하나 더 만들 계획이 있다면 1 OCPU / 6GB로 나눠도 된다.
- 그림의 "80 max", "512 max"는 장비가 지원하는 최대치다. 무료 한도와는 상관없다. 2를 넘기면 유료다.
- Enable burstable performance는 끈 채로 둔다. 평소엔 CPU 일부만 쓰고 필요할 때 끌어 쓰는 저렴한 옵션인데, 무료 한도 안에서는 쓸 이유가 없고 성능만 낮아진다.
Select shape를 누르면 이렇게 정리된다.

Shape 요약: 2 core OCPU, 12GB
Advanced options(부팅 스크립트, 가용성 설정 등)는 건드리지 않고 Next. 처음 만드는 서버에는 필요 없고, 나중에 서버 안에서 직접 설정하는 편이 알기 쉽다.
5단계. Security

Security: Shielded instance 꺼짐
Shielded instance는 부팅 과정이 변조되지 않았는지 검사하는 기능(Secure Boot 등)이다. 끈 상태 그대로 두고 Next. 켜면 지원하는 이미지와 Shape가 제한될 수 있어서, 처음엔 끈 채로 만드는 편이 막힐 일이 적다. 서버 보안은 이 스위치보다 SSH 키 관리와 포트를 열지 않는 것(5편의 Cloudflare Tunnel)이 훨씬 중요하다.
6단계. 네트워크와 SSH 키
네트워크(VCN, 서브넷)
서버가 연결될 네트워크를 정하는 곳이다. 처음 만드는 거라면 Create new virtual cloud network와 Create new public subnet을 고른다. 이름은 자동으로 채워진 그대로 둬도 된다.

새 VCN과 새 public subnet
- VCN(Virtual Cloud Network): 오라클 안에서 내 서버들만 쓰는 가상 네트워크. 집으로 치면 단지 전체다.
- 서브넷: VCN을 나눈 구역. 집으로 치면 동 하나다.
- public subnet: 인터넷과 연결될 수 있는 구역이다. private subnet에 만들면 공인 IP를 붙일 수 없어서 내 컴퓨터에서 SSH로 바로 접속할 수 없다. 처음엔 public이 맞다.
새로 만들면 인터넷 게이트웨이와 기본 방화벽 규칙(Security List)까지 같이 만들어진다. 기본 규칙은 22번 포트(SSH)만 열려 있다. 웹 포트(80, 443)는 열지 않는다. 나는 Cloudflare Tunnel을 쓸 거라 끝까지 열 필요가 없었다.
공인 IP 스위치가 회색이다
아래로 내리면 Automatically assign public IPv4 address 스위치가 있다. 공인 IP는 인터넷에서 이 서버를 찾아오는 주소다. 이게 없으면 내 노트북에서 SSH로 접속할 수 없다. 나는 이 스위치가 비활성화(회색)돼 있어서 켤 수 없었다.

공인 IP 자동 할당 스위치 비활성화
당황하지 말고 그대로 진행한다. 서버를 만든 뒤에 9단계에서 붙일 수 있다. 화면에도 "나중에 언제든 할당할 수 있다(you can always assign one later)"고 적혀 있다. 스위치가 켜져 있다면 켜고 진행하면 9단계를 건너뛸 수 있다.
SSH 키
서버에 접속할 때 비밀번호 대신 쓰는 열쇠 파일이다. 오라클 Ubuntu 서버는 기본적으로 비밀번호 로그인을 막아 두고 SSH 키로만 들어갈 수 있다. 비밀번호는 무작위 대입 공격에 뚫릴 수 있지만, 키는 사실상 추측이 불가능하다.

SSH 키: Generate a key pair for me
- Generate a key pair for me를 고른다. 오라클이 열쇠 한 쌍을 만들어 준다. 자물쇠(공개키)는 서버에 설치되고, 열쇠(개인키)는 내가 받는다.
- Download private key를 반드시 누른다. 이 화면을 떠나면 다시 받을 수 없다. 잃어버리면 서버에 접속할 방법이 없다. 받은 파일은 다른 곳에도 백업해 두자.
- Download public key도 같이 받아 두면 좋다. 나중에 다른 서버에 같은 키를 쓸 때 필요하다.
이미 쓰는 SSH 키가 있다면 Paste public key로 공개키(~/.ssh/id_ed25519.pub 같은 .pub 파일 내용)를 붙여 넣어도 된다. 이때 첫 글자까지 정확히 붙여 넣었는지 확인하자. 내 경우 ssh-rsa의 첫 글자가 빠져서 Invalid ssh public key type "sh-rsa" 오류로 생성이 실패했다.
7단계. Storage: 부트 볼륨 100GB
부트 볼륨은 OS가 설치되는 서버의 기본 디스크다. Specify a custom boot volume size and performance setting을 켜고 크기를 100으로 바꾼다.

부트 볼륨 100GB, VPU 10
- 왜 100GB인가: 기본값은 약 47GB다. OS, Docker 이미지, DB, 로그, 업로드 파일이 쌓이면 생각보다 빨리 찬다. 디스크는 나중에 늘릴 수는 있지만 서버 안에서 파티션 작업이 필요해서 번거롭다. 처음부터 넉넉하게 잡는 게 편하다.
- 왜 200GB가 아닌가: 무료 한도는 부트와 블록 볼륨을 합쳐 200GB다. 100GB만 쓰면 나머지 100GB를 나중에 다른 서버나 추가 디스크에 쓸 수 있다.
- VPU(성능)는 10(Balanced) 그대로 둔다. VPU는 디스크 속도 등급이다. 10이 무료 기본값이고, 올리면 유료다. 개인 프로젝트에는 10으로 충분하다.
- 암호화 설정은 기본값(오라클 관리 키)으로 둔다. 디스크는 기본으로 암호화된다.
- 여기서도 Service limits 경고가 뜰 수 있다. 4단계와 같은 이유라 무시해도 된다.
8단계. 검토하고 생성
Next를 누르면 지금까지 고른 설정을 한 화면에서 보여 준다.

검토 화면
Create를 누르기 전 마지막 확인이다. 특히 Shape가 VM.Standard.A1.Flex, 2 core OCPU, 12GB인지 확인한다. 여기만 맞으면 요금 걱정은 대부분 끝난다.

검토 화면: Shape
확인할 것을 정리하면 이렇다.
| 항목 | 맞는 값 |
|---|---|
| Image | Canonical Ubuntu 24.04 |
| Shape | VM.Standard.A1.Flex |
| OCPU / Memory | 2 / 12GB (합계가 무료 한도 이내) |
| Boot volume | 100GB, VPU 10 |
| SSH key | 개인키 다운로드 완료 |
Create를 누른다. 1~2분 정도 Provisioning(서버 준비 중)을 거쳐 Running이 되면 성공이다.
여기서 Out of capacity나 compartment quotas were exceeded 같은 오류가 나면 4편에서 해결법을 다룬다.
9단계. 공인 IP 붙이기
6단계에서 공인 IP를 켜지 못했다면, 인스턴스 상세 화면의 Public IP address가 비어 있을 것이다. 이 상태로는 서버는 돌지만 밖에서 들어갈 문이 없다.

인스턴스 상세 화면의 Public IP address
IP는 서버 자체가 아니라 서버의 네트워크 카드인 VNIC에 붙는다. 그래서 VNIC 화면까지 들어가야 한다.
- 인스턴스 상세 화면에서 Networking 탭으로 간다.
- Attached VNICs에 있는 VNIC 이름을 누른다. VNIC(Virtual Network Interface Card)는 가상 랜카드다.
- IP administration 탭으로 간다. 이 VNIC에 붙은 IP 목록이 나온다.

IP administration
- Primary IP 줄 오른쪽 ⋯ → Edit을 누른다. Primary IP는 서브넷 안에서 쓰는 내부 주소(10.0.0.x)다. 여기에 공인 IP를 짝지어 준다.

⋯ 메뉴에서 Edit
- Public IP type을 Ephemeral public IP로 바꾸고 Update를 누른다.

Ephemeral public IP 선택
- Ephemeral(임시): 무료. 인스턴스를 지우거나 IP를 해제하면 주소가 바뀐다. 재부팅으로는 바뀌지 않는다.
- Reserved(예약): 인스턴스를 바꿔도 유지되는 고정 주소. 쓰기 전에 요금 조건을 공식 문서에서 확인하자.
왜 Ephemeral을 골랐나: 도메인을 IP에 직접 연결하면 IP가 바뀔 때 DNS도 고쳐야 한다. 그래서 보통은 고정 IP를 쓴다. 하지만 나는 Cloudflare Tunnel을 쓴다. 서버가 Cloudflare로 먼저 연결을 맺는 방식이라 도메인이 공인 IP를 가리키지 않는다. 공인 IP는 내가 SSH로 들어갈 때만 쓴다. IP가 바뀌어도 SSH 주소 하나만 고치면 된다. 자세한 건 5편에서 다룬다.
10단계. SSH로 접속하기
이제 내 컴퓨터에서 서버로 들어간다. 맥과 리눅스는 터미널에 ssh가 기본으로 있다. 윈도우는 PowerShell에서 같은 명령을 쓸 수 있다.
먼저 다운로드한 키 파일을 ~/.ssh 폴더로 옮기고 권한을 바꾼다.
mv ~/Downloads/ssh-key-*.key ~/.ssh/oracle.key
chmod 400 ~/.ssh/oracle.key
~/.ssh는 SSH 키를 모아 두는 표준 폴더다. 다운로드 폴더에 두면 실수로 지우기 쉽다.chmod 400은 "나만 읽을 수 있음"으로 권한을 좁히는 명령이다. 다른 사용자도 읽을 수 있는 키는 SSH가UNPROTECTED PRIVATE KEY FILE경고를 내며 거부한다. 열쇠를 아무나 볼 수 있는 곳에 두면 열쇠가 아니라는 논리다.
접속한다. Ubuntu 이미지의 기본 사용자는 ubuntu다. Oracle Linux라면 opc다.
ssh -i ~/.ssh/oracle.key ubuntu@<공인IP>
-i는 사용할 키 파일을 지정하는 옵션이다.- 처음 접속하면
Are you sure you want to continue connecting?이 나온다. 이 서버를 처음 본다는 확인이다.yes를 입력하면 된다. - 접속이 멈춘 채 아무 반응이 없다면 공인 IP가 붙었는지(9단계), 서버가 Running인지 확인한다.
접속되면 사양부터 확인해 보자. 내가 고른 대로 만들어졌는지 확인하는 단계다.
uname -m # aarch64 (ARM)
nproc # 2
free -h # Mem: 11Gi 정도
df -h / # 96G 정도
aarch64, 2코어, 메모리 11Gi, 디스크 96GB 정도가 나오면 끝이다. 메모리가 12가 아니라 11로 보이는 건 운영체제와 커널이 일부를 먼저 쓰기 때문이다. 디스크가 100이 아니라 96인 것도 파일시스템이 자리를 차지해서다. 둘 다 정상이다.
마지막으로 패키지를 최신으로 올려 두자. 새 서버는 이미지가 만들어진 시점 이후의 보안 패치가 빠져 있다.
sudo apt update && sudo apt upgrade -y
에이전트와 한 부분
이 과정은 Claude Code가 브라우저에서 직접 클릭하며 진행했다. 나는 Review 화면 앞에서 "진행"이라고만 했다.
에이전트가 막힌 곳도 있다. 공인 IP 스위치는 에이전트가 눌러도 켜지지 않았다. 에이전트는 계속 누르는 대신 "생성 후 붙이겠다"며 그대로 진행했고, 9단계 방법으로 붙였다. SSH 공개키 첫 글자가 빠진 것도 에이전트가 붙여 넣다 생긴 일이다. 오류 메시지를 보고 바로 찾아 고쳤다.
사람이 했어도 똑같이 막혔을 곳들이다. 다른 점이라면 에이전트는 막혀도 한숨을 쉬지 않는다는 것 정도다.
오늘의 교훈 클라우드 콘솔의 빨간 경고는 대부분 에러가 아니라 안내문이다. 진짜 에러는 Create를 누른 뒤에 나온다.
다음 편에서는 그 진짜 에러들을 다룬다. 인스턴스가 하나도 없는데 쿼터를 초과했다는 오류, 그 범인은 사흘 전의 나였다.
'맥북 서버 탈출기' 카테고리의 다른 글
| [맥북 서버 탈출기 6편] 운영 중인 앱, 3분 만에 서버 옮기기: DB 덤프부터 행 개수 대조까지 (0) | 2026.10.15 |
|---|---|
| [맥북 서버 탈출기 5편] 포트 하나 안 열고 서비스하기: Cloudflare Tunnel로 도메인 연결 (0) | 2026.10.15 |
| [맥북 서버 탈출기 4편] 인스턴스가 0개인데 쿼터 초과? 오라클 서버 생성 오류 해결기 (0) | 2026.10.15 |
| [맥북 서버 탈출기 2편] 오라클 vs Cloudflare, 고를 필요가 없었다 (0) | 2026.10.15 |
| [맥북 서버 탈출기 1편] 내 앱 서버는 맥북 에어였다 (1) | 2026.10.15 |