PostgreSQL의 전체 구조
접속 문자열에는 서버 주소, DB 이름, 사용자 이름이 함께 들어간다. 이 셋을 같은 것으로 생각하면 “연결은 되는데 테이블이 없다”와 “테이블은 있는데 권한이 없다”를 구분하기 어렵다. 이 페이지는 쿼리 한 번이 어디로 가는지부터 그린다.
이 장에서 처음 나오는 말3개
SQLStructured Query Language- 어떤 데이터를 읽고 바꿀지 데이터베이스에 전달하는 언어.
PostgreSQLPostgres- SQL 실행, 저장, 동시 접근과 복구를 담당하는 데이터베이스 시스템. 두 이름은 같은 제품을 가리킨다.
role- 로그인 여부와 객체 접근 권한을 부여하는 PostgreSQL의 신원 단위.
연결의 목적지
섹션 제목: “연결의 목적지”주소는 서버를 찾고, DB 이름은 그 서버에서 사용할 데이터베이스를 고른다. public.tasks는
public이라는 스키마 안의 tasks 테이블이라는 뜻이다. 스키마는 관련 객체를 묶는 이름 공간이지
서버나 사용자 계정이 아니다. 한 연결은 한 데이터베이스에 속한다.
(클라이언트와 서버 구조,
스키마)
| 대상 | 무엇을 묶나 | 예 |
|---|---|---|
| 서버 인스턴스 | 실행 중인 PostgreSQL 프로세스들과 저장 데이터 | 로컬 컨테이너 한 개 |
| database | 연결과 객체 관리의 큰 단위 | studydb |
| schema | 한 DB 안의 테이블·함수 등의 이름 공간 | public, auth |
| table | 같은 구조를 가진 행들 | public.tasks |
| role | 로그인과 권한 | postgres, 앱 전용 role |
role은 PostgreSQL 서버의 여러 DB에서 공유된다. 다른 DB에 같은 이름의 테이블이 있어도
현재 DB의 public.tasks와는 별개다. search_path는 스키마를 생략했을 때 이름을 찾는 순서이므로,
처음에는 예제처럼 public.tasks를 명시하면 혼동이 줄어든다.
SQL을 실행하는 것과 서버를 관리하는 것
섹션 제목: “SQL을 실행하는 것과 서버를 관리하는 것”SELECT는 데이터를 읽으라는 요청이다. PostgreSQL은 실행 방법을 결정하고 디스크·메모리의 데이터를
읽어 결과를 보낸다. ORM이나 Supabase 클라이언트를 쓰더라도 DB에 도착한 작업의 비용과 권한은 사라지지 않는다.
CNPG는 그 서버를 Kubernetes에 배치하고 상태를 관리한다. CNPG 설정이 좋은 스키마나 빠른 SQL을 대신 만들어 주지는 않는다. 반대로 SQL을 잘 작성해도 백업·장애 전환은 별도로 준비해야 한다. (CNPG 소개)
cluster라는 말이 두 가지다
섹션 제목: “cluster라는 말이 두 가지다”PostgreSQL 문서의 database cluster는 한 서버가 관리하는 여러 DB의 집합을 뜻한다.
반면 CNPG의 Cluster 리소스는 primary와 replica 인스턴스를 함께 관리하는 Kubernetes 객체다.
문맥 없이 “클러스터가 세 개”라고 하기보다 CNPG Cluster 하나, DB 인스턴스 세 개처럼 말한다.
(PostgreSQL 용어)
이해 확인
섹션 제목: “이해 확인”같은 서버에 접속했는데 relation does not exist가 나오면 무엇부터 볼까?
현재 DB와 스키마를 확인한다. DB가 다르거나 search_path가 다를 수 있기 때문이다.
role의 접근 권한은 그다음 구분할 문제다. 첫 데이터베이스에서 직접 확인한다.