> 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/load-balancer.md).

# 로드 밸런서

`로드 밸런서`는 하나 이상의 리스너를 통해 트래픽을 타겟 그룹으로 분산하는 메뉴입니다. 외부 또는 내부 서비스 진입점을 만들고, 다수 대상에 요청을 분산할 때 사용합니다.

## 화면 개요

* `목록 화면`: 로드 밸런서 현황을 조회하고 생성, 편집, 삭제 작업을 시작합니다.
* `상세 화면`: 기본 정보와 리스너 목록, 모니터링 정보를 확인합니다.
* `생성 화면`: 이름, 네트워크, 타입, IP 할당 방식, 초기 리스너를 함께 설정합니다.
* `편집 화면`: 기본 정보와 타입, IP 관련 정보를 수정합니다.
* `리스너 편집 화면`: 상세 화면에서 리스너를 별도로 관리합니다.

## 로드 밸런서 목록

### 주요 작업

* `생성`: 새로운 로드 밸런서를 생성합니다.
* `편집`: 선택한 1개 로드 밸런서를 편집합니다. 수동 생성 리소스만 편집할 수 있습니다.
* `삭제`: 선택한 로드 밸런서를 삭제합니다. 수동 생성 리소스만 삭제할 수 있습니다.

### 테이블 컬럼

| 컬럼           | 설명                                            |
| ------------ | --------------------------------------------- |
| **이름**       | 로드 밸런서 이름입니다. **클릭하면 상세 화면으로 이동**합니다.         |
| **ID**       | 로드 밸런서 고유 ID입니다.                              |
| **생성 방식**    | `수동 생성`, `쿠버네티스`, `오토 스케일링 그룹` 등 프로비저닝 소스입니다. |
| **VPC**      | 소속 VPC 이름입니다.                                 |
| **서브넷**      | 소속 서브넷 이름입니다.                                 |
| **외부 IP 주소** | 외부 타입일 때 할당된 외부 IP 주소입니다.                     |
| **설명**       | 로드 밸런서의 설명입니다.                                |
| **생성 일시**    | 로드 밸런서의 생성된 날짜와 시각입니다.                        |

***

## 로드 밸런서 상세

### 상단 요약

* **이름**: 로드 밸런서 이름입니다. 서비스 목적과 진입점 역할이 드러나도록 작성합니다.
* **ID**: 로드 밸런서 고유 ID입니다.
* **타입**: `외부`, `내부` 중 하나로, 서비스 노출 방식을 나타냅니다.
* **생성 방식**: 수동 생성인지, 쿠버네티스가 만든 리소스인지 보여줍니다.
* **VPC**: 로드 밸런서가 속한 VPC입니다.
* **서브넷**: 로드 밸런서의 내부 IP가 할당된 서브넷입니다.
* **내부 IP 주소**: 내부 통신에 사용하는 IP 주소입니다.
* **외부 IP 주소**: 외부 타입 로드 밸런서에서 외부 접근 지점으로 사용하는 IP 주소입니다.
* **설명**: 운영 메모나 서비스 설명입니다.
* **생성 일시**: 로드 밸런서가 생성된 날짜와 시각입니다.

### 하단 목록: 리스너 정보

상세 화면 하단에서 리스너 목록을 확인하고 `편집` 버튼으로 리스너 편집 화면에 진입할 수 있습니다.

| 컬럼             | 설명                                                           |
| -------------- | ------------------------------------------------------------ |
| **ID**         | 리스너 ID입니다.                                                   |
| **프로토콜**       | `TCP`, `UDP` 중 하나입니다.                                        |
| **포트 번호**      | 리스너 포트 번호입니다.                                                |
| **부하 분산 알고리즘** | 리스너에 적용된 부하 분산 알고리즘입니다.                                      |
| **타겟 그룹**      | 연결된 타겟 그룹 이름과 ID입니다.                                         |
| **설명**         | 리스너 설명입니다.                                                   |
| **생성 일시**      | 리스너 생성 시각입니다.                                                |
| **모니터링 정보**    | 연결된 타겟 그룹에 `HEALTHY` 상태의 타겟이 있을 때 `보기` 버튼으로 타겟 통계 정보를 확인합니다. |

