인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박종혁님의 프로필 이미지

작성한 질문수

Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14)

1.10 DBeaver로 supabase connection 해보기

Direct connection / Transaction pooler / Session pooler 차이가 무엇인가요?

해결된 질문

작성

·

90

1

image.png

Supabase 가 업데이트 되면서, 강의 화면과 다른 부분이 있어서 질문드립니다.

Direct connection / Transaction pooler / Session pooler 차이가 무엇인가요?

강의를 따라가기 위해 Transaction pooler 를 사용해서 연결은 하긴 했습니다.

답변 2

1

도도(코딩루팡)님의 프로필 이미지
도도(코딩루팡)
지식공유자

질문 주셔서 감사합니다. ~

강의에서 사용하는 방법은 : Direct connection 방법 입니다.

1.DB에 직접 연결하는 전통적인 방식은 Direct connection 입니다.

  • 아래와 같은 프로토콜을 따르죠.

  • postgresql://postgres:[PASSWORD]@db.[PROJECT REF].supabase.co:5432/postgres

2.근데 위 방식은 max_connections의 제한도 있으니, 확장성에 문제가 있죠.

하나의 커넥션(연결 고리를 가지고) 여러 클라이언트가 공유하는 방식 으로 해결가능해요.

  • Transaction Pooler 방식입니다.

  • DB에 작업을 끝내면 다른 사람이 커넥션을 이어 받아, 작업이 가능합니다.

Session pooler 는 조금 더 장기적으로 커넥션을 빌려간다라고 생각하면 됩니다.

 

명확하게는 아래 요약을 참고해주세요.!


Direct connection / Transaction pooler / Session pooler 차이점

 

1. Direct Connection (직접 연결)

• 애플리케이션이 PostgreSQL 데이터베이스에 직접 연결하는 방식이에요.

• 연결이 많아지면 데이터베이스의 max_connections 제한에 도달할 수 있어요.

• 고부하 환경에서는 비효율적일 수 있어요.

 

2. Transaction Pooler (트랜잭션 풀러)

• 여러 클라이언트가 동일한 데이터베이스 연결을 공유하는 방식이에요.

• 트랜잭션이 끝나면 즉시 다른 클라이언트가 같은 연결을 사용할 수 있어요.

• PostgreSQL의 연결 수를 절약할 수 있어서 대량의 짧은 요청 처리에 유리해요.

• Supabase에서 포트 6543을 사용해요.

• 단점: 트랜잭션이 끝날 때마다 상태가 초기화되므로, SET 같은 세션 기반 설정은 유지되지 않아요.

 

3. Session Pooler (세션 풀러)

• 하나의 클라이언트가 하나의 연결을 독점적으로 사용하는 방식이에요.

• 연결이 유지되는 동안 동일한 클라이언트만 해당 연결을 사용해요.

• 트랜잭션이 끝나도 세션 상태(SET 변수 등)가 유지돼요.

• Supabase에서 포트 5432를 사용해요.

• 단점: 연결을 다른 클라이언트가 즉시 재사용할 수 없어서 비효율적일 수 있어요.

요약 비교

image.png

 

방식

연결 공유

사용 사례

장점

단점

Direct Connection

(없음)

낮은 연결 수, 고성능 DB

간단한 설정, 세션 유지

max_connections 제한 초과 가능

Transaction Pooler

(트랜잭션 단위)

대량의 짧은 요청 처리

연결 수 절약

세션 상태 유지 불가

Session Pooler

(세션 단위)

장기 실행 쿼리, 세션 유지 필요

세션 상태 유지 가능

연결 사용 비효율적

어떤 방식을 선택할지는 애플리케이션의 특성에 따라 달라요. 짧고 많은 요청이면 트랜잭션 풀러, 세션 유지가 필요하면 세션 풀러, 연결이 적으면 직접 연결이 적합해요.

 


 

참고 자료 : https://supabase.com/docs/guides/troubleshooting/supavisor-and-connection-terminology-explained-9pr_ZO

 

 

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 박종혁님께서 Supabase의 연결 옵션 중 Direct Connection, Transaction Pooler, Session Pooler의 차이에 대해 궁금해 하셨군요. 이 각 옵션은 사용 용도와 성능 최적화 측면에서 차이가 있습니다.

Direct Connection

  • 용도: 장기간 지속되는 연결을 필요로 하는 애플리케이션에 적합합니다.
  • 특징: 데이터베이스에 직접 연결하여 사용하며, 이는 서버 리소스를 더 많이 요구할 수 있습니다.
  • 예시: 보안 처리나 대량의 데이터 전송이 필요한 서버 환경에서 활용될 수 있습니다.

Transaction Pooler

  • 용도: 무상태(stateless) 애플리케이션에 적합하며, 각 트랜잭션이 독립적인 환경입니다.
  • 특징: PREPARE 명령을 사용할 수 없으며, 짧은 연결 시간과 빠른 응답을 제공합니다.
  • 주로 사용되는 경우: 많은 사용자 요청이 독립적으로 빠르게 처리되어야 하는 상황에서 유리합니다.

Session Pooler

  • 용도: Session Pooler는 direct connection을 대체할 수 있는 경우에 추천됩니다.
  • 특징: Direct Connection과 유사하게 동작하지만, 장기 유지보다는 세션의 효율적 관리를 목표로 합니다.
  • 예시: 여러 작업을 한 이벤트나 세션이 끝나기 전까지 유지해야 할 때.

Supabase의 데이터베이스 연결 옵션들은 성능과 자원의 최적화를 지원하기 위해 설계된 것입니다. 조사 필요성이 드는 경우, 데이터베이스 사용 패턴과 리소스 요구사항을 고려하여 적절한 옵션을 선택하는 것이 중요합니다.

유사한 질문에 대한 답변:

아래 링크에서는 유사한 질문과 흥미로운 논의를 확인할 수 있습니다:
- 서버 컴포넌트에서 API 호출 시 Supabase의 클라이언트/서버 클라이언트 차이점이 궁금합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.