

# PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결
<a name="USER_ConnectToPostgreSQLInstance"></a>

Amazon RDS가 DB 인스턴스를 프로비저닝한 후에는 표준 SQL 클라이언트 애플리케이션을 사용해 인스턴스에 연결할 수 있습니다. 연결하려면 먼저 DB 인스턴스를 사용할 수 있고 액세스할 수 있어야 합니다. VPC 외부에서 인스턴스에 연결할 수 있는지 여부는 Amazon RDS DB 인스턴스를 생성한 방법에 따라 달라집니다.
+ DB 인스턴스를 *퍼블릭*으로 생성한 경우 VPC 외부의 디바이스 및 Amazon EC2 인스턴스를 데이터베이스에 연결할 수 있습니다.
+ DB 인스턴스를 *프라이빗*으로 생성한 경우 Amazon VPC 내의 Amazon EC2 인스턴스 및 디바이스만 데이터베이스에 연결할 수 있습니다.

DB 인스턴스가 퍼블릭인지 프라이빗인지 확인하려면 AWS Management Console을 사용하여 인스턴스의 **연결 & 보안(Connectivity & security)** 탭을 봅니다. **보안(Security)** 아래에서 "퍼블릭 액세스 가능(Publicly accessible)" 값이 아니요(No)이면 프라이빗이고 예(Yes)이면 퍼블릭입니다.

다양한 Amazon RDS 및 Amazon VPC 구성과 이러한 구성이 접근성에 미치는 영향에 대한 자세한 내용은 [VPC에서 DB 인스턴스에 액세스하는 시나리오](USER_VPC.Scenarios.md) 섹션을 참조하세요.