### 모니터링 정보

리스너별 모니터링 화면에서는 타겟별 다음 정보를 확인할 수 있습니다.

* **IP**: 실제 트래픽을 받는 타겟의 IP 주소입니다.
* **포트 번호**: 해당 타겟이 수신하는 서비스 포트입니다.
* **상태**: 현재 헬스 체크 기준으로 정상인지 여부를 보여줍니다.
* **가중치**: 부하 분산 시 적용되는 상대 가중치입니다.
* **패킷 수**: 타겟으로 분산된 패킷 수입니다.
* **바이트 수**: 타겟으로 분산된 트래픽 바이트 수입니다.

### 리스너 모니터링 조회 조건

* 리스너 모니터링은 연결된 타겟 그룹에 `HEALTHY` 상태의 타겟이 하나 이상 있을 때 조회할 수 있습니다.
* 리스너 통계와 타겟 분산 처리 시 `HEALTHY` 상태의 타겟만 반영합니다.
* 연결된 타겟이 모두 `INITIAL`, `UNHEALTHY`, `UNUSED` 상태이면 모니터링 화면이 비어 있거나 기대한 정보가 조회되지 않을 수 있습니다.

### 모니터링이 조회되지 않을 때 확인 사항

* 먼저 연결된 타겟 그룹 상세로 이동한 뒤 하단 `타겟` 탭에서 각 타겟의 `상태` 값을 확인합니다.
* 타겟 상태가 `HEALTHY`가 아니면 타겟 그룹의 상태 검사 프로토콜과 상태 검사 포트가 실제 서비스 설정과 일치하는지 확인합니다.
* 가상머신과 내부 서비스가 정상이라면, 상태 검사 포트에서 실제로 응답하고 있는지 확인합니다.
* 상태 검사는 로드 밸런서의 내부 IP에서 타겟의 상태 검사 포트로 수행됩니다. 보안그룹 인바운드 규칙에서 로드 밸런서 내부 IP 또는 해당 통신을 포함하는 소스 대역이 상태 검사 포트와 서비스 포트에 대해 허용되어 있는지 확인합니다.
* 상태 검사 포트와 서비스 포트를 다르게 사용한다면 두 포트 모두 보안그룹에서 허용되어 있어야 합니다.

***

## 로드 밸런서 생성

### 기본 정보

* **이름**: 로드 밸런서를 식별하는 이름입니다.
* **설명**: 서비스 목적, 연결 대상, 운영 메모를 기록합니다.

### 네트워크 정보

* **VPC**: 로드 밸런서가 속할 VPC를 선택합니다.
* **서브넷**: 내부 IP 주소가 할당될 서브넷을 선택합니다.
* **타입**: `외부` 또는 `내부`를 선택해 서비스 노출 방식을 정합니다. 내부 타입의 경우 서브넷 대역의 IP로 부하 분산합니다.
* **내부 IP 주소**: 로드 밸런서가 사용할 내부 IP를 자동 또는 수동으로 정합니다.
* **외부 IP 주소**: 외부 타입 로드 밸런서일 때 사용할 외부 IP를 자동 또는 수동으로 정합니다.

### 입력 필드 유효성

