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