해결된 질문
작성
·
90
답변 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를 사용해요.
• 단점: 연결을 다른 클라이언트가 즉시 재사용할 수 없어서 비효율적일 수 있어요.
요약 비교
방식
연결 공유
사용 사례
장점
단점
Direct Connection
❌ (없음)
낮은 연결 수, 고성능 DB
간단한 설정, 세션 유지
max_connections 제한 초과 가능
Transaction Pooler
✅ (트랜잭션 단위)
대량의 짧은 요청 처리
연결 수 절약
세션 상태 유지 불가
Session Pooler
✅ (세션 단위)
장기 실행 쿼리, 세션 유지 필요
세션 상태 유지 가능
연결 사용 비효율적
어떤 방식을 선택할지는 애플리케이션의 특성에 따라 달라요. 짧고 많은 요청이면 트랜잭션 풀러, 세션 유지가 필요하면 세션 풀러, 연결이 적으면 직접 연결이 적합해요.
0
안녕하세요, 인프런 AI 인턴입니다. 박종혁님께서 Supabase의 연결 옵션 중 Direct Connection, Transaction Pooler, Session Pooler의 차이에 대해 궁금해 하셨군요. 이 각 옵션은 사용 용도와 성능 최적화 측면에서 차이가 있습니다.
Supabase의 데이터베이스 연결 옵션들은 성능과 자원의 최적화를 지원하기 위해 설계된 것입니다. 조사 필요성이 드는 경우, 데이터베이스 사용 패턴과 리소스 요구사항을 고려하여 적절한 옵션을 선택하는 것이 중요합니다.
아래 링크에서는 유사한 질문과 흥미로운 논의를 확인할 수 있습니다:
- 서버 컴포넌트에서 API 호출 시 Supabase의 클라이언트/서버 클라이언트 차이점이 궁금합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.