DB 문제를 해결할 때 GUI만 열어서는 원인을 끝까지 추적하기 어렵습니다. psql, mysql client, DBeaver, migration 도구가 각각 잘하는 일이 다릅니다. 도구의 역할을 구분하면 운영 상황에서도 당황하지 않고 필요한 정보를 바로 확인할 수 있습니다.
좋은 도구를 선택하고 능숙하게 사용하면 DB 작업 효율이 크게 높아집니다. GUI와 CLI 각각의 강점을 파악하고 상황에 맞게 선택하는 방법을 배웁니다.
- 1GUI 클라이언트 비교: DBeaver, TablePlus, DataGrip
- 2연결 문자열(Connection String) 구조 이해
- 3psql 핵심 메타 커맨드 완전 정복
- 4CLI 도구: mycli와 pgcli 소개
실무 DB 도구 — DBeaver, TablePlus, psql, mycli
데이터베이스를 배웠다면 이제 실제로 접속하고 쿼리를 실행해야 합니다. GUI 도구를 쓸지, CLI를 쓸지는 상황과 취향에 따라 다르지만, 실무에서는 두 가지 모두 사용할 줄 알아야 합니다. GUI는 스키마 탐색과 데이터 확인에 편리하고, CLI는 서버 직접 접속과 스크립트 자동화에 필수적입니다.
GUI vs CLI 도구 선택 — 상황별 최적 도구
운영 서버에 SSH로 접속해서 DB 쿼리를 실행해야 합니다. GUI 도구는 로컬에서만 쓸 수 있고, CLI 도구는 명령어가 생소합니다. 반대로 개발할 때는 테이블 구조를 눈으로 보면서 쿼리를 짜는 게 훨씬 편합니다. 상황별로 어떤 도구를 쓰는지 알면 매번 검색하는 시간이 줄어듭니다.

주요 도구 비교
GUI 도구는 스키마 탐색, ERD 확인, 대화형 쿼리 작성에 강합니다. CLI 도구는 서버 SSH 환경, 스크립트 자동화, 빠른 점검 루틴에 강합니다. 실무에서는 평소에는 GUI를 쓰고, 프로덕션 서버 긴급 대응 시에는 CLI를 씁니다.
| 항목 | DBeaver | TablePlus | DataGrip | psql/pgcli |
|---|---|---|---|---|
| 가격 | 무료 | 유료 (~$69) | 유료 (~$8.9/월) | 무료 |
| OS 지원 | 모든 OS | macOS/iOS | 모든 OS | 모든 OS |
| DB 지원 수 | 100+ | 20+ | 20+ | PostgreSQL 전용 |
| 성능/속도 | 보통 | 빠름 | 보통 | 빠름 |
| SQL 자동완성 | 좋음 | 좋음 | 최고 | pgcli 사용 시 좋음 |
| 서버 환경 사용 | 불가 | 불가 | 불가 | 필수 |
| 추천 상황 | 다양한 DB, 무료 필요 | macOS 네이티브 | JetBrains 생태계 | 서버 직접 접속, 자동화 |
DBeaver — 최고의 무료 선택
DBeaver는 가장 많이 사용되는 무료 데이터베이스 GUI 클라이언트입니다. Java 기반으로 Windows, macOS, Linux 모두 동일한 경험을 제공하며 ERD 자동 생성, 데이터 내보내기/가져오기, SQL 편집기 자동완성을 지원합니다. 단점은 Java 기반이라 무겁고 시작이 느리며, macOS에서 네이티브 앱 대비 UI가 다소 어색하다는 점입니다.
TablePlus — macOS 최적화
네이티브 macOS 앱으로 빠른 시작과 반응성, 깔끔한 UI, 탭 방식의 다중 연결 관리를 제공합니다. macOS를 주력으로 사용하고 빠른 UI를 원할 때 선택합니다.
DataGrip — 개발자 최강 도구
JetBrains에서 만든 유료 DB 전용 IDE입니다. 가장 강력한 SQL 자동완성과 리팩터링, JetBrains IDE와의 완벽 통합, 스키마 비교와 데이터 마이그레이션을 지원합니다. IntelliJ 계열 IDE를 사용하며 DB 작업이 많을 때 선택합니다. 학생과 오픈소스 프로젝트는 무료입니다.
연결 문자열(Connection String) 이해
어떤 도구를 사용하든 DB 연결에는 동일한 정보가 필요합니다. 연결 문자열은 호스트, 포트, 데이터베이스 이름, 사용자명, 비밀번호, 선택적 파라미터(SSL 모드, 타임아웃 등)를 하나의 URL로 표현합니다.
postgresql://username:password@host:port/dbname
postgresql://postgres:secret123@localhost:5432/shop_db
postgresql://postgres:secret123@localhost:5432/shop_db?sslmode=require&connect_timeout=10
비밀번호는 절대 코드에 직접 쓰지 않습니다. .env 파일이나 환경변수로 관리하고 .gitignore에 반드시 추가해야 합니다.
| 항목 | 설명 | 예시 |
|---|---|---|
| host | DB 서버 주소 | localhost, 192.168.1.1 |
| port | 포트 번호 | PostgreSQL: 5432, MySQL: 3306 |
| dbname | 데이터베이스 이름 | shop_db, production |
| username | DB 사용자 | postgres, admin |
| password | 비밀번호 | (환경변수로 관리) |
psql 핵심 사용법 — CLI에서 DB 다루기
운영 서버에 접속해서 PostgreSQL을 확인해야 합니다. GUI 도구를 설치할 수 없는 환경입니다. psql만 있는데, \l, \dt, \d tablename이 무엇을 뜻하는지 모릅니다. psql 메타 명령어를 익혀두면 어떤 서버에서도 DB 상태를 즉시 확인할 수 있습니다.

