면접 질문 카드데이터베이스 · 서버 없이 훑어보기
125

📴 오프라인에서도 열림 · 셀프체크 기기 저장(토큰 있으면 동기화)

아키텍처 › 버퍼 풀과 로그면접 빈출90초

UPDATE 한 방이 커밋되기까지 InnoDB 안에서 무슨 일이 생기나요?

버퍼 풀 선반영 → 리두 로그 기록·플러 → 데이터 파일 쓰기는 체크포인트로 분리 → 언두 로그의 이전 버전 보관 역할

아키텍처 › 버퍼 풀과 로그면접 빈출90초

리두 로그와 언두 로그의 역할을 대비해 설명해 주세요.

리두 로그=재실행(앞으로), 언두 로그= → 각각의 사용처(리두 로그는 복구, 언두 → 바이너리 로그와 섞지 않음

아키텍처 › 아키텍처150초

쿼리 하나가 MySQL 서버에 들어와서 결과가 나가기까지, 어떤 컴포넌트를 거치고 InnoDB 안에서는 무슨 일이 일어나는지 설명해 주세요.

MySQL 엔진(커넥션 핸들러·파서·전처 → InnoDB는 버퍼 풀에 페이지를 캐시해 → 변경은 리두 로그로 내구성을, 언두 로그

아키텍처 › 클러스터링·AHI·엔진 비교90초

AHI(적응형 해시 인덱스)가 뭔지 설명해 주세요.

자주 타는 B-Tree 경로의 자동 해시 → DBA가 만들지 않는 자동 기능 → 동등 조회용, 경합 시 병목과 대응

아키텍처 › 클러스터링·AHI·엔진 비교90초

InnoDB와 MyISAM을 비교하고, 엔진을 섞어 쓰면 안 되는 이유를 말해 주세요.

트랜잭션·잠금·외래 키 세 축 비교 → MyISAM의 무시되는 외래 키 함정 → 혼용 시 원자성 붕괴

아키텍처 › MySQL 로그 파일90초

느린 쿼리를 찾고 고치는 흐름을 설명해 주세요.

슬로우 쿼리 로그 발굴 → 집계 → EX → `long_query_time`과 인덱스 → 수정 후 재측정까지 말하면 만점

아키텍처 › MySQL 로그 파일90초

에러 로그·제너럴 로그·슬로우 쿼리 로그의 용도를 구분해 주세요.

에러 로그=장애·복구, 제너럴 로그=전체 → 제너럴 로그 상시 ON의 위험 → 막히면 에러 로그부터라는 우선순위

아키텍처 › MVCC와 복구면접 빈출90초

MVCC(다중 버전 동시성 제어)가 뭔지, 읽기와 쓰기가 서로 안 막히는 원리로 설명해 주세요.

행 버전 체인(언두 로그)과 스냅샷 가시 → 일반 SELECT는 잠금 없이 자기 버전 → REPEATABLE READ와 READ

아키텍처 › MVCC와 복구면접 빈출90초

서버가 죽었다 떴을 때 InnoDB가 스스로 하는 일을 설명해 주세요.

리두 로그 재생(roll-forward) → 자동 내장 과정이라는 점 → 크래시 복구와 시점 복구(백업+바이너리

아키텍처 › MyISAM 구조90초

MyISAM 구조를 세 줄로 요약하고, 언제 쓰는지 말해 주세요.

트랜잭션 없음·테이블 락·힙 저장 → 키 캐시(인덱스만)와 OS 캐시 분담 → `COUNT(*)` 특성과 레거시 호환이

아키텍처 › MyISAM 구조90초

MyISAM 테이블에 쓰기가 몰리면 무슨 일이 생기나요?

테이블 쓰기 락의 전체 차단 → 읽기 대기 줄섬과 쓰기 기아(starva → InnoDB로 이전하는 것이 정석 대응

아키텍처 › 서버 구조와 쿼리 실행면접 빈출90초

쿼리 한 방이 MySQL 안에서 어떻게 실행되는지 설명해 주세요.

커넥션·스레드 → 파서 → 옵티마이저 → → 서버 층과 엔진 분리(플러그인) 이해 → 각 단계의 역할 한 줄씩

아키텍처 › 서버 구조와 쿼리 실행면접 빈출90초

동시 접속자가 폭증하면 MySQL에서 무슨 일이 생기나요?

커넥션당 스레드 → 컨텍스트 스위칭·메모 → `max_connections`와 세션 → 커넥션 풀·스레드 풀 등 대응 방향

데이터 압축 › 데이터 압축90초

InnoDB 테이블 압축을 언제 쓰고 언제 피해야 하나요?

ROW_FORMAT=COMPRESSED와 → 디스크·I/O(입출력)는 줄지만 CPU와 → 읽기 위주·큰 텍스트·아카이브 성격 데이

데이터 압축 › 데이터 압축90초

페이지 압축과 테이블 압축을 구분해 설명해 주세요.

투명 페이지 압축과 KEY_BLOCK_S → 버퍼 풀 이중 적재 유무 → 파일 시스템 요구사항 차이

데이터 압축 › 데이터 압축90초

압축을 쓸지 말지 어떻게 판단하나요?

읽기 위주인지 쓰기 위주인지 워크로드 판 → 방식별 측정 지표 구분 → 효과가 안 나오면 끈다는 결론

데이터 타입 › 데이터 타입150초

새 서비스의 회원·주문 테이블을 만든다면 칼럼 타입을 어떤 기준으로 고르겠습니까? 문자열·숫자·날짜 칼럼을 예로 설명해 주세요.

문자열은 길이가 고정인 코드는 CHAR, → VARCHAR 길이는 바이트로 255 경 → 커지는 PK는 BIGINT, 금액은 DE

데이터 타입 › JSON·ENUM·TEXT와 생성 칼럼 290초

TEXT나 BLOB 칼럼을 쓸 때 주의할 점은 무엇인가요?

기본 행 포맷 DYNAMIC은 행에 안 → 그래서 큰 값을 읽으면 페이지를 더 읽으 → 인덱스는 앞부분 길이를 정한 접두어 인덱

데이터 타입 › JSON·ENUM·TEXT와 생성 칼럼 290초

생성 칼럼(generated column)이 무엇이고, 어떤 문제를 풀 때 쓰나요?

같은 행의 다른 칼럼으로 계산한 값을 담 → InnoDB는 가상 칼럼에도 세컨더리 인 → 식에는 결정적인 내장 함수·연산자와 같은

데이터 타입 › JSON·ENUM·TEXT와 생성 칼럼90초

MySQL에서 JSON 칼럼은 언제 쓰고, 언제 일반 칼럼으로 나눠야 하나요?

JSON 타입은 유효성 검사, 바이너리 → 종류마다 속성이 달라 칼럼으로 만들기 어 → WHERE·조인·정렬에 자주 쓰거나 NO

데이터 타입 › 숫자·날짜 타입과 AUTO_INCREMENT 290초

AUTO_INCREMENT 번호에 빈틈이 생기는 이유와, InnoDB가 동시 INSERT에 번호를 나눠 주는 방식을 설명해 주세요.

innodb_autoinc_lock_mo → 8 → 발급한 번호는 롤백해도 반납하지 않고,

데이터 타입 › 숫자·날짜 타입과 AUTO_INCREMENT90초

DATETIME과 TIMESTAMP의 차이를 설명하고, 각각 어떤 칼럼에 쓰겠는지 말해 주세요.

TIMESTAMP는 저장할 때 세션 시간 → TIMESTAMP는 UTC 2038-01 → 여러 시간대에서 같은 순간을 봐야 하는

데이터 타입 › 숫자·날짜 타입과 AUTO_INCREMENT90초

금액 칼럼에 FLOAT이나 DOUBLE을 쓰면 안 되는 이유는 무엇인가요?

FLOAT·DOUBLE은 2진 소수로 근 → 그래서 합계가 조금씩 틀어지고 같음 비교 → 금액은 10진 자릿수를 그대로 저장하는

데이터 타입 › 문자열 타입과 문자 집합90초

CHAR와 VARCHAR는 어떻게 다르고, 각각 언제 쓰나요?

CHAR는 선언 길이만큼 공백을 채워 자 → 괄호 안 숫자는 글자 수이고 실제 바이트 → 길이가 늘 같은 코드값은 CHAR, 길이

데이터 타입 › 문자열 타입과 문자 집합90초

utf8mb4와 콜레이션(문자열 비교·정렬 규칙)이 무엇이고, 콜레이션을 잘못 고르면 어떤 문제가 생기나요?

문자 집합은 글자를 바이트로 바꾸는 규칙 → 콜레이션은 비교·정렬 규칙이며 이름 조각 → 0900 콜레이션은 NO PAD라 뒤쪽

DB 설계 › DB 설계150초

새 서비스의 데이터베이스를 설계한다면 어떤 순서와 기준으로 하겠습니까? 정규화, 반정규화, NoSQL 선택까지 묶어서 설명해 주세요.

업무 규칙에서 함수 종속과 후보 키를 찾 → 1NF 원자값, 2NF 부분 함수 종속 → 느린 쿼리를 측정해 인덱스·쿼리·캐시를

DB 설계 › 정규화와 반정규화 2면접 빈출90초

제1정규형부터 제3정규형까지 각각 무엇을 제거하는지 예를 들어 설명해 주세요.

제1정규형은 모든 칸이 원자값이어야 하며 → 제2정규형은 비주 속성이 후보 키 전체에 → 제3정규형은 비주 속성이 키가 아닌 다른

DB 설계 › 정규화와 반정규화 2면접 빈출90초

BCNF(보이스-코드 정규형)는 제3정규형과 무엇이 다른가요?

BCNF는 모든 결정자가 슈퍼 키여야 하 → (학생, 과목, 교수)에서 교수 → 과목 → BCNF 분해는 무손실이지만 종속 보존이

DB 설계 › 정규화와 반정규화 3면접 빈출90초

반정규화는 언제 하고, 하면 무엇을 대가로 치르나요?

반정규화는 정규화한 설계에서 조회 성능을 → 대가는 쓰기·공간 증가와 복사본을 놓쳤을 → 먼저 3NF까지 정규화하고, 느린 쿼리를

DB 설계 › 정규화와 반정규화면접 빈출90초

정규화는 왜 하나요? 정규화하지 않은 테이블에서 생기는 문제를 예로 들어 설명해 주세요.

정규화는 테이블 하나에 한 주제의 사실만 → 중복 때문에 갱신 이상(일부만 고쳐 어긋 → 구체 예(수강 테이블의 학과 전화 변경,

DB 설계 › 정규화와 반정규화면접 빈출90초

슈퍼 키, 후보 키, 기본 키, 대체 키의 차이를 설명해 주세요.

슈퍼 키는 행을 유일하게 구분하는 칼럼 → 후보 키는 슈퍼 키 중 칼럼을 하나라도 → 기본 키는 후보 키 중 대표로 고른 하나

DB 설계 › NoSQL과 선택 기준 290초

CAP 정리를 설명하고, 흔한 오해가 무엇인지 말해 주세요.

일관성(모든 읽기가 최신 쓰기 또는 오류 → 네트워크 분할은 피할 수 없어 분할 내성 → CAP의 일관성은 최신 값 가시성이며 A

DB 설계 › NoSQL과 선택 기준90초

NoSQL의 종류를 설명하고, 각각 어떤 데이터에 맞는지 말해 주세요.

키-값 저장소는 키로만 넣고 꺼내며 캐시 → 문서 DB는 JSON 같은 문서를 저장하 → 와이드 칼럼 저장소는 행 키로 나눠 쓰기

데이터 암호화 › 데이터 암호화90초

MySQL에서 저장 데이터 암호화(TDE, 투명한 데이터 암호화)는 어떻게 동작하고, 운영할 때 무엇을 챙겨야 하나요?

테이블스페이스 단위로 ENCRYPTION → 2단계 키 구조 → 데이터 파일 유출은 막지만 접속한 사용자

데이터 암호화 › 데이터 암호화90초

MySQL TDE(투명한 데이터 암호화) 구조를 설명해 주세요.

2단계 키(마스터 키와 테이블스페이스 키 → 키링 보관과 테이블 지정 → 로그(언두·리두·바이너리) 범위

데이터 암호화 › 데이터 암호화90초

DB 암호화와 애플리케이션 암호화 중 뭘 쓰나요?

TDE는 디스크 탈취 방어 → 애플리케이션 암호화는 관리자·덤프 유출까 → 민감도에 따라 둘을 겹칠지 판단

실행 계획 › 실행 계획 분석면접 빈출90초

EXPLAIN(실행 계획 조회) 결과를 어떻게 읽는지, 보는 순서대로 설명해 주세요.

type·key·rows·Extra 중심 → ALL이면 원인 찾기, key는 의도한 → id 순서로 보는 조인 흐름

실행 계획 › 실행 계획 분석면접 빈출90초

type ALL(풀 테이블 스캔)이 나왔습니다. 원인과 처방을 말해 주세요.

읽기 비율에 따라 정당할 수 있다는 전제 → 통계·함수 가공·타입 불일치·선택도·인덱 → ANALYZE로 통계 갱신, 쿼리·인덱스

실행 계획 › 실행 계획 확인면접 빈출90초

EXPLAIN과 EXPLAIN ANALYZE의 차이를 설명하고, 언제 뭘 쓰는지 말해 주세요.

예상과 실측의 구분 → 둘이 어긋나면 통계를 의심한다는 진단 연 → 지원 범위와 변경 문장 실측 시 주의

실행 계획 › 실행 계획 확인면접 빈출90초

쿼리 튜닝 요청이 왔습니다. 처음부터 끝까지 흐름을 말해 주세요.

재현·측정, EXPLAIN, 원인 파악, → 슬로우 쿼리 로그로 발굴하고 EXPLAI → 캐시 조건 통제의 언급

실행 계획 › 실행 계획150초

느린 쿼리를 받았을 때 EXPLAIN으로 어떻게 진단하고 무엇을 고치는지, 과정을 설명해 주세요.

EXPLAIN은 예상 계획, EXPLAI → type 칼럼으로 접근 방식(const· → key·key_len으로 어떤 인덱스를

실행 계획 › 통계 정보와 코스트 모델90초

통계 정보가 실행 계획에 어떤 영향을 주는지 설명해 주세요.

행 수·카디널리티·페이지 수가 비용 계산 → 통계가 틀리면 계획이 틀어진다는 인과 → ANALYZE TABLE이 첫 단추라는

실행 계획 › 통계 정보와 코스트 모델90초

히스토그램이 뭔지, 언제 필요한지 말해 주세요.

값 분포 기록이라는 정의 → 치우친 분포에서 범위 조건 비용을 정확하 → 카디널리티만으로 부족한 경우

고가용성 › 고가용성150초

MySQL 서비스의 고가용성을 어떻게 설계하겠습니까? 장애 조치와 데이터 유실, 스플릿 브레인까지 포함해 설명해 주세요.

RTO(복구 시간)와 RPO(잃어도 되는 → 비동기 복제 기반 장애 조치는 유실과 스 → 그룹 복제는 과반수 합의와 충돌 검사로

고가용성 › 그룹 복제와 InnoDB 클러스터 290초

고가용성 구성에서 스플릿 브레인이란 무엇이고, 그룹 복제는 장애를 어떻게 감지하고 견디나요?

스플릿 브레인은 네트워크만 끊긴 옛 소스 → 멤버 메시지가 5초 끊기면 UNREACH → 결정에는 과반수(정족수)가 필요하고 f대

고가용성 › 그룹 복제와 InnoDB 클러스터 390초

InnoDB 클러스터는 어떻게 구성되고, 도입하려면 테이블과 서버 설정에 어떤 조건이 필요한가요?

그룹 복제(합의·자동 프라이머리 선출) → 애플리케이션은 Router에 접속하고, → InnoDB만, 모든 테이블에 PK(또는

고가용성 › 그룹 복제와 InnoDB 클러스터 490초

그룹 복제에서 세컨더리를 읽을 때 최신 데이터를 보장하려면 어떻게 하나요? 그리고 정족수를 잃으면 어떻게 복구하나요?

커밋 응답은 합의·충돌 검사 통과 뒤라 → group_replication_cons → 과반수를 잃은 쪽은 멈추며, 끊긴 멤버가

고가용성 › 그룹 복제와 InnoDB 클러스터90초

MySQL 그룹 복제는 트랜잭션 커밋을 어떻게 결정하고, 일반 비동기·반동기 복제와 무엇이 다른가요?

쓰기 트랜잭션은 커밋 때 바뀐 행과 쓰기 → 각 멤버가 같은 순서로 충돌 검사(cer → 커밋 응답은 합의·충돌 검사 통과 뒤이며

인덱스 › B-Tree 구조와 키 변경면접 빈출90초

B-Tree 인덱스 구조를 그림 그리듯 설명해 주세요.

루트·브랜치·리프 3단과 각 역할(루트· → 리프의 양방향 링크와 범위 스캔의 연결 → 균형 유지로 탐색 비용이 일정하고, 팬아

인덱스 › B-Tree 구조와 키 변경면접 빈출90초

UUID(범용 고유 식별자)를 PK(기본 키)로 쓰면 안 된다고 하던데, B-Tree 관점에서 왜 그런가요?

랜덤 키라서 리프 중간에 삽입되고, 그래 → 그 결과로 단편화·캐시 미스·쓰기 증폭이 → 순차 키(AUTO_INCREMENT)와의

인덱스 › B-Tree 활용면접 빈출90초

(a, b) 인덱스가 있는데 b로만 조회하면 어떻게 되나요?

좌측 접두어 규칙: 왼쪽 칼럼부터 연속으 → 전화번호부 비유 등 직관적 설명 → 범위 조건 뒤 칼럼은 필터로만 쓰인다는

인덱스 › B-Tree 활용면접 빈출90초

커버링 인덱스가 뭔지, 언제 효과가 큰지 설명해 주세요.

SELECT 목록이 인덱스 칼럼 안에 모 → EXPLAIN의 Using index로 → SELECT * 와의 대비, 랜덤 I/O

인덱스 › 클러스터링 인덱스면접 빈출90초

클러스터링 인덱스가 뭔지, 세컨더리 인덱스와 조회 경로가 어떻게 다른지 설명해 주세요.

PK 순서로 저장하고 리프에 행 전체를 → 세컨더리 리프에는 PK 값이 있어 조회가 → 커버링이면 한 단계로 끝난다는 예외

인덱스 › 클러스터링 인덱스면접 빈출90초

PK(기본 키) 설계 원칙(짧고·불변이고·순차적)의 근거를 설명해 주세요.

짧게: 세컨더리 인덱스마다 PK를 품음 → 불변: 변경 시 세컨더리 인덱스 연쇄 갱 → 순차적: 끝에 삽입돼 페이지 분할 회피

인덱스 › 디스크 I/O와 인덱스90초

인덱스가 왜 빠른지, 디스크 I/O(입출력) 관점에서 설명해 주세요.

랜덤 I/O와 순차 I/O의 차이를 안다 → 인덱스는 읽는 페이지 수를 줄이는 장치라 → SSD 시대에도 작업량 절감·캐시 효율로

인덱스 › 디스크 I/O와 인덱스90초

인덱스를 많이 만들면 안 되는 이유를 설명해 주세요.

쓰기 비용: INSERT·UPDATE·D → 공간 비용과 버퍼 풀 점유 → 읽기·쓰기 트레이드오프라는 결론

인덱스 › 외래키와 잠금 대기90초

외래 키가 잠금 대기를 일으키는 두 장면을 설명해 주세요.

자식 변경 때 부모 행의 공유 락에서 대 → 부모 변경 때 자식을 검사하며, 자식 인 → FK 자식 칼럼 인덱스의 필수성

인덱스 › 외래키와 잠금 대기90초

외래 키를 걸어야 할까요, 말아야 할까요?

찬반 근거를 트레이드오프로 제시 → 안 걸 때의 대안(애플리케이션 검증·배치 → 팀 규칙·규모에 따라 다르다는 결론

인덱스 › 인덱스150초

인덱스가 왜 빠른지부터 시작해서, MySQL InnoDB 인덱스를 설계할 때 무엇을 고려하는지 전체적으로 설명해 주세요.

인덱스의 목적은 랜덤 디스크 I/O(입출 → InnoDB는 PK(기본 키) 기준 클러 → 다중 칼럼 인덱스는 좌측 접두어 규칙을

인덱스 › 특수 인덱스90초

B-Tree로 안 되는 검색 세 가지와 각각의 대안을 말해 주세요.

앞 와일드카드 LIKE에는 FULLTEX → 공간 조건에는 R-Tree → 함수로 가공한 조건에는 가상 칼럼·함수

인덱스 › 특수 인덱스90초

JSON 칼럼에 인덱스를 걸 수 있나요?

가상 생성 칼럼으로 값을 추출하고 B-T → 배열 원소는 멀티 밸류 인덱스 → 스키마 유연성과 검색 사이의 절충이라는

인덱스 › 유니크 인덱스90초

유니크 인덱스와 PK(기본 키)의 차이를 설명하고, 각각 언제 쓰는지 말해 주세요.

NULL 허용 여부, 개수 제한, 클러스 → 대리 키(PK)와 업무 키(유니크) 분리 → NULL 여러 개 허용 함정

인덱스 › 유니크 인덱스90초

쿠폰 발급처럼 경합이 심한 유니크 키 처리에서 주의할 점을 말해 주세요.

유니크 동등 조건의 잠금 축소(레코드 락 → SELECT와 INSERT를 나누기보다 → 데드락·대기 가능성과 재시도

성능 모니터링 › 성능 모니터링120초

MySQL 성능 문제를 진단할 때 Performance 스키마와 sys 스키마를 어떻게 활용하나요?

Performance 스키마는 인스트루먼 → sys 스키마는 그 테이블을 목적별 뷰로 → sys

성능 모니터링 › Performance 스키마와 sys 스키마 290초

Performance 스키마에서 느린 쿼리를 찾을 때 어떤 테이블을 보나요? 이벤트 테이블과 요약 테이블은 어떻게 다른가요?

이벤트는 트랜잭션 안에 문장, 문장 안에 → 이벤트 테이블은 current(스레드마다 → events_statements_summ

성능 모니터링 › Performance 스키마와 sys 스키마 390초

운영 중인 MySQL에서 갑자기 쿼리들이 멈췄다는 신고가 오면 어떻게 원인을 찾겠어요?

먼저 잠금 대기인지 구분하고, 메타데이터 → DDL이 끼어 있으면 sys → 행 잠금이면 sys

성능 모니터링 › Performance 스키마와 sys 스키마90초

Performance 스키마(서버 내부 성능 측정 기능)가 무엇이고, 슬로우 쿼리 로그와 무엇이 다른가요?

서버 코드 안의 측정 지점에서 문장·단계 → 인스트루먼트(측정 지점)와 컨슈머(저장할 → 다이제스트별 요약 테이블로 모든 문장을

옵티마이저 › 쿼리 힌트90초

USE·FORCE·IGNORE INDEX의 차이를 설명해 주세요.

USE는 제안, FORCE는 테이블 스캔 → 강도 순서와 각각의 용도 → 진단 후 사용이라는 전제

옵티마이저 › 쿼리 힌트90초

힌트를 넣어야 할 때의 원칙을 말해 주세요.

진단 후 확신, 범위 최소화, 이유 기록 → SET_VAR의 쿼리 한정 안전성 → 통계·인덱스가 근본이라는 인식

옵티마이저 › 옵티마이저150초

MySQL 옵티마이저가 실행 계획을 어떻게 고르는지, 그리고 정렬·조인 같은 비용이 큰 작업을 어떻게 처리하는지 설명해 주세요.

비용 기반 옵티마이저가 테이블·인덱스 통 → 접근 방식은 인덱스 레인지 스캔·풀 인덱 → 정렬은 인덱스 순서를 그대로 쓰는 것이

옵티마이저 › 조인 최적화면접 빈출90초

MySQL 8.4의 NL(Nested Loop)·BKA(Batched Key Access)·해시 조인을 구분해 설명해 주세요.

NL은 바깥 행마다 안쪽 입력을 탐색하며 → BKA는 바깥 키를 모아 MRR(다중 범 → 해시 조인은 한 입력으로 해시를 구축한

옵티마이저 › 조인 최적화면접 빈출90초

조인이 느립니다. 진단 순서를 말해 주세요.

드라이빙 순서, 매칭 방식, 조인 키 인 → EXPLAIN으로 순서·방식 확인 → 힌트·STRAIGHT_JOIN은 확신 있

옵티마이저 › 쿼리 실행과 풀 스캔면접 빈출90초

옵티마이저가 실행 계획을 어떻게 고르는지 설명해 주세요.

파서, 전처리, 옵티마이저, 실행 순서로 → 비용 기반 옵티마이저(CBO)이며 통계에 → 통계가 틀리면 계획이 틀어진다는 결론

옵티마이저 › 쿼리 실행과 풀 스캔면접 빈출90초

인덱스가 있는데 풀 스캔을 탑니다. 어떻게 진단하나요?

풀 스캔 자체는 정당할 수 있다는 전제 → 통계·함수 가공·타입 불일치·선택도 의심 → EXPLAIN의 type·key·rows

옵티마이저 › 정렬·그룹·임시 테이블면접 빈출90초

EXPLAIN의 Using filesort와 Using temporary가 뭔지, 나오면 어떻게 하는지 말해 주세요.

파일소트는 인덱스 순서를 활용하지 못할 → Using temporary는 모아서 처 → 인덱스 활용, SELECT 축소, 메모리

옵티마이저 › 정렬·그룹·임시 테이블면접 빈출90초

GROUP BY가 느립니다. 어디를 보나요?

인덱스 순서 집계 가능 여부 → 임시 테이블 디스크 유출 여부 → MySQL 8

MySQL 소개 › MySQL 소개90초

MySQL을 서비스 DB로 선택할 때 장점과 한계를 어떻게 설명하시겠어요?

오픈소스·넓은 생태계·클라우드 관리형 지 → 8 → 복잡한 분석 쿼리·고급 SQL 기능은 P

MySQL 소개 › MySQL 소개90초

왜 MySQL을 쓰나요?

생태계·운영·용도 적합의 근거 → InnoDB 기본과 현대 SQL 기능 언 → LTS(장기 지원)·Innovation

MySQL 소개 › MySQL 소개90초

MySQL과 MariaDB의 관계를 설명해 주세요.

포크(소스를 복사해 따로 개발) 형제라는 → 8 → 에디션(커뮤니티·엔터프라이즈) 구분

파티션 › 파티션 290초

파티션 테이블에서 유니크 키에 제약이 있다고 하는데, 무엇이고 왜 생기나요?

파티션 식에 쓰인 칼럼은 기본 키를 포함 → 인덱스가 파티션마다 따로 있어서, 파티션 → 그래서 날짜 파티션 테이블은 기본 키를

파티션 › 파티션90초

테이블 파티셔닝(partitioning)은 언제 쓰고, 오래된 데이터를 지울 때 왜 유리한가요?

파티셔닝은 한 테이블을 칼럼 값 기준으로 → 오래된 구간을 DROP PARTITION → 파티션 키 조건이 있으면 파티션 프루닝으

파티션 › 파티션120초

대용량 이력 테이블에 파티셔닝을 적용한다면 어떻게 설계하고, 무엇을 조심하겠어요?

날짜 칼럼으로 RANGE(또는 RANGE → 파티션 키를 기본 키를 포함한 모든 유니 → 자주 쓰는 쿼리에 파티션 키 조건이 있어

복제 › 복제 구조와 GTID 2면접 빈출90초

GTID(전역 트랜잭션 식별자) 기반 복제는 바이너리 로그 위치 기반 복제와 무엇이 다르고, 장애 조치 때 왜 유리한가요?

GTID는 source_id(서버 UUI → 위치 기반은 파일명·위치 좌표로 진행을 → GTID는 자동 위치 지정으로 레플리카가

복제 › 복제 구조와 GTID면접 빈출90초

MySQL 복제가 어떤 구조로 동작하는지, 변경이 소스에서 레플리카까지 가는 과정을 설명해 주세요.

소스는 커밋된 변경을 바이너리 로그에 기 → 레플리카의 리시버(I/O) 스레드가 이벤 → 받기와 적용을 릴레이 로그로 분리해 적용

복제 › 바이너리 로그 포맷과 동기화 방식 2면접 빈출90초

비동기 복제와 반동기 복제의 차이를 설명하고, 반동기 복제에서 데이터 유실이 정말 없는지 말해 주세요.

비동기는 소스가 레플리카를 기다리지 않고 → 반동기는 최소 한 대 레플리카가 이벤트를 → AFTER_SYNC(기본)는 확인 후 엔

복제 › 바이너리 로그 포맷과 동기화 방식면접 빈출90초

바이너리 로그 포맷 STATEMENT와 ROW의 차이, 그리고 MySQL 8.4에서 무엇을 쓰는 게 맞는지 설명해 주세요.

STATEMENT는 SQL 문장을, RO → STATEMENT는 UUID()·RAND → ROW는 결과가 항상 같지만 대량 변경

복제 › 복제150초

MySQL 복제를 설계한다면 구조·포맷·동기화 방식·장애 조치를 어떻게 잡겠습니까? 전체 그림으로 설명해 주세요.

소스 바이너리 로그를 레플리카 리시버 스 → GTID 기반으로 구성해 자동 위치 지정 → 바이너리 로그는 ROW 포맷(8

복제 › 복제 토폴로지와 고급 설정 290초

레플리카 복제 지연이 계속 늘어납니다. 원인을 어떻게 찾고 어떻게 줄이겠습니까?

Seconds_Behind_Source는 → 대량 변경 트랜잭션, PK 없는 테이블, → 멀티 스레드 복제(8

복제 › 복제 토폴로지와 고급 설정 290초

쓰기는 소스로, 읽기는 레플리카로 보내는 구조에서 '방금 쓴 데이터가 안 보이는' 문제를 어떻게 해결하나요?

비동기 복제라 레플리카가 아직 그 변경을 → 쓴 직후 그 사용자나 요청의 읽기는 소스 → session_track_gtids로 받

복제 › 복제 토폴로지와 고급 설정90초

MySQL 복제 토폴로지에는 어떤 모양이 있고, 각각 언제 쓰며 무엇을 조심해야 하나요?

멀티 레플리카는 읽기 분산용이고, 쓰기는 → 체인은 중간 레플리카가 log_repli → 듀얼 소스에 양쪽으로 쓰면 비동기 복제가

복제 › 복제 토폴로지와 고급 설정90초

운영자가 실수로 중요한 테이블을 지웠습니다. 복제 구성으로 이를 복구할 방법이 있나요?

일반 레플리카는 삭제도 곧바로 따라 적용 → SOURCE_DELAY로 일부러 늦게 적 → 적용을 멈추고 START REPLICA

서버 설정 › 서버 설정90초

MySQL 서버 설정을 바꿀 때 어디에 어떻게 반영하고, 재시작 없이 적용되는 것과 아닌 것을 어떻게 구분하나요?

시스템 변수는 GLOBAL과 SESSIO → 동적 변수는 SET으로 즉시 바뀌고, 정 → SET PERSIST는 mysqld-au

서버 설정 › 서버 설정과 시스템 변수90초

글로벌·세션·정적·동적을 구분해 설명해 주세요.

글로벌=서버 전체·새 접속, 세션=내 커 → 정적=재시작 필요, 동적=SET 즉시 → SHOW VARIABLES는 기본으로 세

서버 설정 › 서버 설정과 시스템 변수90초

바꾼 설정이 재시작 후에도 남게 하려면 어떻게 하나요?

SET GLOBAL은 메모리 한정 → my → PERSIST 저장 위치(mysqld-a

쿼리 작성 › INSERT·UPDATE·DELETE 고급 290초

운영 중인 큰 테이블에서 오래된 행 수천만 건을 지워야 합니다. 어떻게 하시겠어요?

한 문장으로 지우지 않고 DELETE → 한 번에 지우면 잠금 행이 많아지고 언두 → 지울 행이 남길 행보다 훨씬 많으면 남길

쿼리 작성 › INSERT·UPDATE·DELETE 고급90초

INSERT IGNORE, INSERT ... ON DUPLICATE KEY UPDATE, REPLACE의 차이를 설명하고, 업서트에는 무엇을 쓰시겠어요?

IGNORE는 중복 행을 버리고, ON → REPLACE는 삭제 후 삽입이라 적지 → INSERT IGNORE는 데이터 변환

쿼리 작성 › 쿼리 작성150초

SQL을 작성할 때 결과가 조용히 틀어지거나 운영에 문제를 일으키는 대표적인 함정을 조회·변경·구조 변경으로 나눠 설명해 주세요.

조회는 논리적 처리 순서(WHERE가 S → 외부 조인에서 오른쪽 테이블 조건을 WH → REPLACE는 삭제 후 삽입, INSE

쿼리 작성 › 조인 종류와 작성 2면접 빈출90초

LEFT JOIN에서 조건을 ON에 쓸 때와 WHERE에 쓸 때 결과가 어떻게 달라지나요?

ON은 짝짓는 조건이고 WHERE는 짝지 → 오른쪽 테이블 조건을 WHERE에 두면 → 왼쪽 테이블 조건을 ON에 두면 왼쪽 행

쿼리 작성 › 조인 종류와 작성 2면접 빈출90초

'주문을 한 번도 하지 않은 회원'을 구하는 쿼리를 어떻게 작성하시겠어요? 방법별 주의점도 말해 주세요.

NOT EXISTS로 짝이 있는지만 확인 → LEFT JOIN 뒤 오른쪽의 NULL이 → NOT IN은 서브쿼리 결과에 NULL이

쿼리 작성 › 조인 종류와 작성면접 빈출90초

INNER JOIN, LEFT JOIN, CROSS JOIN은 각각 어떤 행을 돌려주나요? MySQL에서 FULL OUTER JOIN이 필요하면 어떻게 하시겠어요?

INNER JOIN은 양쪽 모두 짝이 있 → CROSS JOIN은 조건 없이 모든 조 → MySQL에는 FULL OUTER JOI

쿼리 작성 › 온라인 DDL 2면접 빈출90초

운영 중인 큰 테이블에 칼럼과 인덱스를 추가해야 합니다. 어떻게 준비하고 실행하시겠어요?

작업별로 INSTANT·INPLACE·C → 8 → INSTANT 변경은 따로 실행하고, 재

쿼리 작성 › 온라인 DDL 3면접 빈출90초

ALTER TABLE을 실행한 뒤 그 테이블의 쿼리가 전부 멈췄습니다. 원인을 어떻게 찾고 어떻게 해소하시겠어요?

SHOW PROCESSLIST에서 ALT → 막는 쪽은 Sleep 상태의 열린 트랜잭 → 막는 접속은 KILL QUERY가 아니라

쿼리 작성 › 온라인 DDL 4면접 빈출90초

잠금 대기로 쿼리가 멈춰 있습니다. 막는 접속을 어떻게 찾고, 끊기 전에 무엇을 확인한 뒤 어떻게 끊으시겠어요?

행 잠금은 sys → 뷰가 만들어 준 KILL 문을 그대로 돌 → Sleep 상태로 트랜잭션만 열어 둔 접

쿼리 작성 › 온라인 DDL면접 빈출90초

ALTER TABLE의 ALGORITHM(INSTANT·INPLACE·COPY)과 LOCK 옵션은 무엇이고, 운영 테이블에서는 왜 명시하나요?

INSTANT는 테이블 정의만 고치고, → ALGORITHM을 생략하면 INSTAN → LOCK은 도중에 허용할 범위(NONE은

쿼리 작성 › SELECT 작성과 처리 순서 2면접 빈출90초

SQL 모드의 ONLY_FULL_GROUP_BY와 STRICT_TRANS_TABLES는 각각 무엇을 막고, 끄면 어떤 일이 생기나요?

ONLY_FULL_GROUP_BY는 GR → 모드를 끄지 않고 칼럼을 GROUP BY → STRICT_TRANS_TABLES는 칼

쿼리 작성 › SELECT 작성과 처리 순서면접 빈출90초

SELECT 문의 절들이 처리되는 논리적 순서를 설명하고, 그 순서 때문에 생기는 작성 규칙을 말해 주세요.

FROM·JOIN → WHERE → GR → WHERE는 SELECT보다 먼저라 별칭 → 집계 결과 조건은 HAVING에, 묶기

쿼리 작성 › SELECT 작성과 처리 순서면접 빈출90초

인덱스가 있는 칼럼인데 조회가 풀 테이블 스캔으로 돌고 있습니다. SQL 문장 쪽에서 먼저 의심할 것은 무엇인가요?

칼럼에 함수·연산을 씌우면 인덱스에 저장 → 문자열 칼럼을 숫자와 비교하면 타입 변환 → 앞이 %로 시작하는 LIKE는 범위 탐색

쿼리 작성 › 서브쿼리·CTE·윈도우 함수 290초

재귀 CTE(자기 자신을 참조하는 공통 테이블 식)가 어떻게 동작하는지, 쓸 때 조심할 점과 함께 설명해 주세요.

비재귀 부분이 시작 행을 만들고, 재귀 → 조직도·카테고리 트리처럼 깊이가 정해지지 → 데이터 순환이 있으면 끝나지 않으며 ct

쿼리 작성 › 서브쿼리·CTE·윈도우 함수 390초

부서별로 급여가 가장 높은 직원 3명씩 뽑는 쿼리를 어떻게 작성하시겠어요?

ROW_NUMBER() OVER (PAR → 윈도우 함수는 WHERE 뒤에 계산되므로 → 동점 처리에 따라 ROW_NUMBER·R

쿼리 작성 › 서브쿼리·CTE·윈도우 함수90초

IN과 EXISTS의 차이, 그리고 NOT IN과 NOT EXISTS를 쓸 때 주의할 점을 설명해 주세요.

IN은 값이 서브쿼리 결과 목록에 있는지 → MySQL 8 → NOT IN은 서브쿼리 결과에 NULL이

스토어드 프로그램 › 스토어드 프로그램 290초

스토어드 함수의 DETERMINISTIC(같은 입력이면 늘 같은 결과) 선언은 왜 중요한가요?

DETERMINISTIC은 같은 입력에 → NOT DETERMINISTIC 함수를 → 바이너리 로그가 켜져 있으면 DETERM

스토어드 프로그램 › 스토어드 프로그램90초

스토어드 프로시저의 장단점과, 실무에서 잘 쓰지 않는 이유를 말해 주세요.

여러 SQL을 서버 안에서 실행해 네트워 → 쓰기를 받는 DB 서버는 늘리기 어려워, → 디버깅·테스트 도구가 빈약하고, DB 안

스토어드 프로그램 › 스토어드 프로그램90초

MySQL의 스토어드 프로그램 종류를 설명하고, 쓴다면 무엇을 조심해야 하는지 말해 주세요.

스토어드 프로시저(CALL로 호출), 스 → 네트워크 왕복은 줄지만, 늘리기 어려운 → 기본은 DEFINER 권한으로 실행되므로

트랜잭션 › 트랜잭션 기초와 주의사항면접 빈출90초

ACID(원자성·일관성·격리성·지속성)를 설명하고, 각 속성이 깨지면 어떤 일이 생기는지 말해 주세요.

원자성(전부/전무)·일관성(규칙 유지)· → 송금 예시처럼 "중간에 실패했을 때" 장 → InnoDB 구현(언두 로그로 롤백, M

트랜잭션 › 트랜잭션 기초와 주의사항면접 빈출90초

트랜잭션 안에서 DDL(테이블 구조를 바꾸는 SQL)을 실행하면 어떻게 되나요?

DDL(ALTER·CREATE·DROP· → 따라서 DDL 이후 ROLLBACK해도 → 스키마 변경과 데이터 변경 트랜잭션은 분

트랜잭션 › MySQL 엔진의 잠금면접 빈출90초

메타데이터 락이 뭔지, 장애로 이어지는 장면을 설명해 주세요.

스키마 객체(테이블 등) 보호용 서버 층 → 긴 읽기 트랜잭션이 DDL을 대기시키고, → `Waiting for table met

트랜잭션 › MySQL 엔진의 잠금면접 빈출90초

글로벌 락과 테이블 락, 네임드 락의 용도 차이를 설명해 주세요.

글로벌 락은 백업용 일관 시점, 테이블 → 네임드 락은 한 서버 인스턴스 안의 애플 → InnoDB 환경에서 글로벌 락·테이블

트랜잭션 › 트랜잭션150초

MySQL에서 트랜잭션이 어떻게 동작하는지, 잠금과 격리 수준까지 묶어서 전체 그림을 설명해 주세요.

트랜잭션은 ACID(원자성·일관성·격리성 → InnoDB 잠금은 레코드 락·갭 락·넥 → 격리 수준은 다른 트랜잭션의 변경 가시성

트랜잭션 › InnoDB 잠금면접 빈출90초

갭 락이 왜 필요한지, 어떤 문제를 막는지 설명해 주세요.

갭 락은 인덱스 레코드 사이 간격을 잠가 → 목적은 팬텀 리드 방지이며 REPEATA → 조건에 맞는 행이 없어도 갭은 잠긴다는

트랜잭션 › InnoDB 잠금면접 빈출90초

인덱스 없는 UPDATE 한 방이 서비스를 멈춘 적 있나요? 왜 그런 일이 생기죠?

InnoDB는 스캔한 인덱스 레코드에 잠 → READ COMMITTED는 조건에 맞지 → 잠금 경합 튜닝의 1순위는 인덱스(실행

트랜잭션 › 트랜잭션 격리수준면접 빈출90초

트랜잭션 격리 수준을 설명해 주세요.

동시 트랜잭션 간 변경 가시성을 정하는 → 4단계(READ UNCOMMITTED / → MySQL InnoDB 기본값은 REPE

트랜잭션 › 트랜잭션 격리수준면접 빈출90초

READ COMMITTED와 REPEATABLE READ의 차이를 실제 동작으로 설명해 주세요.

READ COMMITTED는 문장마다 새 → 같은 트랜잭션에서 같은 행을 두 번 읽을 → 잠금 읽기(FOR UPDATE, UPDA

사용자·권한 › 사용자·권한90초

MySQL에서 애플리케이션 계정을 만들고 권한을 관리하는 원칙을 설명해 주세요.

계정은 '사용자'@'호스트' 쌍으로 식별 → 최소 권한 원칙으로 필요한 DB·테이블에 → 8

사용자·권한 › 사용자·권한·역할90초

MySQL 계정과 권한 부여 원칙을 설명해 주세요.

이름+호스트 짝 식별 → 층위별 최소 권한 → 확인(SHOW GRANTS) 습관

사용자·권한 › 사용자·권한·역할90초

비밀번호를 무중단으로 교체하려면 어떻게 하나요?

이중 비밀번호 패턴 → 신·구 병행 → 앱 반영 → 구 파기 순 → 정책(만료·복잡도) 언급