409. 관계 대수 (Relational Algebra)
⚠️ 이 문서는 우리가 매일 치는
SELECT,JOIN같은 SQL 명령어들이 데이터베이스 엔진 내부에서 어떻게 수학적으로 해석되고 처리되는지, 그 뼈대가 되는 데이터베이스의 기계어이자 '절차적 수학 연산'인 관계 대수를 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 관계 대수는 테이블(릴레이션)을 조작하여 새로운 테이블을 만들어내는 수학 연산이다. 우리가 아는 덧셈, 뺄셈처럼 테이블끼리 더하고(UNION), 빼고(DIFFERENCE), 곱하는(PRODUCT) 규칙들의 모음이다.
- 절차적 특성: 사용자가 "무엇(What)을 원하는지" 뿐만 아니라, 그 데이터를 찾기 위해 "어떻게(How) 해야 하는지" 구체적인 순서와 절차를 명시하는 언어다. (SQL이 비절차적인 것과 대비됨)
- 가치: DB 엔진의 핵심인 옵티마이저(Optimizer)는 우리가 던진 SQL을 이 '관계 대수'의 트리 구조로 번역한 뒤, 가장 수학적으로 비용이 적게 드는 최적의 경로를 찾아내어 데이터를 뽑아온다.
Ⅰ. 개요: SQL의 수학적 번역기 (Context & Necessity)
우리가 식당에서 "햄버거 세트 하나 주세요!"라고 주문하는 것은 **관계 해석(비절차적, SQL)**이다. 하지만 주방에서는 이 주문을 받고 "1. 빵을 굽는다 $\rightarrow$ 2. 패티를 올린다 $\rightarrow$ 3. 콜라를 담는다"라는 **관계 대수(절차적)**의 순서로 번역해서 요리해야만 음식이 나온다.
즉, 관계 대수는 데이터베이스 엔진이 이해하는 가장 원초적인 '요리 레시피'다. 테이블 2개를 합치는 방법(조인), 특정 행만 걸러내는 방법(셀렉트) 등을 수학 기호로 약속해 둔 것이다.
📢 섹션 요약 비유: SQL(관계 해석)이 사장님이 지시하는 **"목표(What)"**라면, 관계 대수는 실무자가 그 목표를 달성하기 위해 엑셀에서 필터를 걸고 VLOOKUP을 쓰는 **"구체적인 작업 순서(How)"**입니다.
Ⅱ. 관계 대수의 8대 핵심 연산자 ★
시험에 100% 출제되는 수학 기호와 SQL 매핑 규칙이다.
1. 일반 집합 연산자 (수학 시간 집합과 같음)
- 합집합 (UNION, $\cup$): 두 테이블의 데이터를 위아래로 합친다. (중복은 제거됨)
- 교집합 (INTERSECTION, $\cap$): 두 테이블에 공통으로 있는 데이터만 뽑는다.
- 차집합 (DIFFERENCE, $-$): A 테이블에서 B 테이블에 있는 데이터를 빼버린다. (MINUS)
- 카테시안 곱 (CARTESIAN PRODUCT, $\times$): A 테이블의 모든 줄과 B 테이블의 모든 줄을 무식하게 다 곱해서 짝짓는다. (CROSS JOIN)
2. 순수 관계 연산자 (DB에만 있는 특수 연산)
- 셀렉트 (Select, $\sigma$ 시그마)
- 테이블에서 조건에 맞는 **가로줄(행, Tuple)**만 쏙 뽑아낸다.
- SQL 매핑:
WHERE조건절
- 프로젝트 (Project, $\pi$ 파이)
- 테이블에서 내가 원하는 **세로줄(열, Attribute)**만 쏙 뽑아낸다.
- SQL 매핑:
SELECT 컬럼명
- 조인 (Join, $\bowtie$ 리본)
- 공통된 컬럼을 기준으로 두 테이블을 양옆으로 합친다. (가장 중요)
- 사실상
카테시안 곱($\times$)을 한 뒤에셀렉트($\sigma$)로 조건에 맞는 것만 걸러내는 연산의 줄임말이다.
- 디비전 (Division, $\div$)
- A 테이블에서 B 테이블의 조건을 모두 만족하는 튜플만 찾아낸다. (실무에서 거의 안 씀)
Ⅲ. 실무 연결: 옵티마이저(Optimizer)의 최적화 마법
"관계 대수 수학 기호, 실무에서 안 쓰는데 왜 배우나요?" 개발자는 안 쓰지만, 여러분이 매일 쓰는 **데이터베이스의 옵티마이저(394번 문서)**가 이 수학 기호로 생각하기 때문이다.
예를 들어, "나이가 20살 이상인 학생들의 수강 과목을 찾아라"는 SQL을 날렸다.
- 멍청한 절차 (JOIN 먼저):
학생 테이블과수강 테이블100만 건을 무식하게 **조인($\bowtie$)**한다. $\rightarrow$ 그 거대한 덩어리에서 20살 이상을 **셀렉트($\sigma$)**한다. (메모리 폭발, 서버 터짐) - 똑똑한 절차 (셀렉트 먼저):
학생 테이블에서 20살 이상인 애들 100명만 먼저 **셀렉트($\sigma$)**한다. $\rightarrow$ 그 100명만 가지고수강 테이블과 **조인($\bowtie$)**한다. (0.1초 만에 완료!)
이처럼 옵티마이저는 관계 대수 연산의 '순서'를 이리저리 바꿔보면서 수학적으로 가장 가벼운(Cost가 낮은) 공식을 찾아내는 천재적인 수학자다.
┌──────────────────────────────────────────────────────────────┐
│ 관계 대수(Relational Algebra) 연산자 시각적 요약 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 1. Select (σ) 2. Project (π) 3. Join (⋈) │
│ [ ] [ ] [ ] [✔] [ ] [✔] [ ] + [ ] │
│ [✔] [✔] [✔] [✔] [ ] [✔] [✔] ⋈ [✔] │
│ [ ] [ ] [ ] [✔] [ ] [✔] [ ] + [ ] │
│ (가로줄/행 뽑기) (세로줄/열 뽑기) (두 표를 양옆으로 합치기) │
│ -> SQL의 WHERE -> SQL의 SELECT -> SQL의 JOIN │
└──────────────────────────────────────────────────────────────┘
Ⅳ. 결론
"SQL은 껍데기일 뿐, 본질은 관계 대수다." RDBMS가 수십 년 동안 전 세계 소프트웨어의 심장 자리를 지킬 수 있었던 이유는, 데이터베이스 자체가 에드거 코드(E.F. Codd) 박사가 제안한 완벽한 '수학적 집합론과 관계 대수' 위에 지어진 학문이기 때문이다. 우리가 복잡한 JOIN 쿼리를 엉망으로 짜도 DB가 알아서 빠르게 결과를 가져다주는 것은, DB 엔진이 찰나의 순간에 여러분의 SQL을 관계 대수 방정식으로 치환하여 가장 완벽한 해답을 풀어내고 있기 때문이다.
📌 관련 개념 맵
- 대칭 개념: 관계 해석 (Relational Calculus - 비절차적, 무엇을 원하는지만 명시)
- 주요 기호: $\sigma$(Select), $\pi$(Project), $\bowtie$(Join)
- 내부 아키텍처: Query Optimizer (실행 계획 생성기)
- 관련 이론: 집합론 (Set Theory)
👶 어린이를 위한 3줄 비유 설명
- SQL이 식당 메뉴판에서 "치즈버거 세트 주세요!"라고 말하는 거라면,
- 관계 대수는 주방장님이 "1. 빵을 굽는다($\pi$) 2. 치즈를 올린다($\sigma$) 3. 감자튀김과 합친다($\bowtie$)"라고 순서대로 요리하는 '조리법'이에요.
- 데이터베이스는 항상 이 수학 기호로 된 조리법(관계 대수)을 가장 빠른 순서로 척척 바꿔가며 요리를 만들어준답니다!