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를 우회하는 수동 마이그레이션 해결법을 정리합니다.





느린 쿼리를 추적하는 법: pg_stat_statements부터 wait_event까지
"DB가 느려요"라는 모호한 증상에서 출발해, pg_stat_statements로 전체 워크로드의 병목을 찾고, auto_explain으로 실행 계획을 자동 수집하고, pg_stat_activity의 wait_event로 지금 무엇에 막혀 있는지 진단하는 체계를 만듭니다.
PostgreSQL
Streaming Replication과 Logical Replication: WAL을 네트워크로 보내는 두 가지 방법
WAL 바이트를 그대로 보내는 Streaming Replication과 row 단위로 디코딩하는 Logical Replication의 아키텍처, replication slot의 역할, hot standby 쿼리 충돌이 생기는 이유, 그리고 lag 측정과 failover까지 따라갑니다.
PostgreSQL
WAL과 체크포인트: crash에서 살아남는 구조, 그리고 성능의 숨은 비용
COMMIT 직후 전원이 꺼져도 데이터가 사라지지 않는 이유, WAL record와 LSN의 구조, Full Page Write가 WAL 볼륨을 키우는 원리, checkpoint가 I/O spike를 만드는 메커니즘, 그리고 crash recovery가 redo를 적용하는 과정까지 따라갑니다.
PostgreSQL
트랜잭션 격리 수준과 락: 쓰기 충돌은 어떻게 해결되는가
두 트랜잭션이 같은 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