

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

# Java를 사용하여 Secrets Manager 보안 암호 값 가져오기
<a name="retrieving-secrets-java"></a>

애플리케이션에서 `GetSecretValue` 또는 SDK`BatchGetSecretValue`를 호출하여 보안 암호를 검색할 수 있습니다. AWS SDKs 그러나 클라이언트 측 캐싱을 사용하여 보안 암호 값을 캐싱하는 것이 좋습니다. 보안 암호 캐싱은 속도를 향상시키고 비용을 절감합니다.

보안 암호의 자격 증명을 사용하여 데이터베이스에 연결하려는 경우, 기본 JDBC 드라이버를 래핑하는 Secrets Manager SQL Connection 드라이버를 사용할 수 있습니다. 또한 이 방법은 클라이언트 측 캐싱을 사용하므로, Secrets Manager API 직접 호출 비용을 줄일 수 있습니다.

**Topics**
+ [

# 클라이언트 측 캐싱과 함께 Java를 사용하여 Secrets Manager 보안 암호 값 가져오기
](retrieving-secrets_cache-java.md)
+ [

# AWS Secrets Manager 보안 암호의 자격 증명과 함께 JDBC를 사용하여 SQL 데이터베이스에 연결
](retrieving-secrets_jdbc.md)
+ [

# Java AWS SDK를 사용하여 Secrets Manager 보안 암호 값 가져오기
](retrieving-secrets-java-sdk.md)

# 클라이언트 측 캐싱과 함께 Java를 사용하여 Secrets Manager 보안 암호 값 가져오기
<a name="retrieving-secrets_cache-java"></a>

보안 암호를 검색할 때 Secret Manager Java 기반 캐싱 구성 요소를 사용하여 나중에 사용할 수 있도록 캐싱할 수 있습니다. 캐싱된 보안 암호를 검색하는 것이 Secret Manager에서 검색하는 것보다 빠릅니다. Secrets Manager API를 호출하는 데는 비용이 발생하므로 캐시를 사용하면 비용을 줄일 수 있습니다. 암호를 검색할 수 있는 모든 방법은 [보안 암호 가져오기](retrieving-secrets.md)을(를) 참조하세요.

