소개
SQLite는 관계형 데이터베이스를 간단하고 효율적으로 관리할 수 있어 널리 쓰이는 데이터베이스 엔진이에요. 임베디드 SQL 데이터베이스 엔진이라서 애플리케이션 안에서 바로 사용하는 경우가 많고, 별도의 서버 프로세스 없이도 가벼운 데이터베이스 솔루션을 제공해요. 이 튜토리얼에서는 SQLite 데이터베이스의 테이블 목록을 보는 방법을 알아볼게요. 기존 데이터베이스의 구조를 파악하거나 디버깅할 때 자주 하는 작업이에요.
사전 준비
SQLite가 설치되어 있고 사용할 수 있는 상태여야 해요. SQLite 데이터베이스는 커맨드 라인, Python 스크립트, Beekeeper Studio 같은 GUI 도구 등 다양한 방법으로 다룰 수 있어요. 이 가이드에서는 어디서나 사용할 수 있는 SQLite 커맨드 라인 도구를 사용할게요.
SQLite 데이터베이스에 접속하기
먼저 터미널이나 명령 프롬프트를 열고 SQLite 커맨드 라인 도구로 데이터베이스에 접속하세요. 데이터베이스 작업을 시작하는 기본 명령어는 다음과 같아요:
sqlite3 your_database_file.db
‘your_database_file.db’를 SQLite 데이터베이스 파일 경로로 바꾸세요.
.tables 명령어로 테이블 목록 보기
SQLite는 현재 데이터베이스의 모든 테이블을 쉽게 나열할 수 있는 .tables 명령어를 제공해요.
SQLite 커맨드 라인 셸에서 다음을 입력하세요:
.tables
이 명령어를 실행하면 SQLite가 현재 데이터베이스의 모든 테이블 이름을 반환해요.
예상 출력: (‘sakila.db’ 샘플 데이터베이스 사용)
actor experiments payment
address film rental
category film_actor sales_by_film_category
city film_category sales_by_store
country film_list staff
customer film_text staff_list
customer_list inventory store
events language
.tables 명령어는 어떻게 동작하나요?
SQLite는 메인 데이터베이스와 연결된(attached) 데이터베이스에 있는 모든 테이블과 뷰의 이름을 반환하도록 요청해요. 내부적으로는 sqlite_master 테이블에 SELECT 명령을 실행하는 방식이에요.
sqlite_master 테이블 쿼리하기
더 세밀하게 제어하고 싶다면 테이블 정의를 포함한 데이터베이스 메타데이터가 저장된 ‘sqlite_master’ 테이블을 직접 쿼리할 수 있어요.
예시:
SELECT name FROM sqlite_master WHERE type='table';
이 SQL 명령은 sqlite_master 테이블에서 type이 ‘table’인 레코드의 name 컬럼 값을 모두 조회해요.
예상 출력: (‘sakila.db’ 샘플 데이터베이스 사용)
---------------
actor
sqlite_sequence
country
city
address
language
category
customer
film
film_actor
film_category
film_text
inventory
staff
store
payment
rental
experiments
events
.schema 명령어로 테이블 스키마 보기
테이블의 구조, 즉 ‘스키마’(테이블 컬럼과 각 컬럼의 데이터 타입)를 확인하려면 SQLite가 제공하는 .schema 명령어를 사용하세요:
.schema your_table_name
예상 출력: (‘sakila.db’ 샘플 데이터베이스의 ‘actor’ 테이블 사용)
CREATE TABLE actor (
actor_id integer PRIMARY KEY AUTOINCREMENT NOT NULL,
first_name VARCHAR(45) NOT NULL,
last_name VARCHAR(45) NOT NULL,
last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
, "email_address" VARCHAR(255) NULL);
CREATE INDEX idx_actor_last_name ON actor(last_name)
;
CREATE TRIGGER actor_trigger_ai AFTER INSERT ON actor
BEGIN
UPDATE actor SET last_update = DATETIME('NOW') WHERE rowid = new.rowid;
END;
CREATE TRIGGER actor_trigger_au AFTER UPDATE ON actor
BEGIN
UPDATE actor SET last_update = DATETIME('NOW') WHERE rowid = new.rowid;
END;
‘your_table_name’을 테이블 이름으로 바꾸세요.
이 명령어는 데이터베이스에서 해당 테이블을 만들 때 사용한 CREATE TABLE 문을 반환해요.
SELECT SQL 문 사용하기
또는 sqlite_master 테이블에 SELECT 문을 실행해 스키마를 가져올 수도 있어요:
SELECT sql FROM sqlite_master WHERE name = 'your_table_name';
이 명령어는 .schema 명령어와 같은 CREATE TABLE 문을 반환하지만, ‘INDEX’와 ‘TRIGGER’ 문은 포함하지 않아요.
PRAGMA 명령어로 테이블 정보 가져오기
SQLite에서 쓸 수 있는 또 다른 방법은 SQLite 데이터베이스의 다양한 특성을 알려주는 PRAGMA 명령어예요. 그중 유용한 PRAGMA 명령어로 ‘table_info’가 있는데, 테이블의 컬럼 정보를 가져올 때 사용할 수 있어요.
‘table_info’가 모든 테이블을 나열해 주지는 않지만, 테이블 목록 명령어와 함께 사용하면 테이블 이름을 찾은 뒤 바로 구조를 파악할 수 있어요.
예시:
PRAGMA table_info('actor');
예상 출력: (‘sakila.db’ 샘플 데이터베이스의 ‘actor’ 테이블 사용)
cid name type notnull dflt_value pk
--- ------------- ------------ ------- ----------------- --
0 actor_id INTEGER 1 1
1 first_name VARCHAR(45) 1 0
2 last_name VARCHAR(45) 1 0
3 last_update TIMESTAMP 1 CURRENT_TIMESTAMP 0
4 email_address VARCHAR(255) 0 0
각 행은 ‘actor’ 테이블의 컬럼 하나를 나타내며, 필드는 순서대로 컬럼의 ‘cid’, ‘name’, ‘type’, ‘not null’ 여부, ‘기본값’, ‘기본 키’ 정보를 보여줘요.
마무리
SQLite에서 테이블 목록을 보는 것은 데이터베이스 관리와 점검의 기본 기술이에요. 빠르게 목록을 보려면 .tables 명령어를, 프로그래밍 방식으로 접근하려면 sqlite_master 테이블 쿼리를, 테이블 구조에 대한 자세한 정보가 필요하면 PRAGMA 문을 사용하세요. SQLite는 데이터베이스를 이해하고 효과적으로 다룰 수 있는 다양한 도구를 제공해요.
SQLite 테이블을 보기 위해 SQL 명령어를 이해하고 작성하는 것도 보람 있지만, 특히 대규모 데이터베이스를 다룰 때는 시간이 많이 들고 복잡할 수 있어요.
Beekeeper Studio는 데이터베이스 테이블을 사용하기 쉬운 인터페이스로 보여줘서, 수많은 테이블 사이를 더 편하게 탐색할 수 있어요.
게다가 테이블 이름만 클릭하면 어떤 테이블이든 스키마가 깔끔하게 정리된 형태로 나타나요.
Beekeeper Studio는 무료 오픈 소스 SQLite GUI예요
딱 제가 찾던 거예요. UI가 빠르고 깔끔하고, 제가 원하고 기대하는 대로 동작하면서 할 일을 확실히 해내요. SQLite 데이터베이스 작업에 완벽한 도구예요. - Andy
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬운 SQLite 클라이언트예요. 그 밖에도 다양한 데이터베이스를 지원하고, Windows, Mac, Linux에서 모두 잘 작동해요.
SQLite 사용자들의 Beekeeper Studio 후기
이걸로 데이터베이스를 쿼리하고 살펴보기 전까지는 모델 설계가 어떻게 돌아가는지 제대로 이해하지 못했어요! 제 학습 여정에 정말 큰 도움이 됐어요. 지금까지 Django + sqlite에만 써 봤기 때문에, 이걸 배우는 분들께 추천해요.
핵심은 두 가지예요. 첫째, 연결성이에요. SQLite는 DB Browser for SQLite, MySQL은 MySQL Workbench, PostgreSQL은 psql을 따로 쓸 필요가 없어요. Beekeeper 하나로 모두 다룰 수 있거든요. 둘째, AI예요. AI 기능이 영어를 SQL로 바꿔 줘요.