본문으로 건너뛰기
AIDevOps
  • Learn
  • Learning Paths
  • Practice
  • Open Source
  • Books
  • Engineering

    AI DevOpsAI 서비스 개발·운영 전체 지도LLMOpsLLM 배포·평가·관측실전 프로젝트AI Agent 프로젝트 실습

    Knowledge

    Docs기술 문서 모음Blog엔지니어링 아티클Plogger개발 기록 피드

    Validate

    Certification3단계 역량 인증 · 준비 중
AI Models
LlamaMistralGemmaDeepSeekQwen
💾 Database
DB 입문 & 로드맵공통 SQLOracleMySQLPostgreSQL|MongoDB벡터 DB
🤖 AI 실전 개발
AI 실전 입문 & 로드맵Hugging FaceLangChainLlamaIndexLLMOps|LangGraphMCPMulti-AgentAgent Evaluation
🧠 AI Core
AI 입문 & 로드맵ML FundamentalsLLM Fundamentals|Python AIC++|PyTorchTensorFlowJAX
🧠 AI Agent 개발
금융 AI AgentLLM API 서버주식 투자 AgentAIOps AI Agent교육 AI Agent코딩 AI Agent
🌱 Spring Cloud
Spring 입문 & 로드맵Spring Cloud GatewaySpring BootJava|Spring AISpring SecuritySpring BatchSpring JPA
🐳 DevOps
DevOps 입문 & 로드맵LinuxDockerCI/CD|Kubernetes 기본K8s 심화/실무PrometheusGrafana
🧱 인프라
인프라 입문 & 로드맵NginxRedis
☁️ 클라우드
클라우드 입문 & 로드맵AWSGCPAzureNCPCloudflare
🎨 Frontend
Frontend 입문 & 로드맵JavaScriptTypeScript|ReactNext.js|VueNuxt
📱 Mobile
Mobile 입문 & 로드맵KotlinAndroidFlutter
⚙️ Backend
Backend 입문 & 로드맵Python 기본FastAPIDjangoFlask|CGoGinNode.js
🧪 검증
k6JMeternGrinder
AIDevOps

Engineering AI. From Code to Production.
AI와 AI Agent를 개발하고 운영하기 위한 엔지니어링 학습 플랫폼

Learn

  • 전체 가이드
  • Learning Paths
  • Practice
  • Books

Resources

  • AI DevOps
  • LLMOps
  • 실전 프로젝트
  • Docs
  • Blog
  • Plogger
  • Open Source
  • Certification (준비 중)

Start Here

  • AI Core 로드맵
  • AI 실전 개발 로드맵
  • Spring Cloud 로드맵
  • DevOps 로드맵
  • 인프라 로드맵

 

  • 클라우드 로드맵
  • Frontend 로드맵
  • Mobile 로드맵
  • Backend 로드맵
  • Database 로드맵
© 2026 AI DevOps Korea. All rights reserved.
이용약관개인정보처리방침Sitemaptestforge.kr
  1. Home
  2. Learn
  3. Database
  4. 공통 SQL
관계형 데이터베이스(RDB) 표준 SQL 가이드

💾 공통 SQL 완전 가이드

Visitors

관계형 데이터베이스의 핵심인 SQL(Structured Query Language)의 공통 표준 문법과 성능 튜닝의 기초를 다룹니다. DDL, DML부터 조인(Join), 서브쿼리, 그룹화 및 인덱스를 활용한 조회 성능 개선까지 핵심 실무 지식을 학습합니다.

  • Beginner · 입문
  • 업데이트 2026.06.21
  • 약 9분 읽기
  • 11개 섹션
  • 예제 코드 7개
💾
테이블 설계 (DDL)데이터 조작 (DML)조인(JOIN) 최적화그룹화 및 집계

관련 프레임워크 & 개발환경

🔴Oracle→🐬MySQL→🐘PostgreSQL→🍃MongoDB→

목차

