01 / 15
SESSION 29 · Part 6 서버/DB

관계형
데이터베이스

표(Table)로 세상을 정리하고, SQL로 대화하는 구조적 저장소

02 / 15
🎯

이 세션에서
배우는 것

📊
테이블 구조
행·열 기반의 데이터 모델을 이해한다
💾
기본 SQL
SELECT/INSERT/UPDATE/DELETE 네 동작을 읽는다
🔑
PK · FK
테이블 간 관계를 키로 연결하는 원리를 설명한다
03 / 15
💭

로 저장할까?

데이터를 자유롭게 적어두면 중복, 모순, 누락이 쉽게 발생한다.
표(Table)는 같은 형식의 데이터를 한 곳에 모아, 빠른 검색과 정합성을 동시에 제공한다.

수십 년간 기업 데이터의 표준이 될 만한 이유다.

04 / 15

SQL — 네 가지 동작

대부분의 작업은 이 4개의 키워드 안에서 이루어진다.

👀
SELECT
조회
INSERT
삽입
✏️
UPDATE
수정
🗑️
DELETE
삭제
SELECT * FROM users WHERE age > 20;
INSERT INTO users (name, age) VALUES ('김철수', 30);
UPDATE users SET age = 31 WHERE id = 1;
DELETE FROM users WHERE id = 1;
05 / 15
🔍

SQL SELECT —
더 깊게 이해하기

SELECT 문은 단순히 "찾아줘"가 아니다. 내부적으로 여러 단계를 거쳐 결과를 돌려준다.

1
파싱 (Parsing)
작성된 SQL 문법이 올바른지 검사하고, 실행 가능한 형태로 분석한다.
2
최적화 (Optimization)
쿼리 옵티마이저가 가장 빠른 실행 계획을 선택한다. 인덱스 사용 여부도 여기서 결정된다.
3
실행 (Execution)
선택된 계획대로 디스크 또는 메모리에서 데이터를 읽는다.
4
결과 반환 (Result)
조건에 맞는 행들을 클라이언트에게 돌려준다.
06 / 15

테이블과 관계

각 행은 기본 키(PK)로 식별되고, 외래 키(FK)로 다른 테이블을 참조한다.

users                 orders
┌────┬──────────┐      ┌────┬─────────┬──────────┐
│ id │   name   │      │ id │ user_id │  amount  │
├────┼──────────┤      ├────┼─────────┼──────────┤
│  1 │ 김철수    │ ◄──  │ 10 │    1    │   50000  │
│  2 │ 이영희    │      │ 11 │    2    │   30000  │
└────┴──────────┘      └────┴─────────┴──────────┘
   PK                    PK     FK

JOIN으로 두 표를 연결해 "누가 얼마를 주문했는지" 한 번에 조회한다.

07 / 15
🔗

JOIN —
실제로는 어떻게?

쿠팡에서 주문 내역을 볼 때, 실제로는 세 개의 테이블이 JOIN으로 합쳐진다.

👤 회원 테이블
user_id, name
🛒 주문 테이블
order_id, user_id
📦 상품 테이블
product_id, name
📋 주문 내역
한 화면에 통합

핵심: JOIN은 FK로 연결된 여러 테이블을 하나의 결과로 합친다.

08 / 15
🔗

JOIN — 표와 표를 잇다

SELECT u.name, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;

대표적인 관계형 DB 제품들:

🐘
PostgreSQL
오픈소스 강자
🐬
MySQL
웹 표준
🏢
Oracle
엔터프라이즈
📦
SQLite
임베디드
09 / 15
📱

실생활에서
이렇게 쓰여요

우리가 매일 사용하는 앱과 서비스 속에 관계형 DB가 녹아 있다.

🛒
쿠팡 주문 내역
회원·주문·상품 테이블이 JOIN되어 "누가 무엇을 얼마에" 샀는지 한 화면에 표시된다.
🏦
은행 거래 내역
계좌·거래·고객 테이블이 연결되어 입출금 이력과 잔액을 정확하게 추적한다.
🏥
병원 환자 기록
환자·진료·처방 테이블 JOIN으로 진료 기록과 약 처방 이력을 관리한다.

💡 이 개념이 없다면 데이터 중복과 불일치로 주문 정보를 신뢰할 수 없게 된다.

10 / 15
💡

자주 하는
오해 바로잡기

이렇게 생각하기 쉽지만, 실제로는 조금 다릅니다.

❌ 흔한 오해
  • 엑셀이 곧 데이터베이스다
  • SQL은 프로그래밍 언어다
  • 테이블은 엑셀 시트와 같다
✓ 실제로는
  • 엑셀은 동시 접근·트랜잭션이 없어 DB가 아니다
  • SQL은 데이터를 질의(Query)하는 언어, 로직을 구성하는 프로그래밍 언어가 아니다
  • 테이블은 관계와 제약(FK, PK)이 있어 엑셀 시트보다 훨씬 엄격하다
11 / 15
📑

관계형 DB는 엑셀 시트 묶음이다

여러 시트가 서로를 참조하며 중복 없이 데이터를 구성하는 엑셀 문서와 닮았다.

📑 엑셀 비유
시트(Sheet)
=
테이블 — users, orders, products
행(Row)
=
레코드 — 한 사람, 한 주문
열(Column)
=
필드 — id, name, age
시트 간 참조
=
FK · JOIN — 고객ID로 주문 시트 연결
12 / 15
🤖

이걸 알면
AI와 이렇게 대화해요

관계형 DB를 이해하면 Claude나 ChatGPT를 훨씬 잘 활용할 수 있다.

👤
데이터 조회가 너무 느려요.
🤖
어떤 쿼리를 사용하고 계신가요? 느린 이유는 다양할 수 있습니다.
👤
users 테이블에서 WHERE email로 조회하는데 수백만 건이라 느려요. 인덱스가 없는 것 같아요. SQL 쿼리 최적화 방법과 email 컬럼에 인덱스 추가하는 방법 알려줘.
🤖
완벽한 질문입니다! CREATE INDEX idx_users_email ON users(email); 로 인덱스를 추가하면 풀스캔 대신 인덱스 스캔을 하여 수십~수백 배 빠릅니다. EXPLAIN으로 실행 계획도 확인해 보세요.
13 / 15

이렇게
이해하셨나요?

맞게 이해하셨어요
SQL은 데이터를 조회하고 수정하는 질의 언어다
이렇게는 아니에요
엑셀로 모든 것을 대체할 수 있다
맞게 이해하셨어요
JOIN은 FK로 연결된 여러 테이블을 합쳐 조회한다
이렇게는 아니에요
모든 데이터베이스가 SQL을 사용한다

💪 표와 키로 세상을 정리하는 눈이 생겼습니다. 계속 나아가세요!

14 / 15
📌

핵심 정리

📊
테이블
행과 열로
구조화된 저장소
💬
SQL
DB와 대화하는
표준 쿼리 언어
🔑
기본 키 (PK)
각 행의
고유 식별자
🧷
외래 키 (FK)
다른 테이블을
참조하는 열
🔗
JOIN
여러 테이블을
하나로 조합
🐘
PostgreSQL
오픈소스 관계형 DB의
대표 주자
15 / 15
🚀

다음 세션
Session 30 · Firebase와 BaaS

표로 담기 힘든 데이터, 유연한 구조가 필요한 데이터를 다루는 세계.
MongoDB · Firebase로 대표되는 스키마리스 저장소를 배운다.

💡 기억할 것: 관계형 DB의 힘은 "중복 없이 관계로 연결한다"에서 나온다.

슬라이드 목록