본문 바로가기
C.W.K.
Stream
Lesson 10 of 10 · published

인터랙티브 쉘 — Dot 명령 + REPL Workflow

~14 min · sqlite, cli, dot-commands, repl

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

쉘이 만능 칼이야

sqlite3 CLI는 query만 돌려주는 물건이 아니야. dot 명령이라는 자기만의 meta-command 언어를 가진 온전한 인터랙티브 쉘이지. 앞에 .이 붙으면 SQLite가 아니라 쉘이 그 줄을 해석해.

실제로 손이 자주 가는 건 이 열세 개야.

  • .help — dot 명령을 한 줄 설명과 함께 쭉 보여줘.
  • .tables — 지금 DB에 있는 테이블을 보여줘.
  • .schema [TABLE] — CREATE statement를 찍어줘. 테이블 이름을 주면 그것만 나와.
  • .indexes [TABLE] — 인덱스를 보여줘.
  • .databases — 지금 붙어 있는 DB를 보여줘.
  • .mode column|box|csv|json|markdown|line — 결과 출력 형식을 바꿔.
  • .headers on — 컬럼 이름을 같이 찍어줘.
  • .timer on — query마다 걸린 시간을 찍어줘.
  • .read FILE.sql — 파일에 든 SQL을 실행해.
  • .import FILE TABLE — CSV나 TSV를 통째로 밀어넣어.
  • .dump — DB를 그대로 재현하는 SQL 스크립트를 뱉어.
  • .backup TARGET.db — 안전하게 online snapshot을 떠.
  • .quit — 쉘을 닫아. Ctrl-D도 같은 일을 해.
Tip: 새 세션을 열면 1초 안에 .mode box.headers on부터 쳐. 기본 list 모드는 컬럼이 다섯 개만 넘어가도 눈으로 못 따라가는데, box 모드는 Unicode로 표를 그려주고 긴 값도 잘 살려줘.

CLI를 batch 모드로 돌려서 SQL을 파이프로 넣고 결과를 파이프로 받을 수도 있어. 스크립트나 cron, 한 번 보고 말 탐색에는 이게 딱이야.

Code

울지 않게 해주는 REPL workflow·bash
sqlite3 myapp.db <<'EOF'
.headers on
.mode box
.timer on
.tables
.schema users
SELECT count(*) AS n_users FROM users;
EOF

# 출력:
# users notes  conversations
# CREATE TABLE users(...)
# ┌──────────┐
# │ n_users  │
# ├──────────┤
# │ 42       │
# └──────────┘
# Run Time: real 0.001 user 0.000 sys 0.000
저장된 REPL 설정 — 쉘 열 때마다 적용·bash
# ~/.sqliterc
.headers on
.mode box
.timer on
.changes on
.nullvalue NULL

# 그 다음 CLI 열면 위 설정 자동 적용
sqlite3 myapp.db
SQL 파이프 입력, JSON 출력 — jq와 궁합 최고·bash
sqlite3 myapp.db -json 'SELECT id, email FROM users LIMIT 3' | jq
# [
#   { "id": 1, "email": "alice@x.com" },
#   { "id": 2, "email": "bob@x.com" },
#   { "id": 3, "email": "carol@x.com" }
# ]

External links

Exercise

~/.sqliterc에 dot 명령을 최소 세 개는 기본값으로 켜놔. 그다음 네가 실제로 가진 SQLite DB를 하나 열어. 피파 것이든 브라우저 것이든 네가 만든 것이든 상관없어. .tables.schema, .indexes로 처음 보는 테이블 하나를 끝까지 파헤쳐서, 그 앱이 데이터를 어떻게 모델링했는지 알아낸 걸 정리해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.