0 / 13
  1. 가이드 사용법
  2. 구조 다이어그램
  3. RDBMS와 SQL 개요
  4. 테이블 정의 & 제약조건 (DDL)
  5. 데이터 조회 & 조작 (DML)
  6. 다중 테이블 조인 (JOIN)
  7. 그룹화 및 집계 (GROUP BY / HAVING)
  8. DCL 권한 관리 & 보안 (GRANT / REVOKE)
  9. 캐릭터셋과 인코딩 가이드
  10. 인덱스와 실행 계획 기초
  11. 공통 SQL 설계
  12. 운영 기준
  13. 검증 전략
목차 13개 섹션
  1. 가이드 사용법
  2. 구조 다이어그램
  3. RDBMS와 SQL 개요
  4. 테이블 정의 & 제약조건 (DDL)
  5. 데이터 조회 & 조작 (DML)
  6. 다중 테이블 조인 (JOIN)
  7. 그룹화 및 집계 (GROUP BY / HAVING)
  8. DCL 권한 관리 & 보안 (GRANT / REVOKE)
  9. 캐릭터셋과 인코딩 가이드
  10. 인덱스와 실행 계획 기초
  11. 공통 SQL 설계
  12. 운영 기준
  13. 검증 전략

가이드 사용법

읽는 방향

공통 SQL를 실무 흐름으로 이해하기

관계형 데이터베이스의 핵심인 SQL(Structured Query Language)의 공통 표준 문법과 성능 튜닝의 기초를 다룹니다. DDL, DML부터 조인(Join), 서브쿼리, 그룹화 및 인덱스를 활용한 조회 성능 개선까지 핵심 실무 지식을 학습합니다. 이 가이드는 개념을 나열하기보다, 실제 프로젝트에서 판단해야 하는 순서대로 내용을 따라갈 수 있게 구성했습니다.

핵심 관점

데이터베이스

쿼리 문법과 함께 스키마 설계, 인덱스, 트랜잭션, 권한, 백업까지 운영 관점으로 봅니다.

테이블 설계 (DDL)데이터 조작 (DML)조인(JOIN) 최적화그룹화 및 집계

구조 다이어그램

글로 읽은 내용을 머릿속에 오래 남기려면 먼저 흐름을 그림으로 잡는 편이 좋습니다. 아래 두 그림은 공통 SQL를 학습할 때 계속 되돌아볼 수 있는 기준 지도입니다.

학습 흐름

다이어그램 렌더링 중…

아키텍처 관점

다이어그램 렌더링 중…

RDBMS와 SQL 개요

공통 SQL를 처음 펼칠 때는 세부 명령보다 큰 그림이 먼저입니다. 이 섹션에서는 앞으로 배울 개념들이 어떤 문제를 풀기 위해 등장했는지부터 잡아봅니다.

관계형 데이터베이스 관리 시스템(RDBMS)은 데이터를 행(Row)과 열(Column)로 구성된 2차원 테이블 형태로 관리하며, SQL은 이 데이터를 제어하기 위한 표준 언어입니다. 표준 SQL(ANSI SQL)을 기반으로 각 RDB 제품(Oracle, MySQL, PostgreSQL 등)이 세부 방언을 더해 사용합니다.
SQL 분류설명대표 명령어
DDL (Data Definition Language)데이터 구조(테이블, 인덱스 등)를 정의 및 변경CREATE, ALTER, DROP, TRUNCATE
DML (Data Manipulation Language)데이터를 삽입, 조회, 수정, 삭제SELECT, INSERT, UPDATE, DELETE
DCL (Data Control Language)데이터베이스 접근 권한 및 보안 설정GRANT, REVOKE
TCL (Transaction Control Language)트랜잭션의 제어와 일관성 보장COMMIT, ROLLBACK, SAVEPOINT

테이블 정의 & 제약조건 (DDL)

여기서는 테이블 정의 & 제약조건 (DDL)을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

