Render 배포 실패 트러블슈팅

k_bell·2025년 10월 17일

트러블슈팅

목록 보기
7/7

문제 발생

현상
Spring Boot + Supabase(PostgreSQL) 조합의 서버가 Render에서 배포 실패함.
원래는 잘 배포되던 서비스였는데, Supabase DB가 일정 시간 동안 비활성(idle) 상태로 전환되었다가 복구된 이후부터 문제가 생겼다.

초기 에러 로그
JDBCConnectionException 발생 — DB 연결 자체 실패.

o.h.engine.jdbc.spi.SqlExceptionHelper   : The connection attempt failed.
j.LocalContainerEntityManagerFactoryBean : ... Unable to open JDBC Connection for DDL execution

1차 진단: 로컬에서 연결 테스트 (Docker psql)

가설
DB 연결 정보가 틀렸거나 네트워크 문제일 가능성이 있음.

테스트
내 PC Docker 컨테이너(PostgreSQL) 안에서 psql 명령어로 Supabase DB 접속 시도.

결과
새로운 에러 발생.

psql: error: connection to server at "db.hpumiycyisrlwleopdkl.supabase.co" (2406:da12:...), port 5432 failed: Cannot assign requested address

원인 분석
에러 메시지의 IP 주소가 IPv6였다.
Docker 네트워크가 IPv6를 지원하지 않아 발생한 문제였고, Render 환경에서도 같은 이유로 실패했을 가능성이 높다고 판단했다.


2차 진단: IPv4 Connection Pooler로 변경

해결 시도
Supabase는 IPv4 기반의 Connection Pooler를 제공한다. 이걸로 접속 경로를 변경했다.

  • Host: db.hpumiycyisrlwleopdkl.supabase.coaws-1-ap-northeast-2.pooler.supabase.com
  • Port: 54326543

테스트 결과
다시 psql 접속 시도 시 다음 에러 발생.

psql: error: ... FATAL:  Tenant or user not found

원인 분석
Pooler는 여러 프로젝트의 접속을 중개하는 게이트웨이 역할이라, 단순히 사용자 이름을 postgres로 보내면 어느 프로젝트인지 구분을 못 한다.

해결책
사용자 이름을 postgres.[프로젝트_참조_ID] 형식으로 변경해야 한다.

예시:
postgrespostgres.hpumiycyisrlwleopdkl


3차 진단: 최종 연결 정보로 접속 및 배포 시도

최종 연결 정보

  • Host: Connection Pooler의 IPv4 주소
  • Port: 6543
  • Username: postgres.[프로젝트_참조_ID] 형식

테스트 결과
로컬 psql 접속 성공. postgres=> 프롬프트 확인됨.

Render 재배포
같은 연결 정보를 Render 환경 변수에 적용 후 재배포 실행.

결과
여전히 The connection attempt failed 에러 발생.


4차 진단: Render 환경 문제 추적

가설
로컬에서는 성공했으니 Render 환경 문제일 가능성이 높음.

  • 방화벽 문제? → Supabase는 모든 IP(0.0.0.0/0)에 개방되어 있었음.
  • 환경 변수 문제? → 로그 출력을 추가하려다 새 에러 로그 발견.
o.h.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [refresh_token]

원인 분석
이번엔 DB 연결은 성공했지만, refresh_token 테이블이 없어 JPA 검증 단계에서 실패했다.
Supabase가 비활성 상태였다가 복구되면서 테이블이 사라진 것으로 추정됨.


최종 해결

문제 요약
DB 연결은 성공했지만, 테이블이 없어서 앱이 실행되지 않음.

조치
Spring Boot가 실행될 때 엔티티 기반으로 테이블을 자동 생성하도록 설정 변경.

설정 추가
Render 환경 변수에 아래 값 추가.

SPRING_JPA_HIBERNATE_DDL_AUTO=update

결과
재배포 후 Spring Boot가 DB에 연결하면서 테이블을 자동 생성했고, 정상적으로 배포 완료.


최종 정리

Supabase를 Render + Spring Boot 환경에서 쓸 때 필요한 설정은 다음과 같다.

  1. DB 접속은 반드시 Connection Pooler 정보 사용

    • Host: ...pooler.supabase.com
    • Port: 6543
  2. Username은 postgres.[프로젝트_참조_ID] 형식으로 지정

  3. Spring JPA 설정

    • ddl-auto=update 또는 validate
    • 초기 배포 시에는 update로 두어 테이블 자동 생성을 유도하는 것이 안전함.

0개의 댓글