상황별 판단과 학습 마무리
결론부터
문제가 데이터 규칙·쿼리·동시성·운영 중 어디에 있는지 구분하면 다음 확인을 정할 수 있다.
명령을 외우기보다 아래 상황에서 원인과 관찰할 증거를 설명해 본다. 막히는 부분의 링크로 돌아가 예제를 다시 실행하면 된다.
스스로 답해 보기
섹션 제목: “스스로 답해 보기”| 상황 | 먼저 생각할 질문 | 답의 근거 |
|---|---|---|
| 없는 프로젝트의 작업이 저장됐다 | 외래 키가 실제로 선언돼 있는가? | 데이터 모델링 |
| 프로젝트별 작업 수가 예상보다 많다 | 일대다 JOIN이 곱해졌거나 빈 행을 COUNT했는가? | JOIN과 집계 |
| 같은 트랜잭션의 두 SELECT 결과가 다르다 | Read Committed에서 문장 사이 다른 변경이 확정됐는가? | 동시성 |
| 인덱스가 있는데 조회가 느리다 | 실제 읽은 행·정렬·잠금·연결 대기는 어디에 있는가? | 실행 계획 |
| 관리자에게는 보이지만 앱에는 0행이다 | role·GRANT·RLS 정책의 적용 조건이 다른가? | 권한과 RLS |
| replica에서도 삭제한 행이 없다 | DELETE가 정상 복제된 것은 아닌가? | 복제 |
| 백업이 completed인데 PITR이 실패한다 | 목표 이전 백업과 목표까지의 WAL이 모두 있는가? | CNPG 복구 |
| primary가 바뀐 뒤 앱이 실패한다 | 기존 연결·미확정 요청·풀의 재연결을 처리하는가? | 장애 전환 |
학습 결과를 직접 확인하기
섹션 제목: “학습 결과를 직접 확인하기”공통 SQL 예제에서는 작업 없는 프로젝트를 포함한 집계를 만들고, 두 연결에서 잠금 대기를 관찰하고, 일반 role의 행 접근과 별도 DB 복원을 확인한다. 예상 결과와 실제 결과가 다른 이유를 설명할 수 있으면 다음 설정을 읽을 기반이 생긴 것이다.
CNPG에서는 실습 환경을 별도로 갖춘 뒤 선언한 인스턴스와 실제 배치, 계획 전환 뒤 앱 연결, 원본과 별도 복원본의 데이터 차이를 확인한다. 문서의 YAML을 읽은 것과 자신의 환경에서 장애·복구를 검증한 것은 구분해 기록한다.
필요한 깊이로 이어가기
섹션 제목: “필요한 깊이로 이어가기”| 목적 | 연결할 경로 |
|---|---|
| Supabase 앱의 데이터를 제대로 설계하기 | 모델링 → SQL → 트랜잭션 → 권한·RLS → Supabase |
| CNPG 운영 설정을 판단하기 | WAL → 복제 → 백업 → CNPG 구조·Cluster → 장애 전환·복원 |
| AWS 관리형 DB로 옮기기 | 연결·권한 → 백업·복원 → 환경 비교 → AWS |
| 일상 장애를 조사하기 | 실행 계획·잠금 → 유지 관리·연결 → CNPG 운영 점검 |
더 넓은 SQL 문법과 PostgreSQL 기능은 공식 튜토리얼과 SQL 언어 문서에서 확장한다. 이 덱의 예제를 출발점으로 삼되 실행 환경의 버전과 서비스 제약을 함께 확인한다.