클러스터 설정 옵션
Managed Postgres 클러스터는 커넥션 풀링, 요금제 변경, 사용자와 역할, 데이터베이스 관리 등 다양한 설정 옵션을 제공해요. 이 페이지에서는 커넥션 풀 모드를 구성하고, 요금제를 바꾸고, 사용자와 데이터베이스를 만드는 방법을 대시보드와 flyctl로 설명해요.
출처: 문서
본문
커넥션 풀링 (Connection Pooling)
모든 Managed Postgres 클러스터에는 커넥션 풀링을 위한 PGBouncer가 포함되어 있어 데이터베이스 연결을 효율적으로 관리하는 데 도움을 줘요. 풀 모드(pool mode)를 변경해 PGBouncer가 클라이언트에 연결을 할당하는 방식을 구성할 수 있어요.
애플리케이션의 커넥션 풀 설정(수명, 유휴 타임아웃, 풀 크기, 언어별 예시) 구성에 대해서는 클라이언트 연결하기를 참고하세요.
풀 모드 옵션
두 가지 풀 모드를 사용할 수 있어요:
- 세션 모드 (Session): 연결이 전체 세션 동안 클라이언트에 할당돼요. 기본 모드이며 트랜잭션, 준비된 문(prepared statements), 어드바이저리 잠금(advisory locks)을 포함한 PostgreSQL 기능과 가장 호환성이 높아요.
- 트랜잭션 모드 (Transaction): 연결이 트랜잭션별로 할당돼요. 이 모드는 더 높은 연결 재사용과 높은 부하에서 더 나은 성능을 제공하지만, 일부 PostgreSQL 기능에는 제한이 있어요.
각 모드를 언제 사용할까
세션 모드는 다음 경우에 사용하세요:
- 애플리케이션이 준비된 문(statement)을 사용할 때
- 어드바이저리 잠금이나 기타 세션별 기능이 필요할 때
- 어떤 모드를 선택해야 할지 확실하지 않을 때(세션이 더 안전한 기본값이에요)
- 애플리케이션에 오래 실행되는 트랜잭션이 있을 때
트랜잭션 모드는 다음 경우에 사용하세요:
- 짧은 트랜잭션이 많은 고처리량 애플리케이션이 있을 때
- 연결 재사용을 최대화하고 싶을 때
- 애플리케이션이 주로 준비된 문 없이 단순 쿼리를 사용할 때
- 같은 하드웨어로 더 많은 동시 연결을 지원해야 할 때
- Elixir의 Ecto 라이브러리를 사용한다면, 풀러(pooler)를 통해 연결할 때 반드시 트랜잭션 풀 모드를 사용해야 해요. Ecto의 커넥션 풀링 동작이 PGBouncer의 세션 모드와 호환되지 않기 때문이에요.
대시보드에서 풀 모드 변경
클러스터의 풀 모드를 변경하려면:
- 대시보드에서 MPG 클러스터의 "Connect" 탭으로 이동
- "View Pooler Settings"를 클릭해 설정 옵션 확장
- 원하는 풀 모드 선택
- "Update Pool Mode" 클릭
- 모달 대화상자에서 변경 확인
참고: 풀 모드를 변경하면 커넥션 풀러 노드가 재시작되어 잠깐의 연결 중단이 발생할 수 있어요. 데이터베이스 자체는 계속 실행돼요.
MPG 요금제 변경
Managed Postgres 요금제는 클러스터가 가진 리소스의 양을 결정해요. 모든 요금제에는 프라이머리와 레플리카, pg bouncers, 백업이 포함돼요. 클러스터의 요금제는 언제든지 변경할 수 있으며, 클러스터의 Machines가 새 리소스로 업데이트돼요.
요금제를 변경하려면:
- 대시보드에서 MPG 클러스터의 "Settings" 탭으로 이동
- 목록에서 원하는 요금제 선택
- "Update Configuration" 버튼 클릭
- 요금제가 업데이트되고 모든 설정 변경이 데이터베이스 노드에 적용돼요.
업그레이드와 전환(switchover) 동안 데이터베이스 노드가 재시작돼요. 잠시 가동 중단이 있을 수 있으니 그에 맞게 계획하세요.
사용자와 역할 (Users and Roles)
Managed Postgres 클러스터는 fly-user라는 관리자 사용자 하나로 생성돼요. 대시보드나 flyctl을 통해 추가 데이터베이스 사용자를 만들고 역할을 설정할 수 있어요.
현재 MPG는 사용자에게 다음 역할을 지원해요:
스키마 관리자 (Schema Admin)
스키마 관리자 역할은 슈퍼유저(Superuser) 역할에 가장 가까워요. 클러스터에 대한 전체 읽기/쓰기 접근권과 데이터베이스 구조를 수정하는 능력을 제공해요.
클러스터가 생성될 때 fly-user 사용자에게 부여되는 기본 역할이에요.
스키마 관리자 사용자가 할 수 있는 것:
- 모든 데이터베이스, 테이블, 스키마에 읽기/쓰기
- 테이블, 뷰, 함수, 기타 데이터베이스 객체 생성, 변경, 삭제
- 새 스키마 생성 및 데이터베이스 구조 관리
- 클러스터의 모든 데이터베이스에 연결
- 세션별 작업을 위한 임시 테이블 생성
스키마 관리자 사용자가 할 수 없는 것:
- 새 데이터베이스 생성. 이것은 대시보드에서 할 수 있어요
- 위에 나열된 것 외에 슈퍼유저 권한이 필요한 기타 작업
쓰기 권한 (Writer)
Writer 역할은 데이터 구조를 수정하는 능력은 제한하면서 데이터에 대한 전체 읽기/쓰기 접근을 제공해요.
Writer 사용자가 할 수 있는 것:
- 모든 기존 테이블과 스키마에 읽기/쓰기
- 모든 데이터베이스에서 레코드 삽입, 업데이트, 삭제
- 클러스터의 모든 데이터베이스에 연결
Writer 사용자가 할 수 없는 것:
- 테이블 구조 생성 또는 수정
- 새 스키마나 데이터베이스 생성
- 함수, 프로시저, 기타 스키마 객체 생성
- 임시 테이블 생성
- 데이터베이스 권한 또는 역할 변경
읽기 권한 (Reader)
Reader 역할은 클러스터의 모든 데이터에 읽기 전용 접근을 제공해요. 이 역할은 리포팅이나 분석 연결에 잘 맞아요.
Reader 사용자가 할 수 있는 것:
- 데이터베이스, 테이블, 스키마 전체의 모든 데이터 보기
- 클러스터의 모든 데이터베이스에 연결
- SELECT 쿼리 실행
Reader 사용자가 할 수 없는 것:
- 데이터 삽입, 업데이트, 삭제
- 데이터베이스 객체 생성 또는 스키마 수정
- 임시 테이블 생성
- 데이터베이스 구조나 권한 수정
추가 사용자 만들기
대시보드로 추가 사용자를 만들려면:
- 대시보드에서 MPG 클러스터의 "Users" 탭으로 이동
- 새 사용자의 이름 입력
- "Create User" 클릭 후 사용자가 생성될 때까지 대기.
flyctl로 추가 사용자를 만들려면:
fly mpg users create를 실행해 MPG 클러스터의 새 사용자를 생성
참고: 2025년 7월 이전에 만든 클러스터라면 새 사용자를 추가하기 전에 새 역할 시스템을 활성화해야 해요. 이는 대시보드의 Users 탭에서 할 수 있어요.
커스텀 사용자로 인증
사용자가 생성되면 대시보드의 "Connect" 탭에서 그를 위한 연결 문자열을 생성할 수 있어요. 인증하려는 사용자를 선택하면 연결 문자열이 그 사용자의 세부 정보로 업데이트돼요.
데이터베이스 (Databases)
Managed Postgres 클러스터는 기본 fly-db 데이터베이스로 생성돼요. 대시보드나 flyctl을 통해 추가 데이터베이스를 만들 수 있어요.
이 데이터베이스들은 클러스터의 기존 사용자들이 자신의 역할에 따라 접근할 수 있어요.
추가 데이터베이스 만들기
대시보드로 추가 데이터베이스를 만들려면:
- 대시보드에서 MPG 클러스터의 "Databases" 탭으로 이동
- "Databases" 섹션 아래 입력 필드에 새 데이터베이스 이름 입력
- "Create database" 클릭 후 데이터베이스가 생성될 때까지 대기.
flyctl로 추가 데이터베이스를 만들려면:
fly mpg databases create를 실행해 MPG 클러스터의 새 데이터베이스를 생성.