| 필드           | 허용 값                     | 검증 규칙                                                                                   | 비고                      |
| ------------ | ------------------------ | --------------------------------------------------------------------------------------- | ----------------------- |
| **이름**       | 영문, 숫자, `-`, `_` 조합의 문자열 | 필수입니다. 80자 이내로 입력합니다.                                                                   | 로드 밸런서 식별용 이름입니다.       |
| **설명**       | 최대 200자 문자열              | 선택 입력입니다. 200자를 초과할 수 없습니다.                                                             | 운영 메모용입니다.              |
| **VPC**      | 현재 프로젝트의 VPC             | 필수입니다. 리스너가 하나라도 추가되면 변경할 수 없습니다.                                                       | 서브넷, 타겟 그룹 목록의 기준이 됩니다. |
| **서브넷**      | 선택한 VPC의 서브넷             | 필수입니다. VPC를 먼저 선택해야 합니다.                                                                | 내부 IP 주소가 할당될 서브넷입니다.   |
| **타입**       | `외부`, `내부`               | 필수입니다. `내부`를 선택하면 외부 IP 입력이 비활성화됩니다.                                                    | 서비스 노출 방식을 결정합니다.       |
| **내부 IP 주소** | `자동 할당`, `수동 할당`         | 필수입니다. 수동 할당 시 선택한 서브넷에서 사용 가능한 내부 IP를 지정해야 합니다.                                        | 외부/내부 타입과 관계없이 설정합니다.   |
| **외부 IP 주소** | `자동 할당`, `수동 할당`         | `타입`이 `외부`일 때만 사용합니다. `자동 할당`은 외부 IP 풀의 시작 IP가 작은 풀부터, 각 풀 내부도 시작 IP부터 순서대로 빈 주소를 찾습니다. | 내부 타입에서는 비활성화됩니다.       |

외부 타입 로드 밸런서에서 외부 IP를 `자동 할당`으로 선택하면, 관리자 `외부 IP 풀` 중 `시작 IP`가 가장 작은 풀부터 검사하고 각 풀 내부도 시작 IP부터 순차적으로 빈 주소를 할당합니다.

### 생성 시 동작 규칙

* VPC를 선택해야 서브넷을 선택할 수 있습니다.
* 생성 중 리스너가 하나라도 추가된 상태에서는 VPC를 변경할 수 없습니다. VPC를 바꾸려면 먼저 모든 리스너를 제거해야 합니다.
* 외부 타입이 아니면 외부 IP 선택은 비활성화됩니다.
* 내부 IP는 외부/내부 타입과 관계없이 수동 할당이 가능합니다.

> 💡 **참고:** 이 문서는 `TCP`/`UDP` 기반의 `네트워크(L4)` 로드 밸런서를 설명합니다. 로드 밸런서 생성 시 `어플리케이션(L7)` 타입을 선택하면 HTTP/HTTPS 리스너와 규칙 기반 라우팅을 사용하며, 자세한 내용은 [어플리케이션 로드 밸런서](/cloudia-manual/network/l7-load-balancer.md)를 확인합니다.

### 리스너 입력 항목

* **프로토콜**: 리스너가 받을 트래픽 유형을 지정합니다.
* **포트 번호**: 외부 또는 내부 클라이언트가 접속할 서비스 포트를 지정합니다.
* **부하 분산 알고리즘**: 타겟 그룹 내 대상에 요청을 어떻게 분배할지 결정합니다.
* **타겟 그룹**: 트래픽을 전달할 대상 집합을 선택합니다.
* **설명**: 리스너 목적이나 포트 용도를 기록합니다.

지원하는 부하 분산 알고리즘은 다음과 같습니다.

* **라운드 로빈 (Round Robin)**: 요청을 순차적으로 분배하는 방식입니다. 예를 들어 성능이 비슷한 웹 서버 3대에 정적 웹 요청을 고르게 나누고 싶을 때 적합합니다.
* **가중 라운드 로빈 (Weighted Round Robin)**: 타겟 가중치에 따라 순차 분배하는 방식입니다. 예를 들어 `web-1`은 `70`, `web-2`는 `30`으로 설정해 성능이 더 큰 서버에 더 많은 요청을 보내고 싶을 때 적합합니다.
* **최소 연결 (Least Connections)**: 현재 연결 수가 가장 적은 대상에 분배하는 방식입니다. 예를 들어 연결 유지 시간이 제각각인 웹 서비스나 API 서비스에서 상대적으로 한가한 서버로 요청을 보내고 싶을 때 적합합니다.
* **가중 최소 연결 (Weighted Least Connections)**: 현재 연결 수와 타겟 가중치를 함께 고려하는 방식입니다. 예를 들어 서버 성능 차이가 있으면서도 세션 유지 시간이 긴 서비스에서, 큰 서버가 더 많은 연결을 감당하도록 하고 싶을 때 적합합니다.
* **소스 해싱 (Source Hashing)**: 같은 소스에서 들어온 요청이 같은 타겟으로 전달되기 쉽도록 분배하는 방식입니다. 예를 들어 특정 파트너망이나 고정된 클라이언트 IP 대역의 요청을 가능한 한 같은 서버로 보내고 싶을 때 활용할 수 있습니다.
* **매글레브 해싱 (Maglev Hashing)**: 해시 기반으로 안정적으로 분배하며 타겟 변경 시 재분배를 최소화하는 방식입니다. 예를 들어 캐시 적중률이나 연결 일관성이 중요한 서비스에서 일부 타겟이 추가·제거되더라도 전체 분산 변동을 줄이고 싶을 때 적합합니다.

