393. 데이터 사전 (Data Dictionary) 질의

⚠️ 이 문서는 데이터베이스 안에 사용자의 데이터(회원, 주문)만 있는 것이 아니라, **"어떤 테이블이 있는지, 누가 어떤 권한을 가지고 있는지"를 DB 스스로 기억하고 관리하는 특수한 시스템 테이블의 모음인 '데이터 사전'**을 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 데이터베이스를 구성하는 모든 개체(테이블, 인덱스, 뷰, 사용자 등)에 대한 '데이터에 관한 데이터(메타데이터)'를 저장해 둔 시스템 내부의 특별한 저장소다.
  2. 접근 권한: 일반 사용자는 이 내용을 읽을(조회할) 수만 있고, 내용을 직접 수정(INSERT, UPDATE)할 수는 없다. 수정은 오직 DB 시스템 스스로가 한다.
  3. 구조: 데이터 사전(Data Dictionary)과 시스템 카탈로그(System Catalog)는 실무에서 거의 동의어로 쓰이며, 시험에서는 이들의 '읽기 전용' 특성과 '시스템에 의한 자동 유지보수' 특성을 묻는 문제가 자주 출제된다.

Ⅰ. 개요: 데이터베이스의 '호적 등본' (Context & Necessity)

우리가 CREATE TABLE Users ... 라는 명령어를 쳐서 테이블을 하나 만들었다고 치자. 내일 출근해서 "우리 DB에 Users 테이블이 있던가?"라고 궁금해지면 어떻게 해야 할까?

DB 엔진도 인간과 똑같다. 자기가 무슨 테이블을 가지고 있는지 어딘가에 적어둬야 기억할 수 있다. 데이터베이스는 사용자가 CREATEALTER 명령을 칠 때마다, 조용히 자기만의 비밀 장부에 **"2026년 4월 10일에 Users라는 테이블이 만들어졌음. 컬럼은 3개임."**이라고 적어둔다. 이 비밀 장부가 바로 **데이터 사전(Data Dictionary)**이다.

📢 섹션 요약 비유: 사용자가 만든 '회원 테이블'이 **'도서관에 있는 책들'**이라면, 데이터 사전은 도서관 입구에 있는 **'도서 검색용 컴퓨터(목록)'**와 같습니다. 책이 어디에 꽂혀있는지, 누가 빌려 갔는지에 대한 정보가 모두 이 컴퓨터 안에 들어있습니다.


Ⅱ. 데이터 사전의 3대 핵심 특징 ★

시험에 가장 자주 나오는 기출 포인트다.

1. 메타데이터 (Metadata) 보관

  • 사용자의 진짜 데이터(예: 김철수, 20살)를 저장하지 않는다.
  • 데이터베이스의 스키마, 사용자 권한, 인덱스 정보 등 **'데이터를 설명하는 데이터(Metadata)'**를 저장한다.

2. 시스템에 의한 자동 갱신

  • 개발자가 UPDATE 데이터사전 SET ... 이라고 직접 내용을 고칠 수 없다.
  • 개발자가 CREATE TABLE 명령어를 치면, DB 엔진(DBMS)이 알아서 데이터 사전에 내용을 추가한다. (자동 유지보수)

3. 사용자는 '읽기 전용 (Read-Only)'

  • 시스템 관리자나 일반 사용자는 데이터 사전의 내용을 조회(SELECT)할 수만 있다.
  • "우리 DB에 테이블 몇 개 있지?"라는 질문에 대답하기 위해 뷰(View) 형태로 제공된다.

Ⅲ. 실무에서의 데이터 사전 질의 (Oracle vs MySQL)

실제 데이터베이스에서 데이터 사전을 어떻게 뒤져보는지 살펴보자.

1. Oracle (가장 체계적인 데이터 사전)

오라클은 권한에 따라 3가지 접두사로 뷰를 제공한다.

  • USER_ : 내가 만든 객체만 보여줌 (예: SELECT * FROM USER_TABLES;)
  • ALL_ : 내가 접근할 수 있는 모든 객체를 보여줌
  • DBA_ : DB 전체의 모든 객체를 보여줌 (관리자 전용)

2. MySQL / MariaDB (Information Schema)

  • MySQL은 information_schema라는 별도의 가상 데이터베이스를 통해 데이터 사전을 제공한다.
    -- 현재 DB의 모든 테이블 이름 보기
    SELECT TABLE_NAME FROM information_schema.tables WHERE table_schema = 'my_database';
    
┌──────────────────────────────────────────────────────────────┐
│           사용자 테이블과 데이터 사전(Data Dictionary)의 관계 시각화    │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ [ 👨‍💻 DBA / 개발자 ]                                           │
│   "CREATE TABLE Board (...);"                                │
│         │                                                    │
│         ▼                                                    │
│ ┌──────────────────────┐   (DB 엔진이 1번과 2번을 동시에 처리함) │
│ │ ⚙️ DBMS (데이터베이스) │                                      │
│ └───────┬──────┬───────┘                                     │
│         │      │                                             │
│  (1. 실제 테이블 생성)    (2. 데이터 사전에 기록!)                    │
│         ▼      ▼                                             │
│ [ 📦 Board 테이블 ]    [ 📖 Data Dictionary (시스템 테이블) ]  │
│  (빈 공간)              - 테이블명: Board                       │
│                        - 생성일자: 2026-04-10                  │
│                        - 컬럼 수: 5개                          │
│                                                              │
│ ★ 특징: 사용자는 📖 데이터 사전을 SELECT로 읽어볼 수만 있다.          │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"데이터베이스를 이해하려면 데이터 사전을 읽을 줄 알아야 한다." 데이터 사전은 시스템의 나침반이다. ORM(JPA) 같은 도구가 자동으로 데이터베이스의 테이블 구조를 긁어와서 자바 코드로 만들어주거나(리버스 엔지니어링), DB 시각화 도구(DBeaver, DataGrip)가 왼쪽에 예쁜 트리 구조로 테이블 목록을 띄워줄 수 있는 것도 모두 이 '데이터 사전'을 몰래 SELECT해서 읽어온 결과다. 이 개념을 명확히 이해해야 데이터베이스 엔진이 내부적으로 어떻게 움직이는지 깨달을 수 있다.


📌 관련 개념 맵

  • 유사 개념: 시스템 카탈로그 (System Catalog - 394번 문서)
  • 저장되는 내용: Metadata (메타데이터), Schema (스키마 - 391번 문서)
  • 주요 시스템 DB: information_schema (MySQL), pg_catalog (PostgreSQL)
  • 사용자 권한: Read-only (읽기 전용)

👶 어린이를 위한 3줄 비유 설명

  1. 일반 테이블이 학생들이 쓰는 '공책'이라면, 데이터 사전은 선생님만 몰래 가지고 계신 '학생 출석부'예요.
  2. 학생이 전학을 오면(CREATE TABLE), 선생님이 알아서 출석부에 이름을 적어 넣으시죠.
  3. 우리는 선생님 출석부를 뺏어서 마음대로 이름을 고칠 수는 없고, "선생님 우리 반 몇 명이에요?"라고 물어보고 대답을 들을 수만(SELECT) 있답니다!