> 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/l7-target-group.md).

# 어플리케이션 타겟 그룹

`어플리케이션 타겟 그룹`은 어플리케이션 로드 밸런서가 HTTP 트래픽을 전달할 대상 집합입니다. 타겟 그룹은 타겟, 부하 분산 알고리즘, 세션 고정성, 상태 검사 설정을 관리하며, 로드 밸런서의 `타겟 그룹으로 전달` 작업에서 선택됩니다.

## 화면 개요

* `생성 화면`: 기본 정보, 네트워크 정보, 타겟 그룹 정책, 타겟, 상태 검사 설정을 정의합니다.
* `목록 화면`: 타겟 그룹 현황을 조회하고 생성, 편집, 삭제 작업을 시작합니다.
* `상세 화면`: 기본 정보, 타겟 그룹 정책, 상태 검사 설정, 연결된 리소스를 확인합니다.
* `편집 화면`: 기본 정보, 네트워크 정보 일부, 타겟 그룹 정책, 상태 검사 설정을 수정합니다.
* `타겟 편집 화면`: 상세 화면의 `타겟` 탭에서 타겟 목록을 별도로 관리합니다.

## 사전 준비

### 네트워크와 리소스

* 프로젝트에 [`VPC`](/cloudia-manual/network/vpc.md)가 준비되어 있어야 합니다.
* 타겟으로 사용할 [`인스턴스`](/cloudia-manual/vm/instance.md) 또는 내부 IP 주소가 준비되어 있어야 합니다.
* 타겟이 위치한 [`서브넷`](/cloudia-manual/network/subnet.md) 타입은 퍼블릭/프라이빗 여부와 관계없이 사용할 수 있습니다. 타겟은 로드 밸런서를 통해 서비스로 진입할 수 있습니다.
* 타겟 애플리케이션의 서비스 포트와 상태 검사 경로를 확정합니다.
* [`어플리케이션 로드 밸런서`](/cloudia-manual/network/l7-load-balancer.md)에 연결하려면 타겟 그룹과 로드 밸런서가 같은 [`VPC`](/cloudia-manual/network/vpc.md)에 있어야 합니다.

### 네트워크 보안 정책

Cloudia L4/L7 로드 밸런서는 로드 밸런서와 타겟이 서로 다른 서브넷에 위치해도 NACL을 적용받지 않습니다. 따라서 타겟 그룹 사용 전제 조건에서 NACL은 검토 대상이 아니며, 타겟 서버에 연결된 [`보안그룹`](/cloudia-manual/security/security-group.md)에서 `클라이언트 -> 타겟` 트래픽을 허용하는 정책을 수립합니다.

예시 조건:

* 서비스 클라이언트 CIDR: `10.20.0.0/16`
* 타겟 서비스 포트: `8080`
* 상태 검사 포트: `8080` 또는 별도 포트

| 방향   | 프로토콜 | 포트    | 소스           | 설명                |
| ---- | ---- | ----- | ------------ | ----------------- |
| 인바운드 | TCP  | 8080  | 10.20.0.0/16 | 클라이언트의 서비스 트래픽 허용 |
| 인바운드 | TCP  | 18080 | 10.20.0.0/16 | 상태 검사 포트 분리 시     |

* 소스 CIDR은 실제 서비스 클라이언트 또는 운영상 허용한 접근 구간으로 대체합니다.
* 보안그룹은 상태 저장 방식이므로 허용된 인바운드 트래픽의 응답은 자동 허용됩니다.

## 타겟 그룹 생성

### 기본 정보

1. `프로젝트 > 네트워크 > 타겟 그룹`으로 이동합니다.
2. `생성`을 클릭합니다.
3. `이름`을 입력합니다.
4. `계층`에서 `어플리케이션`을 선택합니다.
5. 필요한 경우 `설명`을 입력합니다.

이름 입력 시 다음 제약을 확인합니다.

* 영문 대/소문자, 숫자, `-`, `_`를 사용할 수 있습니다.
* `__cloudia_` 접두사는 사용할 수 없습니다.

### 네트워크 정보

1. `VPC`를 선택합니다.
2. `프로토콜`을 선택합니다. 현재 어플리케이션 타겟 그룹의 프로토콜은 `HTTP`만 가능합니다.
3. `포트 번호`를 입력합니다.

