infra
Platform

모듈 맵

[SW Eng] 용어사전 — DB / SQL / 데이터 처리

0 / 38 완료

펼치기
0 / 38 완료0%

Sw-engineering · 26 / 38

[SW Eng] 용어사전 — DB / SQL / 데이터 처리

트랜잭션·격리수준·인덱스·실행계획·N+1·복제/샤딩·DDL/DML 등 DB 실무 용어를 '뜻·언제·대응·중요도'로 빠르게 해독합니다

🚨INCIDENT ALERT
HIGH

장애 회의에서 DBA가 빠르게 말합니다. "슬로우 쿼리가 Full Scan 타고, 거기에 Deadlock까지 겹쳤어요. N+1도 의심되고, Replica 복제 지연으로 방금 쓴 데이터가 안 보인대요." PM·인프라인 당신은 이 말들이 각각 얼마나 심각한지, 무엇을 해야 하는지 판단해야 합니다. 이 사전은 DB·SQL 실무 용어를 빠르게 해독하고 대응 방향을 잡게 합니다. 깊은 진단은 Database 트랙의 심화 모듈로 연결합니다.

이번 챕터에서 배울 것
  • 1트랜잭션·격리수준·잠금/데드락 용어를 듣고 심각도를 가늠할 수 있다
  • 2인덱스·실행계획·Full Scan·N+1로 성능 문제 방향을 잡을 수 있다
  • 3복제·샤딩·페일오버로 가용성/확장 구조를 이해할 수 있다
  • 4DDL/DML/TCL과 JOIN 종류로 SQL 대화를 따라갈 수 있다

트랜잭션 · 잠금 · 격리

💡개념

데이터 정합성을 지키는 메커니즘

용어한 줄 뜻신호/대응중요도
Transaction / Commit / Rollback한 묶음 작업 / 확정 / 취소부분 실패 시 롤백★★★
Lock동시 변경을 막는 잠금과하면 대기·데드락★★
Deadlock서로의 락을 기다려 멈춤잠금 순서 일관화로 예방 → [[transaction-isolation]]★★
Isolation Level동시성 격리 수준RC/RR/Serializable★★
Read Committed / Repeatable Read / Serializable격리 수준 3종PG 기본 RC, MySQL 기본 RR★★
Dirty Read / Phantom Read이상 현상(미커밋 읽기 / 행수 변화)격리 수준으로 방지★★

핵심: 격리수준·이상현상·데드락의 깊은 내용은 [[transaction-isolation]]에서 다룹니다. PM은 "Serializable로 올리면 안전하지만 느려진다"는 트레이드오프만 알면 됩니다.

성능 — 인덱스·실행계획·N+1

💡개념

느린 쿼리의 언어

용어한 줄 뜻신호/대응중요도
Slow Query느린 쿼리실행계획부터 확인★★★
Query/Execution PlanDB의 쿼리 실행 방법EXPLAIN으로 확인 → [[query-execution-plan]]★★★
Full Scan / Index Scan전체 읽기 / 인덱스 읽기type:ALL=Full=느림 신호★★★
Index / Composite Index인덱스 / 복합 인덱스등치조건 앞·범위 뒤 → [[indexes-basics]]★★★
PK / FK / Unique / Constraint기본키/외래키/유니크/제약데이터 무결성★★
N+1 Problem연관 조회가 N번 추가로 나감eager loading → [[orm-basics]]★★★
Connection/Read/Query Timeout접속/읽기/쿼리 타임아웃슬로우쿼리·풀고갈 동반★★

핵심: "Full Scan"이 보이면 인덱스 부재 신호. "N+1"은 ORM 목록 조회의 단골 함정. 둘 다 [[query-execution-plan]]·[[orm-basics]]에서 깊이 다룹니다.

가용성·확장 — 복제·샤딩·백업

💡개념

DB를 늘리고 지키는 구조

용어한 줄 뜻비고중요도
Replication / Master-Slave / Primary-Replica복제 / 쓰기-읽기 분리읽기 분산·페일오버 → [[replication-ha]]★★
Failover장애 시 대체로 전환Replica 승격★★
Sharding / Partition데이터를 쪼개 분산 / 분할대용량 확장★★
Backup / Restore / Dump백업 / 복원 / 덤프재해복구 기본 → [[backup-recovery-dr]]★★★
Migration / DDL / DML / DCL / TCL스키마 변경 / 정의·조작·제어·트랜잭션 SQL안전 배포 → [[migration-versioning]]★★
Sequence / Auto Increment자동 증가 IDUUID 대비 → [[mysql-features]]
Trigger / Procedure / Function / View / Materialized ViewDB 측 로직/뷰캐싱·자동화 → [[views-stored-procedures]]

JOIN·서브쿼리·배치

💡개념

조회와 대량 처리 용어

