운영체제 리드·아키텍트 데이터베이스 기술면접

운영체제 리드 · 아키텍트 (10년+) 데이터베이스 10문항 조회수 28 · 2026-08-11 (화) 12:13:07
1 트랜잭션 격리 수준
Hard

Q. 대규모 금융 시스템에서 READ COMMITTED와 REPEATABLE READ 격리 수준 중 하나를 선택해야 합니다. 각 격리 수준에서 발생할 수 있는 동시성 이상 현상(Phantom Read, Non-Repeatable Read)을 설명하고, MVCC 기반 데이터베이스에서 각 격리 수준이 어떻게 구현되는지 내부 메커니즘을 중심으로 설명해주세요. 또한 실무에서 격리 수준 선택 시 고려해야 할 성능과 일관성의 트레이드오프를 제시해주세요.

MVCC의 스냅샷 시점과 Undo 로그 관리 방식이 격리 수준마다 어떻게 다른지 생각해보세요.

A. 모범답안

READ COMMITTED는 각 쿼리마다 새로운 스냅샷을 생성하여 커밋된 데이터만 읽지만 Non-Repeatable Read와 Phantom Read가 발생할 수 있습니다. REPEATABLE READ는 트랜잭션 시작 시점의 스냅샷을 유지하여 Non-Repeatable Read를 방지하지만, MySQL InnoDB는 Next-Key Lock으로 Phantom Read도 방지합니다. MVCC 구현에서 READ COMMITTED는 Undo 로그를 짧게 유지할 수 있어 메모리 효율적이지만, REPEATABLE READ는 장기 트랜잭션 시 Undo 로그가 누적되어 퍼지(Purge) 지연을 유발할 수 있습니다. 금융 시스템에서는 일반적으로 데이터 일관성이 중요하므로 REPEATABLE READ를 선택하되, 대량 조회나 분석 쿼리는 별도 읽기 전용 복제본에서 READ COMMITTED로 처리하는 하이브리드 전략을 권장합니다. 격리 수준이 높을수록 Lock 경합과 Rollback Segment 크기가 증가하므로, 트랜잭션 지속 시간을 최소화하는 것이 핵심입니다.

핵심 포인트
  • • 각 격리 수준에서 발생하는 동시성 이상 현상의 정확한 이해
  • • MVCC의 스냅샷 생성 시점과 Undo 로그 관리 차이
  • • 격리 수준에 따른 성능 오버헤드와 메모리 사용량 분석
  • • 실무에서의 하이브리드 전략 및 워크로드 분리 방안
답변에 넣으면 좋은 키워드
MVCC 스냅샷 Undo 로그 Non-Repeatable Read Phantom Read Next-Key Lock 퍼지
실무에서는

전자상거래 주문 시스템에서 재고 확인과 차감 과정에서 격리 수준 선택이 재고 정합성과 처리량에 직접적인 영향을 미칩니다.

Follow-up 질문

MySQL InnoDB와 PostgreSQL의 REPEATABLE READ 구현 방식이 어떻게 다르며, 각각의 장단점은 무엇인가요?

2 데드락 관리
Hard

Q. 프로덕션 환경에서 데이터베이스 데드락이 주기적으로 발생하고 있습니다. 데드락의 발생 원리와 4가지 필요조건(Mutual Exclusion, Hold and Wait, No Preemption, Circular Wait)을 설명하고, 데드락 탐지 알고리즘(Wait-for Graph)의 동작 방식을 설명해주세요. 또한 애플리케이션 레벨과 데이터베이스 레벨에서 각각 데드락을 예방하거나 최소화할 수 있는 구체적인 전략을 제시해주세요.

Lock 획득 순서와 트랜잭션 크기가 데드락 발생 빈도에 어떤 영향을 미치는지 고려해보세요.

A. 모범답안

