2.5 클라이언트 도구
PostgreSQL 서버에 접속해 SQL을 보내고 결과를 받는 클라이언트는 종류가 많습니다. 운영자가 매일 쓰는 것부터 가끔 쓰는 것까지 갈래별로 정리합니다.
CLI
psql — 공식 표준
PostgreSQL과 함께 배포되는 공식 CLI. 거의 모든 운영자가 매일 씁니다.
# 기본 접속
psql -h db.example.com -U app_user -d app_main
# 환경변수 사용
export PGHOST=db.example.com PGUSER=app_user PGDATABASE=app_main
psql
# 접속 문자열
psql 'postgresql://app_user:secret@db.example.com:5432/app_main?sslmode=require'자주 쓰는 메타 명령:
| 명령 | 의미 |
|---|---|
\l | 데이터베이스 목록 |
\c <db> | 다른 DB로 전환 (새 연결) |
\dt, \di, \dv, \df | 테이블·인덱스·뷰·함수 목록 |
\d <table> | 테이블 구조 |
\d+ <table> | 자세히 — 크기·통계·storage 모드 포함 |
\dn, \du | 스키마·역할 목록 |
\x | 세로(extended) 출력 토글 |
\timing | 매 쿼리 실행 시간 표시 |
\watch <초> | 동일 쿼리 반복 |
\copy <table> FROM <file> | 로컬 파일에서 COPY (서버 측 COPY와 달리 클라이언트 권한으로) |
\set | 변수·옵션 표시 |
\? | 메타 명령 도움말 |
\h SELECT | SQL 문법 도움말 |
\q | 종료 |
~/.psqlrc에 자주 쓰는 설정을 자동 적용합니다.
\set QUIET 1
\pset null '∅'
\pset border 2
\pset linestyle unicode
\x auto
\timing on
\set HISTFILE ~/.psql_history-:HOST
\set PROMPT1 '%[%033[1;33m%]%n@%/%[%033[0m%]%R%# '
\unset QUIETpgcli — autocomplete CLI
Python 기반입니다. SQL 키워드·테이블·컬럼 자동완성과 syntax highlighting을 제공합니다.
pip install pgcli # 또는 brew install pgcli, dnf install pgcli
pgcli -h db.example.com -U app_user -d app_main| 장점 | 단점 |
|---|---|
| 강력한 자동완성 | psql과 호환 안 되는 메타 명령 일부 |
| 다중 줄 편집 | psql의 모든 기능을 따라가진 않음 |
| 컬럼명 추천 | 큰 스키마에서 시작 지연 |
운영 콘솔에서는 psql, 개발·탐색에서는 pgcli라는 패턴이 흔합니다.
usql — 다중 DB CLI
PostgreSQL뿐 아니라 MySQL·Oracle·SQLite 등 여러 DB에 같은 인터페이스로 접속. 멀티 DB 운영에서 유용합니다.
GUI
DBeaver
오픈소스. 거의 모든 데이터베이스 지원합니다. ER 다이어그램·쿼리 빌더 포함합니다.
| 장점 | 단점 |
|---|---|
| 무료, 멀티 DB | 일부 PG 전용 기능(EXPLAIN ANALYZE UI) 약함 |
| ER 다이어그램 자동 생성 | 큰 스키마에서 메모리 사용량 큼 |
pgAdmin 4
PostgreSQL 공식 GUI. 웹 UI로도 동작합니다.
| 장점 | 단점 |
|---|---|
| PostgreSQL 모든 객체 트리 | UI 반응성이 빠르지 않음 |
EXPLAIN 그래픽 뷰 | 멀티 DB는 못 다룸 |
TablePlus / DataGrip / Postico
상용 또는 부분 무료. UX 품질이 높지만 라이선스 비용 또는 기능 제한이 있습니다.
| 도구 | 라이선스 | 메모 |
|---|---|---|
| TablePlus | 상용 (제한 무료) | macOS·Windows 모두 빠름 |
| DataGrip (JetBrains) | 상용 | IDE 통합, refactor 강력 |
| Postico | 상용 | macOS 전용, 단순·깔끔 |
드라이버
코드에서 PostgreSQL을 쓸 때 사용하는 라이브러리.
| 언어 | 추천 드라이버 | 비고 |
|---|---|---|
| Python | psycopg (v3) | 비동기 지원, psycopg2의 후속 |
| Node.js | pg (node-postgres) | 표준 |
| Java | pgJDBC | 공식 JDBC |
| Go | pgx | net/sql 인터페이스와 자체 인터페이스 모두 |
| Rust | tokio-postgres, sqlx | async-first |
| .NET | Npgsql | 공식 ADO.NET 드라이버 |
| Ruby | pg gem | 공식 |
대부분 wire 프로토콜 v3를 구현해 PostgreSQL 호환 DB(Yugabyte, CockroachDB)에도 그대로 붙습니다.
~/.pgpass — 비밀번호 자동 입력
매번 비밀번호를 입력하기 번거로우면 ~/.pgpass에 미리 둘 수 있습니다.
# hostname:port:database:username:password
db.example.com:5432:app_main:app_user:my_secret_password
*:5432:*:replicator:repl_secretchmod 600 ~/.pgpass # 권한 0600 아니면 무시됨PGPASSFILE 환경변수로 위치도 바꿀 수 있습니다.
TLS·인증서 검증
운영 환경에서 평문 접속은 금지합니다. 보통 다음 중 하나로 강제합니다.
psql 'postgresql://user@host/db?sslmode=verify-full&sslrootcert=/etc/ssl/postgres-ca.pem'sslmode | 의미 |
|---|---|
disable | 평문. 절대 운영 금지 |
prefer (기본) | 가능하면 SSL, 안 되면 평문 |
require | SSL 강제, 인증서 검증 안 함 |
verify-ca | CA 검증 |
verify-full | CA + 호스트명 검증. 운영 권장 |
자세한 인증서 관리는 Part IX 9.5에서 다룹니다.
도구 선택 요약
flowchart TD
Q1{용도}
Q1 -- "운영 콘솔" --> A1["psql<br/>(스크립트·CI에도 동일)"]
Q1 -- "개발·스키마 탐색" --> A2["pgcli<br/>또는 DBeaver"]
Q1 -- "ER·시각화" --> A3["DBeaver / DataGrip"]
Q1 -- "PG 전용 객체 트리" --> A4["pgAdmin 4"]
Q1 -- "애플리케이션 코드" --> A5["언어별 드라이버<br/>psycopg, pgx, pgJDBC …"]
classDef cli fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
classDef gui fill:#fed7aa,stroke:#c2410c,color:#7c2d12
classDef drv fill:#d1fae5,stroke:#047857,color:#064e3b
class A1,A2 cli
class A3,A4 gui
class A5 drv
psql은 모든 도구의 공통 분모다. 운영 자동화 스크립트, CI 검증, 장애 대응 모두 결국 psql로 떨어집니다. 다른 도구와 같이 쓰더라도 psql 메타 명령(\d, \timing, \watch)은 꼭 익혀 두는 게 운영자의 기본 무장입니다.정리
- 운영 표준 = psql. 메타 명령과
~/.psqlrc까지 익혀 두면 생산성 차이 큼 - 자동완성 원하면 pgcli, GUI 원하면 DBeaver / pgAdmin / DataGrip
- 코드에서는 언어별 공식 드라이버
~/.pgpass로 비밀번호 자동 입력 (권한 0600 필수)- 운영 접속은 항상
sslmode=verify-full+ 서버 인증서
Part II 설치 단계가 끝났습니다. 다음 Part III에서는 트랜잭션과 동시성을 봅니다.