OCI는 오라클이 제공하는 클라우드 서비스 플랫폼으로 컴퓨트, 스토리지, 네트워크, 데이터베이스, 보안 자원을 통합 제공하여 기업과 개발자가 원하는 IT 환경을 클라우드에서 직접 설계, 운영할 수 있게 해주는 서비스이다.
OCI Architecture
OCI의 기본 구조는 네트워크(Virtual Cloud Network, VCN)를 중심으로, 그 안에 subnet, compute, Database 등이 배치되고, 외부와의 연결을 위해 GateWay 및 보안 계층이 구성된다.
아키텍처의 구성을 단계별로 간단히 설명하면
- VCN (Virtual Cloud Network) : OCI에서 네트워크를 논리적으로 격리해 만드는 가상 네트워크
- Subnet : VCN을 세분화하는 네트워크 단위
- Public Subnet : 인터넷 게이트 웨이를 통해 외부와 직접 통신 (ex 웹서버)
- Private Subnet : 외부와 직접 연결 안 됨, 보통 DB나 내부 시스템을 둠
- GateWay : 네트워크의 입출구 역할
- Internet GateWay (IGW) : public subnet 리소스가 인터넷과 직접 통신
- NAT Gateway : Private subnet에서 인터넷으로 나가는 트래픽 허용
- Service Gateway : Object Storage와 같은 OCI 서비스에 전용 네트워크로 연결
- Dynamic Routing Gateway (DRG) : 온프레미스 네트워크와 연결 (VPN, FastConnect)
- Route Table : VCN/Subnet의 트래픽이 어떤 Gateway나 네트워크 장비로 흘러가는지 정의
- 보안 계층
- Security List : Subnet 단위 방화벽 규칙
- Network Security Group (NSG) : 인스턴스 단위 보안 그룹 (세밀한 조정)
- Compute (VM / Bare Metal / GPU) : 애플리케이션, 웹 서버, 컨테이너 등을 실행하는 인스턴스 배치. Public Subnet에 두면 외부 클라이언트가 접속 가능, Private Subnet에 두면 내부 서비스 전용
- Database : 보통 보안을 위해 Private Subnet에 두며, 애플리케이션 서버와만 연결
- Load Balancer : 여러 Compute 인스턴스에 트래픽 분산
실습
직접 실습하면서 조금 더 정확하게 알아보자
1. VCN 생성
먼저 아키텍처의 가장 기초가 되는 VCN 부터 생성해보자
- OCI 콘솔 접속 → Networking → Virtual Cloud Networks → Create VCN 클릭
- 정보 입력
- Name: FirstVCN
- CIDR: 10.0.0.0/16
- DNS Label: FirstVCN
- IPv6 CIDR: 필요 시 선택
- Create 버튼 클릭 → VCN 생성 완료
CIDR이란
1. CIDR의 정의
- IP 주소 범위를 지정하는 표기법
- 형식: 네트워크주소/Prefix길이
- /n = 네트워크 식별자 비트 수
- 나머지(32-n) = 호스트 식별자 비트 수
2. 동작 원리
- 네트워크 식별자(Network ID): 네트워크 자체를 구분하는 부분
- 호스트 식별자(Host ID): 그 네트워크 안에서 실제 장치(서버, VM)에 할당 가능한 부분
- /숫자가 작을수록 → 호스트 공간 ↑ (더 많은 IP 포함)
- /숫자가 클수록 → 호스트 공간 ↓ (더 적은 IP 포함)
3. 예시
| 10.0.0.0/8 | 10.0.0.0 ~ 10.255.255.255 | 24 | 약 1,600만 |
| 10.0.0.0/16 | 10.0.0.0 ~ 10.0.255.255 | 16 | 약 65,000 |
| 10.0.0.0/24 | 10.0.0.0 ~ 10.0.0.255 | 8 | 약 254 |
4. 사설 IP 대역 (RFC1918)
클라우드/내부망에서 쓰는 전용 주소 공간:
- 10.0.0.0/8 → 가장 넓음 (대기업·클라우드에서 자주 사용)
- 172.16.0.0/12 → 중간 크기 (캠퍼스/중견 기업)
- 192.168.0.0/16 → 가장 좁음 (가정/소규모 네트워크)
👉 OCI에서 보통 10.0.0.0/16 정도로 VCN을 시작 → Subnet을 /24 단위로 나눠 사용
5. Subnet 나누기 (Subnetting)
- VCN CIDR 안에서 더 작은 범위(CIDR)로 나누는 것
- 원리: Prefix 길이를 늘려서 호스트 공간을 네트워크로 전환
- 예: 10.0.0.0/16 → 여러 개 /24 Subnet 가능
- 10.0.1.0/24
- 10.0.2.0/24
- 10.0.3.0/24 …
⚠️ 중첩 Subnet 불가
- 이미 10.1.0.0/16 Subnet을 만들면 그 안의 10.1.1.0/24는 겹치므로 생성 불가
6. OCI에서 CIDR의 역할
- VCN CIDR: VCN 전체 네트워크 범위를 정의 (예: 10.0.0.0/16)
- Subnet CIDR: VCN 안에서 작은 네트워크 범위 지정 (예: /24)
- 규칙:
- Subnet CIDR은 반드시 VCN CIDR 범위 안에 있어야 함
- Subnet CIDR끼리 겹치면 안 됨
- Route Table, Security List, NSG 같은 네트워크 정책도 CIDR 기반으로 동작
7. IPv6 Prefixes
- IPv6도 CIDR과 동일하게 /n으로 네트워크 범위 지정
- IPv6 주소는 128비트, 보통 Subnet은 /64 고정
- DNS LABEL 이란
DNS Label in OCI
1. 정의
- DNS Label = VCN 또는 Subnet에 붙이는 짧은 문자열
- 이 Label을 기반으로 **OCI 내부 DNS 이름(FQDN, Fully Qualified Domain Name)**이 자동 생성됨.
- 쉽게 말하면: VCN/Subnet 안에서 IP 대신 도메인 이름으로 통신할 수 있게 해주는 접두사
2. 구조
DNS Label은 계층적으로 붙어요.
- VCN DNS Label: myvcn
- Subnet DNS Label: publicsubnet
- 인스턴스 호스트명: web1
👉 최종 FQDN =
3. 규칙
- 소문자/숫자/하이픈(-)만 사용 가능
- 반드시 영문자로 시작
- 최대 15자
- 한 번 생성하면 수정 불가
4. 역할과 장점
- 내부 DNS 자동 생성
- 인스턴스마다 내부 도메인 이름이 자동으로 생김
- VM에 SSH 접속할 때 10.0.1.25 대신이렇게 접근 가능
-
web1.publicsubnet.myvcn.oraclevcn.com
- IP가 바뀌어도 안정적
- VM을 재부팅하면 Private IP가 바뀔 수 있음
- 하지만 DNS 이름은 그대로라서 관리가 편리
- 서비스 디스커버리
- 여러 VM, 서비스가 서로 찾을 때 IP 대신 도메인으로 연결
- 내부 로드밸런싱, 마이크로서비스 환경에서 유용
2. Gateway 생성 (VCN-1)
4가지의 Gateway중 public subnet용 Internet Gateway와 Private Subnet용 NAT Gateway를 만들어보자
1. Internet Gateway
- OCI Console 로그인 왼쪽 메뉴 → Networking → Virtual Cloud Networks
- VCN 목록에서 → 사용할 VCN 클릭
- 왼쪽 패널에서 → Internet Gateways 선택
- Create Internet Gateway 클릭
- Name 입력 (예: PublicGateway)
- Compartment 확인
- Create 클릭 → 완료
2. NAT Gateway
- OCI Console → Networking → Virtual Cloud Networks
- VCN 선택
- 왼쪽 패널 → NAT Gateways
- Create NAT Gateway 클릭
- Name 입력 (예: PrivateNAT)
- Compartment 선택
- Public IP 타입 선택 (Ephemeral / Reserved)
- Create 클릭 → 완료
Internet Gateway와 달리 NAT Gateway는 public IP가 할당 되는데
-> public subnet은 서브넷 내의 인스턴스의 public ip가 그대로 사용되므로 굳이 할당할 필요가 없고
-> private subnet은 서브넷 내의 인스턴스에 public ip가 존재하지 않으므로 NAT Gateway의 public IP로 변환되서 외부와 연결된다
3. Route table 생성 (VCN-2)
route table은 VCN 내부의 트래픽 이동 경로를 정의하는 지도라고 할 수 있다.
public subnet은 public gateway로 private subnet은 private gateway로 트래픽을 전달 할 수 있게 실습을 해보자
OCI에서 Route Table 생성 경로
- OCI Console 로그인
- 왼쪽 메뉴 → Networking → Virtual Cloud Networks
- 사용할 VCN 클릭
- 왼쪽 패널 → Route Tables
- Create Route Table 클릭
- Name 입력 (예: Public-RT, Private-RT)
- Compartment 확인
- Route Rules 추가 (게이트웨이 선택)
- Create 클릭
public용 Route table 생성 : public subnet vm이 인터넷과 양방향 통신이 가능하도록 설정
Destination CIDR: 0.0.0.0/0
Target: Internet Gateway (예: PublicGateway)
Private용 Route table : Private Subnet VM이 아웃 바운드 인터넷(NAT) 또는 OCI 서비스 (Service GW) 접근 가능
Destination CIDR: 0.0.0.0/0
Target: NAT Gateway (예: PrivateNAT)
4. Security List 생성 ( VCN-3)
다음으로 subnet 단위 방화벽 규칙을 정하는 Security list를 만들어보자
Security List 생성 경로
- OCI Console → Networking → Virtual Cloud Networks
- 만든 VCN 클릭
- 왼쪽 메뉴 → Security Lists
- Create Security List 클릭
- Name 입력
- Compartment 확인
- Ingress / Egress 규칙 설정
- Create 클릭
Public Subnet 용 Security List
-Ingress (수신 규칙)
| Source CIDR | Protocol | Port | |
| 0.0.0.0/0 | TCP | 22 | SSH 접속 허용 |
| 0.0.0.0/0 | TCP | 80 | HTTP 허용 |
| 0.0.0.0/0 | TCP | 443 | HTTPS 허용 |
- Egress (송신 규칙)
| Destination | Protocol | Port | |
| 0.0.0.0/0 | All | All | 모든 아웃바운드 트래픽 허용 (기본값) |
Private Subnet 용 Security List
-Ingress (수신 규칙)
| Source CIDR | Protocol | Port | |
| 10.0.1.0/24 | TCP | 3306 (예시) | Public Subnet의 Web → DB 접근 허용 |
| 10.0.0.0/16 | All | All | 같은 VCN 내부 통신 허용 |
-Egress (송신 규칙)
| Destination | Protocol | Port | |
| 0.0.0.0/0 | All | All | NAT Gateway 통해 외부 아웃바운드 허용 |
5. Subnet 생성 (VCN -4)
콘솔 경로
- OCI 콘솔 로그인
- 왼쪽 메뉴 → Networking → Virtual Cloud Networks
- 만든 VCN 클릭
- 왼쪽 메뉴에서 Subnets → Create Subnet 클릭
Public , private Subnet 생성
| Name | Public-Subnet | PrivateSubnet |
| Compartment | (VCN과 동일하게) | 동일 |
| VCN | MyVCN | 동일 |
| Subnet Type | Regional (권장) | 동일 |
| CIDR Block | 10.0.1.0/24 | 10.0.2.0/24 |
| Route Table | PublicRoute | PrivateRoute |
| Security List | PublicSecurityList | PrivateSecurityList |
| DNS Label | publicsubnet | PrivateSubnet |
| Public IP Address Options | ✅ 체크 (Public IP 할당 허용) | ❌ 해제 (Public IP 할당 금지) |
6. Compute 생성
VM 생성 : 외부에서 접속 가능한 중계용 VM
compute -> Instances -> Create Instance를 통해 들어간다.
| 구분 | 항목 | Public VM (Bastion, web 서버 용) | Private VM (DB, 내부 서버용) | |
| 기본 정보 | Name | public-vm | private-vm | 인스턴스 이름 (식별용) |
| Image (OS) | Ubuntu 22.04 / Oracle Linux / CentOS | 동일 | 운영체제 이미지 선택 | |
| Networking (VNIC 관련 설정) | VCN | 기존 my-vcn 선택 | 동일 | 가상 네트워크 지정 |
| Subnet | Public-Subnet (10.0.1.0/24) | Private-Subnet (10.0.2.0/24) | 각각 설정된 서브넷 | |
| Subnet Type | Regional (권장) | Regional (권장) | 서브넷이 모든 AD에서 사용 가능 | |
| Private IP Address | 자동 or 수동 (예: 10.0.1.5) | 자동 or 수동 (예: 10.0.2.21) | 내부 VCN 통신용 IP | |
| Public IP Assignment | ✅ Enabled (필수) | ❌ Disabled | 외부 인터넷 접근 여부 | |
| VNIC Display Name | public-vm-vnic | private-vm-vnic | 가상 네트워크 인터페이스 이름 | |
| Security | Network Security Group (선택) | Web/SSH용 NSG 지정 가능 | DB용 NSG 지정 가능 | 세밀한 보안 규칙 그룹 |
| Security List | Public-SL (22,80,443 허용) | Private-SL (22만 허용) | 서브넷 단위 방화벽 규칙 | |
| Route Table | Route Table | Public-RT (→ Internet Gateway) | Private-RT (→ NAT Gateway) | 외부/내부 트래픽 라우팅 설정 |
| SSH Key 등록 | Add SSH Keys 옵션 | “Upload file” 또는 “Paste public key” | “Paste public key” (같은 키 재사용) | 두 VM 모두 같은 키 쌍 사용 |
SSH 접속을 위한 SSH key의 경우에는 public vm을 만들때 generate key를 해서 private, public key를 모두 저장해놓고 private vm을 만들떄 public key를 paste 했다.
7. SSH 접속, config 파일 설정, MYSQL 설치
🧩 Lab 1 – Create Public VM and SSH Access
🎯 목표
Public Subnet에 Ubuntu VM을 생성하고,
Windows PowerShell에서 SSH로 접속하기.
Windows PowerShell에서 SSH 접속
ssh -i "C:\Users\<사용자명>\.ssh\<privatekey>" ubuntu@<Public_IP>
🧩 Lab 2 – Connect to Private VM via Public VM (Proxy)
🎯 목표
Private Subnet에 VM을 생성하고,
Public VM을 경유(ProxyJump)하여 SSH 접속.
✅ Windows SSH config 설정
위치: C:\Users\<사용자명>\.ssh\config
Host pubvm
HostName <public IP>
User ubuntu
IdentityFile C:\Users\<사용자명>\.ssh\<privatekey>
Host privvm
HostName <private IP>
User ubuntu
IdentityFile C:\Users\<사용자명>\.ssh\<private key>
ProxyJump pubvm
✅ 접속 확인
ssh pubvm # Public VM 접속
ssh privvm # Private VM으로 Proxy 접속
🧩 Lab 3 – Install Docker & MySQL in Private VM
🎯 목표
Private VM 내부에서 Docker를 설치하고,
MySQL 컨테이너를 실행.
✅ 1️⃣ Private VM 접속
프롬프트:
✅ 2️⃣ Docker 설치
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
sudo docker --version
✅ 3️⃣ MySQL 컨테이너 실행
sudo docker pull mysql:latest
sudo docker run -d \
--name mysql-lab \
-e MYSQL_ROOT_PASSWORD=1234 \
-p 3306:3306 \
mysql:latest
상태 확인:
sudo docker ps
MySQL 접속:
sudo docker exec -it mysql-lab mysql -uroot -p
비밀번호 입력 → SHOW DATABASES;
🧩 Lab 4 – Internal Communication (Public → Private MySQL)
🎯 목표
Public VM에서 Private VM의 MySQL(DB)에 내부망(VCN)으로 접속.
✅ Public VM에서 MySQL 클라이언트 설치
ssh pubvm
sudo apt update
sudo apt install -y mysql-client
✅ Private VM의 Private IP로 MySQL 접속
mysql -h 10.0.1.21 -u root -p
비밀번호 입력 → 1234
✅ 데이터베이스 테스트
SHOW DATABASES;
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE hello (id INT, msg VARCHAR(50));
INSERT INTO hello VALUES (1, 'Hello OCI!');
SELECT * FROM hello;
🧩 최종 구조 요약
┌────────────────────────────────────┐
│ Oracle VCN │
│ (10.0.0.0/16) │
│ │
┌──────────────┐ │ ┌──────────────────────────┐ │
│ Internet │──▶│ │ Public Subnet (10.0.0.0/24) │
└──────────────┘ │ │ - Public VM (144.24.x.x) │
│ │ - Internet Gateway 연결 │
│ └──────────────────────────┘ │
│ │ │
│ 내부 VCN 통신 │
│ ▼ │
│ ┌──────────────────────────┐ │
│ │ Private Subnet (10.0.1.0/24) │
│ │ - Private VM (10.0.1.21) │
│ │ - NAT Gateway 연결 │
│ │ - Docker + MySQL 설치 │
│ └──────────────────────────┘ │
└────────────────────────────────────┘
✅ 최종 요약
| Lab 1 | Public VM 생성 및 SSH 접속 | Windows PowerShell | Internet Gateway, Security List(SSH) |
| Lab 2 | Public → Private SSH 연결 | Windows PowerShell | ProxyJump, NAT Gateway |
| Lab 3 | Private VM에 Docker & MySQL 설치 | Private VM 내부 (Ubuntu) | Docker Compose, MySQL 실행 |
| Lab 4 | Public VM에서 Private MySQL 접근 | Public VM 내부 | Private IP 통신, 3306 포트 허용 |
💡 이 4단계로 완성되는 것:
- 하나의 안전한 VCN 내부에서
“Public VM (배스천)” + “Private VM (DB)” 구조 완성- 내부망 통신, 라우팅, 보안 규칙, NAT 활용 등
OCI 네트워크 설계의 핵심 원리를 전부 체험 ✅

