MySQL 주니어 CS 기초 면접

MySQL 주니어 (1~3년) CS 기초 5문항 조회수 61 · 2026-05-30 (토) 19:10:47
1 데이터베이스 격리수준
Medium

Q. MySQL의 트랜잭션 격리수준(Isolation Level) 4가지를 설명하고, READ COMMITTED와 REPEATABLE READ의 차이점을 실무 예시를 들어 설명해주세요.

A. 모범답안

MySQL의 4가지 격리수준은 READ UNCOMMITTED(커밋되지 않은 데이터 읽기 가능), READ COMMITTED(커밋된 데이터만 읽기), REPEATABLE READ(트랜잭션 내 같은 쿼리는 항상 같은 결과 반환), SERIALIZABLE(완전한 직렬화)입니다. READ COMMITTED는 트랜잭션 중 다른 트랜잭션이 커밋하면 그 변경사항이 보이지만, REPEATABLE READ는 트랜잭션 시작 시점의 스냅샷을 유지하여 같은 결과를 보장합니다. 예를 들어 상품 재고 조회 시 READ COMMITTED는 조회할 때마다 다른 값이 나올 수 있지만, REPEATABLE READ는 트랜잭션 내에서 일관된 재고 수량을 확인할 수 있습니다. MySQL InnoDB의 기본값은 REPEATABLE READ입니다.

핵심 포인트
  • • 4가지 격리수준: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE
  • • READ COMMITTED는 커밋된 최신 데이터를 읽고, REPEATABLE READ는 트랜잭션 시작 시점의 스냅샷 유지
  • • MySQL InnoDB 기본값은 REPEATABLE READ
Follow-up 질문

REPEATABLE READ에서도 발생할 수 있는 Phantom Read 문제는 무엇이며, MySQL InnoDB는 이를 어떻게 해결하나요?

2 데이터베이스 락
Medium

Q. MySQL에서 공유락(Shared Lock)과 배타락(Exclusive Lock)의 차이점을 설명하고, 데드락(Deadlock)이 발생하는 상황과 해결 방법을 설명해주세요.

A. 모범답안

공유락(S Lock)은 읽기 작업에 사용되며 여러 트랜잭션이 동시에 획득할 수 있지만, 배타락(X Lock)은 쓰기 작업에 사용되며 다른 어떤 락과도 동시에 존재할 수 없습니다. 데드락은 두 개 이상의 트랜잭션이 서로가 보유한 락을 기다리며 무한 대기 상태에 빠지는 현상입니다. 예를 들어 트랜잭션 A가 row1을 락하고 row2를 기다리는 동안, 트랜잭션 B가 row2를 락하고 row1을 기다리면 데드락이 발생합니다. 해결 방법으로는 트랜잭션 순서 통일, 락 타임아웃 설정, MySQL의 자동 데드락 감지 및 롤백 기능 활용 등이 있습니다.

핵심 포인트
  • • 공유락은 읽기용으로 동시 획득 가능, 배타락은 쓰기용으로 독점적
  • • 데드락은 트랜잭션들이 서로의 락을 기다리며 무한 대기하는 상황
  • • 해결 방법: 트랜잭션 순서 통일, 타임아웃 설정, 자동 감지 및 롤백
Follow-up 질문

낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)의 차이는 무엇이며, 각각 어떤 상황에서 사용하는 것이 적합한가요?

3 데이터베이스 스토리지 엔진
Easy

Q. MySQL의 InnoDB와 MyISAM 스토리지 엔진의 주요 차이점을 설명하고, 현재 InnoDB가 기본 엔진으로 사용되는 이유를 설명해주세요.

A. 모범답안

InnoDB는 트랜잭션을 지원하고 행 단위 락(Row-level locking)을 사용하며 외래키 제약조건을 지원하는 반면, MyISAM은 트랜잭션을 지원하지 않고 테이블 단위 락(Table-level locking)을 사용하며 외래키를 지원하지 않습니다. InnoDB는 ACID 속성을 보장하고 크래시 복구 기능이 우수하며, 동시성 처리가 뛰어나 다중 사용자 환경에 적합합니다. 현대 웹 애플리케이션은 데이터 무결성과 동시성 처리가 중요하기 때문에 InnoDB가 MySQL 5.5 이후 기본 엔진으로 채택되었습니다. MyISAM은 주로 읽기 전용이나 로그 데이터 같은 특수한 경우에만 사용됩니다.