다음 사항도 함께 이해하는 것이 좋습니다.

* 실제 분산 대상에는 `HEALTHY` 상태의 타겟만 포함됩니다.
* 타겟 그룹의 가중치는 `가중 라운드 로빈`, `가중 최소 연결`과 같이 가중치를 활용하는 알고리즘에서 유의미합니다.
* 타겟 가중치가 `0`이면 해당 타겟은 정상 상태여도 실제 분산에서 제외하는 용도로 사용할 수 있습니다.

### 리스너 입력 필드 유효성

| 필드             | 허용 값                                                                                                                                                                                   | 검증 규칙                           | 비고                                    |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------------------- |
| **프로토콜**       | `TCP`, `UDP`                                                                                                                                                                           | 필수입니다. 드롭다운에서 선택합니다.            | 리스너 단위 통신 프로토콜입니다.                    |
| **포트 번호**      | `1-65535` 정수                                                                                                                                                                           | 필수입니다. 유효한 포트 번호여야 합니다.         | 서비스 진입 포트입니다.                         |
| **부하 분산 알고리즘** | `라운드 로빈 (Round Robin)`, `가중 라운드 로빈 (Weighted Round Robin)`, `최소 연결 (Least Connections)`, `가중 최소 연결 (Weighted Least Connections)`, `소스 해싱 (Source Hashing)`, `매글레브 해싱 (Maglev Hashing)` | 필수입니다. 드롭다운에서 선택합니다.            | 프로토콜과 타겟 그룹 조건에 따라 선택 범위가 달라질 수 있습니다. |
| **타겟 그룹**      | 선택한 VPC와 리스너 조건에 맞는 타겟 그룹                                                                                                                                                              | 필수입니다. VPC가 먼저 선택되어야 목록이 채워집니다. | 프로토콜과 호환되는 항목만 표시됩니다.                 |
| **설명**         | 최대 200자 문자열                                                                                                                                                                            | 선택 입력입니다. 200자를 초과할 수 없습니다.     | 리스너 용도 구분용입니다.                        |

### 여러 리스너를 활용하는 방식

하나의 로드 밸런서는 여러 개의 리스너를 가질 수 있습니다. 각 리스너는 `프로토콜`, `포트 번호`, `부하 분산 알고리즘`, `타겟 그룹`을 개별적으로 가질 수 있으므로, 하나의 로드 밸런서에서 여러 서비스 진입점을 함께 운영할 수 있습니다.

동일한 외부 IP 또는 내부 IP를 유지하면서도 포트와 프로토콜 기준으로 서로 다른 서비스나 서로 다른 서버 그룹으로 트래픽을 분산할 수 있습니다. 또한 하나의 타겟 그룹을 여러 리스너가 함께 참조할 수도 있고, 리스너마다 서로 다른 타겟 그룹과 알고리즘을 적용할 수도 있습니다.

#### 활용 예시

