

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 컨테이너화된 환경에서 연결 풀 및 수명 주기 관리
<a name="best-practices-ecs-eks-connections"></a>

컨테이너(Kubernetes의 포드)가 자주 시작, 중지 및 확장되는 컨테이너화된 환경에서는 Neptune에 대한 연결을 효과적으로 관리하는 것이 필수적입니다. Neptune은 여러 WebSocket 연결 제한을 적용합니다.
+ 각 인스턴스 유형에는 최대 동시 [WebSocket 연결](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets) 수가 있습니다.
+ 20\~25분 동안 사용하지 않으면 유휴 연결이 닫힙니다.
+ IAM 인증을 사용하면 활동에 관계없이 10일 후에 연결이 강제로 종료됩니다([WebSocket 연결 제한](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets) 참조).

일부 드라이버는 유휴 연결 해제를 방지하기 위해 주기적 연결 유지 하트비트를 지원합니다. 예를 들어 Gremlin Java 드라이버는 서버에 주기적 ping을 `keepAliveInterval` 전송합니다. 사용 가능한 연결 유지 설정과 Neptune의 유휴 제한 시간과 상호 작용하는 방법을 확인하려면 특정 드라이버의 구성 옵션을 참조하세요.

이러한 제한을 이해하면 롤링 배포, 오토 스케일링 및 컨테이너 재활용과 같은 컨테이너 오케스트레이션 패턴에 적합한 연결 처리를 설계하는 데 도움이 됩니다. Java Gremlin 드라이버와의 연결 관리에 대한 일반적인 지침은 [클라이언트를 닫아 연결 제한 방지](best-practices-gremlin-java-close-connections.md) 및 섹션을 참조하세요[장애 조치 후 새로운 연결 생성](best-practices-gremlin-java-new-connection.md).

**컨테이너 종료 시 연결 닫기**

컨테이너가 종료되기 전에 그래프 클라이언트를 닫는 `SIGTERM` 핸들러를 추가하여 정상적인 종료를 구현합니다. 예를 들어 Neo4j 드라이버의 경우 Gremlin Java의 `cluster.close()`, Go 또는 Python`driverRemoteConnection.close()`의 Gremlin의 또는 Bolt의 `driver.close()`를 호출합니다. Kubernetes에서는 특히 롤링 업데이트 중에 `SIGTERM`가 전송되기 전에 `preStop` 후크를 사용하여 연결을 드레이닝합니다.

**참고**  
Docker와 Amazon ECS는 컨테이너의 `SIGTERM` PID 1에만 전송합니다. 애플리케이션이 신호를 수신하도록 `tini`하려면 Dockerfile에서 exec 양식(예:가 `ENTRYPOINT ["java", "-jar", "app.jar"]` 아님`ENTRYPOINT java -jar app.jar`) 또는와 같은 init 프로세스를 사용합니다.

**컨테이너당 단일 클라이언트 인스턴스 사용**

동일한 컨테이너에서 여러 Gremlin `DriverRemoteConnection` 또는 Bolt `neo4j.Driver` 인스턴스를 생성하면 연결 사용량이 곱해집니다. 컨테이너의 모든 스레드에서 단일 클라이언트 인스턴스를 공유합니다. 클라이언트 객체는 스레드 세이프입니다.

**플릿에 상대적인 연결 풀 크기 조정**

모든 컨테이너의 총 연결이 Neptune 인스턴스 연결 제한을 초과하지 `maxConnectionPoolSize` 않도록를 설정합니다. 예를 들어 각각 스레드가 8개인 컨테이너 20개를 실행하는 경우 20 × 풀 크기가 [인스턴스 유형의 인스턴스 제한 내에 유지되도록 컨테이너당 풀 크기를 계산합니다](https://docs.aws.amazon.com/neptune/latest/userguide/limits.html#limits-websockets). 연결 풀 크기 구성에 대한 자세한 내용은 섹션을 참조하세요[`maxInProcessPerConnection` 및 `maxSimultaneousUsagePerConnection`을 동일한 값으로 설정](best-practices-gremlin-java-maxes.md).

**연결 대기 제한 시간 설정**

Java Gremlin 드라이버에서 `maxWaitForConnection`를 5\~10초와 같은 적절한 값으로 구성합니다. 기본값은 종종 무한 또는 매우 길기 때문에 명확한 오류와 함께 빠르게 실패하지 않고 풀이 소진될 때 스레드가 중단됩니다. 모든 언어 드라이버가이 설정을 지원하는 것은 아닙니다. 드라이버 설명서에서 동등한 구성 옵션을 확인하세요.