데드락은 두 개 이상의 트랜잭션이 서로가 보유한 Lock을 기다리며 무한 대기 상태에 빠지는 현상으로, Mutual Exclusion(배타적 Lock), Hold and Wait(보유 및 대기), No Preemption(선점 불가), Circular Wait(순환 대기)의 4가지 조건이 모두 충족될 때 발생합니다. Wait-for Graph는 트랜잭션을 노드로, 대기 관계를 간선으로 표현하여 사이클을 탐지하며, 사이클 발견 시 희생자를 선택해 롤백합니다. 애플리케이션 레벨에서는 모든 트랜잭션이 동일한 순서로 테이블/행을 접근하도록 강제하고, 트랜잭션 범위를 최소화하며, SELECT ... FOR UPDATE 사용 시 NOWAIT 또는 SKIP LOCKED 옵션을 활용합니다. 데이터베이스 레벨에서는 innodb_lock_wait_timeout을 적절히 설정하고, 인덱스 최적화로 Lock 범위를 줄이며, 필요시 낙관적 Lock(버전 관리)으로 전환합니다. 모니터링 측면에서는 information_schema.innodb_trx와 innodb_locks를 주기적으로 분석하여 데드락 패턴을 식별하고 쿼리를 개선해야 합니다.

핵심 포인트
  • • 데드락 4가지 필요조건의 정확한 이해
  • • Wait-for Graph 기반 데드락 탐지 메커니즘
  • • Lock 획득 순서 표준화와 트랜잭션 범위 최소화 전략
  • • 낙관적 Lock과 비관적 Lock의 적절한 선택
답변에 넣으면 좋은 키워드
Wait-for Graph Circular Wait SELECT FOR UPDATE NOWAIT 낙관적 Lock innodb_lock_wait_timeout
실무에서는

예약 시스템에서 여러 사용자가 동시에 같은 좌석들을 다른 순서로 예약하려 할 때 데드락이 빈번하게 발생합니다.

Follow-up 질문

데드락 발생 시 어떤 트랜잭션을 희생자로 선택하는 것이 최적이며, DBMS는 이를 어떻게 결정하나요?

3 인덱스 설계
Hard

Q. B-Tree 인덱스와 LSM-Tree 인덱스의 내부 구조와 동작 원리를 비교 설명하고, Write Amplification과 Read Amplification 관점에서 각각의 특성을 분석해주세요. 또한 대용량 로그 수집 시스템과 OLTP 트랜잭션 시스템에서 각각 어떤 인덱스 구조가 적합한지 그 이유와 함께 제시하고, Compaction 전략이 LSM-Tree 성능에 미치는 영향을 설명해주세요.

쓰기 패턴(랜덤 vs 순차)과 읽기 패턴(포인트 쿼리 vs 범위 쿼리)에 따른 각 인덱스의 성능 특성을 생각해보세요.

A. 모범답안

B-Tree는 정렬된 트리 구조로 제자리 업데이트(in-place update)를 수행하며 읽기에 최적화되어 있지만, 랜덤 쓰기 시 디스크 I/O가 많고 Write Amplification이 높습니다. LSM-Tree는 메모리의 MemTable에 쓰기를 버퍼링한 후 SSTable로 순차 플러시하여 쓰기 성능이 우수하지만, 읽기 시 여러 레벨을 검색해야 하므로 Read Amplification이 발생합니다. 로그 수집 시스템처럼 쓰기가 많고 최신 데이터 조회가 주된 경우 LSM-Tree(RocksDB, Cassandra)가 적합하며, OLTP 시스템처럼 포인트 쿼리와 트랜잭션 일관성이 중요한 경우 B-Tree(MySQL, PostgreSQL)가 유리합니다. LSM-Tree의 Compaction은 레벨 간 SSTable을 병합하여 읽기 성능을 개선하지만, Major Compaction 시 CPU와 I/O 부하가 급증하므로 Leveled, Tiered, Hybrid 전략 중 워크로드에 맞는 선택이 필요합니다. 실무에서는 쓰기 처리량과 읽기 지연시간, 공간 증폭률(Space Amplification)을 모니터링하며 Compaction 스케줄을 조정해야 합니다.

핵심 포인트
  • • B-Tree의 제자리 업데이트와 LSM-Tree의 순차 쓰기 메커니즘 차이
  • • Write/Read/Space Amplification의 트레이드오프 이해
  • • 워크로드 특성에 따른 인덱스 구조 선택 기준
  • • Compaction 전략이 성능과 자원 사용에 미치는 영향
답변에 넣으면 좋은 키워드
B-Tree LSM-Tree Write Amplification MemTable SSTable Compaction Read Amplification
실무에서는

시계열 데이터베이스나 메트릭 수집 시스템에서 초당 수십만 건의 데이터를 저장하면서도 빠른 쿼리를 제공해야 할 때 인덱스 구조 선택이 핵심입니다.

