Dependency Injection 제대로 이해하기
의존성 주입(DI)의 개념과 원리를 이해하고, 실제 코드에 적용하는 방법을 알아봅니다.
Airflow DAG Hash가 계속 바뀌는 문제: Variable.get()의 함정
Airflow DAG Hash가 30초마다 바뀌면서 Task가 실패하는 원인과, Variable.get()을 Task 실행 시점으로 옮겨 해결하는 방법을 정리합니다.
조건부 확률과 베이즈 정리: 사전 정보를 업데이트하는 방법
조건부 확률의 정의부터 베이즈 정리까지, ML의 핵심 도구인 확률 업데이트 메커니즘을 Monty Hall 시뮬레이션과 의료 검사 예제로 완전 이해하는 가이드.
XGBoost vs LightGBM: 실전 부스팅 모델, 어떤 걸 써야 할까
XGBoost의 정규화와 분할 알고리즘, LightGBM의 Leaf-wise 성장과 GOSS/EFB를 비교한다. CatBoost까지 포함한 실전 선택 기준.
Prisma P3006 에러 해결: PostgreSQL enum의 트랜잭션 제 약과 Shadow DB 문제
prisma migrate dev의 P3006 에러 원인과, Shadow DB를 우회하는 수동 마이그레이션 해결법을 정리합니다.





트랜잭션 격리 수준과 락: 쓰기 충돌은 어떻게 해결되는가
두 트랜잭션이 같은 row를 동시에 UPDATE하면 어떤 일이 일어나는지, row-level lock이 튜플 헤더에 어떻게 기록되는지, 테이블 레벨 락 8단계, SSI가 write skew를 잡는 원리, 그리고 pg_locks로 블로킹을 진단하는 법까지 따라갑니다.
PostgreSQL
Claude Opus 4.7의 성능은 왜 논란이 되고 있을까?
Opus 4.7 출시 후 Reddit과 Hacker News에서 폭발한 부정적 반응. 벤치마크는 올랐는데 왜 사용자는 퇴보라 느끼는지, 커뮤니티 데이터로 분석합니다.

VACUUM과 bloat의 정체: dead tuple은 누가 언제 치우는가
UPDATE가 만든 dead tuple은 어디로 가는지, bloat가 쿼리 성능에 미치는 영향, VACUUM의 3단계 동작, autovacuum의 트리거 공식, 그리고 wraparound를 막는 freeze까지 PostgreSQL의 GC를 따라갑니다.
PostgreSQL
PostgreSQL 병렬 쿼리와 파티셔닝
대용량 테이블을 나눠 처리하는 두 가지 방식, 병렬 쿼리와 파티셔닝을 비교합니다. 병렬이 언제 켜지고 왜 안 켜지는지, 파티션 pruning이 걸리는 조건과 자주 놓치는 함정, 그리고 두 메커니즘이 만났을 때 어떤 효과가 나는지 짚어봅니다.
PostgreSQL
PostgreSQL 조인 알고리즘: Nested Loop, Hash Join, Merge Join
같은 JOIN 쿼리가 왜 어떤 날은 Nested Loop, 어떤 날은 Hash Join이 되는지, work_mem이 Hash Join의 성능을 좌우하는 이유, 그리고 플래너가 조인 순서를 결정하는 원리를 세 알고리즘의 cost 공식과 함께 따라갑니다.
PostgreSQL
플래너 통계와 EXPLAIN 읽는 법
같은 쿼리가 어제는 Index Scan, 오늘은 Seq Scan이 되는 이유는 대부분 통계에 있습니다. 플래너가 pg_statistic의 숫자로 cost를 만드는 과정과 EXPLAIN 출력을 한 줄씩 해석하는 법, 추정치가 크게 틀어졌을 때 진단하는 법을 정리합니다.
PostgreSQL
B-tree 너머: GIN, GiST, BRIN, Hash는 언제 쓰는가
전문 검색, JSONB 포함 관계, 시계열 거대 테이블처럼 B-tree가 다루지 못하는 영역이 있습니다. GIN·GiST·BRIN·Hash의 내부 구조가 각각 어떤 접근 패턴에 최적화돼 있는지, 언제 쓰고 언제 쓰면 안 되는지를 짚어봅니다.
PostgreSQL
PostgreSQL B-tree 인덱스 뜯어보기
B-tree 페이지가 디스크 위에 어떻게 놓여 있는지, 루트에서 리프까지 한 건을 찾아가는 경로, composite index의 선두 컬럼 규칙이 생기는 이유, 그리고 Index-Only Scan이 Visibility Map에 의존하는 이유를 실제 페이지를 뜯어보며 따라갑니다.
PostgreSQL
PostgreSQL MVCC와 튜플 가시성
두 트랜잭션이 같은 row를 읽었을 때 왜 다른 값이 보이는지, xmin/xmax와 snapshot의 조합으로 가시성이 어떻게 결정되는지, 그리고 xid가 42억을 넘기면 무슨 일이 일어나는지 손으로 풀어봅니다.
PostgreSQL
PostgreSQL 힙 페이지와 튜플 구조: 데이터를 디스크에 어떻게 올려두는가
PostgreSQL이 한 row를 8KB 페이지의 어디에 두는지, ctid가 가리키는 슬롯의 정체, 튜플 헤더 23바이트의 의미, HOT update와 FILLFACTOR의 인과 관계, 그리고 큰 컬럼이 TOAST로 빠져나가는 방식까지 페이지 안쪽을 직접 들여다봅니다.
PostgreSQL