

# Amazon RDS Proxy
<a name="rds-proxy"></a>

Amazon RDS 프록시를 사용하면 애플리케이션이 데이터베이스 연결을 풀링하고 공유하도록 허용하여 확장 기능을 향상할 수 있습니다. RDS 프록시는 애플리케이션 연결을 유지하면서 예비 DB 인스턴스에 자동으로 연결하여 데이터베이스 장애에 대한 애플리케이션의 복원력을 높입니다. RDS 프록시를 사용하면 프록시에 연결하는 클라이언트에 대해 AWS Identity and Access Management(IAM) 인증을 적용할 수 있으며 프록시는 AWS Secrets Manager에 저장된 IAM 데이터베이스 인증 또는 자격 증명을 사용하여 데이터베이스에 연결할 수 있습니다.

![애플리케이션이 RDS 프록시에 연결하는 방법에 대한 개요](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Proxy-Overview.png)


 RDS 프록시를 사용하여 예기치 않은 데이터베이스 트래픽 급증을 처리할 수 있습니다. 급증을 처리하지 않으면 이러한 현상으로 인해 연결을 초과 구독하거나 새 연결이 빠른 속도로 생성되어 문제가 발생할 수 있습니다. RDS 프록시는 데이터베이스 연결 풀을 설정하고 이 풀에서 연결을 재사용합니다. 이 접근 방식은 매번 새 데이터베이스 연결을 여는 데서 오는 메모리 및 CPU 오버헤드 를 방지합니다. 과다 구독으로부터 데이터베이스를 보호하기 위해 생성되는 데이터베이스 연결 수를 제어할 수 있습니다.

 RDS 프록시는 연결 풀에서 즉시 제공할 수 없는 애플리케이션 연결을 대기열에 추가하거나 제한합니다. 대기 시간이 증가할 수 있지만 애플리케이션은 갑작스러운 데이터베이스 장애 또는 압도 없이 계속 확장될 수 있습니다. 연결 요청이 지정된 한도를 초과하는 경우 RDS Proxy는 애플리케이션 연결을 거부합니다(즉, 부하 감소). 동시에 RDS가 사용 가능한 용량으로 제공할 수 있는 부하에 대해 예측 가능한 성능을 유지합니다.

![애플리케이션이 RDS 프록시에 연결하는 방법과 관련된 유형의 연결을 자세히 보여 줍니다.](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Proxy-detail.png)


 자격 증명을 처리하고 각 새 연결에 대한 보안 연결을 설정하는 데 필요한 오버헤드를 줄일 수 있습니다. RDS 프록시는 데이터베이스를 대신하여 해당 작업 중 일부를 처리할 수 있습니다.

 RDS 프록시는 지원하는 엔진 버전과 완전히 호환됩니다. 코드 변경 없이 대부분의 애플리케이션에 RDS 프록시를 활성화할 수 있습니다.