Follow-up 질문

Bloom Filter가 LSM-Tree의 읽기 성능을 어떻게 개선하며, False Positive Rate는 어떻게 조절해야 하나요?

4 쿼리 최적화
Hard

Q. 복잡한 JOIN 쿼리의 실행 계획을 분석할 때 Nested Loop Join, Hash Join, Sort Merge Join의 동작 원리와 각각의 시간 복잡도를 설명하고, 옵티마이저가 어떤 기준으로 JOIN 알고리즘을 선택하는지 설명해주세요. 또한 대용량 테이블 간 JOIN 시 성능 저하가 발생했을 때, 실행 계획 분석을 통해 문제를 진단하고 개선하는 구체적인 절차와 방법을 제시해주세요.

테이블 크기, 인덱스 유무, 조인 조건의 선택도(Selectivity)가 각 JOIN 알고리즘 선택에 어떤 영향을 미치는지 고려하세요.

A. 모범답안

Nested Loop Join은 외부 테이블의 각 행마다 내부 테이블을 스캔하며 O(N*M) 복잡도를 가지지만, 내부 테이블에 인덱스가 있으면 O(N*logM)으로 개선되어 소규모 결과셋에 효율적입니다. Hash Join은 작은 테이블로 해시 테이블을 생성한 후 큰 테이블을 스캔하며 O(N+M) 복잡도로 대용량 테이블 간 등가 조인에 유리하지만, 메모리 부족 시 디스크 스필이 발생합니다. Sort Merge Join은 양쪽 테이블을 정렬 후 병합하며 O(NlogN + MlogM) 복잡도로 비등가 조인이나 이미 정렬된 데이터에 적합합니다. 옵티마이저는 테이블 통계(카디널리티, 히스토그램), 인덱스 존재 여부, 조인 조건의 선택도, 사용 가능한 메모리를 기반으로 비용 기반 선택을 수행합니다. 성능 개선 시에는 EXPLAIN ANALYZE로 실제 실행 통계를 확인하고, 카디널리티 추정 오류는 통계 갱신으로, 인덱스 미사용은 적절한 인덱스 추가로, 조인 순서 오류는 힌트나 쿼리 재작성으로 해결하며, 필요시 서브쿼리를 CTE나 임시 테이블로 분리하여 중간 결과를 구체화합니다.

핵심 포인트
  • • 각 JOIN 알고리즘의 동작 원리와 시간 복잡도 이해
  • • 옵티마이저의 비용 기반 선택 메커니즘과 통계 정보 활용
  • • 실행 계획 분석을 통한 병목 지점 식별 방법
  • • 카디널리티 추정 오류와 통계 갱신의 중요성
답변에 넣으면 좋은 키워드
Nested Loop Join Hash Join Sort Merge Join 카디널리티 선택도 EXPLAIN ANALYZE 비용 기반 옵티마이저
실무에서는

전자상거래에서 주문-상품-사용자-배송 등 여러 테이블을 조인하는 복잡한 리포트 쿼리의 성능 튜닝이 필요할 때 실행 계획 분석이 필수입니다.

Follow-up 질문

옵티마이저가 잘못된 실행 계획을 선택했을 때, 힌트를 사용하는 것과 쿼리를 재작성하는 것 중 어느 것이 더 나은 접근이며 그 이유는 무엇인가요?

5 파티셔닝 전략
Hard

Q. 대용량 데이터베이스에서 수평 파티셔닝(Horizontal Partitioning)과 샤딩(Sharding)의 개념적 차이를 설명하고, Range, Hash, List 파티셔닝 기법의 장단점과 적용 시나리오를 비교해주세요. 또한 파티셔닝된 테이블에서 Partition Pruning이 어떻게 동작하는지 설명하고, 파티션 키 선택 시 고려해야 할 사항과 파티션 재구성 시 발생할 수 있는 운영 리스크를 제시해주세요.

쿼리 패턴과 데이터 분포, 파티션 간 균형이 파티션 키 선택에 어떤 영향을 미치는지 생각해보세요.

A. 모범답안

