

# Aurora용 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/AuroraUserGuide/images/Proxy-Overview.png)


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

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

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


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

 RDS 프록시는 지원하는 엔진 버전과 완전히 호환됩니다. 코드 변경 없이 대부분의 애플리케이션에 RDS 프록시를 활성화할 수 있습니다. 지원되는 엔진 버전의 목록은 [Amazon RDS 프록시를 지원하는 리전 및 Aurora DB 엔진](Concepts.Aurora_Fea_Regions_DB-eng.Feature.RDS_Proxy.md) 섹션을 참조하세요.

**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.examples.md)
+ [RDS 프록시 문제 해결](rds-proxy.troubleshooting.md)
+ [RDS Proxy를 AWS CloudFormation에서 사용](rds-proxy-cfn.md)
+ [Aurora 글로벌 데이터베이스에 RDS 프록시 사용](rds-proxy-gdb.md)

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

 데이터베이스 엔진 버전 지원 및 AWS 리전에 지정된 RDS 프록시의 가용성에 대한 자세한 내용은 [Amazon RDS 프록시를 지원하는 리전 및 Aurora DB 엔진](Concepts.Aurora_Fea_Regions_DB-eng.Feature.RDS_Proxy.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개의 추가 프록시 엔드포인트를 추가할 수 있습니다. 이러한 추가 엔드포인트는 생성 중에 지정된 모든 가용 영역에 프로비저닝됩니다. 이러한 엔드포인트를 생성, 조회, 수정 및 삭제할 수 있습니다.
+  Aurora 클러스터에서, 기본 프록시 엔드포인트를 사용하는 모든 연결은 Aurora 라이터 인스턴스에 의해 처리됩니다. 읽기 집약적 워크로드에 대한 로드 밸런싱을 수행하기 위해 프록시에 대한 읽기 전용 엔드포인트를 생성할 수 있습니다. 해당 엔드포인트는 클러스터의 리더 엔드포인트에 연결을 전달합니다. 이렇게 하면 프록시 연결에서 Aurora 읽기 확장성의 이점을 활용할 수 있습니다. 자세한 내용은 [프록시 엔드포인트 개요](rds-proxy-endpoints.md#rds-proxy-endpoints-overview) 섹션을 참조하세요.
+ Aurora Serverless v2 클러스터에서는 RDS 프록시를 사용할 수 있지만, Aurora Serverless v1 클러스터에서는 사용할 수 없습니다.
+ RDS Proxy는 데이터베이스와 동일한 Virtual Private Cloud(VPC)에 있어야 합니다. 데이터베이스에는 공개적으로 액세스할 수는 있지만 프록시에는 공개적으로 액세스할 수 없습니다. 예를 들어, 로컬 호스트에서 데이터베이스의 프로토타입을 생성하는 경우 프록시에 연결하는 데 필요한 네트워크 요구 사항을 설정하지 않는 한 프록시에 연결할 수 없습니다. 이는 로컬 호스트가 프록시의 VPC 외부에 있기 때문입니다.
**참고**  
Aurora DB 클러스터의 경우 VPC 간 액세스를 활성화할 수 있습니다. 이렇게 하려면 프록시를 위한 추가 엔드포인트를 생성하고 해당 엔드포인트에 다른 VPC, 서브넷 및 보안 그룹을 지정합니다. 자세한 내용은 [VPC 간에 Aurora 데이터베이스 액세스](rds-proxy-endpoints.md#rds-proxy-cross-vpc) 섹션을 참조하십시오.
+  테넌시가 `dedicated`로 설정된 VPC에서는 RDS 프록시를 사용할 수 없습니다.
+  `Enforce Mode`가 활성화된 암호화 컨트롤이 있는 VPC에서는 RDS 프록시를 사용할 수 없습니다.
+ IPv6 엔드포인트 네트워크 유형의 경우 IPv6만 지원하도록 VPC 및 서브넷을 구성합니다. IPv4 및 IPv6 대상 연결 네트워크 유형 모두에 대해 듀얼 스택 모드를 지원하도록 VPC와 서브넷을 구성합니다.
+ IAM 인증이 활성화된 Aurora 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 엔진의 추가 제한 사항은 다음 섹션을 참조하세요.
+ [Aurora MySQL 추가 제한 사항](#rds-proxy.limitations-my)
+ [Aurora PostgreSQL 추가 제한 사항](#rds-proxy.limitations-pg)

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

 Aurora 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이 아닌 값으로 설정하지 마시기 바랍니다. 이렇게 하면 잘못된 애플리케이션 동작이 발생할 수 있습니다.

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

 Aurora PostgreSQL 데이터베이스를 사용하는 RDS 프록시에는 다음과 같은 추가 제한 사항이 적용됩니다.
+ RDS 프록시는 PostgreSQL에 대한 세션 고정 필터를 지원하지 않습니다.
+  현재 모든 프록시는 PostgreSQL에 대한 포트 5432에서 수신합니다.
+ PostgreSQL의 경우 RDS 프록시는 현재 `CancelRequest`를 실행하여 클라이언트에서 쿼리를 취소하는 것을 지원하지 않습니다. Ctrl\$1C를 사용하여 대화형 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 프록시가 작동하려면 RDS for PostgreSQL 인스턴스에 기본 `postgres` 데이터베이스가 있어야 합니다. 애플리케이션이 다른 데이터베이스를 사용하더라도이 데이터베이스를 삭제하지 마세요.
+ `ALTER ROLE`을 사용하여 `SET ROLE`로 사용자 역할을 변경하는 경우 해당 사용자와 프록시의 후속 연결에서 고정이 발생하는 경우 이 역할 설정이 사용되지 않을 수 있습니다. 이를 방지하려면 프록시를 사용할 때 프록시의 초기화 쿼리에 `SET ROLE`을 사용합니다. 자세한 내용은 [Amazon Aurora용 프록시 만들기](rds-proxy-creating.md)에서 **초기화 쿼리** 섹션을 참조하세요.

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