본문 바로가기
개발자 💻/AWS

[RDS] PostgreSQL DB 인스턴스에 psql 을 이용하여 연결하기

by 블루로봇 2023. 8. 10.

PostgreSQL 엔진을 실행하는 DB 인스턴스 with RDS

뿌우우

그동안 AWS RDS를 통해 Postgres를 올려두고 사용하고 있었습니다.
그러던 중, 오늘 급하게 Postgres DB에 직접 접속해야 하는 일이 발생하였습니다.

만약 로컬이나 EC2 내에 직접 실행한 DB 인스턴스였다면 해당 환경에서 접속, 예를 들어, docker 컨테이너였으면 컨테이너 명령어로 접속하면 될텐데, "AWS RDS에 올라간 DB 인스턴스에는 어떻게 접근하지?" 라는 생각을 하실 수 있습니다.

다행히도 친절한 AWS가 그 방법을 안내하고 있습니다.

 

PostgreSQL 데이터베이스 엔진을 실행하는 DB 인스턴스에 연결 - Amazon Relational Database Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

안타깝게도 오늘 저에게 주어진 것은 MacOS 뿐입니다. 위 글에 각 OS 환경에 따라 접속하는 방법이 두루두루 안내되어 있지만, MacOS에서는 어떻게 해야 하는지 안내되어 있지 않습니다.

그러던 중 psql 을 통하여 원격 접속을 할 수 있다는 방법을 알게 되었고, 이를 통해 Postgres 접속을 위한 MacOS의 몸부림이 시작되었다고 할 수 있겠습니다. 본 문서는 다음과 같은 환경에서 수행된 내용입니다.

상황 요약

  • 현재 로컬 환경은 MacOS 입니다.
  • AWS RDS에 Postgres DB가 구동 중입니다.
  • 해당 Postgres 는 퍼블릭 액세스가 허용되어 있습니다.
  • psql 를 설치하고, 해당 Postgres 에 원격 접속해야 합니다.

 

psql 설치

잠깐 psql 이란?
psql 은 PostgreSQL 데이터베이스 시스템과 상호작용하는 대화형 명령 도구입니다. psql 은 원하는 Postgres 데이터베이스에 연결하고 SQL(Structed Query Language) 쿼리를 실행하는 등 데이터베이스 관련 작업을 수행할 수 있도록 합니다. 흔히 이야기하는 CLI, 명령줄 인터페이스를 통해 사용자가 데이터베이스에 대한 생성, 조회, 수정, 삭제 등을 수행할 수 있도록 제공합니다.

 

혹시나 psql 이 이미 깔려있을 수도 있습니다. 다음 명령어를 통해 psql 이 존재하는지 확인해 봅니다.

$ psql --version

 

버전이 출력되지 않았다면, psql 을 설치하도록 합니다.
다양한 방법들로 psql 을 설치할 수 있는데, 어떤 페이지들에선 Postgres를 설치하면 psql 이 설치된다고 합니다.

 

PostgreSQL: Downloads

 

www.postgresql.org

 

그런데 Postgres를 설치했지만, 여전히 터미널에서 psql 명령어를 사용할 수 없었습니다. 아마 어떤 추가적인 설정이 필요한 것이거나 제가 설치를 잘못한 것이겠죠? 거기다가 Postgres를 로컬에 설치한다니 불편한 마음을 감출 수 없었습니다. 컨테이너나 RDS를 이용하면 되는 것을, 로컬에 Postgres가 설치 및 구동되고 말았습니다. 포트번호 5432를 뺏겨버린 이 슬픔...

일단 위 문제는 멈추고 다시 psql 설치를 위해 따라가 보겠습니다.

 

How to install psql on Mac, Ubuntu, Debian, Windows

psql is the standard command line interface for interacting with a PostgreSQL or TimescaleDB instance. Here we explain how to install psql on various platforms.

www.timescale.com

 