입력 시 다음 사항을 확인합니다.

* `포트 번호`는 `1-65535` 범위의 정수입니다.
* 타겟 그룹의 `포트 번호`는 상태 검사와 타겟 추가 시 사용될 기본값으로 됩니다.
* 타겟 그룹의 `포트 번호`를 수정해도 이미 등록된 타겟의 개별 `포트 번호`는 자동 변경되지 않습니다. 필요한 경우 타겟 편집 화면에서 타겟별 포트를 별도로 수정합니다.

### 타겟 그룹 정책

`타겟 그룹 정책`은 로드 밸런서가 정상 타겟 중 어떤 대상을 선택할지 결정합니다.

| 알고리즘                                    | 설명                                                                              | 예시값                                            |
| --------------------------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------- |
| **라운드 로빈 (Round Robin)**                | 정상 타겟에 요청을 순차적으로 분산합니다.                                                         |                                                |
| **최소 연결 (Least Connections)**           | 현재 연결 수가 적은 타겟을 우선 선택합니다.                                                       |                                                |
| **소스 해싱 (Source Hashing)**              | 클라이언트 소스 IP를 기준으로 요청을 분산하며, 타겟 상태와 구성이 유지되는 동안 같은 IP의 요청을 같은 타겟으로 전달합니다.        | 클라이언트 소스 IP: `10.20.0.15`                      |
| **URI 해싱 (URI Hashing)**                | URI를 기준으로 요청을 분산하며, 타겟 상태와 구성이 유지되는 동안 같은 URI의 요청을 같은 타겟으로 전달합니다.               | URI: `/api/orders/1001`                        |
| **URL 파라미터 해싱 (URL Parameter Hashing)** | 지정한 URL 파라미터 값을 기준으로 요청을 분산하며, 타겟 상태와 구성이 유지되는 동안 같은 파라미터 값의 요청을 같은 타겟으로 전달합니다. | `파라미터`: `userId`, 요청 예시: `/orders?userId=1001` |
| **HTTP 헤더 해싱 (HTTP Header Hashing)**    | 지정한 HTTP 헤더 값을 기준으로 요청을 분산하며, 타겟 상태와 구성이 유지되는 동안 같은 헤더 값의 요청을 같은 타겟으로 전달합니다.    | `헤더`: `X-Tenant-ID`, 헤더 값 예시: `tenant-a`       |

정책 입력 시 다음 사항을 확인합니다.

* `URL 파라미터 해싱`을 선택하면 `파라미터` 값이 필요합니다. `파라미터`에는 `userId`처럼 파라미터 이름을 입력하고, 실제 요청의 파라미터 값이 해싱 기준값으로 사용됩니다.
* `HTTP 헤더 해싱`을 선택하면 `헤더` 값이 필요합니다. `헤더`에는 `X-Tenant-ID`처럼 헤더 이름을 입력하고, 실제 요청의 헤더 값이 해싱 기준값으로 사용됩니다.
* 해싱 계열 알고리즘은 서로 다른 해싱 기준값이 반드시 서로 다른 타겟으로 가는 것이 아니라, 같은 해싱 기준값의 요청이 같은 타겟으로 유지되는지가 핵심입니다.
* 알고리즘 변경 저장 직후에는 런타임 반영 지연이 있을 수 있으므로 운영 검증 전 30-60초 대기하는 것을 권장합니다.

### 서버 가중치 점진 상승 시간

`서버 가중치 점진 상승 시간`은 장애 후 정상 복귀한 타겟에 트래픽을 즉시 최대치로 보내지 않고, 설정 시간 동안 점진적으로 늘리는 기능입니다.

* 입력 범위는 `0-3600초`입니다.
* `0초`로 설정하면 점진 상승 없이 즉시 정상 분산에 포함됩니다.
* Down 상태였던 타겟이 Up으로 복구될 때 트래픽 유입이 설정 시간 동안 서서히 증가합니다.

### 세션 고정성

`세션 고정성`은 같은 브라우저 세션의 요청을 같은 타겟 멤버에 고정하는 기능입니다.