* **예시 1. 같은 타겟 그룹을 `80`과 `443` 리스너에서 함께 사용하는 경우**: `TCP 80 -> web-target-group`, `TCP 443 -> web-target-group`처럼 같은 타겟 그룹을 두 개의 리스너에 연결할 수 있습니다. 외부에서는 `80`과 `443` 두 진입 포트를 제공하면서도, 내부적으로는 동일한 웹 서버 집합으로 트래픽을 전달할 수 있습니다.
* **예시 2. 같은 포트 번호를 사용하되 프로토콜이 다른 경우**: 같은 로드 밸런서에서는 `프로토콜 + 포트 번호` 조합이 중복되면 안 되므로 `TCP 443 -> web-target-group`과 `TCP 443 -> app-target-group`처럼 같은 프로토콜과 포트를 두 번 등록할 수는 없습니다. 반대로 `TCP 53 -> dns-tcp-target-group`, `UDP 53 -> dns-udp-target-group`처럼 포트 번호가 같아도 프로토콜이 다르면 서로 다른 타겟 그룹으로 구성할 수 있습니다.
* **예시 3. 리스너별로 알고리즘을 다르게 적용하는 경우**: `TCP 80 -> web-target-group (최소 연결)`, `TCP 8080 -> app-target-group (라운드 로빈)`처럼 리스너마다 다른 부하 분산 알고리즘을 적용할 수 있습니다. 예를 들어 웹 서비스는 연결 유지 시간이 제각각인 요청이 많아 `최소 연결`로 분산하고, 애플리케이션 서비스는 요청 특성이 비교적 균일해 `라운드 로빈`으로 분산하는 식으로 운영할 수 있습니다.
* **예시 4. 사용자 서비스와 운영용 서비스를 분리하는 경우**: `TCP 443 -> public-app-target-group`, `TCP 9443 -> admin-app-target-group`처럼 구성하면 같은 로드 밸런서에서 사용자 서비스와 운영 전용 서비스의 진입점을 분리할 수 있습니다.

### 리스너 추가 시 참고 사항

* 여러 리스너를 사용하면 외부 IP를 추가로 할당하지 않고도 여러 서비스 진입점을 운영할 수 있습니다.
* 같은 로드 밸런서 안에서는 `프로토콜 + 포트 번호` 조합이 유일해야 합니다. 타겟 그룹이나 알고리즘이 달라도 같은 `TCP 443` 조합은 중복 생성할 수 없습니다.
* 같은 타겟 그룹은 여러 리스너가 함께 참조할 수 있습니다. 타겟 그룹은 마지막으로 연결된 리스너가 제거될 때만 로드 밸런서 연결이 해제됩니다.
* 리스너는 포트와 프로토콜 기준으로 트래픽을 구분하는 구조이므로, 동일한 포트에서 요청 내용 자체를 기준으로 분기하는 방식과는 다릅니다.
* 리스너별로 서로 다른 부하 분산 알고리즘을 사용할 수 있으므로, 서비스 특성에 따라 포트별 분산 전략을 다르게 설계할 수 있습니다.
* 리스너 추가 버튼은 VPC가 먼저 선택되어야 활성화됩니다.
* 타겟 그룹 목록은 선택한 프로토콜에 맞는 항목만 표시됩니다.
* 같은 로드 밸런서에 이미 동일한 `프로토콜 + 포트 번호` 조합의 리스너가 있으면 추가할 수 없습니다.

***

## 로드 밸런서 편집

### 편집 항목

편집 화면에서는 다음 항목을 수정할 수 있습니다.

* **이름**: 로드 밸런서 식별용 이름을 수정합니다.
* **설명**: 운영 메모를 수정합니다.
* **타입**: 외부/내부 노출 방식을 조정합니다.
* **내부 IP 주소**: 내부 IP 할당 방식을 조정합니다.
* **외부 IP 주소**: 외부 타입일 때 외부 IP 할당 방식을 조정합니다.

다음 항목은 편집할 수 없습니다.

* **VPC**: 생성 후 고정됩니다.
* **서브넷**: 생성 후 고정됩니다.

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

