416. DML (Data Manipulation Language) - 데이터 조작어

⚠️ 이 문서는 이미 뼈대가 완성된 데이터베이스 테이블 안에, **사용자가 진짜 데이터(회원 정보, 주문 내역 등)를 집어넣고, 고치고, 지우고, 검색할 때 사용하는 '데이터 조작어(DML)'**를 다룹니다. 백엔드 개발자가 평생 치는 쿼리의 99%가 이 DML에 해당합니다.

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

  1. 본질: 테이블이라는 그릇 안에 담긴 '내용물(데이터)'을 건드리는 명령어다.
  2. 명령어 종류: SELECT(조회), INSERT(삽입), UPDATE(수정), DELETE(삭제) 4가지가 대표적이며, 흔히 CRUD라고 부른다.
  3. 치명적 특징 (트랜잭션 종속): DDL(415번 문서)과 달리, DML은 엔터를 치는 순간 디스크에 바로 박히는 게 아니라 일단 임시 메모리(메모장)에만 적힌다. COMMIT을 쳐야 비로소 영구 저장되고, 실수하면 ROLLBACK으로 취소(되돌리기)할 수 있다.

Ⅰ. 개요: 붕어빵을 굽는 시간 (Context & Necessity)

DBA(데이터베이스 관리자)가 DDL로 '회원 테이블'이라는 붕어빵 틀을 예쁘게 만들어 주었다. 이제 그 틀에 밀가루와 팥을 붓고 붕어빵을 구워낼 차례다.

고객이 회원가입 버튼을 누르면 서버는 DB에 INSERT를 날린다. 고객이 비밀번호를 바꾸면 UPDATE를 날린다. 회원 탈퇴를 하면 DELETE를 날린다. 내 정보를 보여달라고 하면 SELECT를 날린다.

이 4가지 마법의 주문이 바로 **DML(데이터 조작어)**이며, 애플리케이션의 핵심 비즈니스 로직을 구성하는 알파이자 오메가다.

📢 섹션 요약 비유: DML은 이사 갈 집에 **'가구를 채워 넣고(INSERT), 소파 위치를 바꾸고(UPDATE), 안 쓰는 의자를 버리는(DELETE) 작업'**과 같습니다. 맘에 안 들면 언제든지 ROLLBACK이라고 외치고 이사 오기 전으로 방을 싹 되돌릴 수 있죠.


Ⅱ. DML의 핵심 명령어 4형제 ★

정보처리기사 실기 시험에서는 이 명령어들의 문법을 직접 손으로 쓰게 하므로, 괄호 위치와 키워드를 완벽하게 외워야 한다.

1. INSERT (삽입)

  • 문법: INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES (값1, 값2);
  • 특징: 컬럼명을 생략할 수 있지만, 그러면 테이블의 모든 컬럼 순서에 맞춰서 빠짐없이 값을 다 넣어야 한다. (실무에서는 에러 방지를 위해 무조건 컬럼명을 명시한다.)

2. UPDATE (수정)

  • 문법: UPDATE 테이블명 SET 컬럼1 = 새값 WHERE 조건;
  • 위험성: WHERE 조건을 빼먹고 쿼리를 날리면, 해당 테이블의 100만 명 고객 데이터가 전부 똑같은 값으로 바뀌어 버리는 대참사가 발생한다. (주니어 개발자가 가장 많이 치는 사고)

3. DELETE (삭제)

  • 문법: DELETE FROM 테이블명 WHERE 조건;
  • 특징: 데이터를 지워도 테이블의 뼈대는 그대로 남는다. 그리고 DDL의 TRUNCATE와 달리 한 줄 한 줄 지우기 때문에 속도가 느린 대신 ROLLBACK이 가능하다.

4. SELECT (조회 / 검색)

  • 가장 복잡하고, 데이터베이스 성능의 90%를 좌우하는 명령어다.
  • (※ 중요도 때문에 정보처리기사에서는 DML 안에 포함하기도 하지만, 학술적으로는 데이터를 변형하지 않으므로 **DQL(Data Query Language)**이라는 별도 그룹으로 빼서 부르기도 한다.)

