Supabase 연결 에러 "nodename nor servname provided" 해결법

개인 프로젝트로 AI 가계부를 만들던 중이었다. Python(SQLAlchemy)과 무료 클라우드 DB인 Supabase를 연동하려는데, 로컬 컴퓨터에서 자꾸만 연결 에러가 발생했다. 비밀번호도 맞고, 주소도 복사 붙여넣기 했는데 왜 안 될까? 원인은 엉뚱하게도 IPv4와 IPv6의 호환성 문제였다. 해결 방법을 짧게 정리한다.

nodename nor servname provided 에러

app.py를 실행하자마자 아래와 같은 OperationalError가 뜨며 DB 연결에 실패했다. 해석하자면 “네가 적어준 DB 주소를 찾을 수 없어(Unknown host)” 라는 뜻이다. 분명 Supabase 대시보드에 있는 주소를 그대로 넣었는데, 내 컴퓨터는 그 주소가 없는 곳이라고 한다.

DB 연결 오류: (psycopg2.OperationalError) could not translate host name 
"db.******.supabase.co" to address: 
nodename nor servname provided, or not known
(Background on this error at: https://sqlalche.me/e/20/e3q8)

원인은 IPv6 전용주소

알고 보니 Supabase의 정책 변화 때문이었다. Supabase는 비용 절감과 미래 표준을 위해 ‘Direct Connection’ 주소를 IPv6 전용으로 제공한다. 하지만 우리가 쓰는 대부분의 인터넷 환경(가정집 와이파이, 회사 사내망, 카페 등)은 여전히 IPv4만 지원하는 경우가 많다.

Supabase Blog - Brace yourself, IPv6 is coming

비유하자면, Supabase는 “새 도로명 주소(IPv6)” 로만 찾아오라고 대문을 열어뒀는데, 내 내비게이션은 “옛날 지번 주소(IPv4)” 밖에 인식 못 해서 길을 못 찾는 상황인 것이다. 특히 Direct Connection 옵션에는 not ipv4 compatible 이라는 경고 문구가 작게 적혀 있었다. (이걸 못 보고 지나쳤다.)

해결책은? Session Pooler 사용하기.

해결책은 아주 간단하다. Supabase가 제공하는 Session Pooler를 통하면 된다. 이 녀석은 IPv4 요청을 받아서 IPv6 DB로 연결해 주는 ‘중계소’ 역할을 한다.

수정 후 앱을 실행하니 거짓말처럼 데이터베이스 연결 성공했다. AWS 등 클라우드 환경이 IPv4 유료화 정책 때문에 점점 IPv6로 넘어가는 추세이니, 혹시 클라우드 DB 연결 시 Host not known 류의 에러가 난다면, 내 네트워크 환경과 DB의 IP 버전 호환성을 체크해보는 것도 좋을 듯 하다.


더 보면 좋을 글들