데이터 무결성(Integrity)을 보장하기 위해 기본키(PK), 외래키(FK), Not Null, Unique, Check 등의 제약조건을 올바르게 정의하는 것이 RDB 설계의 시작입니다.
ddl_schema.sqlSQL
-- 부서 테이블 생성
CREATE TABLE departments (
    dept_id INT PRIMARY KEY,
    dept_name VARCHAR(50) NOT NULL UNIQUE
);

-- 사원 테이블 생성
CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    emp_name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    salary DECIMAL(10, 2) CHECK (salary > 0),
    dept_id INT,
    hire_date DATE DEFAULT CURRENT_DATE,
    CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id) ON DELETE SET NULL
);

데이터 조회 & 조작 (DML)

여기서는 데이터 조회 & 조작 (DML)을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

기본적인 CRUD 작업과 정렬, 필터링, 페이징 처리를 다룹니다.
dml_examples.sqlSQL
-- 데이터 삽입
INSERT INTO departments (dept_id, dept_name) VALUES (10, 'Engineering');
INSERT INTO employees (emp_id, emp_name, salary, dept_id) VALUES (1, 'John Doe', 75000.00, 10);

-- 데이터 조회 (필터링 및 정렬)
SELECT emp_name, salary
FROM employees
WHERE salary >= 50000
ORDER BY salary DESC;

-- 데이터 수정 및 삭제
UPDATE employees SET salary = salary * 1.1 WHERE emp_id = 1;
DELETE FROM employees WHERE emp_id = 1;

다중 테이블 조인 (JOIN)

여기서는 다중 테이블 조인 (JOIN)을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

여러 테이블에 분산되어 저장된 연관 데이터를 결합하여 단일 결과 집합으로 만드는 기법입니다. 조인의 종류에 따른 결과 집합의 차이를 명확히 이해해야 합니다.
joins.sqlSQL
-- INNER JOIN: 양쪽 테이블에 모두 일치하는 행만 조회
SELECT e.emp_name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id;

-- LEFT OUTER JOIN: 왼쪽 테이블 전체와 오른쪽의 일치하는 행 조회 (일치하지 않으면 NULL)
SELECT e.emp_name, d.dept_name
FROM employees e
LEFT OUTER JOIN departments d ON e.dept_id = d.dept_id;

Tip

  • 조인 대상 컬럼에는 가급적 인덱스를 생성하여 테이블 전체 스캔(Full Table Scan)을 방지합니다.
  • Outer Join 시 조건절의 위치(ON vs WHERE)에 따라 결과가 완전히 달라질 수 있으므로 유의해야 합니다.

그룹화 및 집계 (GROUP BY / HAVING)

여기서는 그룹화 및 집계 (GROUP BY / HAVING)을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

대량의 로우를 특정 기준 필드로 그룹화하고 sum, avg, count 등의 집계 함수를 적용합니다. HAVING은 집계된 결과 그룹에 대한 조건 필터링에 사용됩니다.
aggregation.sqlSQL
-- 부서별 사원 수와 평균 급여 조회 (평균 급여 60000 이상인 부서만)
SELECT dept_id, COUNT(*) AS emp_count, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
HAVING AVG(salary) >= 60000;

DCL 권한 관리 & 보안 (GRANT / REVOKE)

여기서는 DCL 권한 관리 & 보안 (GRANT / REVOKE)을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

데이터베이스 자원에 대한 접근 보안을 통제하기 위해 DCL(GRANT, REVOKE)을 사용합니다. 권한은 시스템 자원 생성/변경 권한인 시스템 권한(System Privilege)과 특정 테이블/뷰의 데이터 조작 권한인 오브젝트 권한(Object Privilege)으로 구분됩니다.
dcl_privileges.sqlSQL
-- 1. 사용자 생성 (공통 RDB 개념)
CREATE USER read_only_user IDENTIFIED BY 'secure_password';

-- 2. 오브젝트 권한 부여 (특정 테이블의 조회 권한만 허용)
GRANT SELECT ON employees TO read_only_user;