수평 파티셔닝은 단일 데이터베이스 내에서 테이블을 논리적으로 분할하는 것이며, 샤딩은 여러 물리적 서버에 데이터를 분산하는 것으로 확장성과 가용성 목표가 다릅니다. Range 파티셔닝은 날짜나 ID 범위로 분할하여 시계열 데이터에 적합하지만 데이터 쏠림이 발생할 수 있고, Hash 파티셔닝은 균등 분산이 가능하나 범위 쿼리 시 모든 파티션을 스캔해야 하며, List 파티셔닝은 지역이나 카테고리 같은 명시적 값으로 분할하여 비즈니스 로직에 부합하지만 관리 복잡도가 높습니다. Partition Pruning은 WHERE 절의 파티션 키 조건을 분석하여 불필요한 파티션 스캔을 제거함으로써 쿼리 성능을 향상시킵니다. 파티션 키는 쿼리의 주요 필터 조건이면서 데이터가 균등하게 분포되고, 파티션 개수는 관리 가능한 수준으로 유지되어야 하며, 복합 키 사용 시 첫 번째 컬럼이 가장 선택적이어야 합니다. 파티션 재구성 시에는 Lock으로 인한 서비스 중단, 대량 데이터 이동에 따른 I/O 부하, 인덱스 재생성 시간을 고려하여 온라인 DDL이나 파티션 교환(EXCHANGE PARTITION) 기법을 활용해야 합니다.

핵심 포인트
  • • 파티셔닝과 샤딩의 개념적 차이 및 목적
  • • Range, Hash, List 파티셔닝의 특성과 적용 시나리오
  • • Partition Pruning 메커니즘과 성능 향상 원리
  • • 파티션 키 선택 기준과 재구성 시 운영 리스크 관리
답변에 넣으면 좋은 키워드
수평 파티셔닝 샤딩 Partition Pruning Range 파티셔닝 Hash 파티셔닝 온라인 DDL EXCHANGE PARTITION
실무에서는

수억 건의 로그 데이터를 저장하는 시스템에서 월별 파티셔닝을 통해 오래된 데이터를 빠르게 삭제하고 최근 데이터만 빠르게 조회할 수 있습니다.

Follow-up 질문

파티션 개수가 성능에 미치는 영향은 무엇이며, 최적의 파티션 개수를 결정하는 기준은 무엇인가요?

6 복제 및 일관성
Hard

Q. 데이터베이스 복제(Replication) 아키텍처에서 동기 복제(Synchronous)와 비동기 복제(Asynchronous), 준동기 복제(Semi-Synchronous)의 동작 원리와 CAP 정리 관점에서의 트레이드오프를 설명해주세요. 또한 복제 지연(Replication Lag)이 발생하는 원인과 이를 모니터링하고 최소화하는 방법, 그리고 읽기 복제본을 사용할 때 발생할 수 있는 일관성 문제와 해결 전략을 제시해주세요.

쓰기 트랜잭션의 커밋 시점과 복제본으로의 전파 시점 차이가 각 복제 방식의 핵심입니다.

A. 모범답안

동기 복제는 마스터가 모든 복제본의 쓰기 확인을 받은 후 커밋하여 강한 일관성(CP)을 보장하지만 네트워크 지연이나 복제본 장애 시 가용성이 저하됩니다. 비동기 복제는 마스터가 즉시 커밋하고 백그라운드로 복제하여 높은 가용성(AP)과 성능을 제공하지만 복제 지연 동안 데이터 손실 위험과 읽기 불일치가 발생할 수 있습니다. 준동기 복제는 최소 하나의 복제본 확인 후 커밋하여 절충안을 제공하며, MySQL의 rpl_semi_sync_master_wait_for_slave_count로 제어합니다. 복제 지연은 대량 쓰기, 복제본의 낮은 하드웨어 성능, 네트워크 대역폭 부족, 단일 스레드 복제로 인해 발생하며, Seconds_Behind_Master 메트릭과 GTID 기반 포지션 차이를 모니터링하고, 병렬 복제(slave_parallel_workers) 활성화와 복제본 스케일업으로 개선합니다. 읽기 복제본 사용 시에는 세션 내 쓰기 후 읽기(Read-Your-Writes) 일관성을 보장하기 위해 마스터에서 읽거나, GTID 기반으로 복제 완료를 확인한 후 읽기를 수행하거나, 애플리케이션 레벨에서 타임스탬프 기반 라우팅을 구현해야 합니다.

