MySQL 미드레벨 CS 기초 기술면접

MySQL 미드레벨 (3~7년) CS 기초 5문항 조회수 45 · 2026-07-12 (일) 11:10:50
1 트랜잭션 격리수준
Hard

Q. MySQL InnoDB의 SERIALIZABLE 격리 수준에서는 일반 SELECT 쿼리도 암묵적으로 락을 획득합니다. 이것이 REPEATABLE READ와 어떻게 다른지 설명하고, SERIALIZABLE 격리 수준이 성능에 미치는 영향과 실무에서 사용을 고려해야 하는 특수한 상황을 설명해주세요.

A. 모범답안

SERIALIZABLE 격리 수준에서는 일반 SELECT 쿼리가 자동으로 SELECT ... FOR SHARE와 동일하게 공유 락을 획득하여 읽은 데이터의 변경을 막습니다. REPEATABLE READ는 MVCC를 통해 락 없이 일관된 읽기를 제공하지만, SERIALIZABLE은 모든 읽기에 락을 걸어 완전한 직렬화를 보장합니다. 이로 인해 동시성이 크게 저하되고 데드락 가능성이 높아지므로, 금융 거래처럼 절대적인 일관성이 필요하고 동시 접근이 적은 특수한 경우에만 사용을 고려해야 합니다.

핵심 포인트
  • • 일반 SELECT도 공유 락 획득
  • • MVCC 대신 락 기반 읽기로 완전한 직렬화 보장
  • • 동시성 저하 및 데드락 위험 증가
  • • 금융 거래 등 특수 상황에서만 사용
Follow-up 질문

SERIALIZABLE 격리 수준을 사용하는 시스템에서 성능을 개선하기 위해 적용할 수 있는 데이터베이스 설계 패턴이나 애플리케이션 레벨의 최적화 방법은 무엇이 있을까요?

2 인덱스 자료구조
Medium

Q. InnoDB의 B+Tree 인덱스에서 리프 노드와 내부 노드의 구조적 차이를 설명하고, 리프 노드들이 연결 리스트(Linked List)로 연결되어 있는 것이 범위 검색 성능에 어떤 이점을 제공하는지 설명해주세요.

A. 모범답안

B+Tree에서 내부 노드는 키와 자식 노드 포인터만 저장하여 인덱스 역할만 하지만, 리프 노드는 실제 키와 데이터(또는 레코드 포인터)를 모두 저장합니다. 모든 리프 노드는 양방향 연결 리스트로 연결되어 있어, 범위 검색 시 첫 번째 키를 찾은 후 트리를 다시 탐색하지 않고 리프 노드를 순차적으로 스캔할 수 있습니다. 이를 통해 ORDER BY나 범위 조건(BETWEEN, >, < 등)에서 효율적인 순차 접근이 가능하며, 디스크 I/O를 최소화할 수 있습니다.

핵심 포인트
  • • 내부 노드는 인덱스만, 리프 노드는 실제 데이터 저장
  • • 리프 노드의 양방향 연결 리스트 구조
  • • 범위 검색 시 순차 스캔으로 효율적 접근
  • • 트리 재탐색 없이 연속된 데이터 읽기 가능
Follow-up 질문

B+Tree의 높이(Height)가 성능에 미치는 영향과, 대용량 테이블에서 인덱스 높이를 최소화하기 위한 전략은 무엇이 있을까요?

3 쿼리 실행 계획
Medium

Q. MySQL에서 EXPLAIN 결과의 Extra 컬럼에 'Using index condition'과 'Using where'가 표시되는 경우의 차이를 설명하고, Index Condition Pushdown(ICP) 최적화가 성능에 미치는 영향을 설명해주세요.

A. 모범답안