-- 3. 여러 권한을 묶은 롤(Role) 생성 및 부여
CREATE ROLE app_developer_role;
GRANT SELECT, INSERT, UPDATE ON employees TO app_developer_role;
GRANT SELECT, INSERT ON departments TO app_developer_role;
GRANT app_developer_role TO read_only_user;

-- 4. 권한 회수
REVOKE UPDATE ON employees FROM app_developer_role;

Tip

  • 최소 권한의 원칙(Principle of Least Privilege)에 따라 애플리케이션 연결 계정에는 필요 최소한의 오브젝트 권한만 부여해야 합니다.
  • 개별 사용자 계정에 직접 권한을 주기보다 업무별 롤(Role)을 생성하고 롤에 권한을 매핑한 후, 사용자에 롤을 부여하는 것이 관리에 용이합니다.

캐릭터셋과 인코딩 가이드

여기서는 캐릭터셋과 인코딩 가이드을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

데이터베이스 캐릭터셋(Character Set)은 문자를 저장 및 표현하는 비트 방식(인코딩)을 결정하며, 인코딩 불일치는 데이터 깨짐(Mojibake), 검색 실패 및 스토리지 낭비를 초래합니다. 시스템 설계 시 용도에 맞는 캐릭터셋을 선정하고 콜레이션(Collation, 정렬 규칙)을 매핑해야 합니다.
charset_check.sqlSQL
-- ── 데이터베이스 캐릭터셋 확인용 공통 쿼리 ──

-- [MySQL / MariaDB]
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';

-- [Oracle]
SELECT * FROM NLS_DATABASE_PARAMETERS 
WHERE PARAMETER IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

-- [PostgreSQL]
SELECT datname, pg_encoding_to_char(encoding), datcollate, datctype 
FROM pg_database 
WHERE datname = current_database();
캐릭터셋인코딩 방식영문 1자한글 1자이모지 지원특징 및 권장 용도
ASCIISingle-byte (7-bit)1 Byte지원 불가❌영문 및 특수기호만 지원, 초경량 저장소
EUC-KRMulti-byte 완성형1 Byte2 Bytes❌완성형 한글 전용, 레거시 시스템 및 스토리지 절감 필요 시
MS949Multi-byte 확장완성형1 Byte2 Bytes❌Windows 한국어 기본값, EUC-KR의 한글 미지원 확장 버전
UTF-8Variable-byte (Unicode)1 Byte3 Bytes❌ (일부)전 세계 다국어 웹 표준, 대부분의 캐릭터 지원
utf8mb4 (MySQL)Variable-byte (Unicode)1 Byte3 Bytes⭐ (4 Bytes)글로벌 표준, 이모지(Emoji) 및 고대문자 완벽 지원 (MySQL 권장)
UTF-16Fixed/Variable (2~4 Bytes)2 Bytes2 Bytes⭐ (4 Bytes)Java, Windows 내부 문자열 표현 표준, 동아시아 다국어 대량 저장 시 유리

Tip

  • 캐릭터셋 설정이 일치하지 않을 경우 데이터 이관(Migration) 시 한글이 깨지는 현상(Mojibake)이 발생하며, 한글 바이트 크기 차이로 인해 문자열 잘림(ORA-12899 등) 에러가 발생할 수 있습니다.
  • 정렬 조건(Collation)은 문자의 대소비교 규칙을 정의합니다. 대소문자를 구분하지 않는 ci(Case-Insensitive)와 완전 바이트 비교 방식인 bin(Binary)의 차이를 이해하고 설계해야 검색 오류를 예방합니다.
  • DB 연결을 맺는 웹 애플리케이션의 클라이언트 인코딩(Client Encoding) 역시 데이터베이스 캐릭터셋과 반드시 일치시켜 인코딩 자동 변환 중 발생할 수 있는 데이터 왜곡을 방지해야 합니다.

인덱스와 실행 계획 기초

