위클리 페이퍼: SQL 핵심 명령어 및 역정규화의 이해

1. SQL에서 DDL과 DML의 차이점 및 대표 명령어

데이터베이스를 건물에 비유하자면, DDL은 건물의 ‘뼈대’를 설계하고 짓는 것이고, DML은 그 건물 안에 ‘사람과 가구(데이터)’를 채워 넣고 관리하는 것입니다.

DDL (Data Definition Language, 데이터 정의어)

  • 용도: 데이터베이스의 구조(테이블, 뷰, 인덱스 등) 자체를 정의, 변경, 삭제하는 명령어입니다. DDL은 실행 즉시 DB에 반영(Auto Commit)되며, 트랜잭션의 롤백(Rollback) 대상이 되지 않습니다.
  • 대표 명령어:
    • CREATE: 새로운 테이블이나 데이터베이스 구조를 생성합니다.
    • ALTER: 기존 테이블의 구조(컬럼 추가/변경/삭제 등)를 수정합니다.
    • DROP: 테이블이나 데이터베이스 자체를 완전히 파괴(삭제)합니다.
    • TRUNCATE: 테이블의 뼈대는 남기되, 내부의 모든 데이터를 초기화(초고속 삭제)합니다.

DML (Data Manipulation Language, 데이터 조작어)

  • 용도: DDL로 만들어진 테이블 안에 존재하는 실제 데이터(Row)를 조회, 삽입, 수정, 삭제하는 명령어입니다. DML은 앞서 배운 트랜잭션(Transaction)의 대상이 되며, 커밋(Commit) 전에는 롤백(Rollback)으로 되돌릴 수 있습니다.
  • 대표 명령어:
    • SELECT: 조건에 맞는 데이터를 조회합니다. (※ 성격에 따라 DQL로 따로 분류하기도 합니다.)
    • INSERT: 새로운 데이터를 테이블에 삽입합니다.
    • UPDATE: 기존 데이터를 수정합니다.
    • DELETE: 조건에 맞는 데이터를 삭제합니다.

2. 역정규화(Denormalization)의 이해

역정규화가 필요한 상황

정규화(Normalization)가 중복을 없애고 데이터 무결성을 지키기 위해 테이블을 잘게 쪼개는 작업이라면, 역정규화는 시스템의 ‘조회 성능’을 극대화하기 위해 의도적으로 정규화 원칙을 위배하고 테이블을 다시 합치거나 데이터를 중복시키는 작업입니다.

  • 여러 테이블을 조인(JOIN)해야만 하는 복잡한 쿼리가 너무 많아 읽기 성능(Read Performance)이 심각하게 저하될 때.
  • 특정 데이터의 집계(Sum, Count 등) 결과를 자주 조회해야 해서 매번 실시간으로 계산하기 부담스러울 때.
  • 데이터의 삽입/수정/삭제(Write) 작업보다 조회(Select) 작업의 비율이 압도적으로 높은 서비스일 때.

적용 시 고려해야 할 사항

  • 무결성 유지 방안: 데이터를 중복해서 저장하므로, 한 곳에서 데이터가 수정되었을 때 중복된 다른 데이터도 함께 동기화되도록 애플리케이션 로직이나 DB 트리거를 반드시 꼼꼼하게 구현해야 합니다.
  • 비용 산정 트레이드오프: 조회를 빠르게 하는 대신, 쓰기(INSERT/UPDATE/DELETE) 속도는 느려지고 저장 공간(Storage)은 더 많이 차지하게 됩니다. 이 손해를 감수할 만큼 조회 성능 향상의 이점이 큰지 면밀히 계산해야 합니다.

역정규화의 장단점

  • 장점 (Pros): - 복잡한 JOIN 연산이 줄어들어 SELECT 쿼리의 응답 속도가 극적으로 향상됩니다.
    • 쿼리 구조 자체가 단순해지고 직관적으로 변합니다.
  • 단점 (Cons): - 데이터 중복으로 인해 관리 지점이 늘어나고, 데이터 불일치(Anomaly)가 발생할 위험이 커집니다. (예: A테이블의 회원 등급은 VIP로 바뀌었는데 B테이블의 등급은 여전히 일반인 상황)
    • UPDATE, INSERT 등 데이터를 조작하는 쓰기 작업의 성능이 무거워지고 느려집니다.
    • 불필요한 중복 데이터를 저장하기 위한 물리적 저장 공간이 추가로 필요합니다.