<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://kmg733.github.io/</id>
    <title>Manuel</title>
    <updated>2026-07-24T06:29:25.782Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Manuel</name>
        <email>mink906@gmail.com</email>
        <uri>https://kmg733.github.io/</uri>
    </author>
    <link rel="alternate" href="https://kmg733.github.io/"/>
    <link rel="self" href="https://kmg733.github.io/atom.xml"/>
    <subtitle>Manuel의 기술 블로그</subtitle>
    <rights>© Manuel</rights>
    <entry>
        <title type="html"><![CDATA[폴링, 롱폴링, SSE, WebSocket — 네 가지 실시간 통신 방식과 선택 기준]]></title>
        <id>https://kmg733.github.io/blog/realtime-communication-polling-sse-websocket/</id>
        <link href="https://kmg733.github.io/blog/realtime-communication-polling-sse-websocket/"/>
        <updated>2026-07-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[폴링·롱폴링·SSE·WebSocket을 HTTP의 무상태·비연결성 제약이라는 관점에서 정리하고, 통신 방향·실시간성·동시 사용자 수로 방식을 좁혀 가는 선택 기준을 설명합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Java 경계 와일드카드와 PECS — extends와 super는 언제 쓰나]]></title>
        <id>https://kmg733.github.io/blog/java-generics-wildcards-pecs/</id>
        <link href="https://kmg733.github.io/blog/java-generics-wildcards-pecs/"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[removeIf 구현을 열어보다 만난 Predicate<? super E>에서 출발해, Java 제네릭의 상한 경계(? extends T)와 하한 경계(? super T) 와일드카드를 정리합니다. 제네릭의 불공변성에서 경계 와일드카드가 왜 필요한지, 컴파일러가 읽기·쓰기를 어떤 근거로 허용/차단하는지, 그리고 PECS(Producer-Extends, Consumer-Super) 원칙을 Collections.copy·Stream·removeIf 사례로 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[FOR UPDATE로 다중 서버 동시성 제어하기 — 비관적 잠금 실전]]></title>
        <id>https://kmg733.github.io/blog/postgresql-for-update-pessimistic-lock/</id>
        <link href="https://kmg733.github.io/blog/postgresql-for-update-pessimistic-lock/"/>
        <updated>2026-07-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[같은 PostgreSQL DB를 보는 웹 서버와 에이전트 서버가 같은 행을 동시에 읽고 UPDATE하면서 발생한 갱신 손실·중복 처리 문제를, FOR UPDATE 비관적 잠금으로 해결한 과정을 정리합니다. UPDATE만으로는 왜 경합이 예외 없이 통과되는지, NOWAIT·SKIP LOCKED 옵션 선택, Spring+MyBatis 적용과 TOCTOU 방지 실전 사례까지 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[멀티탭 세션 타임 동기화 - 탭마다 따로 도는 카운트다운 맞추기]]></title>
        <id>https://kmg733.github.io/blog/multitab-session-time-sync/</id>
        <link href="https://kmg733.github.io/blog/multitab-session-time-sync/"/>
        <updated>2026-06-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[탭마다 독립적으로 돌던 세션 만료 카운트다운을, BroadcastChannel과 리더 선출로 모든 탭이 같은 시점에 만료되도록 동기화한 과정을 정리합니다. 공유 타임스탬프 기준 만료 시각 계산과, 실제 만료를 보장하는 서버 측 처리까지 함께 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[바이브 코딩 시대, 개발자와 아키텍트를 가르는 숫자 감각 (Latency Numbers)]]></title>
        <id>https://kmg733.github.io/blog/latency-numbers/</id>
        <link href="https://kmg733.github.io/blog/latency-numbers/"/>
        <updated>2026-06-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[L1 캐시부터 HDD·대륙 간 네트워크까지, 메모리 계층 간 레이턴시의 '차수(Order of Magnitude)' 감각을 정리합니다. 1ns를 1초로 환산한 비유, 그리고 캐시·MSA·1M QPS 설계를 숫자로 판단하는 법까지 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[읽기 성능 vs 쓰기 성능 최적화 전략]]></title>
        <id>https://kmg733.github.io/blog/read-write-performance-optimization/</id>
        <link href="https://kmg733.github.io/blog/read-write-performance-optimization/"/>
        <updated>2026-05-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[성능 최적화를 키워드 나열이 아닌 계층(Layer)별 구조로 접근하는 방법을 정리합니다. 읽기와 쓰기의 비용 구조 차이, 캐싱·복제·인덱스·샤딩 전략, 그리고 B-Tree vs LSM-Tree까지 트레이드오프 관점에서 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[PostgreSQL WITH RECURSIVE — 재귀 CTE로 트리 구조 탐색하기]]></title>
        <id>https://kmg733.github.io/blog/postgresql-recursive-cte/</id>
        <link href="https://kmg733.github.io/blog/postgresql-recursive-cte/"/>
        <updated>2026-05-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[PostgreSQL의 WITH RECURSIVE를 사용하여 트리·계층 구조 데이터를 단일 쿼리로 탐색하는 방법을 정리합니다. Working Table 동작 원리, UNION vs UNION ALL 선택 기준, 실제 쿼리 개선 사례를 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[pgjdbc 42.7.11 JSONB 반환 타입 변경과 TypeHandler 대응]]></title>
        <id>https://kmg733.github.io/blog/pgjdbc-jsonb-typehandler/</id>
        <link href="https://kmg733.github.io/blog/pgjdbc-jsonb-typehandler/"/>
        <updated>2026-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[pgjdbc 42.7.11에서 JSONB 컬럼의 반환 타입이 String에서 PGobject로 변경되었습니다. MyBatis 커스텀 TypeHandler를 글로벌 등록하여 기존 코드 변경 없이 호환성을 유지하는 방법을 정리합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Spring @Transactional과 PostgreSQL 트랜잭션 abort]]></title>
        <id>https://kmg733.github.io/blog/spring-transactional-postgresql-abort/</id>
        <link href="https://kmg733.github.io/blog/spring-transactional-postgresql-abort/"/>
        <updated>2026-04-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[PostgreSQL에서 트랜잭션 내 SQL 에러가 발생하면 이후 모든 쿼리가 실패하는 abort 상태를 분석합니다. try-catch가 무력화되는 원인, MySQL과의 차이, REQUIRES_NEW를 활용한 해결법을 정리합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JVM 메모리 누수 진단과 튜닝]]></title>
        <id>https://kmg733.github.io/blog/jvm-memory-diagnosis-tuning/</id>
        <link href="https://kmg733.github.io/blog/jvm-memory-diagnosis-tuning/"/>
        <updated>2026-04-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[jstat, jmap, 힙 덤프, NMT(Native Memory Tracking)까지 JVM 진단 도구를 활용해 메모리 누수의 원인을 추적하는 방법과, 힙·네이티브·GC JVM 옵션을 운영 환경에 맞게 튜닝하는 방법을 정리합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JVM 메모리 누수 패턴과 해결법]]></title>
        <id>https://kmg733.github.io/blog/jvm-memory-leak-patterns/</id>
        <link href="https://kmg733.github.io/blog/jvm-memory-leak-patterns/"/>
        <updated>2026-04-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Java 애플리케이션에서 발생하는 7가지 메모리 누수 패턴을 정리합니다. 힙 메모리 누수 4가지와 네이티브 메모리 누수 3가지를 코드 예시와 함께 다루고, 각각의 해결법을 제시합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JVM 메모리 구조 - 힙과 네이티브 메모리]]></title>
        <id>https://kmg733.github.io/blog/jvm-memory-structure/</id>
        <link href="https://kmg733.github.io/blog/jvm-memory-structure/"/>
        <updated>2026-04-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[JVM이 메모리를 관리하는 방식을 정리합니다. 힙 메모리와 네이티브 메모리의 차이, 객체의 생애주기, 가비지 컬렉션의 동작 원리를 초보자 눈높이에서 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JavaScript 비동기 처리 - 콜백에서 async/await까지]]></title>
        <id>https://kmg733.github.io/blog/javascript-async/</id>
        <link href="https://kmg733.github.io/blog/javascript-async/"/>
        <updated>2026-03-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[JavaScript 비동기 처리의 진화 과정을 정리합니다. 콜백 함수의 한계부터 Promise, async/await까지 단계별로 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[localStorage SWR 캐싱 패턴 - 네트워크 요청 0회를 달성하는 브라우저 캐시 전략]]></title>
        <id>https://kmg733.github.io/blog/localstorage-swr-caching-pattern/</id>
        <link href="https://kmg733.github.io/blog/localstorage-swr-caching-pattern/"/>
        <updated>2026-03-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[브라우저의 localStorage에 데이터를 캐시하고, 해시 비교 기반 SWR(Stale-While-Revalidate) 전략으로 네트워크 요청을 최소화하는 클라이언트 사이드 캐싱 패턴을 소개합니다. 비개발자도 이해할 수 있도록 일상 비유부터 시작하여, 구현 원리까지 단계적으로 설명합니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Spring Boot에서 i18next로 다국어 구현하기 - localStorage SWR 캐싱 아키텍처]]></title>
        <id>https://kmg733.github.io/blog/spring-boot-i18next-architecture/</id>
        <link href="https://kmg733.github.io/blog/spring-boot-i18next-architecture/"/>
        <updated>2026-02-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Spring Boot + Thymeleaf 환경에서 i18next와 localStorage SWR 캐싱을 결합한 서버-클라이언트 하이브리드 다국어 아키텍처를 설계합니다. 기존 jquery.i18n.properties.js의 한계를 극복하고, 캐시 히트 시 네트워크 요청 0회를 달성하는 구조를 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[브라우저 캐시 완벽 가이드 - HTTP 캐싱의 모든 것]]></title>
        <id>https://kmg733.github.io/blog/browser-cache-guide/</id>
        <link href="https://kmg733.github.io/blog/browser-cache-guide/"/>
        <updated>2026-02-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[HTTP 캐싱의 동작 원리를 정리합니다. 강력 캐시와 협상 캐시의 차이, Cache-Control 디렉티브, ETag, 리소스 유형별 전략까지 실무에 필요한 캐시 지식을 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JavaScript this 바인딩 - 호출이 결정하는 것들]]></title>
        <id>https://kmg733.github.io/blog/javascript-this-binding/</id>
        <link href="https://kmg733.github.io/blog/javascript-this-binding/"/>
        <updated>2026-02-09T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[JavaScript에서 this가 결정되는 규칙을 호출 방식별로 정리합니다. 일반 함수, 메서드, 생성자, 명시적 바인딩, 화살표 함수까지 실전 코드와 함께 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[JavaScript 클로저(Closure) - 함수가 기억하는 것들]]></title>
        <id>https://kmg733.github.io/blog/javascript-closure/</id>
        <link href="https://kmg733.github.io/blog/javascript-closure/"/>
        <updated>2026-02-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[JavaScript 클로저의 동작 원리부터 실무 활용 패턴까지 정리합니다. 데이터 은닉, 상태 유지, 모듈 패턴 등 클로저를 활용한 실전 코드를 다룹니다.]]></summary>
        <category label="개발"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hello World - 첫 번째 블로그 포스트]]></title>
        <id>https://kmg733.github.io/blog/hello-world/</id>
        <link href="https://kmg733.github.io/blog/hello-world/"/>
        <updated>2026-01-13T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Next.js와 TypeScript로 만든 블로그의 첫 번째 포스트입니다.]]></summary>
        <category label="블로그"/>
    </entry>
</feed>