이 페이지가 안내하는 방법이 가장 직진인 방법인 것 같습니다.
다음 명령어를 통해 brewpsql 을 설치해 주도록 합니다.

$ brew install libpq

 

libpq 는 postgres, psql 등 관련된 기능들을 제공합니다.

 

이후 아래의 명령어를 통해, 새로운 명령어 사용을 위한 심볼 링크를 연결해 주도록 합니다.

$ brew link --force libpq

 

혹시 PATH 경로 추가가 필요하다면 MacOS의 Zsh 라는 가정 하에 아래 명령어를 실행해 줍니다.

$ echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
$ source ~/.zshrc

 

그리고 나중에 문제가 생겨 brew link 를 해제해야 한다면 반대로 아래 명령어를 이용해 주세요.

$ brew unlink libpq

 

자, 이제 확인해 보도록 합니다.

$ psql --version

이렇게 나왔다면 아주 기분 좋은 결과입니다.
psql 설치가 완료되었습니다.

 

PostgreSQL 원격 연결

이제 Postgres 에 연결하도록 합니다.

AWS RDS에서 원하는 Postgres DB 인스턴스의 상세 정보를 획득하도록 합니다.

AWS RDS 에서 확인 가능한 데이터베이스의 상세 정보 (연결 & 보안 탭)

우리에게 필요한 정보는 다음과 같습니다.

  • 엔드포인트 : 접속할 DB 의 외부 주소입니다.
  • 포트번호 : 접속할 DB 의 오픈 포트번호입니다.

특히, 퍼블릭 액세스 가능 여부를 확인해 주세요. 퍼블릭 액세스가 되어 있어야 지금 하는 psql 을 통한 원격 연결을 수행할 수 있습니다. 또한 보안 그룹 설정을 확인하여 당연히 외부로 통하는 보안이 열려있음을 확인하시기 바랍니다.

 

AWS RDS 에서 확인 가능한 데이터베이스의 상세 정보 (구성 탭)

다음으로 구성 탭에서 마스터 사용자 이름을 획득합니다.
마스터 사용자 이름은 초기에 DB 인스턴스를 생성하면서 결정하게 됩니다.
기본값으로는 postgres 값이 설정됩니다.

또한, DB에 연결해야 하므로 추가적으로 DB Name비밀번호를 알아야 합니다.
DB Name 또한 실제로 다루는 데이터베이스 이름이 있다면 그 이름을, 아니라면 기본값으로 postgres 값이 설정됩니다.

비밀번호는... 알고 계시겠죠?

 

psql 을 이용하여 Postgres DB 인스턴스에 연결

자 이제 모든 정보가 모였으니, psql 을 이용하여 접속합니다.

해당 명령어는 AWS에서 제공한 명령어를 이용합니다.

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

 

 

항목 설명
host 획득한 "엔드포인트"를 입력합니다.
port 획득한 "포트번호"를 입력합니다.
username 획득한 "마스터 사용자 이름"을 입력합니다.
password 입력하지 않아도 명령어를 실행하면 물어봅니다.
dbname 알고 있는 데이터베이스 이름을 입력합니다.

 

명령어를 실행하면, 비밀번호를 입력하도록 물어봅니다.
비밀번호를 입력해주면 드디어!

접속이 완료된 것을 확인할 수 있습니다.
명령줄 인터페이스이기 때문에 원하는 psql 명령어를 입력하여 원격의 Postgres DB를 조율할 수 있습니다.

만약 이미 생성된 데이터베이스들의 목록을 보고 싶으시다구요?

postgres=> \l

List를 보기 위한 명령어를 이용하여 데이터베이스 목록을 조회해 보시길 바랍니다.

 

고생하셨습니다. 저는 이제 psql 명령어를 공부하러 가보도록 하겠습니다.
이 글을 읽으시는 오늘도 즐거운 하루 보내시길 바랍니다.