캐시 정책은 LRU(가장 오랫동안 사용되지 않음)이므로, 캐시에서 보안 암호를 폐기해야 하는 경우 가장 오랫동안 사용되지 않은 보안 암호가 삭제됩니다. 기본적으로 캐시는 보안 암호를 매시간 새로 고칩니다. 캐시에서 [보안 암호를 새로 고치는 주기](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md#retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getCacheItemTTL)를 구성하고 [보안 암호 검색에 연결](retrieving-secrets_cache-java-ref_SecretCacheHook.md)하여 더 많은 기능을 추가할 수 있습니다.

캐시 참조가 해제되면 캐시는 가비지 수집을 강제로 적용하지 않습니다. 캐시 구현에는 캐시 무효화가 포함되지 않습니다. 캐시 구현은 캐시 자체에 중점을 두며, 보안을 강화하거나 보안에 초점을 맞추지 않습니다. 캐시에서 항목 암호화와 같은 추가 보안이 필요한 경우 제공된 인터페이스 및 추상 메서드를 사용하세요.

이 구성 요소를 사용하려면 다음이 필요합니다.
+ Java 8 이상 개발 환경입니다. Oracle 웹 사이트의 [Java SE 다운로드](https://www.oracle.com/technetwork/java/javase/downloads/index.html)를 참조하세요.

소스 코드를 다운로드하려면 GitHub의 [Secrets Manager Java 기반 캐싱 클라이언트 구성 요소](https://github.com/aws/aws-secretsmanager-caching-java)를 참조하세요.

프로젝트에 구성 요소를 추가하려면 Maven pom.xml 파일에 다음 dependency를 포함합니다. Maven에 대한 자세한 내용은 Apache Maven Project 웹 사이트의 [시작 안내서](https://maven.apache.org/guides/getting-started/index.html)를 참조하세요.

```
<dependency>
  <groupId>com.amazonaws.secretsmanager</groupId>
  <artifactId>aws-secretsmanager-caching-java</artifactId>
  <version>1.0.2</version>
</dependency>
```

**필요한 권한:**
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

자세한 내용은 [권한 참조](auth-and-access.md#reference_iam-permissions) 단원을 참조하십시오.

**Topics**
+ [

# SecretCache
](retrieving-secrets_cache-java-ref_SecretCache.md)
+ [

# SecretCacheConfiguration
](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md)
+ [

# SecretCacheHook
](retrieving-secrets_cache-java-ref_SecretCacheHook.md)

**Example 보안 암호 검색**  
다음 코드 예제에서는 보안 암호 문자열을 검색하는 Lambda 함수를 보여줍니다. 이 예제는 함수 핸들러 외부의 캐시를 인스턴스화하는 [모범 사례](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html)를 따르므로 Lambda 함수를 다시 호출하는 경우 API를 계속 호출하지 않습니다.  

```
package com.amazonaws.secretsmanager.caching.examples;
    
    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import com.amazonaws.services.lambda.runtime.LambdaLogger;
    
    import com.amazonaws.secretsmanager.caching.SecretCache;
    
    public class SampleClass implements RequestHandler<String, String> {
    
         private final SecretCache cache  = new SecretCache();
    
         @Override public String handleRequest(String secretId,  Context context) {
             final String secret  = cache.getSecretString(secretId);
    
            // Use the secret, return success;
    
        }
    }
```

# SecretCache
<a name="retrieving-secrets_cache-java-ref_SecretCache"></a>

Secret Manager에서 요청한 보안 암호에 대한 인 메모리 캐시. [getSecretString](#retrieving-secrets_cache-java-ref_SecretCache-methods-getSecretString) 또는 [getSecretBinary](#retrieving-secrets_cache-java-ref_SecretCache-methods-getSecretBinary)를 사용하여 캐시에서 보안 암호를 검색합니다. 생성자의 [SecretCacheConfiguration](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md) 객체에 전달하여 캐시 설정을 구성할 수 있습니다.

예제를 포함한 자세한 내용은 [클라이언트 측 캐싱과 함께 Java를 사용하여 Secrets Manager 보안 암호 값 가져오기](retrieving-secrets_cache-java.md)을 참조하세요.

## Constructors
<a name="retrieving-secrets_cache-java-ref_SecretCache-constructors"></a>

`public SecretCache()`  
`SecretCache` 객체에 대한 기본 생성자.

`public SecretCache(AWSSecretsManagerClientBuilder builder)`  
제공된 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClientBuilder.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClientBuilder.html)로 생성한 Secrets Manager 클라이언트를 사용하여 새 캐시를 생성합니다. 이 생성자를 사용하여 Secrets Manager 클라이언트를 사용자 지정합니다(예: 특정 리전 또는 엔드포인트를 사용하도록 사용자 지정).

`public SecretCache(AWSSecretsManager client)`  
제공된 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)를 사용하여 새 보안 암호 캐시를 생성합니다. 이 생성자를 사용하여 Secrets Manager 클라이언트를 사용자 지정합니다(예: 특정 리전 또는 엔드포인트를 사용하도록 사용자 지정).

`public SecretCache(SecretCacheConfiguration config)`  
제공된 `SecretCacheConfiguration`을 사용하여 새 보안 암호 캐시를 생성합니다.

## 메서드
<a name="retrieving-secrets_cache-java-ref_SecretCache-methods"></a>

### getSecretString
<a name="retrieving-secrets_cache-java-ref_SecretCache-methods-getSecretString"></a>

`public String getSecretString(final String secretId)`

Secrets Manager에서 문자열 보안 암호를 검색합니다. [https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true](https://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true)을 반환합니다.

### getSecretBinary
<a name="retrieving-secrets_cache-java-ref_SecretCache-methods-getSecretBinary"></a>

`public ByteBuffer getSecretBinary(final String secretId)`

Secrets Manager에서 이진 보안 암호를 검색합니다. [https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html](https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html)을 반환합니다.

### refreshNow
<a name="retrieving-secrets_cache-java-ref_SecretCache-methods-refreshNow"></a>

`public boolean refreshNow(final String secretId) throws InterruptedException`

캐시를 강제로 새로 고칩니다. 오류 없이 새로 고침이 완료되는 경우 `true`를 반환하고 그렇지 않으면 `false`를 반환합니다.

### close
<a name="retrieving-secrets_cache-java-ref_SecretCache-methods-close"></a>

`public void close()`

캐시를 닫습니다.

# SecretCacheConfiguration
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration"></a>

캐싱된 보안 암호에 대한 최대 캐시 크기 및 유지 시간(TTL)과 같은 [SecretCache](retrieving-secrets_cache-java-ref_SecretCache.md)에 대한 캐시 구성 옵션.

## 생성자
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_constructor"></a>

`public SecretCacheConfiguration`

`SecretCacheConfiguration` 객체에 대한 기본 생성자.

## 메서드
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods"></a>

### getClient
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getClient"></a>

`public AWSSecretsManager getClient()`

캐시가 보안 암호를 검색할 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)를 반환합니다.

### setClient
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-setClient"></a>

`public void setClient(AWSSecretsManager client)`

캐시가 보안 암호를 검색할 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)를 설정합니다.

### getCacheHook
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getCacheHook"></a>

`public SecretCacheHook getCacheHook()`

캐시 업데이트를 연결하는 데 사용되는 [SecretCacheHook](retrieving-secrets_cache-java-ref_SecretCacheHook.md) 인터페이스를 반환합니다.

### setCacheHook
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-setCacheHook"></a>

`public void setCacheHook(SecretCacheHook cacheHook)`

캐시 업데이트를 연결하는 데 사용되는 [SecretCacheHook](retrieving-secrets_cache-java-ref_SecretCacheHook.md) 인터페이스를 설정합니다.

### getMaxCacheSize
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getMaxCacheSize"></a>

`public int getMaxCacheSize()`

최대 캐시 크기를 반환합니다. 기본값은 보안 암호 1,024개입니다.

### setMaxCacheSize
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-setMaxCacheSize"></a>

`public void setMaxCacheSize(int maxCacheSize)`

최대 캐시 크기를 설정합니다. 기본값은 보안 암호 1,024개입니다.

### getCacheItemTTL
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getCacheItemTTL"></a>

`public long getCacheItemTTL()`

캐싱된 항목에 대한 TTL을 밀리초 단위로 반환합니다. 캐싱된 보안 암호가 이 TTL을 초과하면 캐시는 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)에서 보안 암호의 새 사본을 검색합니다. 기본값은 밀리초 단위로 1시간입니다.

TTL 이후에 보안 암호가 요청되면 캐시가 보안 암호를 동기식으로 새로 고칩니다. 동기식 새로 고침이 실패하면 캐시는 오래된 보안 암호를 반환합니다.

### setCacheItemTTL
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-setCacheItemTTL"></a>

`public void setCacheItemTTL(long cacheItemTTL)`

캐싱된 항목에 대한 TTL을 밀리초 단위로 설정합니다. 캐싱된 보안 암호가 이 TTL을 초과하면 캐시는 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)에서 보안 암호의 새 사본을 검색합니다. 기본값은 밀리초 단위로 1시간입니다.

### getVersionStage
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-getVersionStage"></a>

`public String getVersionStage()`

캐싱할 보안 암호의 버전을 반환합니다. 자세한 내용은 [보안 암호 버전](whats-in-a-secret.md#term_version)을 참조하세요. 기본값은 ` "AWSCURRENT"`입니다.

### setVersionStage
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-setVersionStage"></a>

`public void setVersionStage(String versionStage)`

캐싱할 보안 암호의 버전을 설정합니다. 자세한 내용은 [보안 암호 버전](whats-in-a-secret.md#term_version)을 참조하세요. 기본값은 `"AWSCURRENT"`입니다.

### SecretCacheConfiguration withClient
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-withClient"></a>

`public SecretCacheConfiguration withClient(AWSSecretsManager client)`

보안 암호를 검색할 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)를 설정합니다. 새 설정으로 업데이트된 `SecretCacheConfiguration` 객체를 반환합니다.

### SecretCacheConfiguration withCacheHook
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-withCacheHook"></a>

`public SecretCacheConfiguration withCacheHook(SecretCacheHook cacheHook)`

인 메모리 캐시를 연결하는 데 사용되는 인터페이스를 설정합니다. 새 설정으로 업데이트된 `SecretCacheConfiguration` 객체를 반환합니다.

### SecretCacheConfiguration withMaxCacheSize
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-withMaxCacheSize"></a>

`public SecretCacheConfiguration withMaxCacheSize(int maxCacheSize)`

최대 캐시 크기를 설정합니다. 새 설정으로 업데이트된 `SecretCacheConfiguration` 객체를 반환합니다.

### SecretCacheConfiguration withCacheItemTTL
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-withCacheItemTTL"></a>

`public SecretCacheConfiguration withCacheItemTTL(long cacheItemTTL)`

캐싱된 항목에 대한 TTL을 밀리초 단위로 설정합니다. 캐싱된 보안 암호가 이 TTL을 초과하면 캐시는 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/AWSSecretsManagerClient.html)에서 보안 암호의 새 사본을 검색합니다. 기본값은 밀리초 단위로 1시간입니다. 새 설정으로 업데이트된 `SecretCacheConfiguration` 객체를 반환합니다.

### SecretCacheConfiguration withVersionStage
<a name="retrieving-secrets_cache-java-ref_SecretCacheConfiguration_methods-withVersionStage"></a>

`public SecretCacheConfiguration withVersionStage(String versionStage)`

캐싱할 보안 암호의 버전을 설정합니다. 자세한 내용은 [보안 암호 버전](whats-in-a-secret.md#term_version)을 참조하세요. 새 설정으로 업데이트된 `SecretCacheConfiguration` 객체를 반환합니다.

# SecretCacheHook
<a name="retrieving-secrets_cache-java-ref_SecretCacheHook"></a>

캐시에 저장 중인 보안 암호에 대한 작업을 수행하기 위해 [SecretCache](retrieving-secrets_cache-java-ref_SecretCache.md)에 연결되는 인터페이스.

## put
<a name="retrieving-secrets_cache-java-ref_SecretCacheHook-put"></a>

`Object put(final Object o)`

캐시에 저장할 객체를 준비합니다.

캐시에 저장할 객체를 반환합니다.

## 시작
<a name="retrieving-secrets_cache-java-ref_SecretCacheHook-get"></a>

`Object get(final Object cachedObject)`

캐싱된 객체에서 객체를 추출합니다.

캐시에서 객체를 반환합니다.

# AWS Secrets Manager 보안 암호의 자격 증명과 함께 JDBC를 사용하여 SQL 데이터베이스에 연결
<a name="retrieving-secrets_jdbc"></a>

Java 애플리케이션에서는 Secrets Manager SQL Connection 드라이버를 사용하여 Secrets Manager에 저장된 자격 증명으로 MySQL, PostgreSQL, Oracle, MSSQLServer, Db2, Redshift 데이터베이스에 연결할 수 있습니다. 각 드라이버는 기본 JDBC 드라이버를 래핑하므로 JDBC 호출을 사용하여 데이터베이스에 액세스할 수 있습니다. 그러나 연결을 위한 사용자 이름과 암호를 전달하는 대신 보안 암호의 ID를 제공합니다. 드라이버는 Secrets Manager를 호출하여 보안 암호 값을 검색한 다음 보안 암호의 보안 인증 정보를 사용하여 데이터베이스에 연결합니다. 또한 드라이버는 [Java 클라이언트 측 캐싱 라이브러리](retrieving-secrets_cache-java.md)를 사용하여 자격 증명을 캐싱하므로 향후 연결에는 Secret Manager에 대한 호출이 필요하지 않습니다. 기본적으로 캐시는 매시간, 그리고 보안 암호가 교체될 때마다 새로 고침됩니다. 캐시를 구성하려면 [SecretCacheConfiguration](retrieving-secrets_cache-java-ref_SecretCacheConfiguration.md) 섹션을 참조하세요.

[GitHub](https://github.com/aws/aws-secretsmanager-jdbc )에서 소스 코드를 다운로드할 수 있습니다.

Secrets Manager SQL Connection 드라이버를 사용하려면:
+ 애플리케이션이 Java 8 이상이어야 합니다.
+ 보안 암호는 다음 형식 중 하나이어야 합니다:
  + [예상 JSON 구조의 데이터베이스 보안 암호](reference_secret_json_structure.md). 형식을 확인하려면 Secrets Manager 콘솔에서 보안 암호를 확인하고 **보안 암호 값 검색(Retrieve secret value)**을 선택합니다. 또는에서 [get-secret-value](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/get-secret-value.html)를 AWS CLI호출합니다.
  + Amazon RDS [관리형 보안 암호](integrating_how-services-use-secrets_RDS.md). 이 유형의 암호에 대해서는 연결을 설정할 때 엔드포인트 및 포트를 지정해야 합니다.
  + Amazon Redshift [관리형 보안 암호](integrating_how-services-use-secrets_RS.md)입니다. 이 유형의 암호에 대해서는 연결을 설정할 때 엔드포인트 및 포트를 지정해야 합니다.

데이터베이스가 다른 리전으로 복제되는 경우 다른 리전의 복제본 데이터베이스에 연결하려면 연결을 생성할 때 리전 엔드포인트 및 포트를 지정합니다. 리전 연결 정보를 보안 암호에 추가 키/값 쌍으로 저장하거나, SSM Parameter Store 파라미터에 저장하거나, 코드 구성에 저장할 수 있습니다.

프로젝트에 드라이버를 추가하려면 Maven 빌드 파일 `pom.xml`에 드라이버에 대한 다음 종속성을 추가합니다. 자세한 내용은 Maven Central Repository 웹 사이트의 [Secrets Manager SQL Connection Library](https://search.maven.org/artifact/com.amazonaws.secretsmanager/aws-secretsmanager-jdbc)를 참조하세요.

```
<dependency>
    <groupId>com.amazonaws.secretsmanager</groupId>
    <artifactId>aws-secretsmanager-jdbc</artifactId>
    <version>1.0.12</version>
</dependency>
```

드라이버는 [https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html)을 사용합니다. Amazon EKS에서 드라이버를 실행하는 경우 서비스 계정 역할 대신 실행 중인 노드의 보안 인증 정보를 가져올 수 있습니다. 이 사항을 처리하려면 Gradle 또는 Maven 프로젝트 파일에 `com.amazonaws:aws-java-sdk-sts` 버전 1을 종속 항목으로 추가하세요.

`secretsmanager.properties` 파일에서 AWS PrivateLink DNS 엔드포인트 URL 및 리전을 설정하려면:

```
drivers.vpcEndpointUrl = endpoint URL
drivers.vpcEndpointRegion = endpoint region
```

기본 리전을 재정의하려면 `AWS_SECRET_JDBC_REGION` 환경 변수를 설정하거나 `secretsmanager.properties` 파일을 다음과 같이 변경하세요.

```
drivers.region = region
```

**필요한 권한:**
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:GetSecretValue`

자세한 내용은 [권한 참조](auth-and-access.md#reference_iam-permissions) 단원을 참조하십시오.

**Topics**
+ [

## 데이터베이스에 대한 연결 설정
](#retrieving-secrets_jdbc_example)
+ [

## 엔드포인트 및 포트를 지정하여 연결 설정
](#retrieving-secrets_jdbc_example_replica)
+ [

## c3p0 연결 풀링을 사용하여 연결 설정
](#retrieving-secrets_jdbc_example_c3po)
+ [

## c3p0 연결 풀링을 사용하여 엔드포인트 및 포트 지정을 통한 연결 설정
](#retrieving-secrets_jdbc_example_c3p0_replica)

## 데이터베이스에 대한 연결 설정
<a name="retrieving-secrets_jdbc_example"></a>

다음 예시에서는 보안 암호의 자격 증명 및 연결 정보를 사용하여 데이터베이스에 대한 연결을 설정하는 방법을 보여줍니다. 연결이 설정되면 JDBC 호출을 사용하여 데이터베이스에 액세스할 수 있습니다. 자세한 내용은 Java 설명서 웹 사이트의 [JDBC Basics](https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html)를 참조하세요.

------
#### [ MySQL ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ PostgreSQL ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Oracle ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerOracleDriver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ MSSQLServer ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerMSSQLServerDriver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Db2 ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerDb2Driver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Redshift ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerRedshiftDriver" ).newInstance();

// Retrieve the connection info from the secret using the secret ARN
String URL = "secretId";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------

## 엔드포인트 및 포트를 지정하여 연결 설정
<a name="retrieving-secrets_jdbc_example_replica"></a>

다음 예에서는 지정된 엔드포인트 및 포트와 함께 보안 암호의 보안 인증 정보를 사용하여 데이터베이스에 대한 연결을 설정하는 방법을 보여줍니다.

[Amazon RDS 관리형 보안 암호](integrating_how-services-use-secrets_RDS.md)에는 데이터베이스의 엔드포인트 및 포트가 포함되지 않습니다. Amazon RDS에서 관리하는 보안 암호의 마스터 보안 인증을 사용하여 데이터베이스에 연결하려면 이를 해당 코드로 지정해야 합니다.

[다른 리전으로 복제된 보안 암호](replicate-secrets.md)는 리전 데이터베이스에 대한 연결 지연 시간을 줄여 줄 수 있지만, 소스 보안 암호와 다른 연결 정보는 포함하지 않습니다. 각 복제본은 소스 보안 암호의 복사본입니다. 리전 연결 정보를 보안 암호에 저장하려면 엔드포인트에 대한 키/값 쌍 및 리전에 대한 포트 정보를 추가합니다.

연결이 설정되면 JDBC 호출을 사용하여 데이터베이스에 액세스할 수 있습니다. 자세한 내용은 Java 설명서 웹 사이트의 [JDBC Basics](https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html)를 참조하세요.

------
#### [ MySQL ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:mysql://example.com:3306";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ PostgreSQL ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:postgresql://example.com:5432/database";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Oracle ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerOracleDriver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:oracle:thin:@example.com:1521/ORCL";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ MSSQLServer ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.secretsmanager.sql.AWSSecretsManagerMSSQLServerDriver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:sqlserver://example.com:1433";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Db2 ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.com.rproxy.goskope.com.amazonaws.secretsmanager.sql.AWSSecretsManagerDb2Driver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:db2://example.com:50000";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------
#### [ Redshift ]

```
// Load the JDBC driver
Class.forName( "com.amazonaws.com.rproxy.goskope.com.amazonaws.secretsmanager.sql.AWSSecretsManagerRedshiftDriver" ).newInstance();

// Set the endpoint and port. You can also retrieve it from a key/value pair in the secret.
String URL = "jdbc-secretsmanager:redshift://example.com:5439";

// Populate the user property with the secret ARN to retrieve user and password from the secret
Properties info = new Properties( );
info.put( "user", "secretId" );

// Establish the connection
conn = DriverManager.getConnection(URL, info);
```

------

## c3p0 연결 풀링을 사용하여 연결 설정
<a name="retrieving-secrets_jdbc_example_c3po"></a>

다음 예에서는 드라이버를 사용하여 보안 암호에서 보안 인증 정보 및 연결 정보를 검색하는 `c3p0.properties` 파일로 연결 풀을 설정하는 방법을 보여줍니다. `user`와 `jdbcUrl`에 대해 보안 암호 ID를 입력하여 연결 풀을 구성합니다. 그런 다음 풀에서 연결을 검색하여 다른 데이터베이스 연결과 동일하게 사용할 수 있습니다. 자세한 내용은 Java 설명서 웹 사이트의 [JDBC Basics](https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html)를 참조하세요.

c3p0에 대한 자세한 내용은 Machinery For Change 웹 사이트의 [c3p0](https://www.mchange.com/projects/c3p0/)을 참조하세요.

------
#### [ MySQL ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver
c3p0.jdbcUrl=secretId
```

------
#### [ PostgreSQL ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver
c3p0.jdbcUrl=secretId
```

------
#### [ Oracle ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerOracleDriver
c3p0.jdbcUrl=secretId
```

------
#### [ MSSQLServer ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMSSQLServerDriver
c3p0.jdbcUrl=secretId
```

------
#### [ Db2 ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerDb2Driver
c3p0.jdbcUrl=secretId
```

------
#### [ Redshift ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerRedshiftDriver
c3p0.jdbcUrl=secretId
```

------

## c3p0 연결 풀링을 사용하여 엔드포인트 및 포트 지정을 통한 연결 설정
<a name="retrieving-secrets_jdbc_example_c3p0_replica"></a>

다음 예에서는 지정된 엔드포인트 및 포트와 함께 드라이버를 사용하여 보안 암호의 보안 인증 정보를 검색하는 `c3p0.properties` 파일로 연결 풀을 설정하는 방법을 보여줍니다. 그런 다음 풀에서 연결을 검색하여 다른 데이터베이스 연결과 동일하게 사용할 수 있습니다. 자세한 내용은 Java 설명서 웹 사이트의 [JDBC Basics](https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html)를 참조하세요.

[Amazon RDS 관리형 보안 암호](integrating_how-services-use-secrets_RDS.md)에는 데이터베이스의 엔드포인트 및 포트가 포함되지 않습니다. Amazon RDS에서 관리하는 보안 암호의 마스터 보안 인증을 사용하여 데이터베이스에 연결하려면 이를 해당 코드로 지정해야 합니다.

[다른 리전으로 복제된 보안 암호](replicate-secrets.md)는 리전 데이터베이스에 대한 연결 지연 시간을 줄여 줄 수 있지만, 소스 보안 암호와 다른 연결 정보는 포함하지 않습니다. 각 복제본은 소스 보안 암호의 복사본입니다. 리전 연결 정보를 보안 암호에 저장하려면 엔드포인트에 대한 키/값 쌍 및 리전에 대한 포트 정보를 추가합니다.

------
#### [ MySQL ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMySQLDriver
c3p0.jdbcUrl=jdbc-secretsmanager:mysql://example.com:3306
```

------
#### [ PostgreSQL ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerPostgreSQLDriver
c3p0.jdbcUrl=jdbc-secretsmanager:postgresql://example.com:5432/database
```

------
#### [ Oracle ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerOracleDriver
c3p0.jdbcUrl=jdbc-secretsmanager:oracle:thin:@example.com:1521/ORCL
```

------
#### [ MSSQLServer ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerMSSQLServerDriver
c3p0.jdbcUrl=jdbc-secretsmanager:sqlserver://example.com:1433
```

------
#### [ Db2 ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerDb2Driver
c3p0.jdbcUrl=jdbc-secretsmanager:db2://example.com:50000
```

------
#### [ Redshift ]

```
c3p0.user=secretId
c3p0.driverClass=com.amazonaws.secretsmanager.sql.AWSSecretsManagerRedshiftDriver
c3p0.jdbcUrl=jdbc-secretsmanager:redshift://example.com:5439
```

------

# Java AWS SDK를 사용하여 Secrets Manager 보안 암호 값 가져오기
<a name="retrieving-secrets-java-sdk"></a>

애플리케이션에서 `GetSecretValue` 또는 SDK`BatchGetSecretValue`를 호출하여 보안 암호를 검색할 수 있습니다. AWS SDKs 그러나 클라이언트 측 캐싱을 사용하여 보안 암호 값을 캐싱하는 것이 좋습니다. 보안 암호 캐싱은 속도를 향상시키고 비용을 절감합니다.
+ 보안 암호에 데이터베이스 자격 증명을 저장하는 경우, [Secrets Manager SQL 연결 드라이버](retrieving-secrets_jdbc.md)를 사용하여 보안 암호의 자격 증명으로 데이터베이스에 연결합니다.
+ 다른 보안 암호 유형의 경우 [Secrets Manager Java 기반 캐싱 구성 요소](retrieving-secrets_cache-java.md)를 사용하거나 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/model/GetSecretValueResult.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/model/GetSecretValueResult.html) 또는 [https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/model/BatchGetSecretValueResult.html](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/secretsmanager/model/BatchGetSecretValueResult.html)를 사용하여 SDK를 직접 호출합니다.

다음 코드 예시는 `GetSecretValue`의 사용 방법을 보여 줍니다.

**필요한 권한:**`secretsmanager:GetSecretValue`

```
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueRequest;
import software.amazon.awssdk.services.secretsmanager.model.GetSecretValueResponse;
import software.amazon.awssdk.services.secretsmanager.model.SecretsManagerException;

/**
 * Before running this Java V2 code example, set up your development
 * environment, including your credentials.
 *
 * For more information, see the following documentation topic:
 *
 * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
 *
 * We recommend that you cache your secret values by using client-side caching.
 *
 * Caching secrets improves speed and reduces your costs. For more information,
 * see the following documentation topic:
 *
 * https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html
 */
public class GetSecretValue {
    public static void main(String[] args) {
        final String usage = """

                Usage:
                    <secretName>\s

                Where:
                    secretName - The name of the secret (for example, tutorials/MyFirstSecret).\s
                """;

        if (args.length != 1) {
            System.out.println(usage);
            System.exit(1);
        }

        String secretName = args[0];
        Region region = Region.US_EAST_1;
        SecretsManagerClient secretsClient = SecretsManagerClient.builder()
                .region(region)
                .build();

        getValue(secretsClient, secretName);
        secretsClient.close();
    }

    public static void getValue(SecretsManagerClient secretsClient, String secretName) {
        try {
            GetSecretValueRequest valueRequest = GetSecretValueRequest.builder()
                    .secretId(secretName)
                    .build();

            GetSecretValueResponse valueResponse = secretsClient.getSecretValue(valueRequest);
            String secret = valueResponse.secretString();
            System.out.println(secret);

        } catch (SecretsManagerException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
    }
}
```