
PostgreSQL listen_addresses 기준 정리
listen_addresses는 PostgreSQL 서버가 어떤 TCP/IP 주소에서 접속을 받을지 정하는 설정이다. 2026년 6월 8일 기준 current 문서는 PostgreSQL 18.4 문서이며, 이 문서에서 기본값은 localhost로 안내된다. 즉 기본 상태에서는 같은 서버 안에서의 loopback TCP 연결만 허용된다.
실무에서는 원격 접속을 열어야 하는지, 모든 인터페이스를 한 번에 열어도 되는지, 그리고 pg_hba.conf와 각각 무엇이 다른지가 가장 자주 헷갈린다. 이 글은 PostgreSQL 공식 문서 기준으로 listen_addresses의 의미, 자주 쓰는 값, 안전하게 고르는 기준을 정리한다.
listen_addresses는 무엇을 제어할까?
공식 문서에서 listen_addresses는 서버가 클라이언트 애플리케이션의 연결 시도를 받을 TCP/IP 주소 목록을 지정하는 값으로 설명된다. 값 형식은 호스트명이나 숫자 IP 주소의 쉼표 구분 목록이다.
중요한 점은 이 설정이 "누가 로그인할 수 있는지"를 정하는 것이 아니라 "어느 네트워크 인터페이스에서 연결 시도 자체를 받을지"를 정한다는 점이다. 인증과 허용 범위의 세부 제어는 여전히 pg_hba.conf가 맡는다.
기본값과 자주 쓰는 값은?
| 값 | 공식 문서 의미 | 실무 해석 |
|---|---|---|
localhost |
로컬 loopback TCP 연결만 받는다. | 단일 서버 안에서만 접속하는 기본값으로 가장 보수적이다. |
* |
사용 가능한 모든 IP 인터페이스를 연다. | 간단하지만 노출 범위가 넓어져서 주소 필터링을 다른 계층에 더 의존하게 된다. |
0.0.0.0 |
모든 IPv4 주소를 연다. | IPv4만 대상으로 전체 개방이 필요할 때 쓴다. |
:: |
모든 IPv6 주소를 연다. | IPv6 환경에서 전체 개방이 필요할 때 쓴다. |
| 빈 값 | 어떤 IP 인터페이스도 듣지 않는다. | 이 경우 TCP/IP 연결은 막히고 Unix-domain socket만 사용할 수 있다. |
공식 문서는 목록이 비어 있으면 어떤 IP 인터페이스에서도 listen하지 않으며, 이 경우 Unix-domain socket으로만 연결할 수 있다고 설명한다. 반대로 목록이 비어 있지 않으면 서버는 적어도 하나의 TCP/IP 주소를 열 수 있을 때 시작하고, 열지 못한 주소에 대해서는 warning을 남긴다.
대부분의 환경에서는 어떤 값을 고르면 될까?
원격 클라이언트가 전혀 필요 없으면 기본값인 localhost가 가장 단순하다. 애플리케이션과 PostgreSQL이 같은 서버 안에서만 통신한다면, 굳이 외부 인터페이스까지 열 이유가 없다.
원격 접속이 필요하더라도 문서 관점에서 바로 *를 고르는 것이 필수는 아니다. 특정 내부 IP만 명시할 수 있으면 그 편이 노출 면을 줄인다. 공식 문서도 listen_addresses가 insecure network interface에서 반복적인 악성 연결 요청을 줄이는 데 도움이 될 수 있다고 설명한다.
- 단일 서버 애플리케이션:
localhost유지가 무난하다. - 내부망의 특정 NIC만 열어야 하는 서버: 그 IP 주소만 명시하는 편이 단순하다.
- 주소가 자주 바뀌거나 모든 인터페이스 수신이 필요한 환경:
*또는0.0.0.0,::를 검토하되 방화벽과pg_hba.conf를 함께 좁혀야 한다.
pg_hba.conf와는 무엇이 다를까?
두 설정은 역할이 다르다. listen_addresses는 서버 프로세스가 어느 인터페이스에서 연결 시도를 받을지 정하고, pg_hba.conf는 그 연결을 어떤 사용자, 어떤 주소 대역, 어떤 인증 방식으로 처리할지 정한다.
current 문서의 pg_hba.conf 설명은 원격 TCP/IP 연결이 가능하려면 적절한 listen_addresses 값으로 서버가 시작되어 있어야 한다고 명시한다. 즉 pg_hba.conf만 열어 두어도 listen_addresses가 기본값 localhost라면 외부 원격 접속은 되지 않는다.
반대로 listen_addresses = '*'로 열어도 pg_hba.conf가 허용하지 않으면 로그인은 성립하지 않는다. 실무에서는 두 값을 서로 대체재로 보면 안 된다.
설정을 바꾸면 reload로 끝날까?
아니다. current 문서는 이 파라미터를 server start에만 설정할 수 있다고 설명한다. 즉 pg_reload_conf() 같은 reload만으로는 반영되지 않고 서버 재시작이 필요하다.
이 점은 운영 절차에서 중요하다. pg_hba.conf는 reload로 다시 읽을 수 있지만 listen_addresses는 그렇지 않으므로, 원격 접속 경로를 새로 여는 작업은 재시작 창구를 고려해야 한다.
자주 헷갈리는 질문
1. listen_addresses를 비우면 로컬 접속도 모두 막힐까?
TCP/IP 기준으로는 그렇다. 하지만 공식 문서는 빈 값일 때 Unix-domain socket은 계속 사용할 수 있다고 설명한다. 따라서 로컬 애플리케이션이 소켓으로 붙는 구성이라면 접속이 완전히 사라지는 것은 아니다.
2. 별표 하나면 설정이 끝날까?
아니다. *는 수신 인터페이스 범위만 넓힌다. 실제 접속 허용은 pg_hba.conf, 방화벽, 라우팅, TLS 설정 같은 다른 계층과 함께 봐야 한다.
3. 일부 주소를 열지 못해도 서버가 시작될 수 있을까?
그럴 수 있다. current 문서는 목록이 비어 있지 않을 때 적어도 하나의 TCP/IP 주소를 열 수 있으면 서버가 시작하고, 열지 못한 주소에 대해서는 warning을 남긴다고 설명한다.
FAQ
Q. 운영 서버라면 무조건 *보다 명시적 IP가 나을까?
공식 문서는 정책 우선순위를 강제하지는 않지만, 인터페이스 수신 범위를 줄이는 것이 악성 연결 요청 노출을 줄이는 데 도움이 될 수 있다고 설명한다. 따라서 고정된 내부 IP만 필요하다면 그 주소만 명시하는 쪽이 더 보수적이다.
Q. listen_addresses만 바꾸면 외부에서 바로 접속할 수 있을까?
아니다. current 문서 기준으로 원격 연결은 listen_addresses와 pg_hba.conf가 모두 맞아야 하고, 네트워크 경로와 방화벽도 통과해야 한다.
Q. 기본값 localhost는 TCP를 아예 안 쓰는 뜻일까?
아니다. 이는 loopback TCP/IP 연결을 허용하는 값이다. TCP 자체를 끄려면 빈 값으로 두고 소켓만 사용해야 한다.
정리
listen_addresses는 PostgreSQL이 어느 TCP/IP 인터페이스에서 접속 시도를 받을지 정하는 설정이고, 2026년 6월 8일 기준 PostgreSQL 18.4 current 문서의 기본값은 localhost다. 실무 판단 기준은 원격 접속 필요 여부, 특정 NIC만 열 수 있는지, 그리고 pg_hba.conf 및 방화벽을 함께 좁힐 수 있는지다.
같은 서버 내부 통신만 필요하면 기본값 유지가 단순하고, 원격 접속이 필요하면 전체 개방보다 필요한 인터페이스만 명시하는 편이 더 보수적이다. 어느 경우든 listen_addresses와 pg_hba.conf를 분리해서 생각하는 것이 핵심이다.
참고 자료
'프로그래밍 > 서버, DBMS' 카테고리의 다른 글
| PostgreSQL password_encryption 기준 정리 (0) | 2026.06.05 |
|---|---|
| PostgreSQL sslmode 기준 정리 (0) | 2026.05.31 |
| PostgreSQL pg_hba.conf 인증 기준 정리 (0) | 2026.05.26 |
| PostgreSQL wal_level 설정 기준 정리 (0) | 2026.05.23 |
| PostgreSQL synchronous_commit은 언제 꺼도 될까? off, local, remote_write 차이 정리 (0) | 2026.05.19 |





