Backend
home
🖊️

데이터베이스

RDBMS와 NoSQL 차이

항목
RDBMS
NoSQL
구조
테이블 기반 (정형 데이터)
문서, 키-값, 컬럼, 그래프 등
스키마
고정 스키마
유연한 스키마
확장
수직 확장 (Scale-Up)
수평 확장 (Scale-Out)
예시
MySQL, PostgreSQL, Oracle
MongoDB, Redis, Cassandra
📌 면접 포인트: 시스템에 따라 적절한 DB 선택 이유를 설명할 수 있어야 함

SQL 핵심 문법

•
기본
◦
SELECT, INSERT, UPDATE, DELETE
◦
WHERE, GROUP BY, ORDER BY, HAVING
•
JOIN 종류
JOIN 종류
설명
INNER JOIN
공통되는 값만 추출
LEFT JOIN
왼쪽 테이블 전체 + 오른쪽 매칭
RIGHT JOIN
오른쪽 테이블 전체 + 왼쪽 매칭
FULL OUTER JOIN
양쪽 테이블 모두 포함 (MySQL은 지원 X)

정규화 vs 비정규화

•
정규화(Normalization)
→ 데이터 중복 제거, 무결성 보장
→ 제1정규형 ~ 제3정규형이 자주 나옴
•
비정규화(Denormalization)
→ 성능 향상을 위해 중복 허용
→ 조회 속도 ↑, 트랜잭션 처리 속도 ↓

트랜잭션

하나의 논리적 작업 단위로, ALL or NOTHING
•
ACID 속성
◦
Atomicity (원자성)
◦
Consistency (일관성)
◦
Isolation (고립성)
◦
Durability (지속성)
•
트랜잭션 격리 수준(Isolation Level)
수준
현상 방지
설명
READ UNCOMMITTED
없음
Dirty Read 허용
READ COMMITTED
Dirty Read 방지
대부분 RDB의 기본
REPEATABLE READ
+ Non-Repeatable 방지
InnoDB 기본값
SERIALIZABLE
+ Phantom 방지
가장 엄격, 가장 느림

인덱스

WHERE절 또는 JOIN시 성능 개선
•
B-Tree 인덱스: 대부분 기본 인덱스
•
해시 인덱스: 정확한 일치 검색에 빠름
•
복합 인덱스: 여러 컬럼 조합, 순서 중요
📌 주의:
•
인덱스는 쓰기 성능 저하 요인
•
너무 많은 인덱스는 오히려 역효과

ORM과 N + 1 문제

ORM (Object Relational Mapping): 객체와 테이블 매핑
예: JPA, Hibernate
•
N + 1 문제: 연관된 엔티티를 지연 로딩할 때 N + 1번 쿼리 발생 → 해결: fetch join, @EntityGraph, batch-size

샤딩과 파티셔닝

•
샤딩: 물리적으로 DB 서버 분산
•
파티셔닝: 논리적으로 테이블 분할 (ex: 날짜별 파티션)
📌 예: 월별 로그 데이터 → 날짜 파티셔닝으로 조회 성능 향상

DB 트러블슈팅/실무 고려

•
Deadlock 방지: 자원 접근 순서 고정, Lock Timeout 설정
•
Connection Pool: HikariCP 등, 설정값 조정 필수
•
Slow Query Logging으로 성능 병목 분석