* 활성화 시 `쿠키 유효 시간`을 입력합니다. `1-604800초(7일)` 범위로 입력합니다.
* 브라우저 세션별로 독립적으로 동작합니다.
* 쿠키가 삭제되거나 만료되면 타겟이 다시 선택될 수 있습니다.
* 로드 밸런서 리스너 작업의 `세션 고정성`은 타겟 그룹 선택을 고정하고, 타겟 그룹 정책의 `세션 고정성`은 타겟 멤버 선택을 고정합니다.

### 타겟 추가

타겟은 `타겟 유형`에 따라 `인스턴스` 또는 `IP 주소`로 추가합니다.

| 항목           | 설명                                                   |
| ------------ | ---------------------------------------------------- |
| **타겟 유형**    | `인스턴스` 또는 `IP 주소`입니다.                                |
| **인스턴스**     | 인스턴스형 타겟일 때 선택합니다.                                   |
| **내부 IP 주소** | 실제 트래픽을 받을 내부 IP 주소입니다.                              |
| **포트 번호**    | 타겟 애플리케이션이 수신하는 포트입니다.                               |
| **가중치**      | `0-100` 범위의 정수입니다. `0`은 트래픽을 전달하지 않는 용도로 사용할 수 있습니다. |

중복 제약:

* `인스턴스` 유형은 동일 인터페이스 IP와 포트 번호 조합을 중복 등록할 수 없습니다.
* `IP 주소` 유형도 동일 IP 주소와 포트 번호 조합을 중복 등록할 수 없습니다.
* 같은 IP라도 포트 번호가 다르면 별도 타겟으로 등록할 수 있습니다.
* 타겟 그룹에는 하나의 타겟 유형만 등록할 수 있습니다.
* 하나의 타겟 그룹에는 최대 100개의 타겟을 등록할 수 있습니다.

### 상태 검사 설정

`상태 검사 설정`에서 타겟의 정상 여부를 판단하는 기준을 설정합니다.

| 항목                  | 설명                                                            |
| ------------------- | ------------------------------------------------------------- |
| **활성화 여부**          | 상태 검사를 사용할지 선택합니다.                                            |
| **상태 검사 프로토콜**      | L7 상태 검사에 사용할 프로토콜입니다. 현재는 HTTP만 지원합니다.                       |
| **상태 검사 경로**        | 상태 검사 요청 경로입니다. 기본값은 `/`입니다.                                  |
| **기대 HTTP 상태코드 범위** | 정상으로 판단할 HTTP 상태 코드 범위입니다. 기본값은 `200`입니다.                     |
| **체크 간격**           | 상태 검사를 수행하는 주기입니다. `1-600000ms` 범위로 입력하며, 기본값은 `2000ms`입니다.   |
| **타임 아웃**           | 응답을 기다리는 최대 시간입니다. `1-600000ms` 범위로 입력하며, 기본값은 `1000ms`입니다.   |
| **연속 성공 횟수**        | 정상으로 전환하기 위해 필요한 연속 성공 횟수입니다. `1-100` 범위로 입력하며, 기본값은 `2`입니다.  |
| **연속 실패 횟수**        | 비정상으로 전환하기 위해 필요한 연속 실패 횟수입니다. `1-100` 범위로 입력하며, 기본값은 `3`입니다. |

상태 검사 실패 시 해당 타겟은 런타임 상태가 비정상으로 표시되고 실제 분산 대상에서 제외될 수 있습니다.

### 생성 버튼 활성화 조건

* 기본 정보가 유효해야 합니다.
* 네트워크 정보가 유효해야 합니다.
* 타겟 그룹 정책이 유효해야 합니다.
* 상태 검사 설정이 유효해야 합니다.

## 타겟 그룹 목록

### 주요 작업

* `생성`: 새 타겟 그룹을 생성합니다.
* `편집`: 선택한 1개 타겟 그룹을 편집합니다.
* `삭제`: 선택한 타겟 그룹을 삭제합니다. 로드 밸런서에 연결된 타겟 그룹은 삭제할 수 없습니다.

### 테이블 컬럼

