infra
Platform

모듈 맵

[Database] DBeaver, TablePlus, psql, mycli 실무 100% 활용법

0 / 37 완료

펼치기
0 / 37 완료0%

Database · 11 / 37

[Database] DBeaver, TablePlus, psql, mycli 실무 100% 활용법

실무에서 데이터베이스에 접속하고 관리하는 주요 도구들을 익힙니다

🚨INCIDENT ALERT
HIGH

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 vs CLI 도구 선택 — 상황별 최적 도구

주요 도구 비교

GUI 도구는 스키마 탐색, ERD 확인, 대화형 쿼리 작성에 강합니다. CLI 도구는 서버 SSH 환경, 스크립트 자동화, 빠른 점검 루틴에 강합니다. 실무에서는 평소에는 GUI를 쓰고, 프로덕션 서버 긴급 대응 시에는 CLI를 씁니다.

항목DBeaverTablePlusDataGrippsql/pgcli
가격무료유료 (~$69)유료 (~$8.9/월)무료
OS 지원모든 OSmacOS/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에 반드시 추가해야 합니다.

항목설명예시
hostDB 서버 주소localhost, 192.168.1.1
port포트 번호PostgreSQL: 5432, MySQL: 3306
dbname데이터베이스 이름shop_db, production
usernameDB 사용자postgres, admin
password비밀번호(환경변수로 관리)
💡개념

psql 핵심 사용법 — CLI에서 DB 다루기

운영 서버에 접속해서 PostgreSQL을 확인해야 합니다. GUI 도구를 설치할 수 없는 환경입니다. psql만 있는데, \l, \dt, \d tablename이 무엇을 뜻하는지 모릅니다. psql 메타 명령어를 익혀두면 어떤 서버에서도 DB 상태를 즉시 확인할 수 있습니다.

psql 핵심 사용법 — CLI에서 DB 다루기

psql 시작하기

psql은 PostgreSQL 공식 CLI 클라이언트입니다. GUI 도구가 없는 서버 환경이나 스크립트 자동화에 필수적입니다. 환경변수(PGHOST, PGPORT, PGUSER, PGDATABASE)를 미리 설정해두면 매번 플래그를 입력하지 않아도 됩니다.

DB 클라이언트
psql -h localhost -p 5432 -U postgres -d mydb
psql "postgresql://postgres:password@localhost:5432/mydb"
OUTPUT
실행 완료 또는 조회 결과가 표시됩니다.
🔍실행 후 확인할 것
  • 접속 대상현재 연결한 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 서버 파일시스템 경로를 사용해 로컬 환경에서 동작하지 않을 수 있습니다.

SQL
\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를 순서대로 실행합니다.

💼
실무 맥락프로덕션 DB 서버에 읽기 전용 계정으로 접속해 슬로우 쿼리 원인을 파악해야 하는 상황
현업 패턴

프로덕션 서버에서 특정 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의 동작 원리와 성능 최적화 실행 조건을 다룹니다.

지식 확인

퀴즈 — 4문제

Q1

psql로 운영 DB에 접속 후 마이그레이션이 제대로 적용됐는지 확인하려 합니다. 현재 데이터베이스의 모든 테이블 목록을 보고, users 테이블의 컬럼 구조를 확인하는 올바른 명령 순서는?

Q2

운영 서버에서 psql 접속 후 특정 테이블이 예상보다 용량이 큰 것을 발견했다. 해당 테이블의 인덱스 포함 전체 크기를 가장 빠르게 확인하는 방법은?

Q3

PostgreSQL 연결 문자열(Connection String)의 올바른 형식은?

Q4

슬로우 쿼리가 의심되는 상황에서 psql에서 특정 SELECT 쿼리가 실제로 몇 ms 걸리는지 빠르게 확인하려 합니다. 실행 계획 없이 순수 실행 시간만 보는 가장 간단한 방법은?

0 / 4 답변

🧪 실습으로 확인하기

PostgreSQL 설치 및 기본 설정

초급

Ubuntu 서버에 PostgreSQL을 설치하고, 데이터베이스와 사용자를 생성한 뒤 외부 접속이 가능하도록 설정한다.

40📋 5단계💻 직접 환경
실습 시작하기 →

이것도 배워보세요

database중급 · 55
[Database] 서브쿼리와 CTE(WITH 문)를 활용한 쿼리 구조화
Database 트랙 계속
linux입문 · 30
[Linux] 개발자가 왜 리눅스 서버와 커맨드라인을 반드시 배워야 하는가
Linux 트랙 시작점