

# Amazon RDS Data API를 사용한 세션 관리
<a name="data-api.session-management"></a>

RDS Data API는 데이터베이스 연결 풀을 유지하고 이를 여러 직접 호출 간에 재사용함으로써 연결 오버헤드를 줄입니다. 연결을 재사용하기 전에 RDS Data API는 세션 상태를 초기화합니다. 이 초기화 방식은 데이터베이스 엔진에 따라 다릅니다. PostgreSQL의 경우, RDS Data API는 `DISCARD ALL` 문을 실행하여 임시 테이블, 준비된 문, 세션 수준 파라미터와 같은 세션 상태를 지웁니다. MySQL의 경우, RDS Data API는 연결을 초기화합니다(`COM_RESET_CONNECTION`과 동일한 작업).

이러한 초기화는 엔진이 관리하는 세션 수준 속성들을 대상으로 하지만, 확장 기능에 의해 생성된 상태까지 모두 정리된다고 보장할 수는 없습니다. 확장은 이러한 정리 작업이 수행될 때 일반적인 세션 수준 속성과는 다르게 동작할 수 있으며, 초기화 이후에도 데이터베이스 연결상에 해당 상태가 그대로 남아 있을 수 있습니다. RDS Data API는 연결을 재사용하기 때문에, 확장이 남겨둔 상태는 이를 생성한 특정 직접 호출에만 국한되지 않으며, 나중에 동일한 연결이 이후 직접 호출에 재사용될 때도 그대로 남아 있을 수 있습니다.

`dblink`가 이러한 동작을 보여주는 한 가지 예입니다. `DISCARD ALL`은 `dblink` 확장을 통해 열린 연결을 닫지 않으므로, 특정 직접 호출에서 생성된 명명된 `dblink` 연결은 해당 데이터베이스 연결이 재사용될 때도 여전히 열려 있을 수 있습니다. 엔진의 세션 상태 범위 밖에서 리소스를 점유하는 다른 확장들도 이와 유사하게 동작할 수 있습니다.

RDS Data API와 함께 확장을 사용하는 경우, 세션 초기화 과정을 통해 확장이 생성한 상태가 해제될 것이라고 기대해서는 안 됩니다. 대신, 확장 자체에서 제공하는 정리 함수를 사용하여 동일한 트랜잭션 내에서 해당 상태를 생성하고 해제해야 합니다. `dblink`의 경우, `dblink_disconnect`를 사용하여 각 연결을 닫아주어야 합니다.