Daily Dev Q&A: DDL, DML, DCL

2025. 12. 18. 17:43·Archive/Daily Dev Q&A

Daily Dev Q&A: SQL 명령어 (DDL, DML, DCL)

Topic (오늘의 주제)

SQL 명령어 분류 (DDL, DML, DCL)

: 데이터베이스와 소통하기 위한 SQL(Structured Query Language)을 그 목적과 기능에 따라 분류한 것.

Why (왜 사용하는가? 왜 중요한가?)

  • 실무: 내가 지금 치려는 명령어가 되돌릴 수 있는지(Rollback), 아니면 **즉시 반영(Auto-commit)**되는지 구분하지 못하면 대형 사고(데이터 영구 삭제)로 이어진다.
  • 구조적 의미: 데이터베이스의 '구조(뼈대)'를 만드는 것과 그 안의 '데이터(내용물)'를 다루는 것, 그리고 '접근 권한(보안)'을 제어하는 역할을 명확히 분리한다.
  • 면접 의도: DELETE, TRUNCATE, DROP의 차이를 명확히 아는지, 트랜잭션이 적용되는 범위(DML)를 이해하고 있는지 확인한다.

Core Concept (핵심 개념 정리)

분류 풀이 (Full Name) 핵심 역할 주요 명령어 트랜잭션 (Rollback)
DDL Data Definition Language

(데이터 정의어)
**구조(Schema)**를 정의, 변경, 삭제함. (테이블 생성 등) CREATE, ALTER, DROP, TRUNCATE 불가능 (대부분 Auto-commit)
DML Data Manipulation Language

(데이터 조작어)
**데이터(Row)**를 조회, 삽입, 수정, 삭제함. SELECT, INSERT, UPDATE, DELETE 가능 (Commit/Rollback 필요)
DCL Data Control Language

(데이터 제어어)
데이터 접근 권한을 부여하거나 회수함. GRANT, REVOKE -

참고 (TCL): DML을 제어하는 COMMIT, ROLLBACK을 별도로 **TCL(Transaction Control Language)**로 분류하기도 합니다.

Interview Answer Version (면접 답변식 요약)

"SQL 명령어는 역할에 따라 크게 세 가지로 나뉩니다.

테이블 같은 데이터 구조를 정의하는 DDL, 실제 데이터를 조회하거나 조작하는 DML, 그리고 데이터 접근 권한을 관리하는 DCL입니다.

가장 큰 차이점은 DML은 트랜잭션이 적용되어 롤백이 가능하지만, DDL은 실행 즉시 반영되어 롤백이 불가능하다는 점입니다."

Practical Tip (사용시 주의할 점 or 활용 예)

1. DELETE vs TRUNCATE (실무/면접 빈출 1순위)

둘 다 데이터를 지우지만, 동작 방식이 완전히 다릅니다.

  • DELETE (DML):
    • 데이터를 한 줄씩 지우며 로그를 남깁니다.
    • 느립니다.
    • 실수하면 Rollback 가능합니다.
    • WHERE 조건절을 쓸 수 있습니다. (특정 데이터만 삭제 가능)
  • TRUNCATE (DDL):
    • 테이블의 공간을 통째로 잘라냅니다(초기화).
    • 매우 빠릅니다.
    • 실행 즉시 반영되어 Rollback 불가능합니다. (복구 불가)
    • 조건 없이 전체 삭제만 가능합니다.

2. Oracle 사용 시 주의점 (Auto-commit)

  • 사용자님이 관심 있는 Oracle 데이터베이스에서는 DDL(CREATE, ALTER 등)을 실행하면, 그 이전에 실행했던 DML(INSERT 등)까지 강제로 Commit 되어버립니다.
  • 시나리오: 데이터를 열심히 INSERT 하다가(아직 커밋 안 함), 테이블 컬럼을 ALTER로 수정하는 순간, 앞선 INSERT들이 자동으로 DB에 영구 저장됩니다.

예상 꼬리 질문 정리

  1. "DELETE, TRUNCATE, DROP 명령어의 차이점을 설명해 주세요."
    • (DELETE: 데이터만 삭제(복구O), TRUNCATE: 데이터 전체 초기화(복구X), DROP: 테이블 자체를 파괴)
  2. "DML 중 SELECT를 따로 DQL(Data Query Language)로 분류하기도 하는데, 그 이유는 무엇일까요?"
    • (SELECT는 데이터의 상태를 변경하지 않고 조회만 하기 때문이라는 점 언급)
  3. "DDL은 왜 롤백이 안 되나요?"
    • (데이터 딕셔너리(시스템 카탈로그)에 정의를 바로 반영하기 때문에 트랜잭션 로그를 쌓지 않는 구조적 특징 설명)

'Archive > Daily Dev Q&A' 카테고리의 다른 글

Daily Dev Q&A: Spring Framework  (0) 2025.12.23
Daily Dev Q&A: 트랜잭션 (Transaction)  (0) 2025.12.22
Dailly Dev Q&A: 정규화  (0) 2025.12.18
Daily Dev Q&A: 자바의 람다 표현식  (0) 2025.12.16
Daily Dev Q&A: RDBMS  (0) 2025.12.15
'Archive/Daily Dev Q&A' 카테고리의 다른 글
  • Daily Dev Q&A: Spring Framework
  • Daily Dev Q&A: 트랜잭션 (Transaction)
  • Dailly Dev Q&A: 정규화
  • Daily Dev Q&A: 자바의 람다 표현식
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    backend
    jpa
    프로덕트개발자
    REACT
    DevFestIncheon2025
    경기기후바이브코딩
    java
    클로드코드
    커리어리셋
    spring
    til
    network
    aws_s3
    OrphanRemova
    SpringBoot
    데브페스트
    Project_Review
    Spring비교
    devlog
    프로젝트회고
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
Daily Dev Q&A: DDL, DML, DCL
상단으로

티스토리툴바