(RDB → PostgreSQL → 이중화 → NoSQL → Redis/MongoDB)
관계형 데이터베이스(RDB)는 테이블 기반 + 스키마 고정 + 트랜잭션(ACID) 을 핵심으로 한다.
데이터 구조를 정의하는 언어
CREATE : 테이블/뷰 생성 ALTER : 컬럼 추가·수정·삭제 DROP : 테이블 삭제 TRUNCATE : 테이블 데이터 전체 삭제 시험 포인트
데이터를 조회·조작하는 언어
SELECT * FROM users WHERE age >= 20;
WHERE price BETWEEN 10000 AND 50000;
WHERE category IN ('DEVICE','STORAGE');
WHERE name LIKE '%Cable%';
SELECT DISTINCT category
FROM products;
SELECT *
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;
COUNT(), SUM(), AVG(), MAX(), MIN()SELECT customer_id, SUM(amount)
FROM orders
GROUP BY customer_id
HAVING SUM(amount) >= 100000;
WHERE는 행 필터, HAVING은 그룹 결과 필터
트랜잭션 제어 언어
BEGIN / START TRANSACTIONCOMMITROLLBACKSAVEPOINT : 부분 롤백여러 SQL 문장을 하나의 논리적 작업 단위로 묶는 것.
트랜잭션은 여러 SQL을 하나의 ‘원자적 작업’으로 묶어, 성공이면 전부 반영, 실패면 전부 취소하게 해준다.
| 요소 | 의미 |
|---|---|
| A (Atomicity) | 전부 실행되거나 전부 취소 |
| C (Consistency) | 트랜잭션 전·후 데이터 무결성 유지 (FK,UNIQUE 등 규칙위반 불가) |
| I (Isolation) | 동시에 실행돼도 서로 간섭 없음 (for update 등) |
| D (Durability) | COMMIT 후 데이터는 영구 보존 |
한 줄 암기
“트랜잭션은 전부 아니면 전무이며, 항상 일관되고, 서로 간섭하지 않고, 결과는 남는다.”
검색 속도 향상을 위한 자료구조
인덱스(Index)란
테이블의 특정 컬럼(또는 컬럼 조합)을 정렬된 구조(B-Tree 등)로 별도 저장해서검색(WHERE), 정렬(ORDER BY), 조인(JOIN) 을 빠르게 만드는 자료구조다.
주의
실제 데이터를 저장하지 않는 가상 테이블
CREATE VIEW v_orders AS
SELECT customer_id, SUM(amount) total
FROM orders
GROUP BY customer_id;
DROP VIEW v_orders;
쿼리 안의 쿼리
SELECT *
FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE region = 'seoul'
);
SELECT
o.order_id,
(
SELECT SUM(quantity)
FROM order_items oi
WHERE oi.order_id = o.order_id
) AS total_qty
FROM orders o;
SELECT *
FROM (
SELECT order_id, SUM(quantity) AS qty
FROM order_items
GROUP BY order_id
) t
WHERE t.qty >= 3;
데이터 중복을 줄이고 무결성을 높이기 위한 설계 기법
(보통 3정규형(3NF) 까지만 언급되면 충분)
👉 포인트:
“PostgreSQL은 RDB이지만 JSON 컬럼을 가질 수 있다.”
| 구분 | RDB | NoSQL |
|---|---|---|
| 스키마 | 고정 | 유연 |
| JOIN | 가능 | 거의 없음 |
| 확장 | Scale-up | Scale-out |