아카이브
지금까지 쓴 글들을 시간순으로 모아봤어요.
-
INSTANT DDL인데 왜 timeout? - MySQL 메타데이터 잠금 실전 진단 가이드
ALGORITHM=INSTANT로 실행한 ALTER TABLE이 45초 만에 timeout으로 실패했다. INSTANT가 느린 게 아니다 - DDL이 시작조차 못하고 MDL 획득에서 막히고 있었다. 2-세션 진단 방법, Idle in Transaction 분석, 안전한 KILL 판단 기준까지.
-
작은 테이블에도 파티셔닝을 적용한 이유: DELETE 대신 DROP PARTITION으로 300배 빠른 아카이빙
2.5GB, 300만건 규모의 로그 테이블에 파티셔닝을 적용한 결정 과정. 데이터 크기가 아닌 DELETE 패턴이 파티셔닝 적용 기준이 되어야 하는 이유와, Redis 분산 락을 활용한 멀티 인스턴스 환경의 파티션 관리 자동화까지
-
N사 2FA 메타데이터 테이블 설계기: BIGINT vs UUID 선택부터 TypeORM GENERATED 컬럼 트러블슈팅까지
플랫폼 계정 2FA 상태 추적을 위한 메타데이터 테이블 설계 과정에서 겪은 PK 타입 선택, UNIQUE KEY 설계, Optimistic Lock 적용, 그리고 TypeORM과 MySQL의 GENERATED 컬럼 충돌 해결까지의 기록
-
운영 중 ALTER TABLE 한 줄이 서비스를 마비시킨 이유 - MySQL 메타데이터 잠금의 모든 것
DB Load가 180배 급증한 장애의 원인을 추적하며 배운 MySQL Metadata의 정의, Data Dictionary 아키텍처, MDL 내부 구조와 락 획득 알고리즘, Convoy Effect, INSTANT DDL, 그리고 빅테크 기업들의 무중단 DDL 전략까지
-
TypeORM과 NestJS에서 커넥션 풀 제대로 설정하기
현재 설정을 분석하고 네이버 D2의 Commons DBCP 가이드를 참고하여, TypeORM과 mysql2 환경에서 안정적인 커넥션 풀 설정을 구현하는 과정을 공유합니다. TPS 계산 공식을 적용하고, 실제 프로덕션 코드를 Before/After로 비교하며 각 옵션의 의미를 깊이 이해합니다.
-
Kotlin Coroutines 딥다이브: 내부 구조부터 프로덕션 패턴까지
suspend 키워드 뒤에 숨겨진 State Machine의 동작 원리를 파헤치고, RxJava, CompletableFuture, Project Loom과의 트레이드오프를 비교합니다. 실제 프로덕션에서 마주치는 에러 핸들링, 테스트, 디버깅 패턴까지 다룹니다.
-
equals/hashCode 재정의가 만든 장애: 중복 결제 사고의 기록
Updated:equals()만 재정의하고 hashCode()를 빠뜨려 중복 결제 장애를 겪은 경험. Kafka TopicPartition 분석과 함께 HashMap 내부 동작부터 코드 리뷰 체크리스트까지.
-
B+tree 인덱스와 Page Split: UUID가 당신의 INSERT를 죽이고 있다
왜 복합 인덱스의 컬럼 순서가 중요할까? UUID PK가 왜 INSERT 성능을 망칠까? InnoDB B+tree의 Page Split 메커니즘과 Big-O 시간복잡도를 파고들어, '감'이 아닌 '원리'로 인덱스를 설계합니다. Instagram, Shopify, 카카오, 배민의 실제 사례도 함께 다룹니다.
-
배달 플랫폼 스크래핑 대장정 Part 1: API에서 브라우저 자동화로
API 호출 방식의 한계를 넘어 Playwright 브라우저 자동화로 전환한 여정. CDP(Chrome DevTools Protocol) 통신 구조부터 세션 풀 설계까지, 대규모 스크래핑 시스템의 첫 번째 아키텍처를 설계하며 배운 것들을 기록합니다.
-
MySQL InnoDB 아키텍처 이해: 엔진을 알아야 설계가 보인다
Buffer Pool Hit Rate 85%인데 왜 쿼리가 3초나 걸렸을까? InnoDB 엔진의 내부 구조(Buffer Pool, Redo Log, Undo Log)를 파고들어 RDB 설계의 '왜'를 이해합니다.
-
대규모 브라우저 자동화 시스템의 메모리 누수 해결기: 3개의 정리 경로가 만든 완벽한 폭풍
50개의 Firefox 브라우저를 동시에 관리하는 자동화 시스템에서 발견한 메모리 누수. Promise.race와 finally 블록이 만든 이중 정리 문제, 그리고 이를 해결하기까지의 탐구 과정을 기록합니다.
-
멀티 플랫폼 연동을 위한 데이터베이스 설계: 확장 가능한 로깅 시스템 구축기
새로운 외부 플랫폼 연동을 위한 전용 테이블 설계부터 EXPLAIN 기반 검증, 인덱스 최적화, 파티셔닝 전략까지 - 팀 규모와 트래픽을 고려한 DB 설계 경험기
-
Kotlin 표준 라이브러리 toSet() 해부: 엔지니어링은 선택에 대한 설명이다
Kotlin의 toSet() 메서드를 JVM 메모리 모델부터 프로덕션 환경까지 깊이 있게 분석합니다. 표준 라이브러리의 설계 결정, 메모리 오버헤드, GC 영향, 그리고 대규모 트래픽 환경에서의 실전 가이드를 다룹니다.