pgjdbc 42.7.11 JSONB 반환 타입 변경과 TypeHandler 대응pgjdbc 42.7.11에서 JSONB 컬럼의 반환 타입이 String에서 PGobject로 변경되었습니다. MyBatis 커스텀 TypeHandler를 글로벌 등록하여 기존 코드 변경 없이 호환성을 유지하는 방법을 정리합니다.2026년 5월 6일19 min read
멀티탭 세션 타임 동기화 - 탭마다 따로 도는 카운트다운 맞추기탭마다 독립적으로 돌던 세션 만료 카운트다운을, BroadcastChannel과 리더 선출로 모든 탭이 같은 시점에 만료되도록 동기화한 과정을 정리합니다. 공유 타임스탬프 기준 만료 시각 계산과, 실제 만료를 보장하는 서버 측 처리까지 함께 다룹니다.2026년 6월 5일34 min read
JavaScript 비동기 처리 - 콜백에서 async/await까지JavaScript 비동기 처리의 진화 과정을 정리합니다. 콜백 함수의 한계부터 Promise, async/await까지 단계별로 다룹니다.2026년 3월 20일22 min read
FOR UPDATE로 다중 서버 동시성 제어하기 — 비관적 잠금 실전같은 PostgreSQL DB를 보는 웹 서버와 에이전트 서버가 같은 행을 동시에 읽고 UPDATE하면서 발생한 갱신 손실·중복 처리 문제를, FOR UPDATE 비관적 잠금으로 해결한 과정을 정리합니다. UPDATE만으로는 왜 경합이 예외 없이 통과되는지, NOWAIT·SKIP LOCKED 옵션 선택, Spring+MyBatis 적용과 TOCTOU 방지 실전 사례까지 다룹니다.2026년 7월 6일42 min read
바이브 코딩 시대, 개발자와 아키텍트를 가르는 숫자 감각 (Latency Numbers)L1 캐시부터 HDD·대륙 간 네트워크까지, 메모리 계층 간 레이턴시의 '차수(Order of Magnitude)' 감각을 정리합니다. 1ns를 1초로 환산한 비유, 그리고 캐시·MSA·1M QPS 설계를 숫자로 판단하는 법까지 다룹니다.2026년 6월 1일13 min read
개발/DatabaseFOR UPDATE로 다중 서버 동시성 제어하기 — 비관적 잠금 실전같은 PostgreSQL DB를 보는 웹 서버와 에이전트 서버가 같은 행을 동시에 읽고 UPDATE하면서 발생한 갱신 손실·중복 처리 문제를, FOR UPDATE 비관적 잠금으로 해결한 과정을 정리합니다. UPDATE만으로는 왜 경합이 예외 없이 통과되는지, NOWAIT·SKIP LOCKED 옵션 선택, Spring+MyBatis 적용과 TOCTOU 방지 실전 사례까지 다룹니다.2026년 7월 6일42 min read
개발/웹멀티탭 세션 타임 동기화 - 탭마다 따로 도는 카운트다운 맞추기탭마다 독립적으로 돌던 세션 만료 카운트다운을, BroadcastChannel과 리더 선출로 모든 탭이 같은 시점에 만료되도록 동기화한 과정을 정리합니다. 공유 타임스탬프 기준 만료 시각 계산과, 실제 만료를 보장하는 서버 측 처리까지 함께 다룹니다.2026년 6월 5일34 min read
개발/아키텍처바이브 코딩 시대, 개발자와 아키텍트를 가르는 숫자 감각 (Latency Numbers)L1 캐시부터 HDD·대륙 간 네트워크까지, 메모리 계층 간 레이턴시의 '차수(Order of Magnitude)' 감각을 정리합니다. 1ns를 1초로 환산한 비유, 그리고 캐시·MSA·1M QPS 설계를 숫자로 판단하는 법까지 다룹니다.2026년 6월 1일13 min read