415. DDL (Data Definition Language) - 데이터 정의어
⚠️ 이 문서는 데이터베이스 안에 사용자의 데이터(회원, 게시글)를 넣기 전에, **데이터가 들어갈 집(테이블)과 창고(데이터베이스), 그리고 길(인덱스)을 짓거나 부수는 건축용 명령어 모음인 'DDL(데이터 정의어)'**을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 데이터가 아니라 '데이터를 담는 그릇(구조, 스키마)'을 만들고 수정하고 지우는 명령어다.
- 명령어 종류:
CREATE(생성),ALTER(수정),DROP(삭제),TRUNCATE(내용만 삭제)가 대표적이다.- 치명적 특징 (오토 커밋): DDL은 명령어를 치고 엔터를 누르는 순간 **즉시 디스크에 영구 반영(Auto Commit)**되며, 절대
ROLLBACK(되돌리기)을 할 수 없으므로 실무에서 가장 조심해야 하는 명령어다.
Ⅰ. 개요: 건물을 짓고 부수는 사람들 (Context & Necessity)
백엔드 개발자가 SQL을 쓸 때, 대부분은 SELECT나 UPDATE 같은 데이터 조작(DML)에 익숙하다.
하지만 아키텍트나 DBA(데이터베이스 관리자)는 시스템을 처음 세팅할 때 집터(Database)를 닦고, 방(Table)을 만들고, 문패(Column)를 달아주는 작업을 먼저 해야 한다.
이 '구조 설계' 작업을 수행하는 언어가 바로 DDL이다.
- 건물을 지을 때 설계도가 한 번 확정되면 나중에 화장실 위치를 바꾸기 어렵듯이, DDL로 정의된 스키마는 시스템 운영 중에 함부로 바꾸면 큰 장애를 유발한다.
📢 섹션 요약 비유: DDL은 **'아파트 건축 공사'**와 같습니다.
CREATE로 아파트를 짓고,ALTER로 베란다를 확장하고,DROP으로 건물을 폭파합니다. 한 번 폭파한 건물은 시간을 되돌릴 수 없죠(ROLLBACK 불가). 반면 DML(데이터 조작)은 지어진 아파트에 가구를 넣고 빼는 가벼운 작업입니다.
Ⅱ. DDL의 핵심 명령어 4형제 ★
시험에 100% 출제되며, 각 명령어의 정확한 스펠링과 용도를 알아야 한다.
1. CREATE (생성)
- 데이터베이스, 테이블, 인덱스, 뷰 등 '새로운 개체(Object)'를 만들 때 쓴다.
- 예:
CREATE TABLE Users (id INT PRIMARY KEY, name VARCHAR(20));
2. ALTER (수정)
- 이미 만들어진 테이블의 뼈대(컬럼)를 고칠 때 쓴다. (가구 배치를 바꾸는 게 아니라 벽을 허무는 수준의 작업이다)
- 컬럼 추가:
ALTER TABLE Users ADD age INT; - 컬럼 삭제:
ALTER TABLE Users DROP COLUMN age;
3. DROP (삭제 - 건물 폭파)
- 개체 자체를 아예 세상에서 지워버린다. 데이터는 물론이고 뼈대(테이블 구조)까지 통째로 날아간다.
- 예:
DROP TABLE Users;(이제Users테이블은 존재하지 않음)
4. TRUNCATE (초기화 - 리모델링) ★ (가장 헷갈리는 녀석)
- 테이블의 '뼈대'는 그대로 살려두되, 그 안에 있는 모든 데이터(행)만 0.01초 만에 싹 다 지워버리는 '빠른 초기화' 명령어다.
DELETE FROM Users와 결과는 같지만,TRUNCATE는 DDL이라서 롤백(복구)이 불가능하고 속도가 압도적으로 빠르다. (시험 단골 문제)
Ⅲ. 실무 주의점: DDL과 테이블 락 (Table Lock)
실무에서 신입 개발자가 가장 많이 내는 대형 사고가 바로 DDL이다.
"사용자 테이블에 이메일 컬럼 하나만 추가할게요~ ALTER TABLE Users ADD email... 쾅!"
- 결과: 회원이 1,000만 명 있는 테이블에
ALTER를 치면, DB는 컬럼을 추가하는 몇 분~몇 시간 동안 그 테이블에 무지막지한 **테이블 락(Table Lock)**을 걸어버린다. - 그 시간 동안 고객들은 로그인도 못 하고 회원가입도 못 해서 쇼핑몰이 완전히 마비된다.
- 해결책: 무거운 테이블의 DDL 수정은 반드시 새벽에 점검 시간을 잡고 하거나, 'pt-online-schema-change' 같은 무중단 DDL 툴을 써야 한다.
┌──────────────────────────────────────────────────────────────┐
│ DDL (CREATE, ALTER, DROP) 명령어의 작용 범위 시각화 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [ 🏗️ DDL의 영역 (데이터가 아니라 '뼈대'를 건드림) ] │
│ │
│ 1️⃣ CREATE TABLE ──▶ ┌────────┬────────┐ (새로운 뼈대 생성) │
│ │ ID │ 이름 │ │
│ └────────┴────────┘ │
│ │
│ 2️⃣ ALTER TABLE ──▶ ┌────────┬────────┬──────┐ (뼈대 수정) │
│ (ADD 나이) │ ID │ 이름 │ 나이 │ │
│ └────────┴────────┴──────┘ │
│ │
│ 3️⃣ DROP TABLE ──▶ 💥 (테이블의 존재 자체가 우주에서 소멸함) │
│ │
│ ★ 특징: 명령어 치는 순간 즉시 저장됨 (Auto Commit), 취소 절대 불가! │
└──────────────────────────────────────────────────────────────┘
Ⅳ. 결론
"데이터를 다루는 자와 구조를 다루는 자의 무게감은 다르다."
데이터베이스 세계에서 DDL은 조물주의 권한이다. INSERT를 잘못하면 한 명의 고객이 에러를 겪지만, ALTER나 DROP을 잘못 치면 회사 전체의 서비스가 다운된다. 그래서 실무에서는 일반 개발자에게는 DDL 권한을 아예 주지 않고(오직 SELECT, UPDATE만 가능), 팀장급 이상의 DBA만이 DDL을 실행할 수 있도록 권한(DCL - 417번 문서)을 철저하게 분리해 둔다.
📌 관련 개념 맵
- SQL 3대장: DDL (정의어), DML (조작어 - 416번 문서), DCL (제어어 - 417번 문서)
- 특징적 명령어:
TRUNCATE(DML인 DELETE와 비교 필수) - 관련 개념: 스키마 (Schema - 391번 문서), 데이터 사전 (Data Dictionary - 393번 문서)
- 주의점: Auto Commit (자동 커밋), Rollback 불가
👶 어린이를 위한 3줄 비유 설명
- DDL은 레고로 '집의 벽과 지붕(테이블)'을 만드는 설명서예요.
CREATE로 멋진 집을 짓고,ALTER로 창문을 하나 더 뚫고,DROP으로 맘에 안 드는 집을 발로 차서 부숴버리죠.- 한 번 부서진 레고 집은 "아차! 되돌리기(Rollback)!"라고 외쳐도 절대 원래대로 돌아오지 않으니 아주 조심해서 부숴야 한답니다!