**Topics**
+ [리전 및 버전 사용 가능 여부](#rds-proxy.RegionVersionAvailability)
+ [RDS 프록시의 할당량 및 제한 사항](#rds-proxy.limitations)
+ [RDS Proxy 사용 대상 계획](rds-proxy-planning.md)
+ [RDS Proxy 개념 및 용어](rds-proxy.howitworks.md)
+ [RDS 프록시 시작하기](rds-proxy-setup.md)
+ [RDS 프록시 관리](rds-proxy-managing.md)
+ [Amazon RDS 프록시 엔드포인트 작업](rds-proxy-endpoints.md)
+ [Amazon CloudWatch를 사용한 RDS 프록시 지표 모니터링](rds-proxy.monitoring.md)
+ [RDS 프록시 이벤트 작업](rds-proxy.events.md)
+ [RDS 프록시 문제 해결](rds-proxy.troubleshooting.md)
+ [RDS Proxy를 AWS CloudFormation에서 사용](rds-proxy-cfn.md)
+ [블루/그린 배포와 함께 RDS Proxy 사용](rds-proxy-blue-green.md)

## 리전 및 버전 사용 가능 여부
<a name="rds-proxy.RegionVersionAvailability"></a>

기능 가용성 및 해당 지원은 각 데이터베이스 엔진의 특정 버전 및 AWS 리전에 따라 다릅니다. RDS Proxy에서 사용할 수 있는 Amazon RDS의 버전 및 지역에 대한 자세한 내용은 [Amazon RDS 프록시를 지원하는 리전 및 DB 엔진](Concepts.RDS_Fea_Regions_DB-eng.Feature.RDSProxy.md) 섹션을 참조하십시오.

## RDS 프록시의 할당량 및 제한 사항
<a name="rds-proxy.limitations"></a>

 RDS Proxy에는 다음과 같은 제한 사항이 적용됩니다.
+  각 AWS 계정 ID는 프록시 20개로 제한됩니다. 애플리케이션에 더 많은 프록시가 필요한 경우 AWS Management Console의 **Service Quotas** 페이지에서 증량을 요청하세요. **Service Quotas** 페이지에서 **Amazon Relational Database Service(Amazon RDS)**를 선택하고 **프록시**를 찾아 할당량 증량을 요청합니다. AWS는 자동으로 할당량을 늘리거나 지원의 요청에 대한 검토를 보류할 수 있습니다.
+ 각 프록시에는 최대 200개의 연결된 Secrets Manager 보안 암호가 있을 수 있으므로, 보안 암호를 사용할 때 최대 200개의 사용자 계정으로 연결이 제한됩니다.
+  각 프록시에는 프록시의 구성된 서브넷에서 선택한 두 개의 가용 영역에만 프로비저닝되는 기본 엔드포인트가 있습니다. 세 개 이상의 AZ에 서브넷이 구성된 경우 임의의 두 개가 선택됩니다.
+  각 프록시에 최대 20개의 추가 프록시 엔드포인트를 추가할 수 있습니다. 이러한 추가 엔드포인트는 생성 중에 지정된 모든 가용 영역에 프로비저닝됩니다. 이러한 엔드포인트를 생성, 조회, 수정 및 삭제할 수 있습니다.
+ 복제 구성의 RDS DB 인스턴스의 경우, 프록시는 읽기 전용 복제본이 아닌 라이터 DB 인스턴스에만 연결할 수 있습니다.
+ RDS Proxy는 데이터베이스와 동일한 Virtual Private Cloud(VPC)에 있어야 합니다. 데이터베이스에는 공개적으로 액세스할 수는 있지만 프록시에는 공개적으로 액세스할 수 없습니다. 예를 들어, 로컬 호스트에서 데이터베이스의 프로토타입을 생성하는 경우 프록시에 연결하는 데 필요한 네트워크 요구 사항을 설정하지 않는 한 프록시에 연결할 수 없습니다. 이는 로컬 호스트가 프록시의 VPC 외부에 있기 때문입니다.
+  테넌시가 `dedicated`로 설정된 VPC에서는 RDS 프록시를 사용할 수 없습니다.
+  `Enforce Mode`가 활성화된 암호화 컨트롤이 있는 VPC에서는 RDS 프록시를 사용할 수 없습니다.
+ IPv6 엔드포인트 네트워크 유형의 경우 IPv6만 지원하도록 VPC 및 서브넷을 구성합니다. IPv4 및 IPv6 대상 연결 네트워크 유형 모두에 대해 듀얼 스택 모드를 지원하도록 VPC와 서브넷을 구성합니다.
+ IAM 인증이 활성화된 RDS DB 인스턴스와 함께 RDS 프록시를 사용하는 경우, 프록시는 Secrets Manager에 저장된 IAM 인증 또는 자격 증명을 사용하여 데이터베이스에 연결할 수 있습니다. 프록시에 연결하는 클라이언트는 IAM 자격 증명을 사용하여 인증해야 합니다. 자세한 구성 지침은 [RDS 프록시용 데이터베이스 자격 증명 설정](rds-proxy-secrets-arns.md) 및 [RDS 프록시에 대한 IAM 인증 구성](rds-proxy-iam-setup.md) 섹션을 참조하세요.
+  SSL 호스트 이름 검증을 사용할 경우, 사용자 지정 DNS와 함께 RDS 프록시를 사용할 수 없습니다.
+  각 프록시는 단일 대상 DB 인스턴스 와 연결될 수 있습니다. 그러나 여러 프록시를 동일한 DB 인스턴스 와 연결할 수 있습니다.
+ 텍스트 크기가 16KB보다 큰 문을 사용하면 프록시가 세션을 현재 연결에 고정합니다.
+ 특정 리전에는 프록시를 만들 때 고려해야 하는 가용 영역(AZ) 제한이 있습니다. 미국 동부(버지니아 북부) 리전은 `use1-az3` 가용 영역에서 RDS 프록시를 지원하지 않습니다. 미국 서부(캘리포니아 북부) 리전은 `usw1-az2` 가용 영역에서 RDS 프록시를 지원하지 않습니다. 프록시 생성 시 서브넷을 선택할 때는 위에서 언급한 가용 영역에서 서브넷을 선택하지 않도록 하세요.
+ 현재 RDS 프록시는 모든 전역 조건 컨텍스트 키를 지원하지 않습니다.

  전역 조건 컨텍스트 키에 대한 자세한 내용은 *IAM 사용 설명서*의 [AWS 전역 조건 컨텍스트 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)를 참조하세요.
+ RDS Custom for SQL Server에는 RDS 프록시를 사용할 수 없습니다.
+ 프록시에 데이터베이스 파라미터 그룹 수정을 반영하려면 변경 사항을 즉시 적용하기로 선택한 경우에도 인스턴스 재부팅이 필요합니다. 클러스터 수준 파라미터의 경우 클러스터 전체 재부팅이 필요합니다.
+ 프록시 대상을 등록하면 프록시가 `rdsproxyadmin` DB 사용자를 자동으로 만듭니다. 프록시 기능에 필수적인 보호 대상 사용자입니다. 어떤 방식으로든 `rdsproxyadmin` 사용자의 변조를 방지해야 합니다. `rdsproxyadmin` 사용자 또는 해당 권한을 삭제하거나 수정하면 애플리케이션에서 프록시를 전혀 사용하지 못하게 될 수 있습니다.

각 DB 엔진의 추가 제한 사항은 다음 섹션을 참조하세요.
+ [RDS for MariaDB 추가 제한 사항](#rds-proxy.limitations-mdb)
+ [RDS for Microsoft SQL Server 추가 제한 사항](#rds-proxy.limitations-ms)
+ [RDS for MySQL 추가 제한 사항](#rds-proxy.limitations-my)
+ [RDS for PostgreSQL 추가 제한 사항](#rds-proxy.limitations-pg)

### RDS for MariaDB 추가 제한 사항
<a name="rds-proxy.limitations-mdb"></a>

 RDS for MariaDB 데이터베이스를 사용하는 RDS 프록시에는 다음과 같은 추가 제한 사항이 적용됩니다.
+  현재 모든 프록시는 MariaDB에 대한 포트 3306에서 수신합니다. 프록시는 여전히 데이터베이스 설정에서 지정한 포트를 사용하여 데이터베이스에 연결됩니다.
+ Amazon EC2 인스턴스에서 실행되는 자체 관리형 MariaDB 데이터베이스에는 RDS 프록시를 사용할 수 없습니다.
+ DB 파라미터 그룹의 `read_only` 파라미터가 `1`로 설정된 RDS for MariaDB DB 인스턴스에는 RDS 프록시를 사용할 수 없습니다.
+ RDS 프록시는 MariaDB 압축 모드를 지원하지 않습니다. 예를 들어 `mysql` 명령의 `--compress` 또는 `-C` 옵션에서 사용하는 압축을 지원하지 않습니다.
+ 일부 SQL 문 및 함수는 고정을 야기하지 않고 연결 상태를 변경할 수 있습니다. 최신 고정 동작은 [RDS 프록시 고정 방지](rds-proxy-pinning.md) 섹션을 참조하십시오.
+ RDS 프록시는 MariaDB `auth_ed25519` 플러그인을 지원하지 않습니다.
+ RDS 프록시는 MariaDB 데이터베이스용 전송 계층 보안(TLS) 버전 1.3을 지원하지 않습니다.
+ RDS 프록시가 동일한 데이터베이스 연결을 재사용하여 다른 쿼리를 실행하면 `GET DIAGNOSTIC` 명령을 처리하는 데이터베이스 연결에서 부정확한 정보가 반환될 수 있습니다. 이는 RDS 프록시가 데이터베이스 연결을 멀티플렉싱할 때 발생할 수 있습니다. 자세한 내용은 [RDS Proxy 개념 개요](rds-proxy.howitworks.md#rds-proxy-overview) 섹션을 참조하세요.
+ RDS Proxy는 현재 MariaDB용 `ClientPasswordAuthType`에 대해 `caching_sha2_password` 옵션을 지원하지 않습니다.

**중요**  
 MariaDB 데이터베이스와 관련된 프록시의 경우 초기화 쿼리에서 구성 파라미터 `sql_auto_is_null`을 `true`로 설정하거나 0이 아닌 값으로 설정하지 마시기 바랍니다. 이렇게 하면 잘못된 애플리케이션 동작이 발생할 수 있습니다.

### RDS for Microsoft SQL Server 추가 제한 사항
<a name="rds-proxy.limitations-ms"></a>

 RDS for Microsoft SQL Server 데이터베이스를 사용하는 RDS 프록시에는 다음과 같은 추가 제한 사항이 적용됩니다.
+ 프록시에 대해 만들어야 하는 Secrets Manager 암호의 수는 DB 인스턴스에서 사용하는 콜레이션에 따라 달라집니다. 예를 들어 DB 인스턴스에서 대/소문자를 구분하는 콜레이션을 사용한다고 가정해 보겠습니다. 애플리케이션에서 'Admin'과 'admin'을 모두 허용하는 경우 프록시에는 두 개의 개별 암호가 필요합니다. SQL Server의 콜레이션에 대한 자세한 내용은 [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver16) 설명서를 참조하세요.
+ RDS 프록시는 Active Directory를 사용하는 연결을 지원하지 않습니다.
+ 토큰 속성을 지원하지 않는 클라이언트에는 IAM 인증을 사용할 수 없습니다. 자세한 내용은 [Microsoft SQL Server에 연결할 때 고려할 사항](rds-proxy-connecting.md#rds-proxy-connecting-sqlserver) 섹션을 참조하세요.
+ `@@IDENTITY`, `@@ROWCOUNT` 및 `SCOPE_IDENTITY`의 결과가 항상 정확하지는 않습니다. 차선책은 동일한 세션 문에서 해당 값을 검색하여 올바른 정보를 반환하는지 확인하는 것입니다.
+ 연결이 여러 개의 활성 결과 집합(MARS)을 사용하는 경우 RDS 프록시는 초기화 쿼리를 실행하지 않습니다. 사용자 이름에 대한 자세한 정보는 [Microsoft SQL 설명서](https://docs.microsoft.com/en-us/sql/relational-databases/native-client/features/using-multiple-active-result-sets-mars?view=sql-server-ver16)를 참조하세요.
+ 현재 RDS 프록시는 메이저 버전 SQL Server 2022에서 실행되는 RDS for SQL Server DB 인스턴스를 지원하지 않습니다.**
+ RDS 프록시는 메이저 버전 SQL Server 2014에서 실행되는 RDS for SQL Server DB 인스턴스를 지원하지 않습니다.**
+ RDS 프록시는 하나의 TLS 레코드에서 여러 응답 메시지를 처리할 수 없는 클라이언트 애플리케이션을 지원하지 않습니다.
+ RDS 프록시는 RDS for SQL Server에 대한 엔드 투 엔드 IAM 인증을 지원하지 않습니다.

### RDS for MySQL 추가 제한 사항
<a name="rds-proxy.limitations-my"></a>

 RDS for MySQL 데이터베이스를 사용하는 RDS 프록시에는 다음과 같은 추가 제한 사항이 적용됩니다.
+ `caching_sha2_password` 인증에 대한 RDS Proxy 지원에는 보안(TLS) 연결이 필요합니다.
+ `caching_sha2_password`에 대한 RDS Proxy 지원에는 특정 go-sql 드라이버 버전과의 호환성 문제가 있는 것으로 알려져 있습니다.
+ MySQL 8.4 C 드라이버를 사용할 때 파라미터 수가 준비된 문에서 자리 표시자 수를 초과하는 경우 `mysql_stmt_bind_named_param` API가 잘못된 형식의 패킷을 형성할 수 있습니다. 이로 인해 잘못된 응답이 발생합니다. 자세한 내용은 [MySQL bug report](https://bugs.mysql.com/bug.php?id=116860&thanks=4)를 참조하세요.
+ 현재 모든 프록시는 MySQL에 대한 포트 3306에서 수신합니다. 프록시는 여전히 데이터베이스 설정에서 지정한 포트를 사용하여 데이터베이스에 연결됩니다.
+  EC2 인스턴스에서 실행되는 자체 관리형 MySQL 데이터베이스에는 RDS 프록시를 사용할 수 없습니다.
+  DB 파라미터 그룹의 `read_only` 파라미터가 `1`로 설정된 MySQL DB 인스턴스에는 RDS 프록시를 사용할 수 없습니다.
+ RDS 프록시는 MySQL 압축 모드를 지원하지 않습니다. 예를 들어 `mysql` 명령의 `--compress` 또는 `-C` 옵션에서 사용하는 압축을 지원하지 않습니다.
+ RDS 프록시가 동일한 데이터베이스 연결을 재사용하여 다른 쿼리를 실행하면 `GET DIAGNOSTIC` 명령을 처리하는 데이터베이스 연결에서 부정확한 정보가 반환될 수 있습니다. 이는 RDS 프록시가 데이터베이스 연결을 멀티플렉싱할 때 발생할 수 있습니다.
+ `SET LOCAL` 같은 일부 SQL 문 및 함수는 고정을 야기하지 않고 연결 상태를 변경할 수 있습니다. 최신 고정 동작은 [RDS 프록시 고정 방지](rds-proxy-pinning.md) 섹션을 참조하십시오.
+ 다중 문 쿼리에서는 `ROW_COUNT()` 함수를 사용할 수 없습니다.
+ RDS 프록시는 하나의 TLS 레코드에서 여러 응답 메시지를 처리할 수 없는 클라이언트 애플리케이션을 지원하지 않습니다.
+ RDS Proxy는 MySQL 이중 암호를 지원하지 않습니다.
+ 세션 상태 변수를 설정하도록 RDS DB 파라미터 그룹에서 `init_connect` 파라미터를 구성할 때 RDS Proxy가 예상대로 작동하지 않을 수 있습니다. 대신 프록시를 사용하여 데이터베이스에 연결할 때 세션 초기화 문을 실행하도록 프록시에 대한 초기화 쿼리를 설정합니다.

**중요**  
 MySQL 데이터베이스와 관련된 프록시의 경우 초기화 쿼리에서 구성 파라미터 `sql_auto_is_null`을 `true`로 설정하거나 0이 아닌 값으로 설정하지 마시기 바랍니다. 이렇게 하면 잘못된 애플리케이션 동작이 발생할 수 있습니다.

### RDS for PostgreSQL 추가 제한 사항
<a name="rds-proxy.limitations-pg"></a>

 RDS for PostgreSQL 데이터베이스를 사용하는 RDS 프록시에는 다음과 같은 추가 제한 사항이 적용됩니다.
+ RDS 프록시는 PostgreSQL에 대한 세션 고정 필터를 지원하지 않습니다.
+  현재 모든 프록시는 PostgreSQL에 대한 포트 5432에서 수신합니다.
+ PostgreSQL의 경우 RDS 프록시는 현재 `CancelRequest`를 실행하여 클라이언트에서 쿼리를 취소하는 것을 지원하지 않습니다. Ctrl\+C를 사용하여 대화형 psql 세션에서 장기 실행 쿼리를 취소하는 경우를 예로 들 수 있습니다.
+  PostgreSQL 함수 [lastval](https://www.postgresql.org/docs/current/functions-sequence.html)의 결과가 항상 정확하지는 않습니다. 해결 방법으로 `RETURNING` 절과 함께 [INSERT](https://www.postgresql.org/docs/current/sql-insert.html) 문을 사용합니다.
+ RDS 프록시는 현재 스트리밍 복제 모드를 지원하지 않습니다.
+ RDS for PostgreSQL 16에서는 `scram_iterations` 값을 수정해도 프록시와 데이터베이스 간의 인증 프로세스에만 영향을 줍니다. 특히, `ClientPasswordAuthType`을 `scram-sha-256`으로 구성한 경우 `scram_iterations` 값을 사용자 지정해도 클라이언트-프록시 암호 인증에는 영향을 주지 않습니다. 대신 클라이언트-프록시 암호 인증의 반복 값은 4096으로 고정됩니다.
+ RDS 프록시가 작동하려면 RDS for PostgreSQL 인스턴스에 기본 `postgres` 데이터베이스가 있어야 합니다. 애플리케이션이 다른 데이터베이스를 사용하더라도이 데이터베이스를 삭제하지 마세요.
+ `ALTER ROLE`을 사용하여 `SET ROLE`로 사용자 역할을 변경하는 경우 해당 사용자와 프록시의 후속 연결에서 고정이 발생하는 경우 이 역할 설정이 사용되지 않을 수 있습니다. 이를 방지하려면 프록시를 사용할 때 프록시의 초기화 쿼리에 `SET ROLE`을 사용합니다. 자세한 내용은 [Amazon RDS용 프록시 만들기](rds-proxy-creating.md)에서 **초기화 쿼리** 섹션을 참조하세요.

**중요**  
PostgreSQL 데이터베이스를 사용하는 기존 프록시의 경우, `SCRAM`만 사용하도록 데이터베이스 인증을 수정하면 최대 60초 동안 프록시를 사용할 수 없게 됩니다. 문제를 방지하려면 다음 중 하나를 수행합니다.  
데이터베이스에서 `SCRAM` 및 `MD5` 인증이 모두 허용되는지 확인합니다.
`SCRAM` 인증만 사용하려면 새 프록시를 생성하고, 애플리케이션 트래픽을 새 프록시로 마이그레이션한 다음 이전에 데이터베이스와 연결된 프록시를 삭제합니다.