[Spring Boot] Supabase (PostgreSQL) 연동하기

유자·2026년 2월 27일

multi-modal-fraud-project

목록 보기
7/16

굉장히 간단할 줄 알았으나 꽤 오랫동안 삽질을 하는 바람에 기록해야겠다는 생각이 들었다.

의존성 추가

Spring Boot의 build.gradledependencies에 다음 코드를 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.postgresql:postgresql'

runtimeOnly 대신에 첫 번째 줄과 마찬가지로 implementation을 써도 상관없다.

수정 완료 후 반드시 refresh(코끼리 아이콘) 해줘야 한다.

접속 정보 설정 및 에러 원인 분석

그다음은 application.properties에 접속 정보를 추가해야 한다.

추가할 기본 형태는 다음과 같다.

spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.datasource.driver-class-name=org.postgresql.Driver

Supabase에서 프로젝트를 생성한 후, Supabase 내의 어느 화면이 됐든 상단을 보면 'Connect'가 적힌 버튼을 찾을 수 있다.

이 버튼을 클릭한다.
그럼 Connect to your project 화면이 뜬다.
이때 Connection String > Method를 기본값이 아닌 Transaction pooler로 변경해 준다. 다음과 같은 화면이 뜬다면 정상이다.

왜 굳이 Method를 바꿔야 할까?
기본 Method인 Direct connection으로 제공되는 URL은 Supabase 정책상 최신 네트워크 규격인 IPv6를 기본으로 사용한다. 무료 단계이거나 흔히 사용하는 가정용/회사용 로컬 네트워크(IPv4) 환경에서는 물리적으로 저 주소를 찾아갈 수 없어서 No route to host 통신 에러가 발생하며 접속 자체가 튕겨버린다.

DB 서버에 접속을 못 하니 내부 메타데이터를 읽어올 수 없고, 그 결과 spring은 Unable to determine Dialect without JDBC metadata라는 에러를 연쇄적으로 뱉으며 뻗어버리게 된다. 따라서 포트를 6543으로 우회하여 IPv4 환경에서도 연결이 가능한 Transaction pooler를 반드시 사용해야 한다.

URL 파싱 함정 피하기

'View parameters'를 누르면 뜨는 내용들로 위 application.properties의 접속 정보를 채워주면 되는데, 이때 주의할 점이 있다.

spring.datasource.urlpostgresql://postgres.blahblah...를 그대로 복사해서 붙여넣기 하면 Driver claims to not accept jdbcUrl이라는 파싱 오류가 난다.

Supabase에서 복사한 원본 주소는 아이디:비밀번호@주소 형태가 한 줄로 뭉쳐있다. 자바의 JDBC 통신 규격은 이를 제대로 해석하지 못한다. 특히 보안을 위해 설정한 비밀번호 안에 @ 같은 특수문자가 들어있다면, 시스템이 어디까지가 비밀번호고 어디서부터가 진짜 호스트 주소인지 혼동하여 연결을 포기해 버린다.

따라서 뭉쳐있는 속성을 분리해야 한다. 복붙 후, postgresql 앞에 자바 표준 통신 규격인 jdbc:를 추가해 줘야 한다. 또한 URL을 그대로 복붙했을 때 :// 뒤부터 @까지의 계정 정보 구간을 전부 삭제해야 한다.

즉, 만약 원본 주소가 postgresql://postgres.hasleijfkfeirps:[YOUR-PASSWORD]@blahblah.supabase.com:6543/postgres라고 적혀있다면 application.properties에는 다음과 같이 수정해서 적어야 한다.

# 계정 정보가 빠진 순수 주소
spring.datasource.url=jdbc:postgresql://blahblah.supabase.com:6543/postgres

다음으로 username은 파라미터 중 User에 해당되는 값을 복사해서 넣으면 된다.
password는 본인이 설정한 프로젝트 데이터베이스 비밀번호를 넣으면 된다. 이때 기존 비밀번호가 마음에 들지 않거나 특수문자 충돌이 의심된다면 화면 하단에 있는 'Reset your database password' 기능을 사용하면 된다.

재시작하면 Supabase와 연결되었다는 HikariPool 관련 정보가 콘솔에 뜬다.

참고로, 당장은 로컬 환경에서의 테스트를 위해 application.properties에 데이터베이스 비밀번호를 그대로 적어두었지만, 언젠가 gitHub에 프로젝트 코드를 올리게 될 때는 주의가 필요하다. 이 파일이 깃허브에 그대로 올라가면 내 실제 데이터베이스 비밀번호가 노출되는 보안 위험이 따른다.


비밀번호가 코드에 직접 노출되는 것이 부담스럽기 때문에, 향후 환경 변수 세팅이나 .gitignore를 활용하여 깃허브에 올릴 때 비밀번호를 안전하게 숨기는 방법에 대해서는 추후 별도의 포스팅으로 다뤄볼 예정이다.

0개의 댓글