> For the complete documentation index, see [llms.txt](https://ia-cloud.gitbook.io/cloudia-manual/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ia-cloud.gitbook.io/cloudia-manual/network/vpc.md).

# VPC

`VPC`는 프로젝트 네트워크의 최상위 가상 네트워크입니다. 물리적 인프라와 가상 인프라 사이의 통신과 트래픽을 제어하기 위해 사용됩니다. 서브넷, 가상머신, 플로팅 IP, 포트 포워딩, 로드 밸런서, 파일시스템, 내부 DNS 등 많은 리소스들이 특정 VPC를 기준으로 생성됩니다.

## 화면 개요

* `목록 화면`: 프로젝트에 생성된 VPC를 조회하고 생성, 편집, 삭제 작업을 시작합니다.
* `상세 화면`: VPC 기본 정보와 연결된 서브넷 현황을 확인합니다.
* `생성/편집 화면`: 이름, IP / CIDR, 설명을 입력하거나 수정합니다.

## VPC 목록

### 주요 작업

* `생성`: 새로운 VPC를 생성합니다.
* `편집`: 선택한 1개 VPC의 이름, IP / CIDR, 설명을 수정합니다.
* `삭제`: 선택한 1개 VPC를 삭제합니다.

### 테이블 컬럼

| 컬럼            | 설명                                 |
| ------------- | ---------------------------------- |
| **이름**        | VPC 이름입니다. **클릭하면 상세 화면으로 이동**합니다. |
| **ID**        | VPC 고유 ID입니다.                      |
| **VLAN**      | 해당 VPC에 할당된 VLAN 번호입니다.            |
| **IP / CIDR** | VPC 전체 주소 대역입니다.                   |
| **연결된 서브넷 수** | 현재 VPC에 속한 서브넷 개수입니다.              |
| **설명**        | VPC에 대한 설명입니다.                     |
| **생성 일시**     | VPC가 생성된 날짜와 시각입니다.                |

***

## VPC 상세

### 상단 요약

* **이름**: VPC의 이름입니다.
* **ID**: VPC 고유 ID입니다.
* **VLAN**: VPC에 할당된 VLAN 번호입니다.
* **IP / CIDR**: VPC 전체 주소 대역입니다.
* **연결된 서브넷 수**: VPC에 속한 서브넷 개수입니다.
* **설명**: VPC에 대한 설명입니다.
* **생성 일시**: VPC가 생성된 날짜와 시각입니다.

### 하단 목록: 연결된 서브넷

상세 화면 하단에는 해당 VPC에 연결된 서브넷 목록이 표시됩니다.

| 컬럼            | 설명                                                                 |
| ------------- | ------------------------------------------------------------------ |
| **이름**        | 서브넷의 이름입니다.                                                        |
| **ID**        | 서브넷의 고유 ID입니다.                                                     |
| **타입**        | 서브넷의 유형으로 아웃바운드 외부 통신이 가능한 `퍼블릭 서브넷`과 내부 통신만을 위한 `프라이빗 서브넷`이 있습니다. |
| **IP / CIDR** | 서브넷의 IP 주소 범위입니다.                                                  |
| **주소 사용 현황**  | 사용 중인 IP 수와 서브넷의 전체 IP 수                                           |
| **설명**        | 서브넷에 대한 설명입니다.                                                     |
| **생성 일시**     | 서브넷이 생성된 날짜와 시각입니다.                                                |

* VPC 삭제 전에는 하단의 연결된 서브넷 목록을 통해 종속 리소스가 남아 있는지 먼저 확인합니다.
* 주소 확장이나 구조 변경을 검토할 때는 서브넷들의 CIDR 분포를 함께 봐야 합니다.

***

## VPC 생성

### 입력 항목

* **이름**: 프로젝트 내에서 VPC를 식별하는 이름입니다.
* **IP / CIDR**: VPC 전체 주소 대역입니다. 서브넷, 내부 DNS, 로드 밸런서 등 하위 네트워크 리소스가 이 범위를 기준으로 생성됩니다.
* **설명**: VPC 용도, 서비스 구분, 운영 메모를 기록합니다.

### 입력 필드 유효성

| 필드            | 허용 값                     | 검증 규칙                                                                       | 비고                                |
| ------------- | ------------------------ | --------------------------------------------------------------------------- | --------------------------------- |
| **이름**        | 영문, 숫자, `-`, `_` 조합의 문자열 | 필수입니다. 프로젝트 내에서 고유해야 하며 60자 이내로 입력합니다.                                      | VPC 식별용 이름입니다.                    |
| **IP / CIDR** | IPv4 CIDR                | 필수입니다. `/16`부터 `/28` 범위여야 합니다. 입력한 IP가 네트워크 주소가 아니면 생성 시 네트워크 주소로 자동 보정됩니다. | 장기 확장 계획을 고려해 여유 있게 설계하는 것이 좋습니다. |
| **설명**        | 최대 200자 문자열              | 선택 입력입니다. 200자를 초과할 수 없습니다.                                                 | 운영 메모용입니다.                        |

> 💡 **참고:**
>
> * 하나의 VPC는 여러 서브넷을 수용하므로, 초기 CIDR은 장기 확장 계획을 고려해 설계하는 것이 좋습니다.
> * 너무 좁은 CIDR은 서브넷 분리와 향후 서비스 확장에 제약이 생길 수 있습니다.
> * IP / CIDR의 IP가 네트워크 주소가 아니면 생성 시 네트워크 주소로 자동 보정됩니다.

### VPC 생성 시 자동으로 구성되는 리소스

VPC를 생성하면 Cloud:iA는 해당 네트워크를 바로 사용할 수 있도록 일부 리소스를 함께 자동 구성합니다.

* **기본 NACL**: VPC 생성 시 기본 Network ACL이 자동으로 생성됩니다.
* **기본 보안그룹**: VPC 기본 보안 정책으로 사용할 보안그룹이 자동으로 생성됩니다.
* **외부 IP(VPC 용도)**: VPC 외부 통신에 사용할 외부 IP가 자동으로 할당됩니다.

### 외부 IP 자동 할당

VPC를 생성하면 프로젝트 외부 IP 목록에서 사용 현황이 `VPC`인 외부 IP가 함께 표시됩니다. 이 외부 IP는 VPC 용도로 시스템이 자동 할당한 주소입니다.

* 이 외부 IP는 사용자가 VPC 생성 화면에서 직접 입력하는 값이 아닙니다.
* 할당된 외부 IP는 프로젝트의 `외부 IP` 메뉴에서 확인할 수 있습니다.
* 이후 `플로팅 IP`, `포트 포워딩`, `로드 밸런서`에서 사용하는 외부 IP와는 사용 목적을 구분해서 봐야 합니다.

***

## VPC 편집

편집 화면에서는 `이름`, `IP / CIDR`, `설명`을 수정할 수 있습니다.

### 편집 항목

* **이름**: 프로젝트 내 식별이 쉽도록 VPC 이름을 수정할 수 있습니다.
* **IP / CIDR**: 주소 대역 확장이 필요한 경우 변경할 수 있습니다. 다만 하위 서브넷이 있으면 확장 방향으로만 수정할 수 있습니다.
* **설명**: 운영 목적이나 사용 범위가 달라졌을 때 함께 갱신합니다.

### 편집 입력 필드 유효성

| 필드            | 허용 값                     | 검증 규칙                                                                                         | 비고                             |
| ------------- | ------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------ |
| **이름**        | 영문, 숫자, `-`, `_` 조합의 문자열 | 필수입니다. 프로젝트 내에서 고유해야 하며 60자 이내로 입력합니다.                                                        | 중복 이름이면 저장할 수 없습니다.            |
| **IP / CIDR** | IPv4 CIDR                | 필수입니다. `/16`부터 `/28` 범위여야 합니다. 하위 서브넷이 존재하면 더 큰 범위로만 확장할 수 있으며, 입력 IP가 네트워크 주소가 아니면 자동 보정됩니다. | 서브넷 구조를 침범하는 축소 편집은 허용되지 않습니다. |
| **설명**        | 최대 200자 문자열              | 선택 입력입니다. 200자를 초과할 수 없습니다.                                                                   | 용도 변경 시 함께 갱신하는 것이 좋습니다.       |

### IP / CIDR 편집 시 주의사항

VPC의 IP / CIDR 편집 가능 여부는 하위 서브넷 존재 여부에 따라 달라집니다.

#### 하위 서브넷이 없는 경우

하위 서브넷이 없으면 기존 CIDR을 포함하지 않는 다른 대역으로도 변경할 수 있습니다.\
다만, 새 CIDR이 외부 IP 풀 또는 예약 공용 대역과 겹치면 변경할 수 없습니다.

#### 하위 서브넷이 있는 경우

하위 서브넷이 하나라도 있으면, 새 CIDR은 기존 VPC CIDR을 포함하는 더 큰 상위 대역으로만 변경할 수 있습니다.\
또한, 현재 존재하는 모든 하위 서브넷 CIDR이 새 CIDR 안에 포함되어야 합니다.

#### 편집 가능한 예시

| 상황     | 기존 VPC CIDR   | 하위 서브넷                       | 새 VPC CIDR    | 결과 | 이유                                         |
| ------ | ------------- | ---------------------------- | ------------- | -- | ------------------------------------------ |
| 서브넷 없음 | `10.0.0.0/16` | 없음                           | `10.1.0.0/16` | 가능 | 하위 서브넷이 없으므로 다른 대역으로 변경할 수 있습니다.           |
| 서브넷 있음 | `10.0.0.0/22` | `10.0.1.0/24`, `10.0.2.0/24` | `10.0.0.0/16` | 가능 | 기존 VPC와 모든 하위 서브넷을 포함하는 더 큰 상위 대역이기 때문입니다. |

#### 편집이 불가한 예시

| 상황           | 기존 VPC CIDR   | 하위 서브넷        | 새 VPC CIDR       | 결과        | 이유                                               |
| ------------ | ------------- | ------------- | ---------------- | --------- | ------------------------------------------------ |
| 서브넷 있음       | `10.0.0.0/16` | `10.0.1.0/24` | `10.0.0.0/17`    | 불가        | 기존 VPC CIDR을 포함하는 상위 대역이 아니라 축소이기 때문입니다.         |
| 서브넷 있음       | `10.0.0.0/16` | `10.0.1.0/24` | `10.2.0.0/16`    | 불가        | 기존 VPC CIDR과 하위 서브넷을 포함하지 않는 다른 대역으로 이동하기 때문입니다. |
| 서브넷 없음/있음 공통 | `10.0.0.0/16` | 무관            | `192.168.1.0/24` | 불가 가능성 있음 | 외부 IP 풀 또는 예약 공용 대역과 겹치면 변경할 수 없습니다.             |

***

## VPC 삭제

* 삭제는 한 번에 1개만 수행합니다.
* VPC에 연결된 서브넷이나 종속된 리소스가 남아 있으면 삭제가 실패할 수 있습니다.
* 일반적으로 서브넷, 플로팅 IP, 포트 포워딩, 로드 밸런서, 내부 DNS 등 종속 리소스를 먼저 정리한 뒤 삭제해야 합니다.

⚠️ **주의:** VPC 삭제는 **복구할 수 없습니다.** 삭제 전에 반드시 해당 VPC의 용도를 확인한 후 삭제하세요.

### 권장 삭제 순서

1. `로드 밸런서`, `포트 포워딩`, `플로팅 IP`, `내부 DNS` 등 외부 노출/연결 리소스를 정리합니다.
2. 서브넷에서 가상머신에 할당한 IP를 가상머신 삭제를 통해 해제합니다.
3. `서브넷`을 삭제합니다.
4. 마지막으로 VPC를 삭제합니다. 이 때 해당 VPC에 속한 `Network ACL`, `보안그룹`, `타겟 그룹`의 경우 같이 삭제됩니다.