'Using where'는 스토리지 엔진에서 인덱스로 레코드를 찾은 후 MySQL 엔진 레벨에서 WHERE 조건을 필터링하는 것을 의미합니다. 'Using index condition'은 ICP 최적화가 적용되어 WHERE 조건의 일부를 스토리지 엔진 레벨로 푸시다운하여, 테이블 접근 전에 인덱스 레벨에서 필터링하는 것을 의미합니다. ICP를 통해 불필요한 테이블 랜덤 액세스를 줄일 수 있어, 특히 세컨더리 인덱스를 사용하는 쿼리에서 성능이 크게 향상됩니다.

핵심 포인트
  • • Using where는 MySQL 엔진 레벨 필터링
  • • Using index condition은 스토리지 엔진 레벨 필터링
  • • ICP로 테이블 접근 전 인덱스에서 조기 필터링
  • • 세컨더리 인덱스 사용 시 랜덤 I/O 감소
Follow-up 질문

ICP 최적화가 적용되지 않는 경우는 어떤 상황이 있으며, 이를 우회하거나 개선할 수 있는 방법은 무엇이 있을까요?

4 동시성 제어
Hard

Q. MySQL InnoDB에서 Gap Lock과 Record Lock, Next-Key Lock의 개념과 차이점을 설명하고, 이들이 Phantom Read를 방지하는 메커니즘을 구체적으로 설명해주세요.

A. 모범답안

Record Lock은 실제 존재하는 인덱스 레코드에 거는 락이고, Gap Lock은 인덱스 레코드 사이의 간격에 거는 락으로 해당 범위에 새로운 레코드 삽입을 방지합니다. Next-Key Lock은 Record Lock과 그 앞의 Gap Lock을 결합한 것으로, InnoDB의 기본 락킹 방식입니다. REPEATABLE READ 격리 수준에서 범위 조건 쿼리 실행 시 Next-Key Lock을 사용하여 조회한 범위의 레코드와 그 사이의 간격을 모두 잠금으로써, 다른 트랜잭션이 해당 범위에 새로운 레코드를 삽입하는 것을 막아 Phantom Read를 방지합니다.

핵심 포인트
  • • Record Lock은 실제 레코드 락
  • • Gap Lock은 레코드 간격 락으로 삽입 방지
  • • Next-Key Lock은 둘의 결합
  • • 범위 쿼리에서 Next-Key Lock으로 Phantom Read 방지
Follow-up 질문

Gap Lock으로 인해 발생할 수 있는 데드락 시나리오와, READ COMMITTED 격리 수준에서 Gap Lock이 사용되지 않는 것의 장단점을 설명해주세요.

5 스토리지 엔진
Medium

Q. MySQL의 InnoDB와 MyISAM 스토리지 엔진의 주요 차이점을 트랜잭션 지원, 락킹 메커니즘, 인덱스 구조 측면에서 비교하고, 현대 애플리케이션에서 InnoDB가 기본 엔진으로 선택되는 이유를 설명해주세요.

A. 모범답안

InnoDB는 트랜잭션을 지원하여 ACID 속성을 보장하지만 MyISAM은 트랜잭션을 지원하지 않습니다. 락킹 측면에서 InnoDB는 행 수준 락을 사용해 높은 동시성을 제공하지만, MyISAM은 테이블 수준 락만 지원하여 동시 쓰기 성능이 낮습니다. 인덱스 구조에서 InnoDB는 클러스터드 인덱스로 데이터를 저장하지만, MyISAM은 데이터와 인덱스를 별도로 저장합니다. 현대 웹 애플리케이션은 동시 사용자가 많고 데이터 일관성이 중요하므로, 트랜잭션 지원과 행 수준 락을 제공하는 InnoDB가 기본 선택이 됩니다.

핵심 포인트
  • • InnoDB는 트랜잭션 지원, MyISAM은 미지원
  • • InnoDB는 행 락, MyISAM은 테이블 락
  • • InnoDB는 클러스터드 인덱스 구조
  • • 동시성과 데이터 일관성 요구로 InnoDB 선호
Follow-up 질문

MyISAM이 여전히 유용한 특수한 사용 사례가 있다면 어떤 것이 있으며, MySQL 8.0에서 MyISAM의 역할은 어떻게 변화했나요?

댓글 0

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

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