폴링, 롱폴링, SSE, WebSocket — 네 가지 실시간 통신 방식과 선택 기준폴링·롱폴링·SSE·WebSocket을 HTTP의 무상태·비연결성 제약이라는 관점에서 정리하고, 통신 방향·실시간성·동시 사용자 수로 방식을 좁혀 가는 선택 기준을 설명합니다.2026년 7월 21일34 min read
Java 경계 와일드카드와 PECS — extends와 super는 언제 쓰나removeIf 구현을 열어보다 만난 Predicate<? super E>에서 출발해, Java 제네릭의 상한 경계(? extends T)와 하한 경계(? super T) 와일드카드를 정리합니다. 제네릭의 불공변성에서 경계 와일드카드가 왜 필요한지, 컴파일러가 읽기·쓰기를 어떤 근거로 허용/차단하는지, 그리고 PECS(Producer-Extends, Consumer-Super) 원칙을 Collections.copy·Stream·removeIf 사례로 다룹니다.2026년 7월 16일21 min read
pgjdbc 42.7.11 JSONB 반환 타입 변경과 TypeHandler 대응pgjdbc 42.7.11에서 JSONB 컬럼의 반환 타입이 String에서 PGobject로 변경되었습니다. MyBatis 커스텀 TypeHandler를 글로벌 등록하여 기존 코드 변경 없이 호환성을 유지하는 방법을 정리합니다.2026년 5월 6일19 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
개발/웹폴링, 롱폴링, SSE, WebSocket — 네 가지 실시간 통신 방식과 선택 기준폴링·롱폴링·SSE·WebSocket을 HTTP의 무상태·비연결성 제약이라는 관점에서 정리하고, 통신 방향·실시간성·동시 사용자 수로 방식을 좁혀 가는 선택 기준을 설명합니다.2026년 7월 21일34 min read
개발/JavaJava 경계 와일드카드와 PECS — extends와 super는 언제 쓰나removeIf 구현을 열어보다 만난 Predicate<? super E>에서 출발해, Java 제네릭의 상한 경계(? extends T)와 하한 경계(? super T) 와일드카드를 정리합니다. 제네릭의 불공변성에서 경계 와일드카드가 왜 필요한지, 컴파일러가 읽기·쓰기를 어떤 근거로 허용/차단하는지, 그리고 PECS(Producer-Extends, Consumer-Super) 원칙을 Collections.copy·Stream·removeIf 사례로 다룹니다.2026년 7월 16일21 min read
개발/DatabaseFOR UPDATE로 다중 서버 동시성 제어하기 — 비관적 잠금 실전같은 PostgreSQL DB를 보는 웹 서버와 에이전트 서버가 같은 행을 동시에 읽고 UPDATE하면서 발생한 갱신 손실·중복 처리 문제를, FOR UPDATE 비관적 잠금으로 해결한 과정을 정리합니다. UPDATE만으로는 왜 경합이 예외 없이 통과되는지, NOWAIT·SKIP LOCKED 옵션 선택, Spring+MyBatis 적용과 TOCTOU 방지 실전 사례까지 다룹니다.2026년 7월 6일42 min read