Ⅲ. 실무 주의점: Auto Commit의 함정

DML의 가장 큰 특징은 **"치자마자 저장되지 않는다(ROLLBACK 가능)"**는 것이다.

  • 내가 DELETE FROM Users WHERE id = 1을 쳤다고 해서 DB 디스크에서 바로 날아가는 게 아니다.
  • 내 컴퓨터(세션) 화면에서만 지워진 것처럼 보일 뿐, 다른 사람 화면에는 여전히 보인다.
  • 내가 COMMIT; 명령어를 쳐야 비로소 모두의 화면에서 완전히 지워진다.

하지만 주의할 점: MySQL을 깔고 아무 설정을 안 하면, 디폴트로 **오토 커밋(Auto Commit)**이 켜져 있다. 즉, DML을 치는 순간 내 의지와 상관없이 숨겨진 COMMIT이 자동으로 같이 실행된다. 실무에서 데이터 수정 작업을 할 때는 반드시 오토 커밋을 끄고 작업해야 대참사를 막을 수 있다.

┌──────────────────────────────────────────────────────────────┐
│           DML과 트랜잭션(COMMIT / ROLLBACK)의 관계 시각화             │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│ [ 👨‍💻 개발자 ]                                                │
│  "DELETE FROM Users WHERE name='김철수';"                      │
│                                                              │
│         ▼                                                    │
│ ┌───────────────────────┐                                    │
│ │ 🧠 트랜잭션 임시 메모리    │ ◀── (아직 디스크에 저장 안 됨)           │
│ │ - 김철수 삭제 예약됨       │                                    │
│ └───────┬───────┬───────┘                                    │
│         │       │                                            │
│   (결정) ▼       ▼ (결정)                                       │
│    [ COMMIT ]  [ ROLLBACK ]                                  │
│         │           │                                        │
│         ▼           ▼                                        │
│     💾 영구 저장    🔄 취소하고 원상복구 (철수 생존!)                  │
└──────────────────────────────────────────────────────────────┘

Ⅳ. 결론

"DML은 비즈니스의 혈관이다." 현대의 백엔드 개발자들은 ORM(JPA)을 쓰기 때문에 INSERT, UPDATE 같은 쿼리를 손으로 직접 칠 일이 거의 없어졌다. 자바 코드에서 user.setName("이영희")라고 치면 하이버네이트가 알아서 UPDATE 쿼리를 만들어 DB에 쏘아주기 때문이다. 하지만 그 마법 같은 자동화 이면에, 데이터베이스 엔진이 WHERE 조건을 어떻게 타고 들어가서 데이터를 찾고 락(Lock)을 거는지, 그 DML의 물리적인 동작 원리를 모르면 수만 명이 몰리는 이벤트 날에 쏟아지는 데드락(Deadlock)의 폭풍을 막아낼 수 없을 것이다.


📌 관련 개념 맵

  • SQL 3대장: DML (조작어), DDL (정의어 - 415번 문서), DCL (제어어 - 417번 문서)
  • 보안 공격: SQL Injection (371번 문서 - DML의 WHERE 조건을 조작하는 해킹)
  • 제어어: TCL (Transaction Control Language - COMMIT, ROLLBACK / 418번 문서)
  • 주의점: UPDATE, DELETEWHERE 절 누락 주의!

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

  1. DML은 일기장에 '연필'로 글씨를 쓰는 것과 같아요. (INSERT)
  2. 글씨를 썼다가 마음에 안 들면 언제든지 지우개로 싹싹 지우고 원래 빈 종이로 되돌릴 수 있죠. (ROLLBACK)
  3. 하지만 글씨가 마음에 들어서 '네임펜'으로 꾹꾹 덧칠해 버리면(COMMIT), 그땐 영원히 지워지지 않고 일기장에 남게 된답니다!