

 AWS SDK for Java 1.x는 2025년 12월 31일에 end-of-support되었습니다. 새로운 기능, 가용성 개선 및 보안 업데이트를 계속 받으려면 [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html)로 마이그레이션하는 것이 좋습니다.

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

# DNS 이름 조회를 위한 JVM TTL 설정
<a name="jvm-ttl-dns"></a>

Java 가상 머신(JVM)은 DNS 이름 조회를 캐시합니다. JVM은 호스트 이름을 IP 주소로 확인하는 경우 *Time-To-Live*(TTL)라고 하는 지정된 기간 동안 IP 주소를 캐시합니다.

 AWS 리소스는 가끔 변경되는 DNS 이름 항목을 사용하므로 TTL 값이 5초인 JVM을 구성하는 것이 좋습니다. 이렇게 하면 리소스의 IP 주소가 변경될 때 애플리케이션이 DNS를 다시 쿼리하여 리소스의 새 IP 주소를 수신하고 사용할 수 있습니다.

일부 Java 구성에서는 JVM이 다시 시작될 때까지 DNS 항목을 새로 고치지 *않도록* JVM 기본 TTL이 설정되기도 합니다. 따라서 애플리케이션이 실행되는 동안 AWS 리소스의 IP 주소가 변경되면 JVM을 *수동으로 다시* 시작하고 캐시된 IP 정보가 새로 고쳐질 때까지 해당 리소스를 사용할 수 없습니다. 이 경우 캐시된 IP 정보를 정기적으로 새로 고치도록 JVM의 TTL을 설정해야 합니다.

## JVM TTL을 설정하는 방법
<a name="how-to-set-the-jvm-ttl"></a>

JVM의 TTL을 수정하려면 [networkaddress.cache.ttl](https://docs.oracle.com/en/java/javase/17/core/java-networking.html#GUID-A680DADB-C4C1-40F1-B568-D9A97C917F5D) 보안 속성 값을 설정합니다. `networkaddress.cache.ttl`는 시스템 *속성이 아닌 보안* 속성입니다. 즉, `-D` 명령줄 플래그로 설정할 수 없습니다.

### 옵션 1: 애플리케이션에서 프로그래밍 방식으로 설정
<a name="set-ttl-programmatically"></a>

애플리케이션 시작 [https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/Security.html](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/security/Security.html) 초기, AWS SDK 클라이언트가 생성되기 전 및 네트워크 요청이 이루어지기 전에를 호출합니다.

```
import java.security.Security;

public class MyApplication {
    public static void main(String[] args) {
        Security.setProperty("networkaddress.cache.ttl", "5");

        // ... create SDK clients and run application
    }
}
```

### 옵션 2: java.security 파일에서 설정
<a name="set-ttl-java-security-file"></a>

Java 8용 `$JAVA_HOME/jre/lib/security/java.security` 파일 또는 Java 11 이상의 `$JAVA_HOME/conf/security/java.security` 파일에서 `networkaddress.cache.ttl` 속성을 설정합니다.

다음은 5초로 설정된 TTL 캐시를 보여주는 `java.security` 파일의 코드 조각입니다.

```
#
# The Java-level namelookup cache policy for successful lookups:
#
# any negative value: caching forever
# any positive value: the number of seconds to cache an address for
# zero: do not cache
#
...
networkaddress.cache.ttl=5
...
```

`$JAVA_HOME` 환경 변수로 표시되는 JVM에서 실행되는 모든 애플리케이션은이 설정을 사용합니다.

### 옵션 3: JDK 시스템 속성 대체 사용(명령줄)
<a name="set-ttl-system-property"></a>

보안 구성 또는 코드를 수정할 수 없는 경우 JDK 시스템 속성을 사용할 수 있습니다. 보안 속성이 정의되지 않은 경우 폴백 역할을 합니다.
+ `sun.net.inetaddr.ttl` - 성공적인 조회 제어(긍정 TTL)
+ `sun.net.inetaddr.negative.ttl` - 실패한 조회 제어(음의 TTL)

```
java -Dsun.net.inetaddr.ttl=5 -Dsun.net.inetaddr.negative.ttl=1 -jar myapp.jar
```

**참고**  
이는 "향후 릴리스에서 지원되지 않을 수 있음"이라는 프라이빗 속성으로 [Oracle Java 8 네트워킹 속성](https://docs.oracle.com/javase/8/docs/technotes/guides/net/properties.html) 참조에 문서화된 JDK 내부 속성입니다. 가능하면 옵션 1-2를 사용합니다.