용어한 줄 뜻비고중요도
Inner / Left / Right / Outer Join교집합 / 왼쪽보존 / 오른쪽보존 / 전체누락 버그 주의 → [[joins-complete]]★★
Subquery / CTE / Cursor중첩쿼리 / WITH절 / 커서가독성·성능 → [[subqueries-cte]]
Batch Insert/Update / Upsert대량 삽입·수정 / 있으면수정없으면삽입성능 → [[bulk-operations]]★★
Pagination / Offset / Limit페이지 처리큰 offset 느림 주의★★

핵심: INNER vs LEFT JOIN을 혼동하면 "신규 회원이 보고서에서 누락"되는 버그가 납니다([[joins-complete]]). PM이 데이터 요구를 적을 때 "주문 없는 회원도 포함?"을 명시하면 이 혼동을 막습니다.

장애 로그에서 DB 용어 해독 — 직접 확인

1DB 관련 에러·슬로우로그에서 방향 잡기

DB 관련 로그/에러가 보이면 그 용어 자체가 대응 방향의 단서입니다.

로컬 터미널
grep -iE 'deadlock|lock wait timeout|slow query|connection timeout' app.log | tail
OUTPUT
ERROR Deadlock found when trying to get lock (MySQL 1213)
   → 데드락. 잠금 순서 일관화·트랜잭션 짧게([[transaction-isolation]])
WARN  Slow query 4.2s: SELECT * FROM orders WHERE status=...
   → 실행계획 확인, status 인덱스 검토([[query-execution-plan]])
ERROR Lock wait timeout exceeded (MySQL 1205)
   → 다른 트랜잭션이 락 오래 점유. 슬로우쿼리/미커밋 트랜잭션 의심
grep -iE 'deadlock|timeout|slow|lock wait' app.log | tail
🔍실행 후 확인할 것
  • "Deadlock found(1213)"는 보통 DB가 한쪽을 죽여 자동 복구 → 빈도가 높으면 잠금 순서·트랜잭션 길이 문제([[transaction-isolation]])
  • "Slow query Ns"에서 N이 수 초면 실행계획부터: type:ALL(Full Scan)이면 인덱스 추가가 1순위([[query-execution-plan]])
  • "Lock wait timeout(1205)"은 다른 트랜잭션이 락을 오래 쥔 것 → 미커밋 트랜잭션·슬로우쿼리가 원인. 커넥션 상태도 함께 확인([[connection-pooling]])
  • 복제 지연으로 "방금 쓴 데이터가 안 보임"이면 읽기를 Replica가 아닌 Primary로 보내거나 일관성 요구를 재검토([[replication-ha]])

상황: 회원·주문 목록 화면이 데이터가 늘면서 급격히 느려집니다. DB 슬로우 로그엔 비슷한 작은 쿼리가 수백 개씩 반복됩니다.

원인: N+1 문제입니다. 목록 N건을 가져온 뒤 각 항목의 연관 데이터(작성자·상품 등)를 1건씩 추가 조회해 총 N+1번 쿼리가 나갑니다. ORM의 지연 로딩(lazy loading)에서 흔합니다([[orm-basics]]).

진단:

로컬 터미널
# 같은 형태의 작은 쿼리가 반복되는지(N+1 신호)
grep "SELECT .* FROM authors WHERE id" app.log | wc -l   # 수십~수백이면 N+1

해결: eager loading(JOIN으로 한 번에)으로 N+1을 1~2번 쿼리로 줄입니다(JPA join fetch/@EntityGraph, SQLAlchemy joinedload). 깊은 내용은 [[orm-basics]]. PM·인프라는 "목록 화면이 데이터 늘며 느려진다"는 증상에서 N+1을 1순위로 의심해, 개발팀에 eager loading 적용을 요청하도록 방향을 잡습니다.

💼
실무 맥락
현업 패턴

인프라/SRE로서 DB 용어는 모니터링·장애 대응의 핵심입니다 — 슬로우 쿼리·데드락·복제 지연·커넥션 풀을 대시보드([[glossary-observability]])로 보고, 임계 초과 시 이 사전이 의심 방향을 알려줍니다. 깊은 진단은 Database 트랙(transaction-isolation·query-execution-plan·connection-pooling·replication-ha)으로 이어집니다. PM은 이 용어를 알면 "DB가 느리다"는 모호한 보고를 "특정 쿼리 인덱스 부재 / N+1 / 복제 지연" 같은 구체적 원인으로 좁혀, 재발 방지를 백로그 우선순위로 올릴 수 있습니다.

다음 용어사전에서는 서비스 간 통신과 인증 — API·인증/인가 용어를 정리합니다.

지식 확인

퀴즈 — 4문제

Q1

운영 중 'Slow Query' 알람이 떴다. PM·인프라의 1차 행동으로 적절한 것은?

Q2

'Deadlock(교착)'이 발생하는 전형적 상황은?

Q3

'N+1 문제'를 가장 잘 설명한 것은?

Q4

복제(Replication)에서 'Master-Slave / Primary-Replica' 구조의 주 용도는?

0 / 4 답변

이것도 배워보세요