| 컬럼           | 설명                                                  |
| ------------ | --------------------------------------------------- |
| **이름**       | 타겟 그룹 이름입니다. 클릭하면 상세 화면으로 이동합니다.                    |
| **ID**       | 타겟 그룹 고유 ID입니다.                                     |
| **생성 방식**    | `수동 생성`, `쿠버네티스`, `오토 스케일링 그룹` 등 프로비저닝 소스입니다.       |
| **VPC**      | 소속 VPC 이름입니다.                                       |
| **프로토콜**     | 어플리케이션 타겟 그룹은 `HTTP`로 표시됩니다.                        |
| **포트 번호**    | 타겟 그룹 기본 서비스 포트입니다.                                 |
| **LB 적용 여부** | 로드 밸런서에 연결되어 있으면 `적용`, 연결되어 있지 않으면 `적용 안함`으로 표시됩니다. |
| **생성 일시**    | 타겟 그룹이 생성된 날짜와 시각입니다.                               |

### 버튼 활성화 기준

* 항목을 선택하지 않으면 `편집`, `삭제` 버튼이 비활성화됩니다.
* 항목 1개를 선택하면 `편집`, `삭제` 버튼이 활성화됩니다.
* 항목을 2개 이상 선택하면 `편집`은 비활성화되고 `삭제`만 활성화됩니다.
* `LB 적용 여부=적용`인 타겟 그룹은 삭제할 수 없습니다.

## 타겟 그룹 상세

### 기본 정보

상세 화면에서 기본 정보와 타겟 그룹 정책을 확인합니다.

기본 정보에서 다음 항목을 확인합니다.

* **이름**: 타겟 그룹 이름입니다.
* **ID**: 타겟 그룹 고유 ID입니다.
* **생성 방식**: 수동 생성 또는 시스템 생성 여부입니다.
* **VPC**: 타겟 그룹이 속한 VPC입니다.
* **프로토콜**: `HTTP`입니다.
* **포트 번호**: 타겟 그룹 기본 서비스 포트입니다.
* **타겟 유형**: `인스턴스` 또는 `IP 주소`입니다.
* **설명**: 운영 메모입니다.
* **생성 일시**: 생성된 날짜와 시각입니다.

### 타겟 그룹 정책 정보

타겟 그룹 정책 정보에서는 로드 밸런서가 정상 타겟 중 어떤 타겟을 선택할지 판단하는 설정을 확인합니다.

* **알고리즘**: 정상 타겟을 선택하는 부하 분산 알고리즘입니다.
* **서버 가중치 점진 상승 시간**: 장애 복구 후 트래픽 유입을 점진적으로 늘리는 시간입니다.
* **세션 고정성**: 같은 브라우저 세션의 요청을 같은 타겟 멤버에 고정할지 여부입니다.
* **쿠키 유효 시간**: 세션 고정성이 활성화된 경우 쿠키가 유지되는 시간입니다.

### 상태 검사 설정 정보

상세 화면에서는 타겟의 정상 여부를 판단하는 상태 검사 설정도 확인합니다.

* **활성화 여부**: 상태 검사를 사용할지 여부입니다.
* **상태 검사 프로토콜**: 상태 검사 요청에 사용할 프로토콜입니다.
* **상태 검사 경로**: 상태 검사 요청 경로입니다.
* **기대 HTTP 상태코드 범위**: 정상으로 판단할 HTTP 상태 코드 범위입니다.
* **체크 간격**: 상태 검사를 수행하는 주기입니다.
* **타임 아웃**: 응답을 기다리는 최대 시간입니다.
* **연속 성공 횟수**: 비정상 타겟을 정상으로 전환하기 위해 필요한 연속 성공 횟수입니다.
* **연속 실패 횟수**: 정상 타겟을 비정상으로 전환하기 위해 필요한 연속 실패 횟수입니다.

### 하단 탭

* `타겟`: 실제 트래픽 전달 대상 목록을 확인합니다.
* `로드 밸런서`: 이 타겟 그룹을 참조 중인 로드 밸런서 목록을 확인합니다.

### 타겟 탭

`demo-tg-1`은 VM 2개, `demo-tg-2`는 VM 1개가 등록된 예시입니다.