**Contents**
+ [

## psql 클라이언트 설치
](#install-psql)
+ [

## RDS for PostgreSQL DB 인스턴스에 대한 연결 정보 찾기
](#postgresql-endpoint)
+ [

# pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결
](USER_ConnectToPostgreSQLInstance.pgAdmin.md)
+ [

# psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결
](USER_ConnectToPostgreSQLInstance.psql.md)
+ [

# Amazon Web Services(AWS) JDBC 드라이버를 사용하여 RDS for PostgreSQL에 연결
](PostgreSQL.Connecting.JDBCDriver.md)
+ [

# Amazon Web Services(AWS) Python 드라이버를 사용하여 RDS for PostgreSQL에 연결
](PostgreSQL.Connecting.PythonDriver.md)
+ [

# RDS for PostgreSQL 인스턴스에 대한 연결 문제 해결
](USER_ConnectToPostgreSQLInstance.Troubleshooting.md)
  + [

## Error – FATAL: database *name* does not exist
](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname)
  + [

## Error – Could not connect to server: Connection timed out
](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout)
  + [

## 보안 그룹 액세스 규칙 오류
](USER_ConnectToPostgreSQLInstance.Troubleshooting.md#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules)

## psql 클라이언트 설치
<a name="install-psql"></a>

EC2 인스턴스에서 DB 인스턴스에 연결하려면 EC2 인스턴스에 PostgreSQL 클라이언트를 설치하면 됩니다. 최신 버전의 psql 클라이언트를 Amazon Linux 2023에 설치하려면 다음 명령을 실행하세요.

```
sudo dnf install postgresql<version number>
```

최신 버전의 psql 클라이언트를 Amazon Linux 2에 설치하려면 다음 명령을 실행하세요.

```
sudo yum install -y postgresql
```

최신 버전의 psql 클라이언트를 Ubuntu에 설치하려면 다음 명령을 실행하세요.

```
sudo apt install -y postgresql-client
```

## RDS for PostgreSQL DB 인스턴스에 대한 연결 정보 찾기
<a name="postgresql-endpoint"></a>

DB 인스턴스를 사용할 수 있고 액세스할 수 있는 경우 SQL 클라이언트 애플리케이션에 다음 정보를 제공하여 연결할 수 있습니다.
+ 인스턴스의 호스트 이름(DNS 이름) 역할을 하는 DB 인스턴스 엔드포인트입니다.
+ DB 인스턴스 서버가 수신 대기하는 포트입니다. PostgreSQL의 경우 기본 포트는 5432입니다.
+ DB 인스턴스의 사용자 이름 및 암호입니다. 기본으로 설정된 PostgreSQL의 '기본 사용자 이름'은 `postgres`입니다.
+ 데이터베이스의 이름 및 암호입니다(DB 이름).

 이러한 세부 정보는 AWS Management Console, AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 명령 또는 Amazon RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 작업을 사용하여 확인할 수 있습니다.

**AWS Management Console을 사용하여 엔드포인트, 포트 번호, DB 이름을 찾는 방법**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)에서 Amazon RDS 콘솔을 엽니다.

1. RDS 콘솔을 연 다음 **데이터베이스**를 선택해 DB 인스턴스의 목록을 표시합니다.

1. 세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.

1. **Connectivity & security(연결 및 보안)** 탭에서 엔드포인트를 복사합니다. 또한 포트 번호를 적어 둡니다. DB 인스턴스에 연결하려면 엔드포인트와 포트 번호가 모두 필요합니다.  
![\[RDS 콘솔에서 엔드포인트 가져오기\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/PostgreSQL-endpoint.png)

1. **구성** 탭에 나와 있는 DB 이름을 적어 둡니다. RDS for PostgreSQL 인스턴스를 만들 때 데이터베이스를 생성한 경우 DB 이름 아래에 이름이 표시됩니다. 데이터베이스를 만들지 않은 경우 DB 이름에 대시(‐)가 표시됩니다.  
![\[RDS 콘솔에서 DB 이름 가져오기\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/PostgreSQL-db-name.png)

다음은 PostgreSQL DB 인스턴스에 연결하는 두 가지 방법입니다. 첫 번째 예에서는 PostgreSQL의 잘 알려진 오픈 소스 관리 및 개발 도구인 pgAdmin을 사용합니다. 두 번째 예에서는 PostgreSQL 설치에 속하는 명령행 유틸리티인 psql을 사용합니다.

# pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결
<a name="USER_ConnectToPostgreSQLInstance.pgAdmin"></a>

오픈 소스 도구인 pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결할 수 있습니다. 클라이언트 컴퓨터에 로컬 PostgreSQL 인스턴스가 없어도 [http://www.pgadmin.org/](http://www.pgadmin.org/)에서 pgAdmin을 다운로드하여 설치할 수 있습니다.

**pgAdmin을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하는 방법**

1. 클라이언트 컴퓨터에서 pgAdmin 애플리케이션을 실행합니다.

1. [**Dashboard**] 탭에서 [**Add New Server**]를 선택합니다.

1. [**Create - Server**] 대화 상자에서 pgAdmin의 서버를 식별하기 위해 [**General**] 탭에 이름을 입력합니다.

1. [**Connection**] 탭에서 사용자 DB 인스턴스에 있는 다음 정보를 입력합니다.
   + **Host(호스트)**에 엔드포인트를 입력합니다(예: `mypostgresql.c6c8dntfzzhgv0.us-east-2.rds.amazonaws.com`).
   + **포트**에 할당된 포트를 입력합니다.
   + **사용자 이름(Username)**에 DB 인스턴스를 생성할 때 입력한 사용자 이름을 입력합니다('기본 사용자 이름'을 기본값에서 변경한 경우 `postgres`).
   + **암호**에 DB 인스턴스를 생성할 떄 입력했던 암호를 입력합니다.  
![\[DB 인스턴스를 만들 때 입력한 암호 입력\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Postgres-Connect01.png)

1. **저장**을 선택합니다.

   연결 문제는 [RDS for PostgreSQL 인스턴스에 대한 연결 문제 해결](USER_ConnectToPostgreSQLInstance.Troubleshooting.md)를 참조하십시오.

1. pgAdmin 브라우저에서 데이터베이스에 액세스 하려면, [**Servers**], DB 인스턴스, [**Databases**]를 확장합니다. DB 인스턴스의 데이터베이스 이름을 선택합니다.  
![\[pgAdmin 브라우저에서 DB 인스턴스의 데이터베이스 이름 선택\]](http://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/images/Postgres-Connect02.png)

1. SQL 명령을 입력할 수 있는 패널을 열려면, **도구**, **쿼리 도구**를 선택합니다.

# psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결
<a name="USER_ConnectToPostgreSQLInstance.psql"></a>

psql 명령줄 유틸리티의 로컬 인스턴스를 사용하여 RDS for PostgreSQL DB 인스턴스에 연결할 수 있습니다. 클라이언트 컴퓨터에 PostgreSQL 또는 psql 클라이언트를 설치해야 할 수도 있습니다.

[PostgreSQL](https://www.postgresql.org/download/) 웹 사이트에서 PostgreSQL 클라이언트를 다운로드할 수 있습니다. psql을 설치하려면 운영 체제 버전별 지침을 따르세요.

psql을 사용하여 RDS for PostgreSQL DB 인스턴스에 연결하려면 호스트(DNS) 정보, 액세스 자격 증명 및 데이터베이스 이름을 제공해야 합니다.

다음 형식 중 하나를 사용하여 RDS for PostgreSQL DB 인스턴스에 연결합니다. 연결이 되면 암호를 입력하라는 메시지가 표시됩니다. 배치 작업이나 스크립트에는 `--no-password` 옵션을 사용합니다. 이 옵션은 전체 세션에 대해 설정됩니다.

**참고**  
서버에 암호 인증이 필요하고 다른 소스에서 암호를 사용할 수 없는 경우 `--no-password`를 사용한 연결 시도가 실패합니다. 자세한 내용은 [psql 설명서](https://www.postgresql.org/docs/13/app-psql.html)를 참조하세요.

이 DB 인스턴스에 처음 연결하는 경우 또는 RDS for PostgreSQL 인스턴스에 대한 데이터베이스를 아직 생성하지 않은 경우 '기본 사용자 이름' 및 암호를 사용하여 **postgres** 데이터베이스에 연결할 수 있습니다.

Unix는 다음 형식을 사용합니다.

```
psql \
   --host=<DB instance endpoint> \
   --port=<port> \
   --username=<master username> \
   --password \
   --dbname=<database name>
```

Windows는 다음 형식을 사용합니다.

```
psql ^
   --host=<DB instance endpoint> ^
   --port=<port> ^
   --username=<master username> ^
   --password ^
   --dbname=<database name>
```

예를 들어 다음 명령은 가상 자격 증명을 사용해 `mypgdb`이라는 PostgreSQL DB 인스턴스에서 `mypostgresql`라는 데이터베이스에 연결합니다.

```
psql --host=mypostgresql.c6c8mwvfdgv0.us-west-2.rds.amazonaws.com --port=5432 --username=awsuser --password --dbname=mypgdb 
```

# Amazon Web Services(AWS) JDBC 드라이버를 사용하여 RDS for PostgreSQL에 연결
<a name="PostgreSQL.Connecting.JDBCDriver"></a>

Amazon Web Services(AWS) JDBC 드라이버는 고급 JDBC 래퍼로 설계되었습니다. 이 래퍼는 기존 JDBC 드라이버의 기능을 보완하고 확장합니다. 이 드라이버는 커뮤니티 pgJDBC 드라이버와 드롭인 호환됩니다.

AWS JDBC 드라이버를 설치하려면 `CLASSPATH` 애플리케이션에 있는 AWS JDBC 드라이버 .jar 파일을 추가하고 해당 커뮤니티 드라이버에 대한 참조를 보관해 두세요. 다음과 같이 해당 연결 URL 접두사를 업데이트하세요.
+ `jdbc:postgresql://`\$1`jdbc:aws-wrapper:postgresql://`

AWS JDBC 드라이버에 대한 자세한 내용 및 사용 방법에 대한 전체 지침은 [Amazon Web Services (AWS) JDBC Driver GitHub repository](https://github.com/awslabs/aws-advanced-jdbc-wrapper)를 참조하세요.

# Amazon Web Services(AWS) Python 드라이버를 사용하여 RDS for PostgreSQL에 연결
<a name="PostgreSQL.Connecting.PythonDriver"></a>

Amazon Web Services(AWS) Python 드라이버는 고급 Python 래퍼로 설계되었습니다. 이 래퍼는 오픈 소스 Psycopg 드라이버의 기능을 보완하고 확장합니다. AWS Python 드라이버는 Python 버전 3.8 이상을 지원합니다. `pip` 명령을 사용하여 `psycopg` 오픈 소스 패키지와 함께 `aws-advanced-python-wrapper` 패키지를 설치할 수 있습니다.

AWS Python 드라이버에 대한 자세한 내용 및 사용 방법에 대한 전체 지침은 [Amazon Web Services (AWS) JDBC Python GitHub repository](https://github.com/awslabs/aws-advanced-python-wrapper)를 참조하세요.

# RDS for PostgreSQL 인스턴스에 대한 연결 문제 해결
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting"></a>

**Topics**
+ [

## Error – FATAL: database *name* does not exist
](#USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname)
+ [

## Error – Could not connect to server: Connection timed out
](#USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout)
+ [

## 보안 그룹 액세스 규칙 오류
](#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules)

## Error – FATAL: database *name* does not exist
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-DBname"></a>

연결할 때 `FATAL: database name does not exist` 같은 오류가 발생하면 `--dbname` 옵션에 기본 데이터베이스 이름 **postgres**를 사용해봅니다.

## Error – Could not connect to server: Connection timed out
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-timeout"></a>

DB 인스턴스에 연결할 수 없도록 만드는 가장 많은 오류가 `Could not connect to server: Connection timed out.`입니다. 이 오류 메시지가 표시되면 다음을 확인합니다.
+ 사용한 호스트 이름이 DB 인스턴스 엔드포인트이고 포트 번호가 올바른지 확인하십시오.
+ 외부 연결을 허용하도록 DB 인스턴스의 퍼블릭 액세스 가능성이 **예(Yes)**로 설정되어 있는지 확인합니다. **퍼블릭 액세스(Public access)** 설정을 수정하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+ 데이터베이스에 연결하는 사용자에게 CONNECT 액세스 권한이 있는지 확인합니다. 다음 쿼리를 사용하여 데이터베이스에 대한 연결 액세스를 제공할 수 있습니다.

  ```
  GRANT CONNECT ON DATABASE database name TO username;
  ```
+ DB 인스턴스에 할당된 보안 그룹에 모든 연결이 통과할 수 있는 방화벽을 통한 액세스를 허용하는 데 필요한 규칙이 있는지 확인하십시오. 기본값 포트 5432를 사용해 DB 인스턴스를 생성했는데, 기업 방화벽 규칙이 외부 회사 디바이스의 해당 포트 연결을 차단하는 경우를 예로 들 수 있습니다.

  이 오류를 수정하려면 다른 포트를 사용하도록 DB 인스턴스를 수정해야 합니다. 또 DB 인스턴스에 적용된 보안 그룹의 새로운 포트에 대한 연결이 허용되어야 합니다. **데이터베이스 포트(Database port)** 설정을 수정하려면 [Amazon RDS DB 인스턴스 수정](Overview.DBInstance.Modifying.md) 섹션을 참조하세요.
+ 사용하려는 포트가 PostgreSQL의 로컬 인스턴스 또는 컴퓨터에서 실행되는 다른 서비스에 의해 이미 사용 중인지 확인합니다. 예를 들어 동일한 포트(기본값은 5432)에서 실행 중인 로컬 PostgreSQL 데이터베이스가 있는 경우 RDS for PostgreSQL DB 인스턴스에 성공적으로 연결되지 않을 수 있습니다. 포트가 사용 가능한지 확인하거나 가능하면 다른 포트 번호로 연결을 시도합니다.
+ 또한 [보안 그룹 액세스 규칙 오류](#USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules) 단원도 참조하십시오.

## 보안 그룹 액세스 규칙 오류
<a name="USER_ConnectToPostgreSQLInstance.Troubleshooting-AccessRules"></a>

지금까지 가장 많이 발생하고 있는 연결 문제는 DB 인스턴스에 할당된 보안 그룹의 액세스 규칙과 관련이 있습니다. DB 인스턴스를 만들 때 기본 보안 그룹을 사용한 경우 인스턴스에 액세스할 수 있도록 허용하는 규칙이 보안 그룹에 없을 확률이 큽니다.

연결이 되도록 만들려면, 생성 때 DB 인스턴스에 할당한 보안 그룹이 DB 인스턴스 액세스를 허용해야 합니다. 예를 들어, DB 인스턴스가 VPC 내부에서 생성된 경우 이 인스턴스의 VPC 보안 그룹에서 연결 권한을 부여해야 합니다. 애플리케이션이 실행되고 있는 디바이스 또는 Amazon EC2 인스턴스의 연결을 승인하지 않는 보안 그룹을 사용하여 DB 인스턴스를 생성했는지 여부를 확인합니다.

보안 그룹에서 인바운드 규칙을 추가하거나 편집할 수 있습니다. **소스**로 **내 IP**를 선택하면 브라우저에서 감지된 IP 주소에서 DB 인스턴스에 액세스할 수 있습니다. 자세한 내용은 [보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup) 섹션을 참조하세요.

또한, DB 인스턴스가 VPC 외부에서 생성된 경우에는 이 인스턴스의 데이터베이스 보안 그룹에서 이 연결을 승인해야 합니다.

Amazon RDS 보안 그룹에 대한 자세한 내용은 [보안 그룹을 통한 액세스 제어](Overview.RDSSecurityGroups.md) 단원을 참조하십시오.