MySQL 28

[개발 면접] Clustered Index와 Non-Clustered Index 차이

Clustered Index와 Non-Clustered Index 차이 쉽게 이해하기개발 면접에서 인덱스 이야기가 나오면 단순히"검색 속도를 빠르게 하기 위해 사용하는 자료구조입니다."정도로 끝나는 경우가 많다.그런데 면접관이 조금 더 깊게 들어가면 이런 질문이 이어질 수 있다."Clustered Index와 Non-Clustered Index의 차이가 뭔가요?"둘 다 인덱스인데 이름부터 헷갈린다.핵심부터 정리하면 다음처럼 이해하면 된다.Clustered Index는 실제 데이터의 저장 순서와 연결된 인덱스이고, Non-Clustered Index는 실제 데이터와 별도로 존재하는 인덱스다.조금 더 쉽게 풀어보자.먼저 인덱스가 왜 필요한지 생각해보자다음과 같은 users 테이블이 있다고 해보자.id | n..

개발/개발면접 2026.08.19

[개발면접] 데이터베이스 인덱스(Index)는 왜 조회 성능을 빠르게 할까?

데이터베이스 인덱스(Index)란?백엔드 개발자 면접에서 데이터베이스 관련 질문을 받으면 빠지지 않고 등장하는 주제가 인덱스(Index)다.실무에서도 데이터가 많아질수록 인덱스는 굉장히 중요해진다.처음에는 데이터가 몇 천 건밖에 없어서 문제가 없던 쿼리가 데이터가 수백만 건까지 늘어나면 갑자기 느려지는 경우가 있다.예를 들어 다음과 같은 쿼리가 있다고 해보자.SELECT *FROM usersWHERE email = 'test@example.com';users 테이블에 데이터가 100개라면 큰 문제가 없다.하지만 데이터가 1,000만 개라면 어떨까?인덱스가 없다면 DB가 원하는 데이터를 찾기 위해 많은 데이터를 확인해야 할 수 있다.인덱스는 이런 상황에서 원하는 데이터를 빠르게 찾을 수 있도록 도와주는 자..

개발/개발면접 2026.08.15

[개발면접] Deadlock은 왜 발생할까? 원인과 해결 방법

Deadlock이란?트랜잭션과 DB Lock을 공부했다면 다음으로 알아두면 좋은 개념이 Deadlock(교착 상태)이다.Deadlock은 백엔드 개발 면접에서도 자주 등장하고, 실제 운영 환경에서도 충분히 만날 수 있는 문제다.간단하게 말하면,두 개 이상의 트랜잭션이 서로 상대방이 가지고 있는 Lock이 해제되기를 기다리면서 아무 작업도 진행하지 못하는 상태를 Deadlock이라고 한다.예를 들어 Transaction A와 Transaction B가 있다고 해보자.Transaction A→ Row 1 Lock 획득Transaction B→ Row 2 Lock 획득여기까지는 문제가 없다.그런데 다음 작업에서 서로 상대방의 데이터가 필요해졌다.Transaction A→ Row 2 Lock 필요→ Transa..

개발/개발면접 2026.08.15

[개발면접] DB Lock이란? Shared Lock과 Exclusive Lock 차이

DB Lock이란?데이터베이스를 공부하다 보면 트랜잭션 다음으로 자연스럽게 등장하는 개념이 Lock이다.Lock은 특히 백엔드 개발자 면접에서 트랜잭션, 동시성, Deadlock과 함께 자주 연결되는 주제다.간단하게 말하면 DB Lock은여러 트랜잭션이 동시에 같은 데이터에 접근할 때 데이터의 일관성을 지키기 위해 접근을 제한하는 기능이라고 볼 수 있다.예를 들어 상품 재고가 하나 남았다고 생각해보자.상품 재고 = 1그런데 사용자 A와 사용자 B가 거의 동시에 주문을 요청했다.사용자 A → 재고 조회 → 1사용자 B → 재고 조회 → 1둘 다 재고가 있다고 판단한다.그리고 동시에 재고를 감소시킨다.이런 상황에서는 의도하지 않은 결과가 발생할 수 있다.여러 요청이 동시에 처리되는 실제 서비스에서는 이런 동..

개발/개발면접 2026.08.14

[개발면접] 데이터베이스 트랜잭션(Transaction)이란? 개발 면접 전에 꼭 알아야 할 개념

트랜잭션(Transaction)이란?백엔드 개발자 면접을 준비하다 보면 데이터베이스 관련 질문은 거의 빠지지 않는다.그중에서도 자주 등장하는 개념이 트랜잭션(Transaction)이다.트랜잭션을 간단하게 말하면,여러 데이터베이스 작업을 하나의 작업 단위로 묶는 것이라고 볼 수 있다.예를 들어 계좌이체 기능을 만든다고 생각해보자.A 계좌에서 10만 원을 차감한다.B 계좌에 10만 원을 추가한다.이 두 작업은 반드시 같이 성공해야 한다.A 계좌에서는 돈이 빠졌는데 B 계좌에는 돈이 들어오지 않는다면 심각한 문제가 발생한다.그래서 두 작업을 하나의 트랜잭션으로 묶는다.START TRANSACTION;UPDATE accountsSET balance = balance - 100000WHERE id = 1;UPDA..