핵심 포인트
  • • 각 복제 방식의 커밋 시점과 CAP 정리 관점의 트레이드오프
  • • 복제 지연의 주요 원인과 모니터링 메트릭
  • • 병렬 복제를 통한 복제 성능 개선 방법
  • • 읽기 복제본 사용 시 일관성 보장 전략
답변에 넣으면 좋은 키워드
동기 복제 비동기 복제 CAP 정리 복제 지연 GTID 병렬 복제 Read-Your-Writes
실무에서는

글로벌 서비스에서 지역별 읽기 복제본을 운영할 때 복제 지연으로 인해 사용자가 방금 작성한 게시글을 볼 수 없는 문제가 발생할 수 있습니다.

Follow-up 질문

Multi-Master 복제 환경에서 쓰기 충돌(Write Conflict)이 발생할 때 어떻게 해결하며, Conflict-free Replicated Data Type(CRDT)의 역할은 무엇인가요?

7 데이터 모델링
Medium

Q. 정규화(Normalization)의 1NF부터 3NF까지의 원칙을 설명하고, 각 정규형이 해결하는 이상 현상(Anomaly)을 구체적으로 제시해주세요. 또한 실무에서 의도적으로 반정규화(Denormalization)를 선택하는 경우와 그 이유, 반정규화 시 발생할 수 있는 문제점과 이를 관리하는 전략을 설명해주세요.

정규화는 중복 제거와 종속성 분리가 핵심이며, 반정규화는 조인 비용과 읽기 성능의 트레이드오프입니다.

A. 모범답안

1NF는 각 속성이 원자값을 가져야 하며 반복 그룹을 제거하여 다중값 이상을 방지하고, 2NF는 부분 함수 종속을 제거하여 기본키의 일부에만 종속된 속성을 분리함으로써 삽입/삭제 이상을 해결하며, 3NF는 이행 함수 종속을 제거하여 비키 속성 간 종속성을 분리함으로써 갱신 이상을 방지합니다. 반정규화는 빈번한 조인으로 인한 성능 저하를 개선하기 위해 선택하며, 대표적으로 읽기 중심 시스템의 집계 테이블 추가, 자주 조회되는 참조 데이터의 중복 저장, 계산 컬럼의 사전 저장 등이 있습니다. 반정규화 시 데이터 중복으로 인한 불일치 위험이 있으므로, 트리거나 애플리케이션 로직으로 동기화를 보장하거나, 배치 작업으로 주기적 정합성 검증을 수행하며, 쓰기가 적고 읽기가 많은 데이터에만 제한적으로 적용해야 합니다. 현대적 접근으로는 CQRS 패턴을 활용하여 명령(쓰기)용 정규화 모델과 조회(읽기)용 반정규화 모델을 분리 운영하는 방법도 있습니다.

핵심 포인트
  • • 1NF, 2NF, 3NF의 정의와 각각이 해결하는 이상 현象
  • • 반정규화의 적용 시나리오와 성능 개선 효과
  • • 반정규화로 인한 데이터 불일치 위험과 관리 전략
  • • CQRS 패턴을 통한 읽기/쓰기 모델 분리
답변에 넣으면 좋은 키워드
정규화 함수 종속 이상 현상 반정규화 CQRS 데이터 중복 집계 테이블
실무에서는

전자상거래 주문 내역 조회 화면에서 주문-상품-사용자 정보를 매번 조인하는 대신 주문 테이블에 사용자명과 상품명을 중복 저장하여 조회 성능을 개선합니다.

Follow-up 질문

BCNF(Boyce-Codd Normal Form)와 3NF의 차이는 무엇이며, 실무에서 BCNF까지 정규화하는 것이 항상 필요한가요?

8 인덱스 최적화
Hard

Q. 커버링 인덱스(Covering Index)의 개념과 동작 원리를 설명하고, 쿼리 성능 향상에 어떻게 기여하는지 설명해주세요. 또한 복합 인덱스(Composite Index) 설계 시 컬럼 순서를 결정하는 원칙과, 인덱스 카디널리티(Cardinality)가 인덱스 효율성에 미치는 영향을 설명하고, 인덱스가 오히려 성능을 저하시키는 경우와 그 이유를 제시해주세요.

인덱스가 쿼리에 필요한 모든 데이터를 포함하는지, 그리고 인덱스 스캔 후 테이블 접근이 필요한지가 핵심입니다.

