10,000++억의 데이터를 다루는 카카오 면접관의 MySQL
개발 · 프로그래밍 · 데이터베이스
쿼리는 쓰는데
테이블은 못 그립니다
SELECT는 씁니다. 막히는 건 테이블을 처음부터 그려야 할 때입니다. Foreign Key를 걸어야 하는지, ORM이 만들어 준 스키마가 최선인지, 반복 일정 같은 걸 어떻게 담아야 하는지. 이 강의는 쿼리에서 시작해 설계와 엔진 내부까지 갑니다.
- 문법부터 엔진 내부까지INSERT·UPDATE·DELETE·SELECT · JOIN · 안티 패턴 · 모델링 · InnoDB
- Google Calendar 스키마반복 일정을 어떻게 담을 것인가를 실제로 설계합니다
- 현직 개발자 2인카카오 본사 12년차 면접관 · 판교 플랫폼 서버 개발
MySQL은 대부분의 서비스가 쓰는 관계형 데이터베이스입니다. 이 강의는 쿼리 사용법에서 멈추지 않고 스키마 설계와 엔진 내부까지 갑니다
이 강의가 출발하는 자리
쓸 줄 아는 것과 설계하는 것은 다릅니다
지금 하는 일
쿼리를 쓴다
필요한 데이터를 꺼내옵니다. 느리면 인덱스를 하나 더 겁니다. 대체로 굴러갑니다.
정해야 할 때
막히는 자리
테이블을 그린다
속성이 스무 개 넘는 엔티티, 반복되는 일정, 언제 걸어야 할지 모를 외래 키.
쿼리는 이미 있는 구조 위에서 쓰는 것이고, 설계는 그 구조를 정하는 일입니다. 이 강의는 앞쪽에서 쿼리를 정리하고 뒤쪽에서 설계로 넘어갑니다.
이 강의가 시작된 자리
실제로 오간 대화입니다
앞서 만든 MySQL 강의의 후기를 함께 보면서 나온 이야기입니다.
먼저 만든 MySQL 강의의 후기를 보고 나눈 이야기입니다.
무엇을 배우나
문법 · JOIN · 안티 패턴 · 모델링 · 내부 순서로
- 기본 문법INSERT·UPDATE·DELETE·SELECT를 기본과 고급으로 나눠 정리합니다
- JOINNested Loop Join의 동작, LEFT JOIN의 NULL 처리, WHERE와 ON의 실행계획 차이
- 안티 패턴실제로 자주 나오는 다섯 가지를 문제와 해결로 짚습니다
- 데이터 모델링논리 모델부터 One Table per Anchor · Side Table · EAV 같은 물리 설계 전략까지
- Google Calendar 설계반복 이벤트와 Slot 구조를 실제 서비스 사례로 풀어 봅니다
- Foreign Key역사와 옵션, 그리고 "항상 옳은가"라는 질문
- 엔진 내부트랜잭션·락·MVCC·옵티마이저·B-Tree·버퍼 풀까지 마지막 섹션에서
안티 패턴 한 장면
같은 결과, 다른 실행계획
인덱스를 걸었는데도 느린 경우가 있습니다. 인덱스 컬럼을 함수로 감싸면 인덱스를 쓰지 못합니다.
- WHERE DATE(created_at) = '2026-01-01'
- 인덱스가 걸려 있어도 타지 못합니다
- 테이블 전체를 훑기 때문에 데이터가 늘수록 그대로 느려집니다
- 실행계획을 보기 전까지는 왜 느린지 모릅니다
- WHERE created_at >= '2026-01-01' AND created_at < '2026-01-02'
- 컬럼을 그대로 두니 인덱스 범위 스캔으로 바뀝니다
- 결과는 같고 읽는 양만 줄어듭니다
- 같은 방식으로 다섯 가지 안티 패턴을 하나씩 고칩니다
섹션 4에서 CASE WHEN과 차원 테이블, 뷰의 SELECT ALL, DISTINCT 남용, 뷰 중첩까지 같은 방식으로 다룹니다.
물리 설계 전략
속성이 많아질 때 고르는 세 가지
"예/아니오"로 답하는 속성이 수십 개 붙는 엔티티를 어떻게 담을 것인가. 정답은 없고 트레이드오프만 있습니다.
섹션 5에서 셋을 나란히 놓고 비교하고, 스키마가 변해 갈 때(Schema Evolution) 무엇이 문제가 되는지까지 이어집니다. 섹션 6에서는 Google Calendar를 예제로 반복 이벤트와 Slot 구조를 설계합니다.
마지막 섹션
엔진 안쪽까지 들어갑니다
면접에서 깊게 들어오는 질문은 대체로 이 영역입니다. 마지막 섹션이 통째로 여기에 배정돼 있습니다.
- MVCC
- Gap Lock
- B-Tree Index
- Buffer Pool LRU
- Autocommit
- Intention Lock
- Isolation Level
- Query Rewriting
- Histogram
- Filesort
- Partitioning
- InnoDB Page
- Doublewrite Buffer
- WAL · fsync
용어를 나열하고 끝나지 않습니다. Statement 기반과 Row 기반의 차이, 잠금이 어느 단위로 잡히는지, 페이지가 버퍼 풀에서 어떻게 밀려나는지를 하나씩 봅니다.
커리큘럼
무엇을 어떤 순서로 다루나
앞쪽이 문법과 JOIN, 가운데가 안티 패턴과 모델링, 마지막이 엔진 내부입니다.
01
강의 소개
- 강의 소개
- MySQL에서 기본적으로 알면 좋은 기술적인 용어들 [ 파일 첨부 ]
02
누구나 다 알게해주는 MySQL 기본
- 누구나 다 알게 해주는 MySQL INSERT 기본 가이드
- 누구나 다 알게 해주는 MySQL INSERT 고급 가이드
- 누구나 다 알게 해주는 MySQL UPDATE 기본 가이드
- 누구나 다 알게 해주는 MySQL UPDATE 고급 가이드
- 누구나 다 알게 해주는 MySQL DELETE 기본 가이드
- 누구나 다 알게 해주는 MySQL DELETE 고급 가이드
- MySQL Mock Data Script
- 누구나 다 알게 해주는 MySQL SELECT 기본 가이드
- 누구나 다 알게 해주는 MySQL SELECT 고급 가이드
- 섹션 2 퀴즈
03
MySQL을 사용해야 하는 이유 JOIN
- MySQL의 다양한 JOIN
- Nested Loop Join, Matched Function
- LEFT JOIN의 NULL 처리와 WHERE vs ON 조건의 실행계획
- Subquery Unnesting, CTE, AST
- 섹션 3 퀴즈
04
피해야하는 다양한 SQL 안티 패턴
- SQL 안티 패턴 1 : CASE WHEN과 차원테이블 및 뷰 패턴
- SQL 안티 패턴 2 : 인덱스 컬럼에서 함수 사용의 문제와 해결
- SQL 안티 패턴 3 : View에서 SELECT ALL 사용의 문제와 해결
- SQL 안티 패턴 4 : DISTINCT 남용으로 인한 중복 문제와 해결
- SQL 안티 패턴 5 : Excessive View Layer Stacking의 문제와 해결
- 섹션 4 퀴즈
05
많은 예시를 통해 배우는 데이터 모델링 기법
- 데이터 모델링 : 수많은 yes or no 속성 디자인 정의와 논리 모델
- 데이터 모델링 : 물리 설계 전략 One Table per Anchor
- 데이터 모델링 : 물리 설계 전략 Side Table (분리 테이블)
- 데이터 모델링 : 물리 설계 전략 Entity–Attribute–Value (EAV)
- Database Design Deep Dive Schema Evolution
- Database Design Deep Dive Modern Alternatives
- 섹션 5 퀴즈
06
Google Calendar 예제로 확인하는 데이터 모델링
- Google Calendar 문제 정의와 논리 모델 이해
- Google Calendar Basic All-Day Events
- Google Calendar 반복 이벤트 모델링을 위한 Tangled Attribute
- Google Calendar 렌더링(실행) 모델 - Slot 구조
- 섹션 6 퀴즈
07
Foreign Key와 전략 패턴
- Foreign Key 데이터 일관성의 핵심과 역사
- Foreign Keys Enforced & References Options
- Foreign Keys JOIN & one equals one
- Foreign Key는 항상 옳은 패턴일까
- 섹션 7 퀴즈
08
MySQL Advanced Topics
- 섹션 소개
- MySQL Transaction Deep Dive [ LifeCycle, Autocommit, Statement vs Row based ]
- MySQL Lock [ Intention Lock, Gap Lock, 다중 세분화 ]
- MySQL InnoDB [ Recovery, Log, MVCC ]
- Transaction Isolation Level Deep Dive
- MySQL의 Optimizer [ Query Rewriting, Histogram ]
- Filesort, Temporary Table과 Partitioning
- MySQL Storage Architecture InnoDB Page
- MySQL B-Tree Index [ Clustered, Secondary, Page, Format ]
- MySQL Page Management Buffer Pool [ LRU ]
- Doublewrite Buffer, WAL과 FSync 관점의 성능
- 섹션 8 퀴즈
이런 분께
이 강의는 누구를 위한 강의인가요
- MySQL 기본을 탄탄히 다지고 싶은 초·중급 개발자
- 엔티티와 관계 설계가 어렵고, Foreign Key를 언제 왜 써야 하는지 알고 싶은 분
- 대규모 서비스에서 MySQL을 어떻게 설계하는지 궁금한 백엔드 개발자
- 트랜잭션·무결성·인덱스 같은 전형적인 DB 면접 주제를 실무 기준으로 정리하고 싶은 분
- MySQL을 저장소가 아니라 서비스 설계의 중심 구성 요소로 보고 싶은 개발자
지금 시장
AI가 개발자를 대체한다는 이야기
신입 채용은 줄고, 기업은 검증된 사람만 뽑으려 합니다. 최근 몇 달 사이 나온 기사들입니다.
- 사상 최대 실적을 낸 크래프톤이 인력 감원에 나섰습니다. 'AI 퍼스트' 기업으로 전환하겠다는 이유였습니다.
- SW 전문기업들이 신입 개발자 채용을 중단하고 있습니다. 초급 개발자 채용이 77% 급감할 것이라는 전망도 나왔습니다.
- 게임 디자이너의 53%가 "AI가 내 일을 대체할 것"이라고 답했습니다. 권고사직 사례도 보고됐습니다.
기업이 불안한 만큼, 뽑히는 쪽은 더 분명한 차이를 보여줘야 합니다. 공부는 결국 스스로 하는 것이지만, 무엇을 어떤 관점으로 보느냐에 따라 같은 시간을 쓰고도 설명할 수 있는 깊이가 달라집니다. 이 강의는 그 관점을 넘기려고 만들었습니다.
수강평
먼저 들은 분들의 이야기
인프런 수강평에서 그대로 옮겼습니다.
"제가 인프런에서 봤던 강의 중에 손에 꼽을 정도로 유익했습니다. 단순한 MySQL 내용부터 실제 DDL 설계론, 그리고 내부적인 관점까지 진짜 어디 가서 듣기 어려운 강의라고 생각합니다. 인프런에서도 이런 강의는 처음 본 것 같아요."
8번이 좋아 · 91% 수강 후 작성
"4년차 개발자로 실무에서 개발하고 있는데 이 정도로 MySQL을 깊게 배울 수 있는 강의인지 몰랐습니다. "나는 그냥 쿼리 정도만 쓸 줄 알아요"라는 분들은 모두 이 강의를 보시는 걸 추천드리고 싶네요. 쿼리 튜닝을 넘어서 서비스에 접목하는 패턴을 다양하게 배웠습니다."
이병석 · 89% 수강 후 작성
"곱씹으면 곱씹을수록 진짜 좋은 내용들이 많은 것 같습니다. 큰 주제들에 대해서 세부적인 내용을 알려주고, 스스로 어느 정도 고민해 보는 시간을 가진다면 어떤 강의보다 정말 좋은 내용으로 구성되어 있다고 생각합니다."
warna · 91% 수강 후 작성
강사
현직 개발자 둘이 함께 만들었습니다
카카오 본사에서 서버를 개발하며 면접관으로도 활동하는 12년차 개발자 Choi와, 판교 플랫폼 서버 개발자 Hong이 함께 만들었습니다.
Choi
카카오 본사에서 서버를 개발하는 12년차 백엔드 개발자이고, 면접관으로도 활동하고 있습니다. 면접에서는 프로그래밍 문법보다 설계를 할 수 있는지를 주로 봅니다. 그 관점을 강의에 그대로 옮겼어요.
"쿼리를 잘 쓰는 것과 구조를 설계하는 것은 다른 능력입니다."
現 카카오 본사 서버 개발자 · 면접관 · 컴퓨터공학 전공
Hong
판교에서 플랫폼 서버 개발을 담당하고 있습니다. 직접 공부한 방법과 실무에서 마주치는 문제·해결책을 나누려고 지식공유자 활동을 이어가고 있어요. 강의는 혼자가 아니라 현업의 여러 개발자와 함께 만듭니다.
"MySQL은 쉬운데, 막상 테이블을 처음부터 그리려면 그때마다 막힙니다."
자주 묻는 질문
MySQL 강의 자주 묻는 질문
Q.MySQL을 처음 써도 들을 수 있나요?
⌄
Q.데이터 모델링은 어디까지 다루나요?
⌄
Q.Foreign Key는 꼭 써야 하나요?
⌄
Q.엔진 내부까지 알아야 하나요?
⌄
Q.실습 데이터는 제공되나요?
⌄
Q.면접 준비에 도움이 되나요?
⌄
쿼리를 넘어 구조를 설계합니다
기본 문법에서 출발해 모델링과 엔진 내부까지 한 번 끝까지 봅니다.
결정하기 전에 커리큘럼 다시 훑어보기함께 이야기 나눠요
개발자 오픈채팅 커뮤니티
혼자 막히면 오래 걸립니다. 강의를 듣다 걸리는 부분, 자기 서비스에 적용하면서 생기는 질문, 커리어와 현업 이야기까지 편하게 나누는 공간이 따로 있습니다.
무엇을 나누나요
실무에서 실제로 겪는 문제, 다른 분들이 어떤 구조를 골랐는지, 그리고 개발자 커리어에 대한 이야기를 나눕니다. 강의 관련 질문도 환영합니다.
"막히는 자리는 대체로 남들도 막힙니다. 먼저 지나간 사람에게 물어보는 게 제일 빠릅니다."