핵심 포인트
  • • InnoDB: 트랜잭션 지원, 행 단위 락, 외래키 지원
  • • MyISAM: 트랜잭션 미지원, 테이블 단위 락, 외래키 미지원
  • • InnoDB는 데이터 무결성과 동시성 처리가 우수하여 기본 엔진으로 채택
Follow-up 질문

InnoDB의 MVCC(Multi-Version Concurrency Control)는 무엇이며, 어떻게 동시성을 향상시키나요?

4 쿼리 최적화
Medium

Q. MySQL에서 서브쿼리(Subquery)와 조인(Join) 중 어느 것이 성능상 유리한지 설명하고, 서브쿼리를 사용해야 하는 적절한 상황을 예시와 함께 설명해주세요.

A. 모범답안

일반적으로 조인이 서브쿼리보다 성능상 유리합니다. 서브쿼리는 외부 쿼리의 각 행마다 실행될 수 있어(상관 서브쿼리) 성능 저하가 발생할 수 있지만, 조인은 옵티마이저가 실행 계획을 최적화하기 쉽고 인덱스를 효율적으로 활용할 수 있습니다. 하지만 서브쿼리가 적합한 경우도 있는데, EXISTS나 NOT EXISTS로 존재 여부만 확인할 때, 집계 함수 결과를 조건으로 사용할 때(예: 평균보다 높은 값 찾기), 또는 쿼리 가독성이 중요할 때 서브쿼리가 유용합니다. MySQL 5.6 이후부터는 서브쿼리 최적화가 개선되어 일부 서브쿼리는 자동으로 조인으로 변환됩니다.

핵심 포인트
  • • 일반적으로 조인이 서브쿼리보다 성능상 유리
  • • 서브쿼리 적합 상황: EXISTS 사용, 집계 함수 결과 조건, 가독성 중시
  • • MySQL 5.6 이후 서브쿼리 최적화 개선
Follow-up 질문

IN 절에 서브쿼리를 사용하는 것과 JOIN을 사용하는 것의 실행 계획 차이는 무엇인가요?

5 데이터베이스 파티셔닝
Medium

Q. 데이터베이스 파티셔닝(Partitioning)이 무엇인지 설명하고, 수평 파티셔닝(Horizontal Partitioning)과 샤딩(Sharding)의 차이점을 설명해주세요.

A. 모범답안

파티셔닝은 대용량 테이블을 물리적으로 여러 개의 작은 단위로 분할하여 관리하는 기법으로, 쿼리 성능 향상과 관리 효율성을 목적으로 합니다. 수평 파티셔닝은 행(row) 기준으로 데이터를 분할하며, 예를 들어 날짜별로 주문 테이블을 분할할 수 있습니다. 샤딩은 수평 파티셔닝의 한 형태이지만, 데이터를 여러 데이터베이스 서버에 분산 저장한다는 점에서 차이가 있습니다. 수평 파티셔닝은 단일 데이터베이스 내에서 테이블을 분할하지만, 샤딩은 물리적으로 다른 서버에 데이터를 분산시켜 확장성을 높입니다. MySQL에서는 RANGE, LIST, HASH, KEY 등의 파티셔닝 방법을 지원합니다.

핵심 포인트
  • • 파티셔닝은 대용량 테이블을 작은 단위로 분할하는 기법
  • • 수평 파티셔닝은 단일 DB 내에서 행 기준 분할
  • • 샤딩은 여러 DB 서버에 데이터를 분산하는 수평 파티셔닝
Follow-up 질문

파티션 프루닝(Partition Pruning)이란 무엇이며, 쿼리 성능에 어떤 영향을 미치나요?

댓글 0

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

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