A. 모범답안

커버링 인덱스는 쿼리가 필요로 하는 모든 컬럼을 인덱스가 포함하여, 인덱스만 스캔하고 테이블 접근(Table Lookup)을 생략함으로써 랜덤 I/O를 제거하고 성능을 크게 향상시킵니다. 복합 인덱스 컬럼 순서는 등호 조건을 우선 배치하고, 카디널리티가 높은(고유값이 많은) 컬럼을 앞에 두며, 범위 조건이나 정렬 조건을 마지막에 배치하는 것이 원칙이지만, 실제 쿼리 패턴과 선택도를 분석하여 결정해야 합니다. 인덱스 카디널리티가 낮으면(예: 성별, Boolean) 인덱스 스캔 후 대량의 행을 필터링해야 하므로 풀 테이블 스캔보다 비효율적일 수 있습니다. 인덱스가 성능을 저하시키는 경우는 쓰기 작업 시 인덱스 갱신 오버헤드, 인덱스가 너무 많아 옵티마이저 혼란 유발, 인덱스 크기가 커서 버퍼 풀 효율 저하, 낮은 선택도로 인한 비효율적 스캔 등이 있으며, 주기적으로 사용되지 않는 인덱스를 식별하여 제거하고(sys.schema_unused_indexes), 쓰기 중심 테이블은 최소한의 인덱스만 유지해야 합니다.

핵심 포인트
  • • 커버링 인덱스를 통한 테이블 접근 제거와 성능 향상
  • • 복합 인덱스 컬럼 순서 결정 원칙과 실제 쿼리 패턴 분석
  • • 인덱스 카디널리티와 선택도가 효율성에 미치는 영향
  • • 과도한 인덱스로 인한 쓰기 성능 저하와 관리 전략
답변에 넣으면 좋은 키워드
커버링 인덱스 복합 인덱스 카디널리티 선택도 Table Lookup 인덱스 오버헤드
실무에서는

사용자 검색 기능에서 이름, 이메일, 전화번호를 모두 반환하는 쿼리에 대해 세 컬럼을 모두 포함하는 커버링 인덱스를 생성하여 응답 시간을 크게 단축할 수 있습니다.

Follow-up 질문

인덱스 스킵 스캔(Index Skip Scan)은 어떤 경우에 유용하며, 복합 인덱스의 첫 번째 컬럼이 조건에 없을 때 어떻게 활용되나요?

9 트랜잭션 로그 관리
Medium

Q. 데이터베이스의 WAL(Write-Ahead Logging) 프로토콜의 동작 원리와 ACID 속성 중 원자성(Atomicity)과 지속성(Durability)을 어떻게 보장하는지 설명해주세요. 또한 체크포인트(Checkpoint)의 역할과 동작 방식, 그리고 트랜잭션 로그 크기가 계속 증가하는 문제의 원인과 해결 방법을 제시해주세요.

커밋 전에 로그를 먼저 디스크에 기록하는 순서와, 장애 복구 시 로그를 어떻게 활용하는지 생각해보세요.

A. 모범답안

WAL 프로토콜은 데이터 페이지를 디스크에 쓰기 전에 변경 내역을 트랜잭션 로그에 먼저 기록하여, 커밋 시점에 로그만 디스크에 동기화하면 트랜잭션을 완료할 수 있게 합니다. 원자성은 트랜잭션 시작/커밋/롤백 정보를 로그에 기록하여 장애 시 Undo를 통해 미완료 트랜잭션을 취소하고, 지속성은 커밋된 트랜잭션의 로그를 디스크에 강제 기록(fsync)하여 장애 후 Redo를 통해 복구함으로써 보장됩니다. 체크포인트는 주기적으로 메모리의 더티 페이지를 디스크에 플러시하여 로그에서 재수행해야 할 범위를 줄이고 복구 시간을 단축하며, 체크포인트 LSN 이전의 로그는 복구에 불필요하므로 재사용 가능합니다. 트랜잭션 로그가 증가하는 원인은 장기 실행 트랜잭션, 복제 지연으로 인한 로그 보관, 체크포인트 빈도 부족, 로그 백업 미실행 등이며, 장기 트랜잭션 종료, 복제 지연 해소, 체크포인트 간격 조정, 정기적인 로그 백업으로 해결합니다. SQL Server의 경우 트랜잭션 로그 백업이 필수이며, PostgreSQL은 WAL 아카이빙과 max_wal_size 설정을 관리해야 합니다.

