PostgreSQL 원격 접속 시 could not connect to server: Connection refused 에러 해결법

현재 나는 PostgreSQL를 GUI로 편하게 관리하기 위해 Postico라는 Mac 전용 툴을 사용하고 있다.

Postico를 통해 AWS EC2 서버의 Ubuntu 14.04 환경에서 돌아가고 있는 PostgreSQL에 connect를 시도하자 아래와 같이 접근이 거부되었다.

이를 해결하기 위해선 기본적으로 돼있는 PostgreSQL의 설정들을 좀 변경해주어야 한다.

먼저 아래의 경로로 접속하여 postgresql.conf 파일을 연다(Ubuntu 14.04 기준).

$ sudo vi ~/etc/postgresql/[POSTGRESQL VERSION]/main/postgresql.conf

/listen_addresses 로 검색을 해 # listen_addresses = 'localhost'라고 설정돼있는 부분을 찾는다(파일을 건드린 적이 없다면 59번째 줄).
그리고 그 부분의 주석을 해제한 후, listen_addresses = '*' 로 바꾸어 원격에서 접속이 가능하게 해준다.

바꾼 설정이 적용되도록 PostgreSQL을 재시작한다.

$ sudo service postgresql restart

다시 Postico에서 연결을 시도하면, 이번엔 다른 에러가 나타난다.

현재 나의 IP 주소가 pg_hba.conf entry 에 없다고 한다. 따라서 pg_hba.conf의 파일에 entry를 추가해주어야 한다.

$ sudo vi ~/etc/postgresql/[POSTGRESQL VERSION]/main/pg_hba.conf

모든 IP 주소에 대한 접근을 허용하기 위해 파일의 맨 밑에 다음과 같이 한 줄 추가해주었다. 단, md5로 설정하여 비밀번호를 통해서만 접근이 가능하도록 하였다.

바꾼 설정이 적용되도록 다시 PostgreSQL을 재시작하면,

$ sudo service postgresql restart

정상적으로 접속된다.

참고