psql 시작하기
psql은 PostgreSQL 공식 CLI 클라이언트입니다. GUI 도구가 없는 서버 환경이나 스크립트 자동화에 필수적입니다. 환경변수(PGHOST, PGPORT, PGUSER, PGDATABASE)를 미리 설정해두면 매번 플래그를 입력하지 않아도 됩니다.
psql -h localhost -p 5432 -U postgres -d mydb
psql "postgresql://postgres:password@localhost:5432/mydb"
실행 완료 또는 조회 결과가 표시됩니다.
- 접속 대상—현재 연결한 DB와 스키마가 운영/개발 중 어디인지 먼저 확인합니다.
- 명령 결과—CLI와 GUI가 같은 쿼리 결과를 보여주는지 비교합니다.
- 이력 관리—마이그레이션 도구가 적용 버전을 기록하는지 봅니다.
필수 메타 커맨드 (백슬래시 명령어)
psql의 메타 커맨드는 \로 시작하며 SQL이 아닌 psql 자체 명령입니다. 세미콜론 없이 Enter만 치면 바로 실행됩니다.
\l 데이터베이스 목록 전체
\c mydb mydb로 연결 전환
\dt 현재 DB의 테이블 목록
\dt public.* public 스키마 전체 테이블
\d tablename 테이블 컬럼 구조와 인덱스 상세 보기
\di 인덱스 목록
\dv 뷰 목록
\df 함수 목록
\du 사용자(Role) 목록
\dn 스키마 목록
\timing 쿼리 실행 시간 측정 ON/OFF
\e 외부 에디터(vim/nano)에서 쿼리 편집
\i filename.sql SQL 파일 실행
\o output.txt 결과를 파일로 저장
\q psql 종료
\? 전체 메타 커맨드 도움말
\h SELECT SELECT 문법 도움말
\d tablename은 컬럼 타입, NOT NULL 여부, 기본값, 인덱스 정보를 한 번에 보여줍니다. 테이블 구조를 빠르게 확인할 때 가장 많이 쓰는 명령입니다.
COPY 명령으로 대용량 데이터 처리
\COPY는 클라이언트 파일시스템을 사용하므로 로컬 파일 작업에 항상 \COPY를 사용합니다. COPY(백슬래시 없음)는 DB 서버 파일시스템 경로를 사용해 로컬 환경에서 동작하지 않을 수 있습니다.
\COPY orders TO '/tmp/orders_backup.csv' WITH CSV HEADER;
\COPY products FROM '/tmp/products.csv' WITH CSV HEADER;
\COPY (SELECT id, email, created_at FROM users WHERE active = true)
TO '/tmp/active_users.csv' WITH CSV HEADER;
.psqlrc — psql 환경 설정
홈 디렉토리의 .psqlrc 파일로 psql 기본 설정을 커스터마이징할 수 있습니다. 아래 설정을 적용하면 psql을 열 때마다 실행 시간 측정이 켜지고 NULL 값이 [NULL]로 시각적으로 표시됩니다.
\set PROMPT1 '%[%033[1;32m%]%n@%/%[%033[0m%]# '
\timing on
\pset null '[NULL]'
\pset pager always
pgcli와 mycli — 자동완성 강화 CLI
표준 psql/mysql보다 편리한 대안 도구입니다. 테이블명, 컬럼명, SQL 키워드 자동완성, 문법 컬러 강조, Ctrl+R 히스토리 검색을 지원합니다. 서버에 GUI를 설치할 수 없는 환경에서 DB 작업이 잦다면 pgcli를 강력 추천합니다.
pip install pgcli
pgcli postgresql://postgres:password@localhost/mydb
pip install mycli
mycli -u root -h localhost mydb
psql에서 BEGIN으로 트랜잭션을 시작한 뒤 쿼리를 입력하다가 Ctrl+C를 누르면 psql이 현재 입력을 취소하는 것이 아니라 세션 자체를 인터럽트합니다. 이때 열려 있던 트랜잭션이 롤백됩니다. 의도한 변경 사항이 저장되지 않고 사라집니다.
psql을 종료하려면 반드시 \q를 사용합니다. 입력 중인 줄을 취소하려면 Ctrl+C 대신 \r(reset)을 입력하거나, 빈 줄에서 Ctrl+C를 누릅니다. 트랜잭션 내에서 실수한 경우에는 ROLLBACK을 명시적으로 입력해 안전하게 취소하고, 정상 종료 시에는 COMMIT 후 \q를 순서대로 실행합니다.
프로덕션 서버에서 특정 API가 갑자기 느려졌을 때, DBA나 SRE는 먼저 psql로 읽기 전용 계정을 통해 프로덕션 DB에 직접 접속합니다. GUI 도구는 SSH 터널 설정이 복잡하지만 psql은 psql "postgresql://readonly:pass@prod-db:5432/mydb?sslmode=require" 한 줄로 바로 접속됩니다.
접속 후 \timing을 켜고 의심되는 쿼리를 직접 실행해 시간을 확인합니다. 느리면 EXPLAIN ANALYZE로 실행 계획을 확인해 Seq Scan 여부를 판단합니다. pg_stat_activity로 현재 실행 중인 쿼리와 대기 중인 쿼리를 조회해 잠금 경합 여부도 확인합니다. 이 루틴은 읽기 전용이므로 프로덕션에 영향을 주지 않고 안전하게 진단할 수 있습니다.
다음 모듈에서는 INNER, LEFT, RIGHT, FULL JOIN의 동작 원리와 성능 최적화 실행 조건을 다룹니다.