여기서는 인덱스와 실행 계획 기초을 실제 코드와 함께 확인합니다. 예제를 그대로 따라 하기보다, 입력과 출력, 그리고 바뀌기 쉬운 부분이 어디인지 보면서 읽어보세요.

인덱스(Index)는 검색 속도를 획기적으로 향상시키는 색인 구조입니다. 하지만 무분별한 인덱스는 쓰기 성능(INSERT, UPDATE)을 저하시키므로 쿼리 패턴และ 실행 계획을 바탕으로 신중하게 설계해야 합니다.
index_explain.sqlSQL
-- 인덱스 생성
CREATE INDEX idx_emp_salary ON employees(salary);

-- 실행 계획 확인 (DBMS 제품군에 따라 EXPLAIN 형식은 상이)
EXPLAIN
SELECT emp_name, salary
FROM employees
WHERE salary > 80000;

Tip

  • 기본키(PK)는 데이터베이스가 자동으로 유니크 인덱스를 생성합니다.
  • 복합 인덱스(Composite Index) 생성 시 컬럼의 순서는 카디널리티(Cardinality, 중복도가 낮고 유일값이 많은 정도)가 높은 컬럼을 앞쪽에 배치하는 것이 성능상 유리합니다.

공통 SQL 실무 설계

공통 SQL 실무 설계은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.

SQL 설계는 정규화와 반정규화의 균형, 그리고 쿼리 복잡도 제어와 데이터베이스 접근 제어 설계(DCL)가 핵심입니다. 최소 권한의 원칙에 기반하여 스키마 자원 생성 권한과 오브젝트 접근 권한을 철저히 분리해야 합니다.
결정 지점확인 질문실무 기준
경계공통 SQL 코드에서 바뀌기 쉬운 부분은 어디인가?입출력, 설정, 외부 연동, 핵심 규칙을 분리합니다.
상태상태가 어디서 생성되고 어디서 사라지는가?상태 소유자와 수명 주기를 코드로 드러냅니다.
장애실패했을 때 호출자는 무엇을 받는가?timeout, fallback, error contract를 먼저 정합니다.

공통 SQL 운영 기준

이 섹션은 공통 SQL 운영 기준을 실무 관점에서 정리합니다. 개념을 외우기보다, 어떤 상황에서 이 기준을 꺼내 쓸지에 초점을 맞춰보세요.

운영 환경에서는 Slow Query 모니터링, 커넥션 풀 최적화와 계정별 권한 검사를 상시 수행해야 합니다. DB 관리 스크립트 작성 시 타이트하게 최소 권한만 가진 유저 세션을 활용하는 것이 모범사례입니다.

Tip

  • Explain 실행 계획의 type/Extra 컬럼 검증
  • Lock 경합 및 데드락 가능성 체크
  • 애플리케이션 접속 계정 권한 최소화 검증
  • DCL(GRANT/REVOKE) 이력 보안 감사

공통 SQL 검증 전략

공통 SQL 검증 전략은 선택지가 갈리는 지점입니다. 표를 기준으로 각 방법의 쓰임새와 운영상의 차이를 비교해두면 이후 판단이 훨씬 쉬워집니다.

SQL 검증은 EXPLAIN 쿼리를 통한 인덱스 스캔 여부 판단 외에도, 애플리케이션 접속 계정이 불필요한 DDL/DCL을 실행할 수 없는지 권한 검증 테스트를 병행해야 합니다.
품질 축검증 방법완료 기준
정확성정상/실패 케이스를 자동화합니다.핵심 시나리오가 재현 가능하게 통과합니다.
회귀 방지버그 수정 시 동일 케이스를 테스트로 남깁니다.같은 장애가 다시 배포되지 않습니다.
운영성로그, 메트릭, 알림을 확인합니다.문제가 생겼을 때 원인 추적 경로가 있습니다.
← 이전 가이드DB 입문 & 로드맵다음 가이드 →Oracle