스프링에서 Supabase PostgreSQL 사용 중 "Max Client Connections Reached" 오류 해결 방법

스프링 Caused by: org.postgresql.util.PSQLException: FATAL: Max client connections reached 오류 이미지

최근 스프링 프로젝트에서 Supabase의 PostgreSQL 데이터베이스를 사용하던 중, 프로그램 실행 시 위와 같은 Caused by: org.postgresql.util.PSQLException: FATAL: Max client connections reached 오류가 발생했습니다.

 

 

문제 원인

Supabase는 PostgreSQL을 기반으로 한 서버리스 데이터베이스 플랫폼으로, 내부적으로 Supavisor라는 연결 풀러(Connection Pooler)를 사용해 클라이언트와 데이터베이스 간 연결을 관리합니다. 이 과정에서 연결 풀 설정이 적절하지 않으면 "Max client connections reached" 오류가 발생할 수 있습니다.

 

알아보니까 Supabase의 무료 플랜(Micro Size)에서는 기본 연결 풀 크기(default_pool_size)가 15로 설정되어 있다는 점을 알게 되었습니다. 반면, 스프링부트는 HikariCP라는 JDBC 연결 풀을 기본으로 사용하는데, HikariCP의 기본 최대 풀 크기(maximumPoolSize)는 10입니다. 즉 스프링 서버 하나가 실행될 때마다 최대 10개의 데이터베이스 연결을 요청할 수 있다는 뜻입니다.

 

 

해결 방법

Supabase의 연결 풀 크키(default_pool_size)를 늘려서 데이터베이스 측에서 더 많은 연결을 허용하도록 설정을 조절하면 됩니다.

 

Supabase 설정 조정

Supabase - Database 설정 이미지

Supabase 대시보드에서 현재 프로젝트를 선택하고, Project Settings- Database 메뉴로 이동합니다.

 

Supabase - Pool Size 조절 이미지

Connection pooling configuration 섹션에서 Poll Size를 30정도로 설정하 Save 버튼을 클릭합니다.

Supabase 서버를 재시작하고 다시 스프링 프로젝트에서 실행해보면 오류가 사라진걸 확인할 수 있습니다.

Top