| 컬럼          | 설명                                     |
| ----------- | -------------------------------------- |
| **인스턴스**    | `타겟 유형=인스턴스`일 때 등록된 인스턴스입니다.           |
| **IP 주소**   | 실제 트래픽을 받는 타겟 IP 주소입니다.                |
| **포트 번호**   | 해당 타겟이 수신하는 서비스 포트입니다.                 |
| **가중치**     | 타겟 간 분산 비중에 사용하는 값입니다.                 |
| **관리 상태**   | 타겟을 트래픽 전달 대상으로 포함할지 나타내는 의도 상태입니다.    |
| **모니터링 정보** | `보기`를 클릭해 타겟의 런타임 상태와 상태 검사 결과를 확인합니다. |

### 로드 밸런서 탭

로드 밸런서 탭에서는 이 타겟 그룹을 참조 중인 로드 밸런서와 외부 IP 주소를 확인합니다.

| 컬럼           | 설명                             |
| ------------ | ------------------------------ |
| **이름**       | 이 타겟 그룹을 참조 중인 로드 밸런서 이름입니다.   |
| **ID**       | 로드 밸런서 고유 ID입니다.               |
| **생성 방식**    | 로드 밸런서의 프로비저닝 소스입니다.           |
| **VPC**      | 로드 밸런서가 속한 VPC 이름입니다.          |
| **서브넷**      | 로드 밸런서의 내부 IP 주소가 할당된 서브넷입니다.  |
| **외부 IP 주소** | 외부 타입 로드 밸런서에 할당된 외부 IP 주소입니다. |
| **설명**       | 로드 밸런서 설명입니다.                  |
| **생성 일시**    | 로드 밸런서 생성 시각입니다.               |

## 타겟 그룹 설정 변경

### 편집 가능한 항목

* `이름`
* `설명`
* `포트 번호`
* `알고리즘`
* `서버 가중치 점진 상승 시간`
* `세션 고정성`
* `상태 검사 설정`

편집 전 다음 영향을 확인합니다.

* 연결된 로드 밸런서와 리스너가 있는지 확인합니다.
* 트래픽 영향 시간대를 확인합니다.
* 알고리즘이나 상태 검사 변경 후에는 30-60초 정도 대기한 뒤 실제 응답 분산과 상태를 검증합니다.
* 타겟 그룹의 `포트 번호` 변경은 등록된 타겟의 개별 `포트 번호`를 자동 변경하지 않습니다.

## 타겟 변경

상세 화면의 `연결된 리소스 > 타겟`에서 타겟을 편집합니다.

가능한 작업:

* 타겟 추가
* 타겟 삭제
* 타겟별 `포트 번호` 변경
* 타겟별 `가중치` 변경
* 타겟별 `내부 IP 주소` 변경

운영 시 참고 사항:

* 로드 밸런서에 연결된 상태에서도 타겟 `가중치`와 `포트 번호`를 변경할 수 있습니다.
* 가중치 변경 후 실제 응답 분포가 변경될 수 있습니다.
* 잘못된 포트로 변경하면 해당 타겟의 `런타임 상태`가 비정상으로 전환되고 응답 비중이 감소하거나 제외될 수 있습니다.
* 포트를 복구한 뒤 상태와 분산이 정상화되는지 확인합니다.

## 타겟 상태와 모니터링

타겟 상태는 `관리 상태`와 `런타임 상태`를 구분해서 봅니다.

* `관리 상태`: 타겟 목록에서 확인하는 사용자의 의도 상태입니다. 타겟을 트래픽 전달 대상으로 포함할지 판단하는 기준입니다.
* `런타임 상태`: 타겟 행의 `모니터링 정보 > 보기`에서 확인하는 런타임의 타겟 상태입니다. 상태 검사와 실제 런타임 통계 수집 결과를 기준으로 표시됩니다.

타겟 목록의 `관리 상태`가 `ACTIVE`여도 모니터링 정보의 `런타임 상태`는 상태 검사 결과에 따라 `DOWN` 등으로 표시될 수 있습니다. `관리 상태`는 사용자가 타겟을 분산 대상으로 포함하려는 의도이고, `런타임 상태`는 상태 검사로 확인한 실제 연결 가능 상태입니다.