개발/개발면접 2026.08.14

MySQL Checkpoint란? Dirty Page는 언제 Disk에 저장될까?

이전 글에서는 InnoDB Buffer Pool에 대해 알아봤다.MySQL은 데이터를 조회하거나 수정할 때 매번 Disk에 직접 접근하지 않고, Buffer Pool이라는 메모리 공간을 적극적으로 사용한다.그리고 UPDATE가 발생하면 Buffer Pool의 Page가 먼저 변경될 수 있다.예를 들어Diskstock = 10Buffer Poolstock = 5처럼 메모리와 Disk의 내용이 달라질 수 있다.이렇게 변경됐지만 아직 Disk에 반영되지 않은 Page를 Dirty Page라고 한다.그렇다면 Dirty Page는 언제 실제 Disk에 저장될까?그리고 서버가 갑자기 죽으면 어떤 기준으로 복구할까?이 흐름을 이해할 때 중요한 개념이 바로 Checkpoint다.이번 글에서는 MySQL InnoDB의 ..

개발/CS 2026.08.14

MySQL Buffer Pool이란? 메모리 캐시는 어떻게 동작할까?

MySQL 성능을 공부하다 보면 거의 반드시 만나게 되는 개념이 있다.바로 Buffer Pool이다.Laravel에서 평소처럼$product = Product::find($id);를 실행하면 개발자 입장에서는 MySQL에서 데이터를 조회한다고 생각한다.하지만 MySQL InnoDB가 매번 Disk에서 직접 데이터를 읽는 것은 아니다.실제로는 자주 사용하는 데이터를 메모리에 올려놓고 재사용한다.이때 사용하는 대표적인 메모리 영역이 InnoDB Buffer Pool이다.간단하게 말하면Buffer Pool=InnoDB가 데이터와 인덱스를 캐싱하는 메모리 공간이라고 이해하면 된다.이번 글에서는 Buffer Pool이 왜 필요한지, Query를 실행했을 때 데이터가 어떻게 조회되는지, Dirty Page와 Red..

개발/CS 2026.08.14

Redo Log와 Binlog 차이, MySQL은 왜 로그를 두 개 사용할까?

이전 글에서는 MySQL InnoDB의 Undo Log와 Redo Log에 대해 알아봤다.Undo Log는 Transaction을 이전 상태로 되돌리거나 MVCC에서 과거 Version을 조회할 때 사용하고,Redo Log는 서버 장애가 발생했을 때 Commit된 변경사항을 복구하는 데 사용한다.그런데 MySQL을 운영하다 보면 또 하나의 로그를 자주 만나게 된다.바로 Binlog(Binary Log) 다.처음 MySQL 내부 구조를 공부했을 때 개인적으로 가장 헷갈렸던 부분이기도 하다.Redo Log도 변경사항을 기록하고Binlog도 변경사항을 기록한다.그럼 둘은 뭐가 다른 걸까?결론부터 말하면 목적이 다르다.Redo Log→ MySQL 장애 복구Binlog→ Replication / 데이터 복구그리고..

개발/CS 2026.08.13

Undo Log와 Redo Log 차이 쉽게 이해하기

MySQL InnoDB를 공부하다 보면 자주 등장하는 로그가 있다.바로 Undo Log와 Redo Log다.이름이 비슷해서 처음에는 헷갈리기 쉽다.간단하게 먼저 정리하면Undo Log는 이전 상태로 되돌리기 위한 로그이고,Redo Log는 변경된 내용을 다시 적용하기 위한 로그다.둘 다 Transaction과 데이터 복구에 중요한 역할을 하지만 목적은 완전히 다르다.이번 글에서는 Undo Log와 Redo Log가 각각 왜 필요한지, MVCC와는 어떻게 연결되는지, 그리고 MySQL 장애 복구에서는 어떤 역할을 하는지 알아보자.Undo Log란?Undo Log는 데이터가 변경되기 전의 상태를 복원하기 위해 사용하는 로그다.예를 들어 상품 재고가 다음과 같다고 해보자.stock = 10Transaction..

개발/CS 2026.08.13

MVCC란? MySQL은 Lock 없이 어떻게 데이터를 읽을까?

Transaction과 Isolation Level을 공부하다 보면 자주 등장하는 개념이 있다.바로 MVCC(Multi-Version Concurrency Control) 다.처음에는 이름부터 어렵게 느껴진다."데이터를 여러 버전으로 관리한다는 건가?"정도로 이해하기 쉬운데, 실제로는 MySQL InnoDB가 읽기 성능과 동시성을 높이기 위해 사용하는 핵심 구조다.특히 이전 글에서 다뤘던REPEATABLE READSnapshot ReadLocking ReadDirty ReadNon-Repeatable Read같은 개념도 MVCC를 이해하면 훨씬 자연스럽게 연결된다.이번 글에서는 MVCC가 무엇인지, MySQL이 어떻게 과거 데이터를 보여줄 수 있는지, 그리고 Laravel 개발자가 왜 알아두면 좋은지 정..

개발/CS 2026.08.13