핵심 포인트
  • • WAL 프로토콜의 로그 우선 기록 원칙
  • • Undo/Redo 로그를 통한 원자성과 지속성 보장 메커니즘
  • • 체크포인트의 역할과 복구 시간 단축 원리
  • • 트랜잭션 로그 증가 원인과 관리 전략
답변에 넣으면 좋은 키워드
WAL Write-Ahead Logging Undo Redo 체크포인트 LSN 더티 페이지
실무에서는

데이터베이스 서버가 갑작스럽게 종료되었을 때 WAL을 통해 커밋된 트랜잭션은 모두 복구하고 미완료 트랜잭션은 롤백하여 일관성을 유지합니다.

Follow-up 질문

Group Commit 최적화는 어떻게 동작하며, 트랜잭션 처리량과 지연시간에 어떤 영향을 미치나요?

10 쿼리 성능 분석
Hard

Q. 프로덕션 환경에서 특정 쿼리의 응답 시간이 간헐적으로 급증하는 현상이 발생했습니다. 쿼리 실행 시간 변동성의 주요 원인(통계 정보 부정확, 파라미터 스니핑, 버퍼 풀 경합, Lock 대기 등)을 설명하고, Performance Schema나 Query Profiler를 활용하여 병목 지점을 식별하는 방법을 제시해주세요. 또한 슬로우 쿼리 로그 분석 시 평균 응답 시간뿐만 아니라 P95, P99 같은 백분위수(Percentile)를 함께 모니터링해야 하는 이유를 설명해주세요.

같은 쿼리라도 실행 시점의 데이터 상태, 캐시 상태, 동시 실행 쿼리 등에 따라 성능이 달라질 수 있습니다.

A. 모범답안

간헐적 성능 저하의 원인으로는 통계 정보가 오래되어 옵티마이저가 잘못된 실행 계획을 선택하는 경우, 파라미터 스니핑으로 첫 실행 시 캐싱된 계획이 다른 파라미터에 부적합한 경우, 버퍼 풀에서 페이지가 제거되어 디스크 I/O가 발생하는 경우, 다른 트랜잭션의 Lock으로 인한 대기 등이 있습니다. Performance Schema의 events_statements_history와 events_waits_history_long을 활성화하여 쿼리별 대기 이벤트를 분석하고, SHOW PROFILE을 통해 쿼리 실행 단계별 시간 소요를 확인하며, sys.statements_with_runtimes_in_95th_percentile 뷰로 이상치를 식별합니다. 평균 응답 시간은 소수의 느린 쿼리가 숨겨질 수 있으므로, P95와 P99 백분위수를 모니터링하여 대부분 사용자가 경험하는 실제 성능과 최악의 경우를 파악해야 하며, 이는 SLA 정의와 성능 개선 우선순위 결정에 필수적입니다. 해결 방법으로는 통계 정보 자동 갱신 설정, 쿼리 힌트나 OPTIMIZE TABLE 실행, 적절한 인덱스 추가, 트랜잭션 범위 축소, 커넥션 풀 크기 조정 등이 있으며, APM 도구를 통한 지속적 모니터링이 중요합니다.

핵심 포인트
  • • 간헐적 성능 저하의 다양한 원인 식별
  • • Performance Schema를 활용한 대기 이벤트 분석
  • • 백분위수 기반 성능 모니터링의 중요성
  • • 통계 정보 갱신과 실행 계획 캐시 관리
답변에 넣으면 좋은 키워드
Performance Schema 파라미터 스니핑 백분위수 통계 정보 버퍼 풀 대기 이벤트 슬로우 쿼리
실무에서는

특정 시간대에만 느려지는 보고서 쿼리를 분석한 결과, 동시에 실행되는 배치 작업으로 인한 Lock 경합이 원인임을 발견하고 실행 시간을 분리하여 해결합니다.

Follow-up 질문

Adaptive Query Optimization은 어떤 방식으로 동작하며, 실행 계획을 런타임에 조정하는 것이 어떤 장점을 제공하나요?

댓글 0

로그인 후 댓글을 작성할 수 있습니다.

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!