로드 밸런서에 연결되지 않은 타겟 그룹은 연결 트래픽 기반 모니터링 정보가 미집계 또는 미노출될 수 있습니다. 로드 밸런서에 연결된 후에는 `연결된 리소스 > 타겟 > 모니터링 정보 > 보기`에서 연결 트래픽 기반 상태와 상태 검사 결과를 확인합니다.

### 타겟 모니터링 정보

타겟 모니터링 정보는 로드 밸런서 런타임에서 수집한 타겟별 통계 스냅샷입니다. Cloudia는 연결된 로드 밸런서에서 현재 참조 중인 `ACTIVE` 타겟을 기준으로 타겟 IP 주소와 포트가 일치하는 런타임 통계를 매핑합니다.

수집 기준:

* 로드 밸런서에 연결된 타겟 그룹만 런타임 통계가 노출됩니다.
* 통계가 아직 수집되지 않았거나 런타임 통계와 타겟 IP/포트가 매칭되지 않으면 `런타임 상태`가 `UNKNOWN` 또는 `-`로 표시될 수 있습니다.
* 누적값은 런타임 통계 기준입니다. 로드 밸런서 재배포, 런타임 재시작, 설정 재반영 시 초기화될 수 있습니다.

| UI 항목               | 상세 설명                                                                           |
| ------------------- | ------------------------------------------------------------------------------- |
| **런타임 상태**          | 런타임이 판단한 타겟의 현재 상태입니다. `UP`, `DOWN`, `UNKNOWN` 등으로 표시될 수 있습니다.                  |
| **진단 코드**           | 마지막 상태 검사에서 확인한 진단 결과입니다. 예: `L7 정상`, `L4 시간 초과`, `L7 상태 오류`                    |
| **체크 응답 코드**        | 상태 검사 응답 코드입니다. HTTP 상태 검사에서는 실제 HTTP 응답 코드가 표시됩니다. 응답 코드가 없으면 `-`로 표시될 수 있습니다. |
| **상태 검사 실패 횟수**     | 상태 검사 실패가 누적된 횟수입니다. 값이 계속 증가하면 포트, 경로, 응답 코드, 보안그룹을 점검합니다.                     |
| **DOWN 전이 횟수**      | 타겟이 정상 상태에서 `DOWN` 상태로 전환된 누적 횟수입니다. 반복적으로 증가하면 타겟 상태가 불안정하다는 의미입니다.            |
| **누적 다운 시간**        | 타겟이 `DOWN` 상태였던 누적 시간입니다. 런타임 통계에서는 초 단위로 수집되며 UI에서는 시간 형식으로 표시될 수 있습니다.        |
| **현재 세션 수**         | 현재 해당 타겟에 연결되어 처리 중인 세션 수입니다.                                                   |
| **전체 세션 수**         | 런타임 통계 기준으로 해당 타겟에 전달된 누적 세션 수입니다.                                              |
| **수신 바이트**          | 해당 타겟 통계에서 집계된 누적 수신 바이트입니다.                                                    |
| **송신 바이트**          | 해당 타겟 통계에서 집계된 누적 송신 바이트입니다.                                                    |
| **마지막 상태 변경 경과 시간** | 마지막 상태 변경 이후 경과 시간입니다. 런타임 통계에서는 초 단위로 수집됩니다.                                   |
| **최종 수집 시각**        | Cloudia가 해당 타겟 통계를 마지막으로 수집해 저장한 시각입니다.                                         |

### 관리 상태

| UI 표시명   | 상세 설명                                                    |
| -------- | -------------------------------------------------------- |
| ACTIVE   | 타겟이 트래픽 전달 대상으로 포함된 상태입니다.                               |
| DRAINING | 타겟이 트래픽 전달 대상에서 제외되는 중인 상태입니다. 기존 반영이 정리된 뒤 삭제 또는 제외됩니다. |

### 런타임 상태