| 필드           | 허용 값                     | 검증 규칙                                  | 비고                |
| ------------ | ------------------------ | -------------------------------------- | ----------------- |
| **이름**       | 영문, 숫자, `-`, `_` 조합의 문자열 | 필수입니다. 80자 이내로 입력합니다.                  | 편집 가능합니다.         |
| **설명**       | 최대 200자 문자열              | 선택 입력입니다. 200자를 초과할 수 없습니다.            | 편집 가능합니다.         |
| **타입**       | `외부`, `내부`               | 필수입니다. 외부에서 내부로 바꾸면 외부 IP 입력이 비활성화됩니다. | 서비스 노출 방식 변경입니다.  |
| **내부 IP 주소** | `자동 할당`, `수동 할당`         | 필수입니다. 현재 네트워크 조건에 맞는 방식만 선택할 수 있습니다.  | 편집 가능합니다.         |
| **외부 IP 주소** | `자동 할당`, `수동 할당`         | `타입`이 `외부`일 때만 편집 가능합니다.               | 내부 타입에서는 비활성화됩니다. |
| **VPC**      | 기존 값 고정                  | 편집할 수 없습니다.                            | 생성 시 결정됩니다.       |
| **서브넷**      | 기존 값 고정                  | 편집할 수 없습니다.                            | 생성 시 결정됩니다.       |

### 편집 시 참고 사항

* 외부 타입을 내부 타입으로 바꾸면 외부 IP 선택은 비활성화됩니다.
* 리스너는 편집 화면이 아닌 별도의 `리스너 편집` 화면에서 관리합니다.

***

## 리스너 편집

상세 화면에서 진입하는 별도 편집 화면입니다.

### 주요 작업

* `추가`: 리스너를 추가합니다.
* `편집`: 리스너 설정을 변경합니다.
* `삭제`: 리스터 목록에서 리스너를 삭제합니다.

### 리스너 입력 항목

* **프로토콜**: 리스너 통신 프로토콜을 지정합니다.
* **포트 번호**: 실제 서비스 진입 포트를 지정합니다.
* **부하 분산 알고리즘**: 타겟 분산 방식을 지정합니다.
* **타겟 그룹**: 트래픽 전달 대상을 지정합니다.
* **설명**: 리스너 용도를 기록합니다.

### 리스너 입력 필드 유효성

| 필드             | 허용 값                                                                                                                                                                                   | 검증 규칙                         | 비고                     |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ---------------------- |
| **프로토콜**       | `TCP`, `UDP`                                                                                                                                                                           | 필수입니다. 생성 화면과 동일한 검증을 적용합니다.  | 리스너 수정 시에도 동일합니다.      |
| **포트 번호**      | `1-65535` 정수                                                                                                                                                                           | 필수입니다. 유효한 포트 번호여야 합니다.       | 실제 서비스 진입 포트입니다.       |
| **부하 분산 알고리즘** | `라운드 로빈 (Round Robin)`, `가중 라운드 로빈 (Weighted Round Robin)`, `최소 연결 (Least Connections)`, `가중 최소 연결 (Weighted Least Connections)`, `소스 해싱 (Source Hashing)`, `매글레브 해싱 (Maglev Hashing)` | 필수입니다.                        | 생성 화면과 동일한 선택지를 사용합니다. |
| **타겟 그룹**      | 현재 VPC에서 선택 가능한 타겟 그룹                                                                                                                                                                  | 필수입니다. 조건에 맞는 항목만 선택할 수 있습니다. | 타겟 상태는 별도로 점검해야 합니다.   |
| **설명**         | 최대 200자 문자열                                                                                                                                                                            | 선택 입력입니다. 200자를 초과할 수 없습니다.   | 리스너 메모용입니다.            |

### 운영 시 주의사항

* 리스너 변경은 실제 서비스 진입 포트와 전달 대상에 직접 영향을 줍니다.
* 타겟 그룹 수정이 함께 필요하면 먼저 타겟 그룹 구성 상태를 점검한 뒤 리스너를 변경하는 것이 좋습니다.

***

## 로드 밸런서 삭제

* 여러 개를 선택해 삭제할 수 있습니다.
* 시스템 생성 로드 밸런서는 삭제 대상에서 제외됩니다.
* 삭제 시 연결된 리스너 구성이 함께 제거됩니다.

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

### 삭제 전 점검 항목

* `생성 방식`이 수동 생성인지 확인합니다.
* 연결된 타겟 그룹과 서비스 영향 범위를 확인합니다.