| UI 표시명  | 상세 설명                                                            |
| ------- | ---------------------------------------------------------------- |
| UP      | 타겟이 정상 상태이며 트래픽 분산 대상으로 사용할 수 있습니다.                              |
| DOWN    | 타겟이 상태 검사에 실패했거나 연결할 수 없어 트래픽 분산 대상에서 제외되는 상태입니다.                |
| UNKNOWN | 런타임 통계가 아직 수집되지 않았거나 타겟과 통계가 매칭되지 않아 상태를 판단할 수 없는 상태입니다.         |
| MAINT   | 유지보수 또는 관리 목적의 제외 상태입니다. 표시될 경우 신규 트래픽 분산 대상으로 보지 않습니다.          |
| DRAIN   | 기존 연결은 처리하되 신규 분산을 제한하는 상태입니다. 표시될 경우 트래픽 제거 또는 점진 제외 상태로 해석합니다. |

### 진단 코드

| UI 표시명    | 상세 설명                                                |
| --------- | ---------------------------------------------------- |
| 알 수 없음    | 상태 확인 결과를 알 수 없습니다.                                  |
| 초기화 중     | 상태 확인을 초기화하는 중입니다.                                   |
| 소켓 오류     | 상태 확인 중 소켓 오류가 발생했습니다.                               |
| L4 정상     | L4 연결 확인에 성공했습니다. 상위 레이어 검사는 수행되지 않았습니다.             |
| L4 시간 초과  | L1\~L4 구간에서 상태 확인 시간이 초과되었습니다.                       |
| L4 연결 실패  | 연결이 거부되었거나 대상 호스트에 도달할 수 없습니다.                       |
| SSL 정상    | SSL/TLS 계층 확인에 성공했습니다.                               |
| SSL 시간 초과 | SSL/TLS 계층에서 상태 확인 시간이 초과되었습니다.                      |
| SSL 응답 오류 | SSL/TLS 응답이 올바르지 않거나 프로토콜 오류가 발생했습니다.                |
| L7 정상     | L7 상태 확인에 성공했습니다.                                    |
| 조건부 정상    | 조건부로 L7 상태 확인에 성공했습니다. 예: disable-on-404 조건에서 404 응답 |
| L7 시간 초과  | HTTP/SMTP 등 L7 구간에서 상태 확인 시간이 초과되었습니다.               |
| L7 응답 오류  | L7 응답이 올바르지 않거나 프로토콜 오류가 발생했습니다.                     |
| L7 상태 오류  | L7 응답 상태가 실패로 판단되었습니다. 예: HTTP 5xx                   |

### 런타임 상태가 비정상일 때 점검 순서

1. 타겟 애플리케이션 프로세스가 실행 중인지 확인합니다.
2. 타겟의 `포트 번호`와 실제 서비스 포트가 일치하는지 확인합니다.
3. `상태 검사 경로`와 `기대 HTTP 상태코드 범위`가 실제 응답과 일치하는지 확인합니다.
4. 타겟 서버 보안그룹에서 `클라이언트 -> 타겟` 소스 CIDR과 포트가 허용되어 있는지 확인합니다.
5. 포트를 잘못 변경한 경우 원래 포트로 복구하고 상태가 정상화되는지 확인합니다.

## 로드 밸런서 연결과 타겟 그룹 후보 노출 제약

어플리케이션 로드 밸런서의 `기본 작업` 또는 `규칙`에서 `타겟 그룹으로 전달`을 선택할 때 후보 타겟 그룹은 연결 관계에 따라 노출됩니다.

* 이미 특정 어플리케이션 로드 밸런서에 연결된 타겟 그룹은 같은 로드 밸런서의 새 리스너 또는 규칙에서는 후보로 다시 노출될 수 있습니다.
* 이미 다른 어플리케이션 로드 밸런서에 연결된 타겟 그룹은 현재 로드 밸런서의 후보에서 제외됩니다.
* 후보가 보이지 않으면 `VPC`, `계층`, `프로토콜`, 기존 로드 밸런서 연결 여부를 함께 점검합니다.

## 삭제

### 삭제 전 확인 사항

* `LB 적용 여부`가 `적용`인지 확인합니다.
* 연결된 로드 밸런서와 리스너 영향 범위를 확인합니다.
* 삭제 전 로드 밸런서의 기본 작업 또는 규칙에서 타겟 그룹 연결을 해제합니다.

### 삭제 절차

1. 목록에서 삭제할 타겟 그룹을 선택합니다.
2. `삭제`를 클릭합니다.
3. 삭제 확인 모달에서 대상 정보를 확인합니다.
4. 삭제를 실행합니다.

로드 밸런서에 연결된 타겟 그룹은 삭제할 수 없습니다. `LB 적용 여부=적용`인 경우 먼저 로드 밸런서 연결을 해제합니다.

## 검증 절차

### 생성 검증

1. `타겟 그룹` 목록에서 새 항목의 `프로토콜`이 `HTTP`인지 확인합니다.
2. `포트 번호`가 의도한 기본 서비스 포트인지 확인합니다.
3. 생성 직후 연결된 로드 밸런서가 없으면 `LB 적용 여부=적용 안함`으로 표시되는지 확인합니다.
4. 상세 화면에서 `타겟 그룹 정책`과 `상태 검사 설정`이 입력값과 일치하는지 확인합니다.

### 타겟 검증

1. `연결된 리소스 > 타겟`에서 타겟 IP 주소와 `포트 번호`가 실제 애플리케이션과 일치하는지 확인합니다.
2. 타겟 `관리 상태`가 `ACTIVE`인지 확인합니다.
3. 로드 밸런서에 연결한 뒤 `모니터링 정보 > 보기`에서 `런타임 상태`를 확인합니다.
4. 정상 타겟은 `L7 정상` 또는 상태 검사 설정에 맞는 정상 상태로 표시되어야 합니다.

### 트래픽 검증

어플리케이션 로드 밸런서에 연결한 뒤 로드 밸런서 진입점으로 요청을 보냅니다.

```bash
curl -i http://<로드 밸런서 외부 IP 주소>:<리스너 포트>/
```

확인 기준:

* 정상 타겟으로 요청이 전달됩니다.
* 타겟 응답이 설정한 알고리즘과 가중치에 따라 분산됩니다.
* 비정상 타겟은 응답 분산 대상에서 제외됩니다.

### 알고리즘 검증

1. `라운드 로빈`은 여러 정상 타겟에 요청이 순차적으로 분산되는지 확인합니다.
2. `최소 연결`은 장시간 연결이 많은 타겟보다 연결 수가 적은 타겟이 우선 선택되는지 확인합니다.
3. 해싱 계열 알고리즘은 같은 해싱 기준값의 요청이 같은 타겟으로 유지되는지 확인합니다.
4. 알고리즘 변경 후에는 30-60초 대기한 뒤 검증합니다.

### 세션 고정성 검증

1. 브라우저에서 같은 세션으로 반복 요청합니다.
2. 같은 타겟 멤버로 요청이 유지되는지 확인합니다.
3. 쿠키를 삭제하거나 `쿠키 유효 시간`이 만료된 뒤 타겟이 다시 선택될 수 있는지 확인합니다.

### 서버 가중치 점진 상승 시간 검증

1. 운영 영향이 없는 테스트 환경에서 타겟을 일시적으로 비정상 상태로 만들었다가 복구합니다.
2. 타겟이 정상 상태로 복귀한 뒤 설정한 `서버 가중치 점진 상승 시간` 동안 트래픽 유입이 점진적으로 증가하는지 확인합니다.
3. 설정 시간이 지난 뒤 정상 분산 비율로 복귀하는지 확인합니다.

### 보안 정책 검증

1. 타겟 서버 보안그룹에서 `클라이언트 -> 타겟` 서비스 포트가 허용되어 있는지 확인합니다.
2. 상태 검사 포트를 서비스 포트와 다르게 사용한다면 해당 포트도 허용되어 있는지 확인합니다.
3. NACL은 Cloudia L4/L7 로드 밸런서의 사전 검토 대상이 아니므로 보안그룹 정책을 우선 점검합니다.

## 연관 기능 문서

* [어플리케이션 로드 밸런서](/cloudia-manual/network/l7-load-balancer.md)
* [타겟 그룹](/cloudia-manual/network/target-group.md)
* [로드 밸런서](/cloudia-manual/network/load-balancer.md)
* [보안그룹](/cloudia-manual/security/security-group.md)
* [VPC](/cloudia-manual/network/vpc.md)
* [서브넷](/cloudia-manual/network/subnet.md)
* [외부 IP](/cloudia-manual/network/external-ip.md)
* [프라이빗 DNS](/cloudia-manual/network/private-dns.md)
