<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on philipjkim</title><link>https://philipjkim.cc/posts/</link><description>Recent content in Posts on philipjkim</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 12 Aug 2026 13:21:01 +0900</lastBuildDate><atom:link href="https://philipjkim.cc/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo 로 바둑판 도해 그리기 Part 2: 이미지 65장을 표기로 옮기기</title><link>https://philipjkim.cc/posts/20260812-hugo-goban-shortcode-02/</link><pubDate>Wed, 12 Aug 2026 13:21:01 +0900</pubDate><guid>https://philipjkim.cc/posts/20260812-hugo-goban-shortcode-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260812-hugo-goban-shortcode-01/"&gt;Part 1&lt;/a&gt; 에서 바둑판 도해를 그리는 &lt;code&gt;goban&lt;/code&gt; shortcode 를 만들었습니다. ASCII 로 쓰고 SVG 로 렌더링하는 방식입니다.&lt;/p&gt;
&lt;p&gt;만들고 나니 다른 시리즈가 눈에 들어왔습니다. 9x9 바둑 교재 리뷰 4편에 &lt;strong&gt;PNG 이미지로 된 도해가 65장&lt;/strong&gt; 있었습니다. 이걸 전부 표기로 옮기기로 했습니다.&lt;/p&gt;
&lt;p&gt;Part 2 는 그 작업의 기록입니다. 결론부터 적으면 &lt;strong&gt;작업의 90%는 shortcode 와 무관한 일&lt;/strong&gt; 이었고, 나머지 10% 에서 렌더링은 멀쩡한데 내용만 틀리는 종류의 버그를 하나 만났습니다.&lt;/p&gt;</description></item><item><title>Hugo 로 바둑판 도해 그리기 Part 1: 왜 shortcode 였나</title><link>https://philipjkim.cc/posts/20260812-hugo-goban-shortcode-01/</link><pubDate>Wed, 12 Aug 2026 13:18:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260812-hugo-goban-shortcode-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;이 블로그에 바둑 입문 시리즈를 쓰다가 벽에 부딪혔습니다. &lt;strong&gt;바둑 글에는 바둑판 그림이 필요한데, 그릴 방법이 마땅치 않았습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;결국 &lt;code&gt;goban&lt;/code&gt; 이라는 이름의 Hugo shortcode 를 직접 만들었습니다. 본문에는 이렇게 쓰고,&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;{{&amp;lt; goban caption=&amp;#34;빈 삼각형&amp;#34; &amp;gt;}}
 a b c d e
 1 . X . . .
 2 X O * . .
 3 . . . . .
{{&amp;lt; /goban &amp;gt;}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;렌더링은 SVG 바둑판으로 나가는 방식입니다. 실제 결과는 이렇습니다.&lt;/p&gt;</description></item><item><title>바둑 가이드 Pt.2: 죽지 않는 법 — 잇기, 두 눈, 그리고 패</title><link>https://philipjkim.cc/posts/20260811-go-beginners-guide-pt-2/</link><pubDate>Tue, 11 Aug 2026 10:14:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260811-go-beginners-guide-pt-2/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20250925-go-beginners-guide-pt-1/"&gt;Pt.1&lt;/a&gt; 에서는 규칙과 예절, 그리고 단수와 축을 다뤘습니다. 요약하면 &lt;strong&gt;상대 돌을 잡는 법&lt;/strong&gt; 이었습니다.&lt;/p&gt;
&lt;p&gt;이번 편은 정확히 그 반대편입니다. 질문은 하나뿐입니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;내 돌은 어떻게 죽지 않는가?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;입문자가 첫 판을 끝까지 두지 못하는 이유는 대개 이 질문에 답을 못 해서입니다. 잡는 법만 알면 공격은 할 수 있지만, 내가 쌓아 올린 돌이 왜 통째로 사라지는지는 알 수 없습니다.&lt;/p&gt;
&lt;p&gt;그리고 답의 핵심은 규칙책의 아주 짧은 예외 조항 하나에 걸려 있습니다. 한국기원 바둑규칙 제4조입니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 7: 코드 없이 보는 easy 봇과 hard 봇의 차이</title><link>https://philipjkim.cc/posts/20260810-lexio-cpu-bot-strategy-07/</link><pubDate>Mon, 10 Aug 2026 09:10:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20260810-lexio-cpu-bot-strategy-07/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="이-글은-누구를-위한-것인가"&gt;이 글은 누구를 위한 것인가&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt; 부터 &lt;a href="https://philipjkim.cc/posts/20260810-lexio-cpu-bot-strategy-06/"&gt;Part 6&lt;/a&gt; 까지는 비트마스크, 동적 계획법, 평가 함수, 확률 모델 같은 이야기로 채워져 있습니다. 렉시오를 좋아하지만 개발자는 아닌 분에게는 읽을 이유가 없는 글입니다.&lt;/p&gt;
&lt;p&gt;이번 편은 그 여섯 편의 &lt;strong&gt;결론만&lt;/strong&gt; 을 코드와 수식 없이 옮긴 것입니다. 렉시오 규칙을 아는 분이라면 누구나 읽을 수 있습니다. 다루는 것은 셋입니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;두 CPU 는 각각 무엇을 보고 수를 고르는가&lt;/li&gt;
&lt;li&gt;둘을 어떻게 겨루게 했고, 결과가 어땠는가&lt;/li&gt;
&lt;li&gt;그 결과로 무엇은 말할 수 있고, 무엇은 여전히 말할 수 없는가&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;세 번째가 이 글에서 가장 중요합니다. 숫자를 보여 주는 글은 많지만, 그 숫자가 무엇을 증명하지 &lt;strong&gt;못&lt;/strong&gt; 하는지까지 적는 글은 드뭅니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 6: 봇이 약한지 어떻게 아는가</title><link>https://philipjkim.cc/posts/20260810-lexio-cpu-bot-strategy-06/</link><pubDate>Mon, 10 Aug 2026 08:51:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260810-lexio-cpu-bot-strategy-06/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="눈으로-한-판-돌려서는-못-보는-것"&gt;눈으로 한 판 돌려서는 못 보는 것&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260807-lexio-cpu-bot-strategy-05/"&gt;Part 5&lt;/a&gt; 에서 고친 결함은 눈에 보이는 것이었습니다. 봇이 거의 모든 턴을 패스했고, 브라우저에서 5인 게임을 한 판 돌리자 바로 드러났습니다.&lt;/p&gt;
&lt;p&gt;그 방법에는 한계가 분명합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;봇이 100% 패스한다 → 한 판이면 보입니다&lt;/li&gt;
&lt;li&gt;봇이 라운드당 1.4점씩 잃는다 → 몇 판을 돌려도 느낄 수 없습니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;렉시오는 딜 운의 분산이 큽니다. 좋은 패를 받은 판과 나쁜 패를 받은 판의 차이가 정책의 차이보다 훨씬 크기 때문에, 사람이 몇 판 보고 &amp;ldquo;이 봇이 좀 약한 것 같다&amp;quot;고 말하는 것은 근거가 되지 못합니다. 측정 도구 없이 가중치를 만지면 더 나쁩니다. 고쳤다고 생각한 것이 실은 운이었는지 확인할 방법이 없습니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 5: 봇이 아무것도 하지 않는 이유</title><link>https://philipjkim.cc/posts/20260807-lexio-cpu-bot-strategy-05/</link><pubDate>Fri, 07 Aug 2026 07:56:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260807-lexio-cpu-bot-strategy-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="설계와-구현-사이"&gt;설계와 구현 사이&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt; 부터 &lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-04/"&gt;Part 4&lt;/a&gt; 까지는 설계안이었습니다. 타일을 정수로 압축하고, 미공개 집합을 복원하고, 손패 분해를 DP 로 풀고, 목적 함수를 정산식에서 유도해 평가 함수의 항을 나열했습니다. 코드 조각은 있었지만 돌려 본 적은 없었습니다.&lt;/p&gt;
&lt;p&gt;이번 편은 그 설계를 실제로 구현해 브라우저에서 5인 게임을 돌려 본 기록입니다. 결과부터 적겠습니다. &lt;strong&gt;봇이 거의 모든 턴을 패스했습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;원인을 추적하고 나서 든 생각은 &amp;ldquo;설계가 틀렸다&amp;quot;가 아니었습니다. 항을 하나씩 뜯어보면 Part 4 가 쓴 대로였고, 개별 함수는 각각 맞는 값을 돌려주고 있었습니다. 틀린 것은 &lt;strong&gt;항을 합치는 방식&lt;/strong&gt; 이었고, 그중 일부는 Part 1~4 가 아예 말하지 않은 자리였습니다.&lt;/p&gt;</description></item><item><title>제프 딘, 27년 만에 구글을 떠나다 — Discovery Loop 이라는 다음 장</title><link>https://philipjkim.cc/posts/20260806-jeff-dean-leaves-google-discovery-loop/</link><pubDate>Thu, 06 Aug 2026 15:58:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260806-jeff-dean-leaves-google-discovery-loop/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2026년-8월-5일-한꺼번에-터진-두-개의-소식"&gt;2026년 8월 5일, 한꺼번에 터진 두 개의 소식&lt;/h2&gt;
&lt;p&gt;2026년 8월 5일, 순다르 피차이(Sundar Pichai)와 데미스 허사비스(Demis Hassabis)는 구글 공식 블로그에 「The next chapter of our AI momentum」이라는 공동 명의의 글을 올렸습니다. 내용은 두 가지였습니다.&lt;/p&gt;
&lt;p&gt;하나는 허사비스가 Google DeepMind CEO 자리에서 물러나 &lt;strong&gt;Google DeepMind 의장 겸 알파벳 수석과학자(Chief Scientist of Alphabet)&lt;/strong&gt; 로 옮긴다는 것이었습니다. 다른 하나는, 그 수석과학자 자리를 지금까지 지키고 있던 사람이 회사를 떠난다는 것이었습니다.&lt;/p&gt;</description></item><item><title>달무티 vs 렉시오 Part 3: 인원, 운, 정치, 그리고 무엇을 살 것인가</title><link>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-03/</link><pubDate>Thu, 06 Aug 2026 14:37:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-01/"&gt;Part 1&lt;/a&gt;에서 두 게임의 목적과 구조를, &lt;a href="https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-02/"&gt;Part 2&lt;/a&gt;에서 전략과 점수 체계를 봤습니다. 마지막 편에서는 실제로 테이블에 앉았을 때 부딪히는 것들을 다룹니다. 몇 명이 모였는가, 운이 어떻게 작동하는가, 사람 사이의 정치가 어디서 발생하는가, 그리고 결국 무엇을 살 것인가입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-인원수에-따른-경험"&gt;1. 인원수에 따른 경험&lt;/h2&gt;
&lt;h3 id="달무티-사람이-많을수록-살아난다"&gt;달무티: 사람이 많을수록 살아난다&lt;/h3&gt;
&lt;p&gt;공식 룰북은 달무티를 &lt;strong&gt;4~8명&lt;/strong&gt; 에서 지원하며, 특히 &lt;strong&gt;5~8명에서 가장 좋다&lt;/strong&gt; 고 적습니다. 4명으로도 할 수 있고 9명 이상으로도 할 수 있다고 덧붙입니다.&lt;/p&gt;</description></item><item><title>달무티 vs 렉시오 Part 2: 강한 패, 혁명, 그리고 점수</title><link>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-02/</link><pubDate>Thu, 06 Aug 2026 14:34:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-01/"&gt;Part 1&lt;/a&gt;에서는 달무티와 렉시오가 무엇을 재미로 삼는지, 구성물과 조합과 리드권이 어떻게 다른지 봤습니다. Part 2 에서는 실제로 판을 굴릴 때 부딪히는 문제들을 다룹니다. 강한 패를 언제 쓸 것인가, 광대는 어디에 붙일 것인가, 한 판의 결과가 다음 판에 어떻게 이어지는가, 그리고 점수는 어떻게 계산되는가입니다.&lt;/p&gt;
&lt;p&gt;규칙 서술은 Part 1 과 마찬가지로 &lt;strong&gt;달무티 공식 룰북&lt;/strong&gt; 과 &lt;strong&gt;렉시오 공식 홈페이지의 게임방법·기본전략 페이지&lt;/strong&gt; 를 근거로 합니다.&lt;/p&gt;</description></item><item><title>달무티 vs 렉시오 Part 1: 같은 클라이밍 게임, 다른 목적</title><link>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-01/</link><pubDate>Thu, 06 Aug 2026 14:31:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20260806-dalmuti-vs-lexio-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="사촌인데-닮지-않았다"&gt;사촌인데 닮지 않았다&lt;/h2&gt;
&lt;p&gt;달무티(The Great Dalmuti)와 렉시오(Lexio)는 모두 &lt;strong&gt;클라이밍 게임&lt;/strong&gt; 입니다. 앞사람이 낸 것과 같은 장수의 더 강한 조합으로 받아 올라가고, 손에 든 카드나 타일을 먼저 비우는 쪽이 이깁니다. &lt;a href="https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/"&gt;클라이밍 게임 전반을 정리한 글&lt;/a&gt;에서 다뤘듯 둘은 같은 뿌리에서 갈라진 사촌입니다.&lt;/p&gt;
&lt;p&gt;두 게임은 다음 원리를 공유합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;약한 조합은 리드권이 있을 때 처리합니다.&lt;/li&gt;
&lt;li&gt;강한 조합은 리드권을 되찾는 데 사용합니다.&lt;/li&gt;
&lt;li&gt;같은 숫자가 여러 장 모인 패가 유리합니다.&lt;/li&gt;
&lt;li&gt;상대의 남은 카드 수를 관찰해야 합니다.&lt;/li&gt;
&lt;li&gt;낼 수 있다고 해서 무조건 내는 것이 정답은 아닙니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;패스는 그 트릭에서의 탈락이 아닙니다.&lt;/strong&gt; 두 게임 모두 패스한 뒤에도 자기 차례가 다시 오면 낼 수 있습니다. 달무티 공식 룰북은 이를 명시적으로 규정하고 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;겉으로 보면 렉시오가 달무티에 포커 족보를 얹은 복잡한 버전처럼 보이기도 합니다. 그러나 실제로 플레이해 보면 두 게임이 만들어 내는 경험은 상당히 다릅니다.&lt;/p&gt;</description></item><item><title>폭염에 야외 운동을 하면 몸에서 벌어지는 일: 고온건조와 고온다습의 과학</title><link>https://philipjkim.cc/posts/20260806-extreme-heat-outdoor-exercise-risks/</link><pubDate>Thu, 06 Aug 2026 10:22:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20260806-extreme-heat-outdoor-exercise-risks/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;더워도 몸으로 버티면 된다&amp;quot;는 말은 생리학적으로 틀렸습니다. 사람의 체온 조절에는 &lt;strong&gt;넘으면 되돌릴 수 없는 물리적 한계선&lt;/strong&gt; 이 있고, 그 선은 의지나 훈련량으로 밀어낼 수 있는 종류가 아닙니다.&lt;/p&gt;
&lt;p&gt;이 글은 폭염 속 한낮 야외 운동(러닝, 사이클 등)이 몸에 무엇을 하는지, 두 가지 서로 다른 환경으로 나누어 정리한 것입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;고온건조&lt;/strong&gt;: 기온은 매우 높지만 습도가 낮은 사막성 기후. 실험실 조건으로는 대략 43~48℃ / 상대습도 18~22% 수준입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;고온다습&lt;/strong&gt;: 기온은 사막급까지는 아니지만 35~40℃ 에 습도가 80% 를 넘는 환경. 한국의 한여름 낮이 여기에 해당합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;결론부터 말하면, 두 환경은 &lt;strong&gt;위험해지는 지점이 다를 뿐 위험해진 다음의 진행 속도는 거의 같습니다.&lt;/strong&gt; 그리고 대부분의 사람은 자신이 이미 그 선을 넘었다는 사실을 알아차리지 못합니다.&lt;/p&gt;</description></item><item><title>AI가 코딩을 다 하는 시대, 컴공은 무엇을 배워야 하나 Part 3: 반론 — 2026년 데이터로 다시 본 것들</title><link>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-03/</link><pubDate>Tue, 04 Aug 2026 08:40:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-01/"&gt;Part 1&lt;/a&gt;과 &lt;a href="https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-02/"&gt;Part 2&lt;/a&gt;에서는 서울대 이재욱 교수의 인터뷰 &lt;a href="https://www.youtube.com/watch?v=i0NcKL1JLfg"&gt;〈코딩도 과제도 AI가 다 하는 시대, 컴공에서는 무엇을 배워야 할까?〉&lt;/a&gt;를 일곱 챕터로 나눠 정리하고 각 주장에 외부 근거를 붙였습니다. 이번 편은 방향을 바꿔, 데이터가 뒷받침하지 않는 부분과 영상이 아예 다루지 않은 조각들을 다룹니다.&lt;/p&gt;
&lt;p&gt;한 가지 방법론을 먼저 밝힙니다. &lt;strong&gt;이 글의 근거는 가급적 2026년 자료로 한정했고, 추이를 볼 때는 2023~2026년 구간을 봤습니다.&lt;/strong&gt; 이 분야는 6개월이면 결론이 뒤집히기 때문입니다. 실제로 그렇게 다시 검증해 보니 &lt;strong&gt;반론 하나는 완전히 무너졌고, 나머지는 대부분 훨씬 강해졌으며, 하나는 방향이 반대로 뒤집혔습니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>AI가 코딩을 다 하는 시대, 컴공은 무엇을 배워야 하나 Part 2: 교육, 학과의 존재 이유, 그리고 안목</title><link>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-02/</link><pubDate>Tue, 04 Aug 2026 08:33:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-01/"&gt;Part 1&lt;/a&gt;에서는 서울대 이재욱 교수의 인터뷰 &lt;a href="https://www.youtube.com/watch?v=i0NcKL1JLfg"&gt;〈코딩도 과제도 AI가 다 하는 시대, 컴공에서는 무엇을 배워야 할까?〉&lt;/a&gt;의 앞쪽 세 챕터를 다뤘습니다. 요약하면 이렇습니다. 시간의 무게중심이 쓰기에서 읽기로 옮겨 갔고, 코드 작성은 거의 자동화될 수 있지만 무엇을 만들지 정의하는 일은 인간에게 남으며, 바이브 코딩은 프로토타입에는 훌륭하지만 프로덕션에서는 95%가 0%가 됩니다.&lt;/p&gt;
&lt;p&gt;이번 편은 후반부 네 챕터입니다. 교육 현장의 문제, 컴퓨터공학이라는 학과의 존재 이유, 앞으로 중요해질 역량, 그리고 비전공자를 위한 조언입니다. 앞 편과 마찬가지로 영상의 주장을 정리한 뒤 외부 근거를 붙이고, 마지막에 짚어야 할 부분을 덧붙입니다.&lt;/p&gt;</description></item><item><title>AI가 코딩을 다 하는 시대, 컴공은 무엇을 배워야 하나 Part 1: 영상이 짚은 현실과 바이브 코딩의 임계점</title><link>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-01/</link><pubDate>Tue, 04 Aug 2026 08:30:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260804-ai-era-computer-science-education-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;좋은 영상을 알려주신 Eroica 님께 감사드립니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;서울대학교 공식 유튜브 채널의 인터뷰 시리즈 「샤로잡다」 시즌 2 에 &lt;a href="https://www.youtube.com/watch?v=i0NcKL1JLfg"&gt;〈코딩도 과제도 AI가 다 하는 시대, 컴공에서는 무엇을 배워야 할까?〉&lt;/a&gt; 편이 2026년 7월 23일 공개되었습니다. 약 20분 분량이고, 게시 열흘 남짓 만에 조회수 26만 회를 넘겼습니다.&lt;/p&gt;
&lt;p&gt;출연자는 &lt;strong&gt;이재욱 교수&lt;/strong&gt; 입니다. 서울대학교 컴퓨터공학부 교수이며 2025년 9월부터 &lt;a href="https://aiis.snu.ac.kr/sub2_1.php"&gt;서울대학교 AI연구원(AIIS)&lt;/a&gt; 원장을 맡고 있습니다. 컴파일러와 하드웨어 아키텍처, 운영체제를 연구해 온 AI 인프라 전문가라는 점이 중요합니다. 모델을 만드는 사람이 아니라 &lt;strong&gt;모델이 돌아가는 바닥을 만드는 사람&lt;/strong&gt; 의 관점에서 나온 이야기이기 때문입니다.&lt;/p&gt;</description></item><item><title>달무티 CPU 플레이어 만들기 Part 4: 만들어 보니 hard 봇이 더 약했다</title><link>https://philipjkim.cc/posts/20260803-dalmuti-cpu-bot-strategy-04/</link><pubDate>Mon, 03 Aug 2026 17:57:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-dalmuti-cpu-bot-strategy-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="설계안이-검증을-만나면"&gt;설계안이 검증을 만나면&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt;에서 공정성 경계와 결정적 easy 봇을 만들었고, &lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-02/"&gt;Part 2&lt;/a&gt;에서 hard 봇의 정보 모델을 세웠고, &lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-03/"&gt;Part 3&lt;/a&gt;에서 수 평가 함수와 전략적 패스로 실제 결정을 내렸습니다. 세 편 모두 &amp;ldquo;이 글은 설계안이고 코드는 논지를 보이기 위한 발췌&amp;quot;라고 밝혀 두었습니다.&lt;/p&gt;
&lt;p&gt;그 설계안을 실제 게임에 구현하고, 시뮬레이터를 붙여 easy 봇과 같은 조건에서 붙여 봤습니다. 결과는 이랬습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;최초 hard 봇은 easy 봇보다 &lt;strong&gt;평균 종료 순위가 0.6601등 나빴습니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 5: 제약이 사라진 시대에 남은 것</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-05/</link><pubDate>Mon, 03 Aug 2026 09:48:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="지금까지의-이야기"&gt;지금까지의 이야기&lt;/h2&gt;
&lt;p&gt;네 편에 걸쳐 세 작품을 뜯었습니다. 정리하면 이렇습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;&lt;/th&gt;
 &lt;th&gt;슈퍼 마리오브라더스&lt;/th&gt;
 &lt;th&gt;엘리트&lt;/th&gt;
 &lt;th&gt;메탈기어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;연도 / 기종&lt;/td&gt;
 &lt;td&gt;1985 / 패미콤&lt;/td&gt;
 &lt;td&gt;1984 / BBC Micro&lt;/td&gt;
 &lt;td&gt;1987 / MSX2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;부족했던 자원&lt;/td&gt;
 &lt;td&gt;ROM 40KB&lt;/td&gt;
 &lt;td&gt;RAM 32KB&lt;/td&gt;
 &lt;td&gt;스프라이트, 가로 스크롤&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;전략&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;압축&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;생성&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;전복&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;핵심 기법&lt;/td&gt;
 &lt;td&gt;오브젝트 2바이트 인코딩&lt;/td&gt;
 &lt;td&gt;트리보나치 씨앗 트위스팅&lt;/td&gt;
 &lt;td&gt;요구사항 자체를 바꿈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;세계 데이터&lt;/td&gt;
 &lt;td&gt;4,460 바이트&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;6 바이트&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;20,246 바이트&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;치른 대가&lt;/td&gt;
 &lt;td&gt;표현 가능한 오브젝트가 제한됨&lt;/td&gt;
 &lt;td&gt;세부를 손댈 수 없음&lt;/td&gt;
 &lt;td&gt;원래 만들려던 게임을 포기함&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;이 마지막 편에서는 이 세 가지가 40년 뒤에 어떻게 됐는지 봅니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 4: 메탈기어, 못 그리는 것을 안 그려도 되게 만들다</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-04/</link><pubDate>Mon, 03 Aug 2026 09:43:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="세-번째-길"&gt;세 번째 길&lt;/h2&gt;
&lt;p&gt;앞의 두 편에서 본 전략을 정리하면 이렇습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/"&gt;Part 2&lt;/a&gt; 슈퍼 마리오브라더스: &lt;strong&gt;데이터를 작게 만든다.&lt;/strong&gt; 레벨 오브젝트 2바이트 인코딩.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-03/"&gt;Part 3&lt;/a&gt; 엘리트: &lt;strong&gt;데이터를 갖지 않는다.&lt;/strong&gt; 씨앗 6바이트에서 우주 전체를 계산.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;둘 다 &amp;ldquo;요구사항은 그대로 두고 구현을 비튼다&amp;rdquo; 는 접근입니다. 1987년 코나미의 MSX2 팀은 세 번째 길을 갔습니다. &lt;strong&gt;요구사항 자체를 바꿨습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;결과물이 메탈기어이고, 그 결과물이 만든 것은 게임 하나가 아니라 &lt;strong&gt;장르 하나&lt;/strong&gt; 였습니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 3: 엘리트, 우주를 6바이트에 담다</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-03/</link><pubDate>Mon, 03 Aug 2026 09:33:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="저장하지-않으면-용량도-들지-않는다"&gt;저장하지 않으면 용량도 들지 않는다&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/"&gt;Part 2&lt;/a&gt;에서 본 슈퍼 마리오브라더스의 전략은 &lt;strong&gt;데이터를 작게 만드는 것&lt;/strong&gt; 이었습니다. 레벨 오브젝트를 2바이트로 인코딩해 게임 전체의 스테이지 데이터를 4,460바이트에 넣었습니다.&lt;/p&gt;
&lt;p&gt;1984년 BBC Micro 로 나온 엘리트는 한 걸음 더 나갑니다. &lt;strong&gt;데이터를 아예 갖지 않습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;먼저 규모를 봅시다. 엘리트에는 은하가 8개 있고, 은하마다 항성계가 256개 있습니다. &lt;strong&gt;총 2,048개&lt;/strong&gt; 입니다. 각 항성계에는 고유한 이름이 있고, 좌표가 있고, 경제 형태, 정부 형태, 기술 수준, 인구, 총생산, 행성 반지름, 지배 종족이 있습니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 2: 슈퍼 마리오브라더스, 레벨을 그리지 않고 서술하다</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/</link><pubDate>Mon, 03 Aug 2026 09:24:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4460바이트짜리-세계"&gt;4,460바이트짜리 세계&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/"&gt;Part 1&lt;/a&gt;에서 확인한 제약을 다시 꺼내 놓겠습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;슈퍼 마리오브라더스 카트리지는 PRG-ROM 32KB + CHR-ROM 8KB = &lt;strong&gt;40KB&lt;/strong&gt; 입니다.&lt;/li&gt;
&lt;li&gt;한 프레임 중 VRAM 을 만질 수 있는 시간은 2,273 사이클이고, 스프라이트 DMA 를 빼면 배경에 쓸 수 있는 것은 &lt;strong&gt;약 220바이트&lt;/strong&gt; 입니다.&lt;/li&gt;
&lt;li&gt;6502 에는 곱셈 명령이 없습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 세 줄을 지키면서 32개 스테이지가 흐르는 게임을 만들어야 합니다.&lt;/p&gt;</description></item><item><title>8비트의 벽을 넘은 게임들 Part 1: 그 기계들은 무엇을 못 했는가</title><link>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/</link><pubDate>Mon, 03 Aug 2026 09:06:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260803-8bit-hardware-limits-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="스크린샷-한-장보다-작은-게임"&gt;스크린샷 한 장보다 작은 게임&lt;/h2&gt;
&lt;p&gt;슈퍼 마리오브라더스가 담긴 카트리지의 ROM 용량은 &lt;strong&gt;40KB&lt;/strong&gt; 입니다. 프로그램 32KB, 그림 데이터 8KB. 이게 전부입니다.&lt;/p&gt;
&lt;p&gt;이 게임의 한 장면을 오늘날의 화면에서 캡처해 PNG 로 저장하면 보통 수백 KB 가 나옵니다. &lt;strong&gt;게임 하나가 그 게임의 스크린샷 한 장보다 작습니다.&lt;/strong&gt; 32개 스테이지, 여덟 가지 배경음악, 마리오의 물리 엔진, 적 AI, 점수 계산, 타이틀 화면이 전부 저 40KB 안에 있습니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 4: 수 평가와 정산 기대값</title><link>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-04/</link><pubDate>Fri, 31 Jul 2026 09:44:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="재료에서-결정으로"&gt;재료에서 결정으로&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-02/"&gt;Part 2&lt;/a&gt; 에서 봇이 무엇을 아는지, &lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-03/"&gt;Part 3&lt;/a&gt; 에서 자기 손패를 어떻게 보는지 만들었습니다. 아직 결정은 하나도 하지 않았습니다. 이번 편에서 전부 합칩니다.&lt;/p&gt;
&lt;p&gt;그런데 합치기 전에 답해야 할 질문이 하나 있습니다. &lt;strong&gt;무엇을 최대화할 것인가.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;달무티에서는 이 질문이 쉬웠습니다. 등수가 곧 다음 판의 계급이고 점수도 등수에 비례하므로, &amp;ldquo;평균 등수를 낮춘다&amp;quot;가 그대로 목적 함수였습니다. 렉시오는 다릅니다. 렉시오에는 등수가 없습니다. &lt;strong&gt;금액만 있습니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 3: 손패 분해 플랜</title><link>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-03/</link><pubDate>Fri, 31 Jul 2026 09:37:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="좋은-손패는-센-손패가-아니다"&gt;좋은 손패는 센 손패가 아니다&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-02/"&gt;Part 2&lt;/a&gt; 에서는 봇이 상대에 대해 무엇을 알 수 있는지 정리했습니다. 이번 편은 시선을 안으로 돌립니다. &lt;strong&gt;내 손패는 몇 번 제출하면 비는가.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;이 질문이 왜 중요한지는 &lt;a href="https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/"&gt;클라이밍 게임 전략 글&lt;/a&gt;에서 이미 짚었습니다. 강한 타일이 많은 손패와 조합이 잘 짜인 손패 중 이기는 쪽은 후자입니다. 강한 타일은 한 번에 한 장씩 나가지만, 잘 짜인 손패는 다섯 장씩 나갑니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 2: 60비트 카운팅과 확실승수 판정</title><link>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-02/</link><pubDate>Fri, 31 Jul 2026 09:30:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hard-봇이-지켜야-할-세-가지"&gt;hard 봇이 지켜야 할 세 가지&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt; 에서 만든 easy 봇은 이번 턴에 합법적인 가장 싼 수를 계산할 뿐이었습니다. 이번 편부터 hard 봇을 설계합니다. 다만 시작하기 전에 지켜야 할 선을 못 박아 두겠습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;공정성.&lt;/strong&gt; 봇은 &lt;code&gt;GameView&lt;/code&gt; 만 봅니다. 남의 손패는 그 구조체 어디에도 존재하지 않습니다. 봇이 강해지는 이유는 &lt;strong&gt;더 많이 보기 때문이 아니라, 같은 것을 보고 더 잘 세기 때문&lt;/strong&gt; 이어야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;결정성.&lt;/strong&gt; 같은 입력에서는 같은 출력이 나와야 합니다. 그래야 봇 로직이 테스트 가능한 코드가 됩니다. 난수를 쓴다면 시드를 게임 상태에서 유도합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;실시간성.&lt;/strong&gt; 봇의 판단은 사람이 기다릴 수 있는 시간 안에 끝나야 합니다. 이 제약이 뒤에서 &amp;ldquo;몬테카를로를 런타임에 돌리지 않는다&amp;quot;는 설계 결정으로 이어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이번 편은 hard 봇이 &lt;strong&gt;무엇을 아는가&lt;/strong&gt; 를 다룹니다. 무엇을 결정하는가는 Part 3 과 Part 4 의 몫입니다.&lt;/p&gt;</description></item><item><title>렉시오 CPU 플레이어 만들기 Part 1: 타일 하나를 정수 하나로</title><link>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-01/</link><pubDate>Fri, 31 Jul 2026 09:22:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20260731-lexio-cpu-bot-strategy-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="사촌-게임-전혀-다른-봇"&gt;사촌 게임, 전혀 다른 봇&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/"&gt;어제 글&lt;/a&gt;에서 달무티(The Great Dalmuti)의 CPU 플레이어를 세 편에 걸쳐 설계했습니다. 이번에는 같은 클라이밍 계열의 국산 타일 게임 &lt;strong&gt;렉시오(Lexio)&lt;/strong&gt; 로 넘어갑니다.&lt;/p&gt;
&lt;p&gt;두 게임은 &lt;a href="https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/"&gt;클라이밍 게임을 정리한 글&lt;/a&gt;에서 봤듯 사촌 사이입니다. 더 센 조합으로 받아 올라가고, 손패를 먼저 비우는 쪽이 이깁니다. 그런데 봇을 짜 보면 &lt;strong&gt;알고리즘이 거의 겹치지 않습니다.&lt;/strong&gt; 달무티 봇 코드를 렉시오로 옮기려 하면 재사용할 수 있는 것은 &amp;ldquo;공정성 경계를 타입으로 못 박는다&amp;rdquo; 같은 뼈대뿐이고, 판단 로직은 전부 새로 써야 합니다.&lt;/p&gt;</description></item><item><title>달무티 CPU 플레이어 만들기 Part 3: 수 평가와 전략적 패스</title><link>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-03/</link><pubDate>Thu, 30 Jul 2026 15:08:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;정정 안내 (2026-08-03):&lt;/strong&gt; 이 글의 설계안을 실제로 구현해 시뮬레이션으로 검증한 결과, 리드 선택·세금 반환·목적 함수에 대한 일부 결론이 뒤집혔습니다. 특히 &amp;ldquo;리드 선택도 같은 계산이다&amp;rdquo; 절과 &amp;ldquo;rank 12 는 반환 카드로 나쁘다&amp;quot;는 주장은 철회되었습니다. 무엇이 왜 틀렸고 무엇이 살아남았는지는 &lt;a href="https://philipjkim.cc/posts/20260803-dalmuti-cpu-bot-strategy-04/"&gt;Part 4: 만들어 보니 hard 봇이 더 약했다&lt;/a&gt;에 정리했습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="재료에서-결정으로"&gt;재료에서 결정으로&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt;에서 공정성 경계와 결정적 easy 봇을 만들었고, &lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-02/"&gt;Part 2&lt;/a&gt;에서 hard 봇의 정보 모델을 세웠습니다. 지금까지 확보한 재료는 셋입니다.&lt;/p&gt;</description></item><item><title>달무티 CPU 플레이어 만들기 Part 2: hard 봇의 정보 모델과 확실승수 판정</title><link>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-02/</link><pubDate>Thu, 30 Jul 2026 14:18:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hard-봇이-지켜야-할-세-가지"&gt;hard 봇이 지켜야 할 세 가지&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/"&gt;Part 1&lt;/a&gt;에서는 달무티 CPU 플레이어의 뼈대를 잡고, 결정적 규칙만으로 움직이는 easy 봇을 만들었습니다. easy 봇은 합법적이고 예측 가능하지만, &amp;ldquo;낼 수 있으면 무조건 낸다&amp;quot;는 정책 때문에 사람에게 쉽게 집니다.&lt;/p&gt;
&lt;p&gt;이번 편부터 hard 봇을 설계합니다. 설계 제약은 세 가지입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 상대의 손패는 절대 볼 수 없습니다.&lt;/strong&gt; 봇은 Part 1 에서 정의한 &lt;code&gt;GameView&lt;/code&gt; 만 받습니다. 난이도를 올리기 위해 정보를 더 주는 것은 설계가 아니라 반칙입니다. 사람이 &amp;ldquo;저 봇 손패 보는 거 아니야?&amp;ldquo;라고 의심하는 순간 게임의 신뢰가 무너집니다.&lt;/p&gt;</description></item><item><title>달무티 CPU 플레이어 만들기 Part 1: 규칙 기반 easy 봇</title><link>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/</link><pubDate>Thu, 30 Jul 2026 14:09:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260730-dalmuti-cpu-bot-strategy-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;후속 정정 안내 (2026-08-03):&lt;/strong&gt; 이 시리즈의 설계안을 실제로 구현해 시뮬레이션으로 검증한 결과, 여기서 &amp;ldquo;easy 봇의 단순화&amp;quot;로 소개한 &lt;strong&gt;리드 정책과 세금 반환 규칙이 hard 봇의 복잡한 평가식보다 강했고&lt;/strong&gt;, 지금은 hard 봇의 guardrail 로 채택돼 있습니다. 자세한 내용은 &lt;a href="https://philipjkim.cc/posts/20260803-dalmuti-cpu-bot-strategy-04/"&gt;Part 4: 만들어 보니 hard 봇이 더 약했다&lt;/a&gt;에 정리했습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="왜-봇부터-만드는가"&gt;왜 봇부터 만드는가&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/"&gt;지난 글&lt;/a&gt;에서 대부호·달무티·렉시오를 묶어 클라이밍 게임의 전략을 정리했습니다. 이번에는 그중 &lt;strong&gt;달무티(The Great Dalmuti)&lt;/strong&gt; 를 디지털 게임으로 구현한다고 가정하고, &lt;strong&gt;CPU 플레이어를 어떤 전략으로 움직일 것인가&lt;/strong&gt; 를 파고들겠습니다.&lt;/p&gt;</description></item><item><title>AI 허니문이 끝난 자리: 테크 인력 6,000명을 반으로 가른 것과, 개인이 바꿀 수 있는 것</title><link>https://philipjkim.cc/posts/20260729-ai-honeymoon-over-tech-workforce-split/</link><pubDate>Wed, 29 Jul 2026 13:30:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20260729-ai-honeymoon-over-tech-workforce-split/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;이오플래닛에 소개된 &lt;a href="https://eopla.net/magazines/45020"&gt;AI 허니문은 끝났다: 테크 인력이 정확히 반으로 갈라졌다&lt;/a&gt; 를 읽고, 원 조사를 직접 찾아보았습니다. 출처는 노엄 시걸(Noam Segal)이 레니 라치츠키(Lenny Rachitsky)와 함께 진행한 &lt;strong&gt;두 번째 연례 테크 종사자 심리 조사&lt;/strong&gt; 입니다. 에어비앤비·트위터·메타·재피어·피그마 등에서 리서치를 이끌어 온 사람이 설계했고, 표본은 약 6,000명입니다.&lt;/p&gt;
&lt;p&gt;가장 많이 인용되는 문장은 이것입니다. &amp;ldquo;AI가 당신의 직업 정체성을 어떻게 바꿨습니까&amp;quot;라고 물었더니 절반은 &lt;strong&gt;&amp;ldquo;일이 다시 재미있어졌다&amp;rdquo;&lt;/strong&gt; 고 답했고, 나머지 절반에게서는 &lt;strong&gt;&amp;ldquo;내 뇌가 썩어 가는 것 같다&amp;rdquo;&lt;/strong&gt; 는 답이 돌아왔다는 것입니다.&lt;/p&gt;</description></item><item><title>번역글: Big Design Up Front — 여전히 나쁜 생각입니다</title><link>https://philipjkim.cc/posts/20260728-big-design-up-front-still-a-bad-idea-translation/</link><pubDate>Tue, 28 Jul 2026 14:23:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260728-big-design-up-front-still-a-bad-idea-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 를 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Pragmatic Programmers Newsletter — &amp;ldquo;Big Design Up Front: Still a Bad Idea&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;우리는 1990년대의 소프트웨어 위기를 불러왔던 그 관행을 그대로 되풀이할 위험에 처해 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;40년 전, 도구와 하드웨어가 발전하면서 우리는 점점 더 큰 시스템을 만들 수 있게 됐습니다. 더 야심 차고, 범위도 넓고, UI도 화려한 시스템들이었습니다. 짜릿한 시절이었습니다.&lt;/p&gt;
&lt;p&gt;하지만 문제가 있었습니다. 시스템이 복잡해질수록 프로젝트는 점점 더 실패했습니다. 일정 추정은 웃음이 나올 만큼 빗나갔고, 기능은 잘려나갔고, 버그는 넘쳐났습니다. 프로젝트는 납품되는 만큼이나 자주 취소됐습니다. 2000년 무렵에는 여섯 개 중 하나 정도만 일정과 예산에 근접하게 마무리됐습니다.&lt;/p&gt;</description></item><item><title>에어컨이 있는 집에 제습기가 꼭 필요할까: 서울 13개월 온습도 데이터로 따져보기</title><link>https://philipjkim.cc/posts/20260728-do-you-need-a-dehumidifier-with-air-conditioner/</link><pubDate>Tue, 28 Jul 2026 10:08:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260728-do-you-need-a-dehumidifier-with-air-conditioner/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;장마철마다 반복되는 논쟁이 있습니다. 한쪽에서는 &amp;ldquo;에어컨 틀면 습도 다 잡히는데 제습기를 왜 사냐&amp;quot;고 하고, 다른 쪽에서는 &amp;ldquo;제습기 없이 여름을 나는 건 곰팡이를 키우겠다는 얘기&amp;quot;라고 합니다.&lt;/p&gt;
&lt;p&gt;두 주장 모두 부분적으로 맞고, 부분적으로 틀립니다. 문제는 이 논쟁이 대부분 체감과 경험담으로만 오간다는 점입니다. 그래서 &lt;strong&gt;2025년 7월 1일부터 2026년 7월 27일까지, 서울의 시간별 기온·습도 데이터 9,408시간분&lt;/strong&gt; 을 직접 받아 다음을 숫자로 따져봤습니다.&lt;/p&gt;</description></item><item><title>대부호부터 렉시오까지: 클라이밍 카드게임의 세계와 전략</title><link>https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/</link><pubDate>Mon, 27 Jul 2026 09:38:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20260727-climbing-card-games-daifugo-dalmuti-lexio/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="손패를-먼저-비우는-자가-이긴다"&gt;손패를 먼저 비우는 자가 이긴다&lt;/h2&gt;
&lt;p&gt;카드게임에는 여러 갈래가 있습니다. 포커처럼 좋은 조합을 만들어 겨루는 게임, 브리지나 스페이드처럼 정해진 수의 트릭을 따내는 게임, 그리고 손에 든 카드를 &lt;strong&gt;가장 먼저 다 털어내는&lt;/strong&gt; 것이 목표인 게임이 있습니다. 마지막 유형을 보드게임 용어로 &lt;strong&gt;셰딩 게임(shedding game)&lt;/strong&gt; 이라 부르고, 그중에서도 &amp;ldquo;이전 사람이 낸 것보다 더 센 조합을 내야만 한다&amp;quot;는 규칙을 가진 하위 갈래를 &lt;strong&gt;클라이밍 게임(climbing game)&lt;/strong&gt; 이라고 부릅니다. 국내에서는 가장 널리 알려진 게임의 이름을 따 &lt;strong&gt;대부호류(大富豪類)&lt;/strong&gt; 라고 뭉뚱그려 부르는 경우가 많은데, 엄밀히 말하면 대부호는 클라이밍 게임의 여러 갈래 중 하나입니다.&lt;/p&gt;</description></item><item><title>Marp: Markdown으로 발표 슬라이드를 만들고 Git으로 관리하기</title><link>https://philipjkim.cc/posts/20260723-marp-markdown-presentation/</link><pubDate>Thu, 23 Jul 2026 13:03:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20260723-marp-markdown-presentation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;발표 자료를 만들 때마다 PowerPoint나 Keynote를 열면서 &amp;ldquo;코드는 Git으로 관리하는데 슬라이드는 왜 바이너리 파일로 주고받아야 하지?&amp;ldquo;라는 생각을 해본 개발자라면, 이 글이 도움이 될 것입니다. 이미 README와 기술 문서를 Markdown으로 쓰고 있다면, 슬라이드도 같은 방식으로 만들 수 있습니다. 이 글에서는 &lt;strong&gt;Marp&lt;/strong&gt; (Markdown Presentation Ecosystem)을 소개합니다.&lt;/p&gt;
&lt;h2 id="marp란-무엇인가"&gt;Marp란 무엇인가&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://marp.app/"&gt;Marp&lt;/a&gt;은 Markdown 파일을 발표 슬라이드로 변환해주는 오픈소스 도구 모음입니다. 핵심 아이디어는 단순합니다:&lt;/p&gt;</description></item><item><title>번역글: 인간의 반격 — 신진서, 기신전에서 카타고를 2대 1로 꺾다</title><link>https://philipjkim.cc/posts/20260722-shin-jinseo-vs-katago-translation/</link><pubDate>Wed, 22 Jul 2026 18:53:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20260722-shin-jinseo-vs-katago-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 원문을 Claude Opus 4.8 을 이용해 번역한 뒤, 옮긴이가 신진서 기사 소개와 이세돌–알파고 대국 비교 섹션을 추가하고 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: StoneBase Team, &amp;ldquo;Humans Strike Back: Shin Jinseo Defeats KataGo 2–1 in the Kishin Match&amp;rdquo; (&lt;a href="https://gostonebase.com/blog/shin-jinseo-vs-katago-kishin-match/"&gt;gostonebase.com&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;이세돌이 알파고를 상대로 역사적인 1승을 거둔 지 10년, 인간 대 AI 바둑 역사의 또 다른 한 장이 서울에서 쓰였습니다. 세계 랭킹 1위이자 AI에 버금가는 정확함으로 &amp;ldquo;신공지능&amp;quot;이라 불리는 &lt;strong&gt;신진서 9단&lt;/strong&gt; 은, 최강 오픈소스 바둑 AI인 &lt;strong&gt;카타고(KataGo)&lt;/strong&gt; 와 2점 접바둑 3번기로 맞붙었습니다. 그리고 시리즈를 &lt;strong&gt;2대 1&lt;/strong&gt; 로 이겼습니다.&lt;/p&gt;</description></item><item><title>지구 가열, 지금 얼마나 심각한가 Part 4: 폭염·홍수·가뭄·폭설은 왜 이렇게 심해졌나</title><link>https://philipjkim.cc/posts/20260721-global-heating-crisis-04/</link><pubDate>Tue, 21 Jul 2026 14:05:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20260721-global-heating-crisis-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1에서는 지구 가열이 이미 진행 중인 관측 사실임을, Part 2에서는 그 원인이 인간에게 있고 앞으로 더 심각해질 수 있음을, Part 3에서는 인류가 어떤 대응을 하고 있는지를 정리했습니다.&lt;/p&gt;
&lt;p&gt;그런데 많은 분들이 실제로 체감하는 것은 &amp;ldquo;전 지구 평균 기온 1.5°C&amp;rdquo; 같은 숫자가 아닙니다. 지난 몇 년 사이 뉴스를 채운 것은 유럽의 기록적 폭염, 발렌시아를 삼킨 물, 아마존강의 바닥, 서울에 갑자기 쏟아진 눈이었습니다. 그리고 자연스럽게 이런 의문이 따라붙습니다.&lt;/p&gt;</description></item><item><title>번역글: 어느 사랑 이야기</title><link>https://philipjkim.cc/posts/20260720-a-love-story-translation/</link><pubDate>Mon, 20 Jul 2026 15:31:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260720-a-love-story-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Dave Thomas, Pragmatic Programmers Newsletter — &amp;ldquo;A Love Story&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;1990년대, Reddit도 Twitter도 Facebook도 나오기 전, 사실상 그 무엇도 존재하기 전에, 새로운 프로그래밍 언어를 찾아보는 곳은 comp.lang.misc 라는 Usenet 그룹이었습니다.&lt;/p&gt;
&lt;p&gt;사람들은 자신의 최신 창작물을 소스 코드 형태로 올렸습니다. 그것은 uuencode로 인코딩되어 여러 조각으로 나뉘어 있었습니다 (게시물에는 최대 크기 제한이 있었기 때문입니다). 어떤 언어를 써보고 싶으면, uuencode된 조각들을 전부 내려받아 이어 붙인 다음 디코딩해야 했습니다. 그러면 tar 파일이 나오고, 그것을 풀면 소스 코드가 나왔습니다. 그다음에는 &lt;code&gt;./configure&lt;/code&gt;를 돌아가게 만드는 즐거움이 기다리고 있었습니다.&lt;/p&gt;</description></item><item><title>HTTP REST(JSON) vs. gRPC(Protocol Buffers): 언제 무엇을 쓸까</title><link>https://philipjkim.cc/posts/20260716-http-rest-vs-grpc/</link><pubDate>Thu, 16 Jul 2026 17:33:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20260716-http-rest-vs-grpc/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;백엔드 서버를 설계할 때 거의 항상 마주치는 갈림길이 있습니다. &amp;ldquo;이 API 를 JSON 기반 HTTP REST 로 열까, 아니면 gRPC 로 열까?&amp;rdquo; 하는 질문입니다. 팀 컨벤션에 따라 별생각 없이 한쪽으로 정해지는 경우도 많지만, 두 방식은 성능·개발 경험·운영 부담·클라이언트 호환성 등 여러 축에서 뚜렷하게 다른 트레이드오프를 가집니다.&lt;/p&gt;
&lt;p&gt;이 글은 웹 백엔드를 다루는 중급 이상 개발자를 대상으로, 두 방식의 작동 원리와 장단점을 정리하고 &lt;strong&gt;&amp;ldquo;어떤 상황에서 무엇을 고르는 것이 합리적인지&amp;rdquo;&lt;/strong&gt; 를 구체적인 예시와 함께 설명합니다. 결론부터 말하면 &amp;ldquo;무조건 하나가 낫다&amp;quot;는 답은 없으며, &lt;strong&gt;통신의 상대가 누구인지(외부 클라이언트 vs. 내부 서비스)&lt;/strong&gt; 가 선택의 가장 강력한 기준이 됩니다.&lt;/p&gt;</description></item><item><title>오버워치 스토리 정주행 Part 3: 영웅들이 다시 모이다 — 재결성부터 최신 영웅까지</title><link>https://philipjkim.cc/posts/20260715-overwatch-story-03/</link><pubDate>Wed, 15 Jul 2026 17:01:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260715-overwatch-story-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2편에서 오버워치는 완전히 무너졌습니다. 영웅들은 흩어졌고, 조직의 이름은 불법이 되었으며, 어둠의 조직 탈론이 세계를 노리고 있었습니다. 세계는 다시 위기를 향해 굴러가는데, 그것을 막아설 오버워치는 어디에도 없었습니다.&lt;/p&gt;
&lt;p&gt;이 완결편은 그 절망 속에서 &lt;strong&gt;다시 피어나는 희망&lt;/strong&gt; 의 이야기입니다. 오버워치 게임을 처음 켰을 때 흘러나오는 그 유명한 시네마틱, &amp;ldquo;세계에는 영웅이 필요해(The world could always use more heroes)&amp;ldquo;라는 대사가 어디서 나온 것인지, 이제 그 순간에 도착합니다.&lt;/p&gt;</description></item><item><title>오버워치 스토리 정주행 Part 2: 영웅들의 조직은 어떻게 무너졌는가</title><link>https://philipjkim.cc/posts/20260715-overwatch-story-02/</link><pubDate>Wed, 15 Jul 2026 16:59:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20260715-overwatch-story-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;1편에서 우리는 오버워치가 세계를 구하고 &lt;strong&gt;20년의 황금기&lt;/strong&gt; 를 누리는 모습까지 지켜봤습니다. 그런데 오늘날 게임 속 오버워치는 공식적으로 &lt;strong&gt;해산된 불법 조직&lt;/strong&gt; 입니다. 세계의 영웅이었던 조직이 대체 어쩌다 범죄자 취급을 받게 된 걸까요.&lt;/p&gt;
&lt;p&gt;2편은 오버워치 세계관에서 가장 어둡고, 그래서 가장 매력적인 &lt;strong&gt;몰락의 연대기&lt;/strong&gt; 입니다. 해골 가면의 사신 &lt;strong&gt;리퍼(Reaper)&lt;/strong&gt;, 정체를 숨긴 자경단원 &lt;strong&gt;솔저: 76&lt;/strong&gt;, 그리고 세계를 위협하는 어둠의 조직 &lt;strong&gt;탈론(Talon)&lt;/strong&gt; — 이 모든 것이 바로 이 몰락에서 태어났습니다.&lt;/p&gt;</description></item><item><title>오버워치 스토리 정주행 Part 1: 세계가 무너지던 날, 오버워치가 태어났다</title><link>https://philipjkim.cc/posts/20260715-overwatch-story-01/</link><pubDate>Wed, 15 Jul 2026 16:57:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260715-overwatch-story-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;오버워치를 처음 켜면 화려한 영웅들이 총알을 주고받는 화면부터 마주하게 됩니다. 하지만 이 게임에는 총격전 뒤에 숨은 거대한 이야기가 있습니다. 왜 고릴라가 안경을 쓰고 과학자가 되었는지, 왜 해골 가면을 쓴 남자가 죽음의 사신처럼 돌아다니는지, 왜 파란 피부의 저격수가 감정 없이 방아쇠를 당기는지. 이 모든 것에는 이유가 있습니다.&lt;/p&gt;
&lt;p&gt;이 3부작 시리즈는 오버워치의 세계관을 &lt;strong&gt;소설처럼 편하게&lt;/strong&gt; 읽어 내려갈 수 있도록 정리한 글입니다. 게임을 더 깊이 즐기고 싶은 초보자를 위해, 공식 시네마틱과 코믹, 블리자드가 직접 밝힌 설정만을 바탕으로 이야기를 재구성했습니다. 그 첫 번째 편은 &lt;strong&gt;모든 것이 시작된 지점&lt;/strong&gt; — 세계가 무너지고, 그 폐허 위에서 영웅들의 조직이 태어나던 순간입니다.&lt;/p&gt;</description></item><item><title>넨도로이드 완전 가이드 Part 3: 입문자를 위한 실전 가이드</title><link>https://philipjkim.cc/posts/20260714-nendoroid-03/</link><pubDate>Tue, 14 Jul 2026 14:33:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260714-nendoroid-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260714-nendoroid-01/"&gt;Part 1&lt;/a&gt;에서 넨도로이드의 탄생을, &lt;a href="../20260714-nendoroid-02/"&gt;Part 2&lt;/a&gt;에서 인기의 분기점과 커뮤니티 문화를 살펴봤습니다. 마지막 이번 글은 &lt;strong&gt;&amp;ldquo;그래서 나도 하나 사보고 싶다&amp;rdquo;&lt;/strong&gt; 는 분을 위한 실전 가이드입니다. 구조와 특징부터 가격, 구매, 보관, 짝퉁 주의까지 순서대로 정리하겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="넨도로이드의-구조와-특징"&gt;넨도로이드의 구조와 특징&lt;/h2&gt;
&lt;p&gt;넨도로이드는 기본적으로 &lt;strong&gt;머리·어깨·팔·다리·허리·손목&lt;/strong&gt; 에 규격화된 관절이 있는 조립형 피규어입니다. 기본 크기는 약 10cm, 소재는 ABS·PVC 플라스틱입니다.&lt;/p&gt;
&lt;p&gt;핵심 특징은 &lt;strong&gt;교체와 조합&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;표정 교체&lt;/strong&gt;: 기본 표정 외에 2~3종의 얼굴 파츠가 기본 구성으로 들어와, 상황에 맞는 표정을 골라 끼울 수 있습니다. 굿스마일 전체 라인업의 표정 파츠는 5,000종이 넘는다고 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;포즈 연출&lt;/strong&gt;: 팔·다리 파츠를 바꾸거나(굽힌 다리 등), 소품·이펙트 파츠를 조합해 다양한 장면을 연출할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;호환성&lt;/strong&gt;: 부품 치수가 표준화되어 있어 다른 넨도로이드와 파츠를 바꿔 끼울 수 있습니다. Part 2에서 다룬 &amp;ldquo;규격화&amp;quot;의 실질적 혜택이지요.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;가동 방식에는 두 갈래가 있습니다.&lt;/p&gt;</description></item><item><title>넨도로이드 완전 가이드 Part 2: 인기의 분기점과 일·미·한 커뮤니티의 반응</title><link>https://philipjkim.cc/posts/20260714-nendoroid-02/</link><pubDate>Tue, 14 Jul 2026 14:31:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260714-nendoroid-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260714-nendoroid-01/"&gt;Part 1&lt;/a&gt;에서는 넨도로이드가 태어난 배경을 살펴봤습니다. 이번 글에서는 한 걸음 더 들어가, &lt;strong&gt;어떻게 이 손바닥만 한 피규어가 일본 서브컬처 상품 중 손꼽히는 판매량을 기록하게 되었는가&lt;/strong&gt;를 짚어봅니다. 넨도로이드의 성장은 완만한 우상향이 아니라, 몇 번의 결정적 분기점(tipping point)을 지나며 계단식으로 도약했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="넨도로이드는-지금-어느-정도인가"&gt;넨도로이드는 지금 어느 정도인가&lt;/h2&gt;
&lt;p&gt;먼저 규모 감각부터 맞춰 보겠습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;2009년 3월&lt;/strong&gt;: 누적 100만 개 판매 돌파&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2010년 7월&lt;/strong&gt;: 발매 종류 100종 돌파&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2013년 5월&lt;/strong&gt;: 300번째 제품(하츠네 미쿠 2.0) 발매&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2019년&lt;/strong&gt;: 1000번째 넨도로이드 — &lt;strong&gt;유키 미쿠(Snow Miku) Snow Princess ver.&lt;/strong&gt; (팬 투표로 선정)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2022년 7월&lt;/strong&gt;: 전 세계 누적 출하량 &lt;strong&gt;2,100만 개&lt;/strong&gt; 돌파&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2023년 2월 기준&lt;/strong&gt;: 발매 종류 &lt;strong&gt;2,000종&lt;/strong&gt; 돌파. 2000번째 제품은 《진격의 거인 The Final Season》의 &lt;strong&gt;엘런 예거&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;손바닥만 한 피규어 한 종류가 2,000가지 넘게 나왔고, 누적 출하량이 2천만 개를 넘겼다는 것은, 이 시장에서 넨도로이드가 차지하는 위상을 단적으로 보여줍니다. 일본 서브컬처 기반 상품 중 이 정도 판매량을 기록한 것은 사실상 &lt;strong&gt;건프라(건담 프라모델) 정도밖에 없습니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>넨도로이드 완전 가이드 Part 1: 일본 피규어 문화와 넨도로이드의 탄생</title><link>https://philipjkim.cc/posts/20260714-nendoroid-01/</link><pubDate>Tue, 14 Jul 2026 14:29:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260714-nendoroid-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;큰 머리에 작은 몸, 손바닥에 쏙 들어오는 10cm 남짓한 키. 표정을 통째로 갈아 끼우고, 팔다리를 뽑아 다른 포즈로 바꿔 세우는 이 귀여운 피규어의 이름은 &lt;strong&gt;넨도로이드(Nendoroid)&lt;/strong&gt; 입니다. 애니메이션·게임 캐릭터를 좋아하는 사람이라면 한 번쯤 책상 위나 모니터 옆에서 마주쳤을 그 물건이지요.&lt;/p&gt;
&lt;p&gt;이 글은 넨도로이드를 전혀 모르는 분부터, 이름은 들어봤지만 &amp;ldquo;대체 왜 이렇게까지 인기가 많은가&amp;quot;가 궁금한 분까지를 위한 소개 시리즈입니다. 총 3부로 나누어,&lt;/p&gt;</description></item><item><title>지구 가열, 지금 얼마나 심각한가 Part 3: 인류는 무엇을 하고 있나 — 국가·기업·과학의 대응과 '우주 차단막'</title><link>https://philipjkim.cc/posts/20260713-global-heating-crisis-03/</link><pubDate>Mon, 13 Jul 2026 15:55:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260713-global-heating-crisis-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1에서는 지구 가열이 지금 진행 중인 관측 사실임을, Part 2에서는 그것이 인간에게서 비롯됐고 앞으로 더 심각해질 수 있음을 확인했습니다. 그렇다면 인류는 손 놓고 있을까요. 그렇지 않습니다. 이 마지막 편에서는 급속한 지구 가열을 막기 위한 전 세계의 시도를 &lt;strong&gt;국가·국제, 기업, 학문·기술&lt;/strong&gt; 세 층위로 정리합니다. 특히 태양빛 자체를 가려보려는 &amp;ldquo;우주 차단막&amp;rdquo; 구상과 그 현재 상황을 따로 살펴봅니다.&lt;/p&gt;
&lt;p&gt;미리 큰 그림을 그리면, 대응은 크게 세 갈래입니다. ① &lt;strong&gt;완화(mitigation)&lt;/strong&gt; — 온실가스 배출을 줄이는 것, ② &lt;strong&gt;탄소 제거(removal)&lt;/strong&gt; — 이미 배출된 CO₂를 대기에서 걷어내는 것, ③ &lt;strong&gt;태양복사관리(SRM)&lt;/strong&gt; — 지구에 도달하는 햇빛을 줄여 온도만 낮추는 것. 이 중 근본 대책은 언제나 ①이며, 나머지는 보조 수단이라는 점을 먼저 짚어두겠습니다.&lt;/p&gt;</description></item><item><title>지구 가열, 지금 얼마나 심각한가 Part 2: 미래 전망과 '간빙기라 괜찮다'는 주장의 위험성</title><link>https://philipjkim.cc/posts/20260713-global-heating-crisis-02/</link><pubDate>Mon, 13 Jul 2026 15:42:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20260713-global-heating-crisis-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1에서는 2020년 이후 기온, 이산화탄소, 바다, 얼음, 생태계가 어떻게 동시에 신기록을 세우고 있는지를 데이터로 확인했습니다. Part 2에서는 두 가지를 다룹니다. 먼저 이 추세가 앞으로 얼마나 더 심각해질 수 있는지, 그다음 &amp;ldquo;지금은 간빙기라 자연스러운 현상일 뿐 인간이 초래한 것이 아니니 에너지를 마음껏 써도 된다&amp;quot;는 주장이 왜 과학적으로 틀렸고 위험한지를 짚습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-앞으로-얼마나-더-뜨거워질까"&gt;1. 앞으로 얼마나 더 뜨거워질까&lt;/h2&gt;
&lt;h3 id="현재-정책대로라면-금세기말-약-28c"&gt;현재 정책대로라면 금세기말 약 2.8°C&lt;/h3&gt;
&lt;p&gt;유엔환경계획(UNEP)의 2025년 배출 격차 보고서(Emissions Gap Report)에 따르면, &lt;strong&gt;현재의 정책을 그대로 유지할 경우 금세기말 지구 기온은 산업화 이전 대비 2.6~3.3°C 상승&lt;/strong&gt; 할 것으로 전망됩니다. 중앙값은 약 2.8°C입니다.&lt;/p&gt;</description></item><item><title>지구 가열, 지금 얼마나 심각한가 Part 1: 2020년 이후 데이터가 보여주는 현실</title><link>https://philipjkim.cc/posts/20260713-global-heating-crisis-01/</link><pubDate>Mon, 13 Jul 2026 15:40:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20260713-global-heating-crisis-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;폭염이 해마다 기록을 갈아치우고, 극지방의 얼음은 위성 관측 사상 최저치를 반복해서 경신하고 있습니다. &amp;ldquo;지구가 더워진다&amp;quot;는 말은 이제 미래의 경고가 아니라 지금 진행 중인 관측 사실입니다.&lt;/p&gt;
&lt;p&gt;이 글은 2편으로 나뉩니다. Part 1에서는 &lt;strong&gt;2020년부터 2026년 현재까지 지구 가열이 실제로 얼마나 진행됐는지&lt;/strong&gt; 를 최신 관측 데이터로 정리합니다. Part 2에서는 앞으로 얼마나 더 심각해질 수 있는지, 그리고 &amp;ldquo;지금은 간빙기라서 자연스러운 현상일 뿐 인간 탓이 아니다&amp;quot;라는 주장이 왜 위험한지를 과학적 근거로 다룹니다.&lt;/p&gt;</description></item><item><title>MBTI, 어디까지 믿어도 될까: 탄생 배경부터 신뢰도, 그리고 대안까지</title><link>https://philipjkim.cc/posts/20260709-mbti-personality-test-guide/</link><pubDate>Thu, 09 Jul 2026 09:52:24 +0900</pubDate><guid>https://philipjkim.cc/posts/20260709-mbti-personality-test-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&amp;ldquo;MBTI가 어떻게 되세요?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;처음 만난 자리에서 이 질문을 받아본 적이 있으실 겁니다. 혈액형이 차지하던 자리를 이제는 네 글자 알파벳이 대신하고 있습니다. 누군가는 연애 상대를 고르는 기준으로, 누군가는 회식 자리 아이스브레이킹 소재로, 또 누군가는 자기소개서의 한 줄로 MBTI를 씁니다.&lt;/p&gt;
&lt;p&gt;그런데 이 테스트, 대체 누가 만들었고 얼마나 믿을 만한 걸까요? 이 글에서는 MBTI의 탄생 배경, 16가지 유형, 심리학계에서의 실제 위상, 그리고 한국에서 유독 뜨거운 이유를 팩트에 기반해 짚어보고, 마지막으로 더 신뢰도 높은 대안 테스트 세 가지를 소개하겠습니다.&lt;/p&gt;</description></item><item><title>Re:제로부터 시작하는 이세계 생활 리뷰 Part 2: 매체별 비교와 애니 시즌 가이드, 전설의 18화와 '렘 현상'</title><link>https://philipjkim.cc/posts/20260708-rezero-review-02/</link><pubDate>Wed, 08 Jul 2026 11:03:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20260708-rezero-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260708-rezero-review-01/"&gt;Part 1&lt;/a&gt;에서는 리제로라는 작품과 작가 나가츠키 탓페이, 그리고 사망귀환이라는 능력과 주요 인물들을 소개했습니다. 이번 편에서는 조금 더 실용적인 이야기를 해보려 합니다. 리제로는 라이트노벨, 코믹스(만화), 애니메이션의 세 가지 매체로 즐길 수 있고, 애니메이션만 해도 2026년 현재 4기까지 이어집니다. 어떤 매체로 시작하는 것이 좋을지, 애니메이션은 어디까지 나왔는지, 그리고 리제로를 이야기할 때 빠지지 않는 &amp;ldquo;전설의 18화&amp;quot;와 &amp;ldquo;렘 현상&amp;rdquo;, 전 세계 팬들의 반응까지 정리해 보겠습니다.&lt;/p&gt;</description></item><item><title>Re:제로부터 시작하는 이세계 생활 리뷰 Part 1: 죽어서 되감는 소년, 작가와 작품·주요 인물 소개</title><link>https://philipjkim.cc/posts/20260708-rezero-review-01/</link><pubDate>Wed, 08 Jul 2026 11:01:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20260708-rezero-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-이세계에-왔는데-능력이-죽는-것뿐입니다"&gt;들어가며: 이세계에 왔는데, 능력이 &amp;lsquo;죽는 것&amp;rsquo;뿐입니다&lt;/h2&gt;
&lt;p&gt;이세계 전이물의 공식은 대체로 정해져 있습니다. 평범하던 주인공이 다른 세계로 넘어가 압도적인 치트 능력을 얻고, 아름다운 히로인들을 거느리며 마왕을 쓰러뜨리는 용사가 되어 갑니다. 앞서 이 블로그에서 소개한 &lt;a href="https://philipjkim.cc/posts/20260702-youjo-senki-review-01/"&gt;유녀전기&lt;/a&gt;는 하드보일드 전쟁물로, &lt;a href="https://philipjkim.cc/posts/20260706-overlord-review-01/"&gt;오버로드&lt;/a&gt;는 악역이 주인공인 다크 판타지로, &lt;a href="https://philipjkim.cc/posts/20260707-konosuba-review-01/"&gt;코노스바&lt;/a&gt;는 유쾌한 셀프 패러디로 그 공식을 각자의 방식으로 비틀었습니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Re:제로부터 시작하는 이세계 생활(Re:ゼロから始める異世界生活)&lt;/code&gt;, 통칭 &lt;strong&gt;리제로(リゼロ)&lt;/strong&gt; 는 같은 공식을 가장 잔혹한 방식으로 비틉니다. 주인공 나츠키 스바루는 편의점에 다녀오는 길에 갑자기 이세계로 소환되지만, 그를 부른 사람도 없고 치트 능력도 없습니다. 전투력은 &amp;ldquo;지나가던 일반 시민 A&amp;quot;에 무한히 수렴하는 평범한 고등학생일 뿐입니다. 그가 이 세계에서 손에 넣은 유일한 힘은, &lt;strong&gt;죽으면 시간이 특정 지점으로 되감기는&lt;/strong&gt; 능력 하나뿐입니다.&lt;/p&gt;</description></item><item><title>이 멋진 세계에 축복을! 리뷰 Part 2: 매체별 비교와 애니 시즌 가이드, '작화 논란'의 진실과 팬덤 반응</title><link>https://philipjkim.cc/posts/20260707-konosuba-review-02/</link><pubDate>Tue, 07 Jul 2026 10:04:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20260707-konosuba-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260707-konosuba-review-01/"&gt;Part 1&lt;/a&gt;에서는 코노스바라는 작품과 작가 아카츠키 나츠메, 그리고 카즈마 파티의 폐급 네 사람을 소개했습니다. 이번 편에서는 조금 더 실용적인 이야기를 해보려 합니다. 코노스바는 라이트노벨, 코믹스(만화), 애니메이션의 세 가지 매체로 즐길 수 있고, 애니메이션만 해도 세 시즌에 극장판과 스핀오프까지 이어집니다. 어떤 매체로 시작하는 것이 좋을지, 애니메이션은 어디까지 나왔는지, 그리고 코노스바를 이야기할 때 빠지지 않는 &amp;ldquo;작화 논란&amp;quot;의 진실과 전 세계 팬들의 반응까지 정리해 보겠습니다.&lt;/p&gt;</description></item><item><title>이 멋진 세계에 축복을! 리뷰 Part 1: 작가·작품 소개와 매력, 그리고 폐급 파티</title><link>https://philipjkim.cc/posts/20260707-konosuba-review-01/</link><pubDate>Tue, 07 Jul 2026 10:01:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260707-konosuba-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-이세계에-왔는데-왜-막노동을-하죠"&gt;들어가며: 이세계에 왔는데 왜 막노동을 하죠?&lt;/h2&gt;
&lt;p&gt;이세계 전이물의 공식은 대체로 정해져 있습니다. 평범하던 주인공이 다른 세계로 넘어가 압도적인 치트 능력을 얻고, 아름다운 히로인들을 거느리며 마왕을 쓰러뜨리는 용사가 되어 갑니다. 앞서 이 블로그에서 소개한 &lt;a href="https://philipjkim.cc/posts/20260702-youjo-senki-review-01/"&gt;유녀전기&lt;/a&gt;나 &lt;a href="https://philipjkim.cc/posts/20260706-overlord-review-01/"&gt;오버로드&lt;/a&gt;는 그 공식을 진지한 얼굴로 비틀었습니다. 한쪽은 하드보일드 전쟁물로, 다른 한쪽은 악역이 주인공인 다크 판타지로 말이죠.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;이 멋진 세계에 축복을!(この素晴らしい世界に祝福を!)&lt;/code&gt;, 통칭 &lt;strong&gt;코노스바(このすば)&lt;/strong&gt; 는 같은 공식을 전혀 다른 방식으로 비틉니다. 바로 &lt;strong&gt;웃음&lt;/strong&gt; 으로요. 주인공은 이세계에 전이하자마자 치트 능력을 얻기는커녕, 당장 먹고 잘 곳이 없어 공사장에서 막노동부터 시작합니다. 함께 이세계로 데려온 여신은 세상에 둘도 없는 민폐 트러블메이커이고, 어렵게 모은 동료들은 하나같이 어딘가 심각하게 고장 나 있습니다. 마왕 토벌이라는 거창한 목표는 저 멀리 있고, 눈앞의 현실은 빚 갚기와 끼니 걱정입니다.&lt;/p&gt;</description></item><item><title>오버로드 리뷰 Part 2: 매체별 비교와 애니 시즌 가이드, 일본·영어권 팬덤 반응</title><link>https://philipjkim.cc/posts/20260706-overlord-review-02/</link><pubDate>Mon, 06 Jul 2026 14:50:29 +0900</pubDate><guid>https://philipjkim.cc/posts/20260706-overlord-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260706-overlord-review-01/"&gt;Part 1&lt;/a&gt;에서는 오버로드라는 작품과 작가 마루야마 쿠가네, 그리고 나자릭 지하대분묘의 주요 인물들을 소개했습니다. 이번 편에서는 조금 더 실용적인 이야기를 해보려 합니다. 오버로드는 라이트노벨, 코믹스(만화), 애니메이션의 세 가지 매체로 즐길 수 있고, 애니메이션만 해도 네 시즌에 극장판까지 이어집니다. 어떤 매체로 시작하는 것이 좋을지, 애니메이션은 어디까지 나왔고 무엇을 주의해야 하는지, 그리고 전 세계 팬들은 이 작품을 어떻게 보고 있는지 정리해 보겠습니다.&lt;/p&gt;</description></item><item><title>오버로드 리뷰 Part 1: 먼치킨 이세계물의 안티테제, 작가와 작품·주요 인물 소개</title><link>https://philipjkim.cc/posts/20260706-overlord-review-01/</link><pubDate>Mon, 06 Jul 2026 14:46:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20260706-overlord-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-주인공이-악역인-이세계물"&gt;들어가며: 주인공이 악역인 이세계물&lt;/h2&gt;
&lt;p&gt;이세계 전이물의 공식은 대체로 정해져 있습니다. 평범하던 주인공이 다른 세계로 넘어가 압도적인 힘을 얻고, 그 힘으로 원주민들을 도우며 영웅이 되어 갑니다. 주인공이 무슨 짓을 하든 대개는 &amp;ldquo;정의&amp;quot;라는 이름으로 정당화되죠.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;오버로드(オーバーロード)&lt;/code&gt;는 바로 그 공식을 정면으로 비틀기 위해 쓰인 작품입니다. 주인공은 인간이 아니라 살아 움직이는 해골, 즉 언데드 매직 캐스터입니다. 부하들은 하나같이 인간을 인간으로 보지 않는 괴물들이고, 이들이 이세계에서 벌이는 일은 &amp;ldquo;세계 정복&amp;quot;입니다. 주인공은 용사가 아니라, 누가 봐도 마왕(魔王) 쪽에 가까운 존재입니다.&lt;/p&gt;</description></item><item><title>유녀전기 리뷰 Part 2: 라노벨·코믹스·애니 비교와 일본·미국 팬덤 반응</title><link>https://philipjkim.cc/posts/20260702-youjo-senki-review-02/</link><pubDate>Thu, 02 Jul 2026 12:27:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20260702-youjo-senki-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260702-youjo-senki-review-01/"&gt;Part 1&lt;/a&gt;에서는 유녀전기라는 작품과 작가 카를로 젠, 그리고 주요 등장인물을 소개했습니다. 이번 편에서는 조금 더 실용적인 이야기를 해보려 합니다. 유녀전기는 라이트노벨, 코믹스(만화), 애니메이션의 세 가지 매체로 즐길 수 있는데, 각각 성격이 꽤 다릅니다. 어떤 매체로 시작하는 것이 좋을지, 그리고 전 세계 팬들은 이 작품을 어떻게 보고 있는지 정리해 보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="세-가지-매체-세-가지-경험"&gt;세 가지 매체, 세 가지 경험&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;매체&lt;/th&gt;
 &lt;th&gt;작화/구성&lt;/th&gt;
 &lt;th&gt;장점&lt;/th&gt;
 &lt;th&gt;단점&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;라이트노벨 (원작)&lt;/td&gt;
 &lt;td&gt;카를로 젠 글, 시노츠키 시노부 삽화&lt;/td&gt;
 &lt;td&gt;가장 방대하고 깊은 서사, 원전&lt;/td&gt;
 &lt;td&gt;빽빽한 서술과 잦은 시점 전환으로 가독성이 낮음&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;코믹스 (만화)&lt;/td&gt;
 &lt;td&gt;토조 치카 작화&lt;/td&gt;
 &lt;td&gt;원작에 충실하면서도 이해하기 쉬움, 호평&lt;/td&gt;
 &lt;td&gt;진도가 매우 느림&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;애니메이션&lt;/td&gt;
 &lt;td&gt;스튜디오 NUT 제작&lt;/td&gt;
 &lt;td&gt;뛰어난 전투 연출, 명곡 OP/ED&lt;/td&gt;
 &lt;td&gt;캐릭터 디자인 호불호, 원작 축약&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="라이트노벨-원작"&gt;라이트노벨 (원작)&lt;/h3&gt;
&lt;p&gt;모든 것의 출발점입니다. 가장 방대하고 깊이 있는 서사를 담고 있지만, Part 1에서 언급했듯 빽빽한 서술과 잦은 시점 전환 탓에 가독성이 결코 좋다고 하기는 어렵습니다. 밀리터리와 세계사 지식이 있고 이런 문체를 즐길 수 있는 독자라면 정신없이 빠져들겠지만, 그렇지 않다면 진입 장벽이 높은 편입니다.&lt;/p&gt;</description></item><item><title>유녀전기 리뷰 Part 1: 작가·작품 소개와 매력, 그리고 주요 인물들</title><link>https://philipjkim.cc/posts/20260702-youjo-senki-review-01/</link><pubDate>Thu, 02 Jul 2026 12:25:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20260702-youjo-senki-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-제목에-속지-마세요"&gt;들어가며: 제목에 속지 마세요&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;유녀전기(幼女戦記)&lt;/code&gt;. 글자 그대로 옮기면 &amp;ldquo;어린 소녀의 전쟁 기록&amp;quot;입니다. 표지에는 금발벽안의 어린 소녀가 그려져 있고, 띠지에서도 &amp;ldquo;유녀&amp;quot;를 끊임없이 강조합니다. 그래서 귀여운 소녀가 활약하는 아기자기한 이야기를 기대하고 책을 집어 든다면, 아마 첫 장을 넘긴 지 얼마 지나지 않아 &amp;ldquo;낚였다&amp;quot;는 느낌을 받게 될 것입니다.&lt;/p&gt;
&lt;p&gt;유녀전기는 모에(萌え) 계통과는 완전히 담을 쌓은 하드보일드 전쟁물입니다. 이세계 전생이라는 요즘 유행하는 장르의 외피를 두르고 있지만, 그 안에서 벌어지는 것은 20세기 초 세계대전을 빼닮은 총력전이며, 주인공은 &amp;ldquo;어린 소녀의 탈을 뒤집어쓴 괴물&amp;quot;입니다.&lt;/p&gt;</description></item><item><title>이세계 콰르텟 1기 깊이 보기 Part 2: 네 세계의 화학반응과 팬들의 반응</title><link>https://philipjkim.cc/posts/20260630-isekai-quartet-s1-02/</link><pubDate>Tue, 30 Jun 2026 13:15:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260630-isekai-quartet-s1-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260630-isekai-quartet-s1-01/"&gt;Part 1&lt;/a&gt;에서는 이세계 콰르텟이라는 작품의 정체와, 1기에 모인 네 작품 — 코노스바, 오버로드, Re:제로, 유녀전기 — 이 &lt;strong&gt;카도카와의 간판 이세계 IP&lt;/strong&gt;라는 공통분모로 묶였다는 사실, 그리고 각 작품과 캐릭터의 역할을 살펴봤습니다.&lt;/p&gt;
&lt;p&gt;Part 2에서는 본론으로 들어갑니다. 평소라면 절대 마주칠 일 없던 네 세계의 캐릭터들이 &lt;strong&gt;한 교실에서 어떻게 부딪치고 섞이는지&lt;/strong&gt;, 그 과정에서 어떤 조합이 팬들의 마음을 사로잡았는지, 그리고 북미·일본·한국 팬들의 실제 반응은 어땠는지를 정리하겠습니다.&lt;/p&gt;</description></item><item><title>이세계 콰르텟 1기 깊이 보기 Part 1: 네 작품이 한 교실에 모인 이유</title><link>https://philipjkim.cc/posts/20260630-isekai-quartet-s1-01/</link><pubDate>Tue, 30 Jun 2026 13:12:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260630-isekai-quartet-s1-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-이세계로-또-한-번"&gt;들어가며: &amp;lsquo;이세계로 또 한 번&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;이세계물(異世界もの)이라는 장르는 2010년대 일본 애니메이션을 상징하는 키워드가 되었습니다. 현실 세계의 평범한 사람이 어느 날 갑자기 다른 세계로 떨어져 모험을 펼친다는 이 익숙한 공식은, 수많은 라이트노벨과 애니메이션을 통해 하나의 거대한 산맥을 이루었습니다.&lt;/p&gt;
&lt;p&gt;그런데 만약, 서로 다른 이세계에서 각자의 사연을 안고 살아가던 주인공들이 &lt;strong&gt;또 한 번&lt;/strong&gt; 낯선 세계로 떨어진다면 어떨까요. 그것도 마왕을 무찌르는 모험의 세계가 아니라, 출석을 부르고 시험을 치고 반장 선거를 하는 &lt;strong&gt;학교&lt;/strong&gt;라면요.&lt;/p&gt;</description></item><item><title>오버워치 깊이 보기 Part 3: 북미 vs 한국, 그리고 오버워치의 현재와 미래</title><link>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-03/</link><pubDate>Mon, 29 Jun 2026 11:05:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260629-overwatch-deep-dive-01"&gt;Part 1&lt;/a&gt;에서는 오버워치의 역사를, &lt;a href="../20260629-overwatch-deep-dive-02"&gt;Part 2&lt;/a&gt;에서는 게임 방식과 역할군을 들여다봤습니다. 마지막 3부에서는 시선을 게임 밖으로 돌립니다.&lt;/p&gt;
&lt;p&gt;같은 오버워치라도 어느 지역에서 플레이하느냐에 따라 분위기가 사뭇 다릅니다. 특히 &lt;strong&gt;북미와 한국&lt;/strong&gt; 은 게임을 대하는 태도부터 플레이 스타일, e스포츠 문화까지 흥미로운 대조를 보입니다. 이번 글에서는 두 게이밍 문화를 비교하고, 마블 라이벌즈라는 강력한 경쟁자의 등장, 그리고 &amp;ldquo;2&amp;quot;를 떼어낸 오버워치의 현재와 미래를 짚어 보겠습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;미리 일러두자면, 아래의 지역 비교는 어디까지나 &lt;strong&gt;커뮤니티 담론과 언론 보도에서 관찰되는 경향&lt;/strong&gt; 이지, 모든 개인에게 적용되는 사실이 아닙니다. 한국에도 느긋하게 즐기는 플레이어가 많고, 북미에도 살벌하게 랭크에 매달리는 플레이어가 많습니다. 일반화의 함정을 경계하며 읽어 주시기 바랍니다.&lt;/p&gt;</description></item><item><title>오버워치 깊이 보기 Part 2: 영웅 슈터란 무엇인가 — 게임 방식과 역할군 비교</title><link>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-02/</link><pubDate>Mon, 29 Jun 2026 11:03:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260629-overwatch-deep-dive-01"&gt;Part 1&lt;/a&gt;에서는 오버워치의 파란만장한 역사를 따라가 봤습니다. 그런데 그 모든 우여곡절의 한가운데에는, 다른 어떤 FPS와도 구별되는 &lt;strong&gt;오버워치만의 독특한 게임 방식&lt;/strong&gt; 이 자리 잡고 있습니다.&lt;/p&gt;
&lt;p&gt;오버워치를 처음 접한 사람들은 종종 이렇게 말합니다. &amp;ldquo;FPS인데 에임만으로는 이길 수가 없네?&amp;rdquo; 맞습니다. 오버워치는 총을 쏘는 게임이지만, 정확히 말하면 &lt;strong&gt;영웅 슈터(Hero Shooter)&lt;/strong&gt; 라는 별도의 장르에 속합니다. 이번 2부에서는 영웅 슈터가 정확히 무엇인지, 오버워치가 카운터스트라이크나 콜 오브 듀티 같은 전통 FPS와 무엇이 다른지, 그리고 게임의 핵심인 탱커·딜러·힐러 세 역할군이 각각 어떤 매력과 고충을 지니는지를 들여다보겠습니다.&lt;/p&gt;</description></item><item><title>오버워치 깊이 보기 Part 1: 탄생과 영광, 그리고 추락과 재기</title><link>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-01/</link><pubDate>Mon, 29 Jun 2026 11:00:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20260629-overwatch-deep-dive-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2016년에 출시된 블리자드의 &lt;strong&gt;오버워치(Overwatch)&lt;/strong&gt; 는 단순한 FPS 한 편이 아니었습니다. 출시 첫 해에만 100개가 넘는 &amp;ldquo;올해의 게임&amp;quot;을 휩쓸며 영웅 슈터(Hero Shooter)라는 장르를 대중의 거실로 끌어들였고, 한때는 e스포츠의 미래로까지 불렸습니다. 그러나 그로부터 10년이 지난 지금, 오버워치는 영광과 좌절, 배신감과 재기 시도가 뒤엉킨 롤러코스터 같은 역사를 가진 게임이 되었습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈는 총 3부에 걸쳐 오버워치라는 게임을 깊이 들여다봅니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Part 1 (이 글)&lt;/strong&gt;: 탄생과 영광, 오버워치 리그의 흥망, 오버워치 2 전환과 각종 논란&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 2&lt;/strong&gt;: 영웅 슈터란 무엇인가 — 게임 방식, 다른 FPS와의 차별점, 탱커·딜러·힐러 역할군 비교&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 3&lt;/strong&gt;: 북미 vs 한국 게이밍 문화, 그리고 오버워치의 현재와 미래&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1부에서는 오버워치가 어떻게 태어났고, 어떻게 정점에 올랐다가, 왜 한때 &amp;ldquo;스팀 역사상 최악의 평가&amp;quot;라는 오명을 뒤집어썼는지, 그리고 지금 어떻게 다시 일어서려 하는지를 시간순으로 따라가 보겠습니다.&lt;/p&gt;</description></item><item><title>배우는 부분들로 이루어진 배우는 시스템 — Kent Beck × Jessica Kerr 대담 정리</title><link>https://philipjkim.cc/posts/20260626-symmathesy-kent-beck-jessica-kerr/</link><pubDate>Fri, 26 Jun 2026 09:56:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260626-symmathesy-kent-beck-jessica-kerr/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 좋은 리소스를 귀띔해 주신 Luis 님께 감사드립니다. 덕분에 &amp;lsquo;symmathesy&amp;rsquo; 를 몇 번이나 소리 내어 발음해 봤는지 모릅니다 — 혀는 여전히 꼬이지만, 개념만큼은 또렷하게 남았습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Kent Beck 이 진행하는 팟캐스트 &lt;a href="https://newsletter.kentbeck.com/p/a-learning-system-made-of-learning"&gt;&lt;em&gt;Still Burning&lt;/em&gt;&lt;/a&gt; 의 일곱 번째 에피소드 &lt;a href="https://www.youtube.com/watch?v=e9TABQqiDXU"&gt;&lt;em&gt;A Learning System Made of Learning Parts&lt;/em&gt;&lt;/a&gt; 는, &lt;em&gt;&amp;ldquo;여전히 마음을 쓰고(still care) 여전히 무언가를 하고 있는 괴짜들&amp;rdquo;&lt;/em&gt; 을 위한 자리라는 이 시리즈의 취지에 꼭 맞는 대담입니다. 손님은 Kent 의 오랜 친구이자 시스템 사고(systems thinking)로 잘 알려진 개발자 &lt;strong&gt;Jessica Kerr&lt;/strong&gt;(jessitron) 입니다.&lt;/p&gt;</description></item><item><title>번역글: 아웃소싱, AI, 그리고 작은 희망</title><link>https://philipjkim.cc/posts/20260625-outsourcing-ai-and-a-little-hope-translation/</link><pubDate>Thu, 25 Jun 2026 07:45:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20260625-outsourcing-ai-and-a-little-hope-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Dave Thomas, Pragmatic Programmers Newsletter — &amp;ldquo;Outsourcing, AI, and a Little Hope&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;1990년대와 2000년대에 이 업계에 몸담았다면, 아웃소싱을 둘러싼 그 소동을 잘 알고 계실 겁니다.&lt;/p&gt;
&lt;p&gt;기업들은 미국과 서유럽 바깥의 개발자들에게 대체로 더 적은 임금을 준다는 사실을 깨달았습니다. 그리고 개발자란 그저 자원에 불과하니, 개발 업무를 해외로 보내버리면 돈을 왕창 아낄 수 있다고 생각했습니다.&lt;/p&gt;
&lt;p&gt;한동안 미국과 유럽의 개발자들은 공황에 빠졌습니다. &amp;ldquo;저 멀리 어퍼 호피스탄(Upper Hopistan)에서 하루 1.5달러를 받는 어떤 코더에게 내 일자리를 빼앗기겠구나.&amp;rdquo;&lt;/p&gt;</description></item><item><title>2021년의 Go를 2026년의 Go로 Part 3: 동시성·런타임·운영 레시피</title><link>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-03/</link><pubDate>Wed, 24 Jun 2026 10:15:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="../20260624-go-2021-to-2026-recipes-01/"&gt;Part 1&lt;/a&gt;에서 언어와 문법을, &lt;a href="../20260624-go-2021-to-2026-recipes-02/"&gt;Part 2&lt;/a&gt;에서 표준 라이브러리를 다뤘습니다. 시리즈의 마지막인 Part 3은 &lt;strong&gt;동시성·런타임·툴체인·운영&lt;/strong&gt; 입니다. 코드 한 줄의 변화라기보다, &amp;ldquo;서비스를 어떻게 돌리고 어떻게 검증하느냐&amp;quot;에 가까운 영역입니다.&lt;/p&gt;
&lt;p&gt;이 영역의 변화는 특히 컨테이너/쿠버네티스 환경에서 Go 서비스를 운영하는 팀에게 의미가 큽니다. 2021년에는 서드파티 라이브러리나 수작업으로 메우던 빈틈을, 이제 표준 런타임이 채워 줍니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="레시피-1-수동-취소타임아웃-관리-대신-context-신규-api-121"&gt;레시피 1: 수동 취소·타임아웃 관리 대신 &lt;code&gt;context&lt;/code&gt; 신규 API (1.21)&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;context&lt;/code&gt; 는 1.7부터 있었지만, 실무에서 반복되던 몇 가지 패턴을 표준으로 흡수한 것은 1.21입니다.&lt;/p&gt;</description></item><item><title>2021년의 Go를 2026년의 Go로 Part 2: 표준 라이브러리 레시피</title><link>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-02/</link><pubDate>Wed, 24 Jun 2026 10:13:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="../20260624-go-2021-to-2026-recipes-01/"&gt;Part 1&lt;/a&gt;에서는 제네릭, 이터레이터, 빌트인 등 언어와 문법 레벨의 변화를 다뤘습니다. Part 2는 일상 코드에서 가장 손이 자주 가는 &lt;strong&gt;표준 라이브러리&lt;/strong&gt; 의 레시피입니다.&lt;/p&gt;
&lt;p&gt;2021~22년의 Go 표준 라이브러리는 의외로 빈약했습니다. 슬라이스에서 원소를 찾으려면 &lt;code&gt;for&lt;/code&gt; 루프를 직접 돌렸고, 맵의 키를 모으려면 손으로 슬라이스를 채웠으며, 정렬은 &lt;code&gt;sort.Slice&lt;/code&gt; 에 비교 함수를 넘겼습니다. 구조적 로깅을 하려면 &lt;code&gt;logrus&lt;/code&gt;, &lt;code&gt;zap&lt;/code&gt; 같은 서드파티가 사실상 필수였고, HTTP 라우팅에서 메서드와 경로 파라미터를 다루려면 &lt;code&gt;gorilla/mux&lt;/code&gt; 를 깔았습니다.&lt;/p&gt;</description></item><item><title>2021년의 Go를 2026년의 Go로 Part 1: 언어와 문법 레시피</title><link>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-01/</link><pubDate>Wed, 24 Jun 2026 10:11:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20260624-go-2021-to-2026-recipes-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-5년-동안-go에-무슨-일이-있었나"&gt;들어가며: 5년 동안 Go에 무슨 일이 있었나&lt;/h2&gt;
&lt;p&gt;2021~22년에 Go로 서비스를 짜던 시절을 떠올려 봅니다. 그때 우리가 쓰던 버전은 대략 Go 1.16~1.18 언저리였습니다. 제네릭이 없거나(1.18 이전), 갓 도입되어 아직 손에 익지 않았고, &lt;code&gt;interface{}&lt;/code&gt; 와 &lt;code&gt;sort.Slice&lt;/code&gt;, &lt;code&gt;for _, v := range xs { v := v; ... }&lt;/code&gt; 같은 관용구가 일상이었습니다.&lt;/p&gt;
&lt;p&gt;그로부터 8개의 메이저 릴리스(1.19부터 1.26까지)가 지났습니다. 2026년 6월 현재 stable 버전은 &lt;strong&gt;2026년 2월에 나온 Go 1.26&lt;/strong&gt; 입니다. 이 5년 사이에 언어 자체, 표준 라이브러리, 런타임, 툴체인이 모두 크게 달라졌습니다. 문제는 코드베이스가 그만큼 따라가지 못한다는 점입니다. 많은 프로덕션 코드가 여전히 &amp;ldquo;그때 그렇게 짜던 방식&amp;quot;으로 멈춰 있습니다.&lt;/p&gt;</description></item><item><title>게임 디자인과 랜덤성의 수학 Part 3: 게임이론과 시뮬레이션으로 밸런스를 검증하기</title><link>https://philipjkim.cc/posts/20260623-randomness-in-game-design-03/</link><pubDate>Tue, 23 Jun 2026 14:01:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20260623-randomness-in-game-design-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260623-randomness-in-game-design-01/"&gt;1편&lt;/a&gt;에서 랜덤성의 역할과 실패 사례를, &lt;a href="../20260623-randomness-in-game-design-02/"&gt;2편&lt;/a&gt;에서 확률 분포의 수학을 다뤘습니다. 완결편인 3편에서는 무대를 옮깁니다. 지금까지의 무작위성이 &amp;ldquo;주사위&amp;rdquo; 였다면, 이번엔 &lt;strong&gt;상대가 있는 무작위성&lt;/strong&gt; — 즉 &lt;strong&gt;게임이론(game theory)&lt;/strong&gt; 입니다. 그리고 그렇게 설계한 밸런스가 실제로 작동하는지 검증하는, 현대 스튜디오의 &lt;strong&gt;시뮬레이션 기반 검증 테크트리&lt;/strong&gt; 를 정리합니다.&lt;/p&gt;
&lt;p&gt;핵심 질문 두 개를 미리 던져 두겠습니다. &lt;strong&gt;&amp;ldquo;왜 최적의 가위바위보 플레이는 무작위화를 &lt;em&gt;강제&lt;/em&gt; 하는가?&amp;rdquo;&lt;/strong&gt; 그리고 &lt;strong&gt;&amp;ldquo;수백만 판을 사람이 할 수 없다면, 밸런스는 어떻게 검증하는가?&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>게임 디자인과 랜덤성의 수학 Part 2: 확률 분포로 드랍률·가챠·천장 설계하기</title><link>https://philipjkim.cc/posts/20260623-randomness-in-game-design-02/</link><pubDate>Tue, 23 Jun 2026 13:57:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20260623-randomness-in-game-design-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260623-randomness-in-game-design-01/"&gt;1편&lt;/a&gt;에서는 거시적인 관점에서 게임 속 랜덤성의 역할과 실패 사례, 그리고 통제된 무작위성의 도구 상자를 개념 수준으로 훑었습니다. 2편에서는 그 도구들의 &lt;strong&gt;수학적 속살&lt;/strong&gt; 을 직접 펼쳐 봅니다. 확률 분포가 게임의 드랍률·가챠·천장 시스템을 어떻게 결정하는지, 실제 수식과 계산 예제로 분해하겠습니다.&lt;/p&gt;
&lt;p&gt;이 글을 관통하는 단 하나의 관점을 미리 못 박아 두겠습니다. &lt;strong&gt;좋은 무작위 설계란 결국 &amp;ldquo;기댓값 E[X]는 고정한 채, 분산 Var(X)을 조작하는 일&amp;rdquo;&lt;/strong&gt; 입니다. 평균 보상은 그대로 두고 변동성만 깎는 것 — 이 한 문장이 PRD·천장·셔플백·2RN 을 모두 꿰뚫습니다.&lt;/p&gt;</description></item><item><title>게임 디자인과 랜덤성의 수학 Part 1: 랜덤성은 왜 게임의 심장이자 지뢰밭인가</title><link>https://philipjkim.cc/posts/20260623-randomness-in-game-design-01/</link><pubDate>Tue, 23 Jun 2026 13:26:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260623-randomness-in-game-design-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;주사위를 굴리고, 카드를 섞고, 전리품 상자를 여는 순간. 우리가 게임에서 가장 짜릿하거나 가장 분통 터지는 경험을 하는 거의 모든 장면에는 &lt;strong&gt;랜덤성(randomness)&lt;/strong&gt; 이 숨어 있습니다. 그런데 이 랜덤성은 단순히 &amp;ldquo;난수 생성기를 호출하는 코드 한 줄&amp;quot;이 아닙니다. 잘못 다루면 수백만 명이 등을 돌리고, 잘 다루면 같은 게임을 수천 시간 반복하게 만드는, 게임 디자인에서 가장 미묘하고 위험한 영역입니다.&lt;/p&gt;
&lt;p&gt;이 글은 &lt;strong&gt;게임 디자인과 랜덤성의 수학&lt;/strong&gt; 3부작의 1편입니다. 이번 편에서는 거시적인 관점에서 다음을 다룹니다.&lt;/p&gt;</description></item><item><title>맨발의 디바, 세자리아 에보라: 카보베르데가 맨발로 세계를 정복한 이야기</title><link>https://philipjkim.cc/posts/20260622-cesaria-evora/</link><pubDate>Mon, 22 Jun 2026 12:44:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260622-cesaria-evora/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;대서양 한가운데, 서아프리카 세네갈에서 서쪽으로 약 600km 떨어진 곳에 카보베르데(Cabo Verde)라는 작은 섬나라가 있습니다. 인구는 약 50만 명. 화산섬 열 개로 이루어진 이 나라를 세계 지도 위에 올려놓은 사람이 바로 세자리아 에보라(Cesária Évora, 1941~2011)입니다.&lt;/p&gt;
&lt;p&gt;무대 위에서 늘 신발을 벗고 맨발로 노래했기에 사람들은 그녀를 &lt;strong&gt;&amp;ldquo;맨발의 디바(the Barefoot Diva)&amp;rdquo;&lt;/strong&gt; 라 불렀습니다. 또한 카보베르데 전통 음악 &amp;lsquo;모르나(morna)&amp;lsquo;를 세계 무대에 알린 공로로 &lt;strong&gt;&amp;ldquo;모르나의 여왕(Queen of Morna)&amp;rdquo;&lt;/strong&gt; 이라는 칭호도 얻었습니다. 흥미로운 것은, 그녀가 세계적 스타가 된 시점이 &lt;strong&gt;50세가 다 되어서&lt;/strong&gt; 였다는 사실입니다. 그 전 수십 년은 가난과 무명, 알코올 의존으로 점철된 &amp;lsquo;어두운 시절&amp;rsquo;이었습니다.&lt;/p&gt;</description></item><item><title>리얼(リアル, REAL) 리뷰 Part 2: 감상 포인트, 슬램덩크와의 관계, 그리고 느린 걸음의 연재</title><link>https://philipjkim.cc/posts/20260619-real-review-02/</link><pubDate>Fri, 19 Jun 2026 10:35:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20260619-real-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1에서는 《리얼》의 기본 정보와 세 주인공, 그리고 작가의 취재와 장애 묘사 방식을 살펴보았습니다. Part 2에서는 작품을 더 깊이 즐길 수 있는 감상 포인트와 《슬램덩크》와의 관계, 그리고 많은 독자가 궁금해하는 &lt;strong&gt;연재 현황&lt;/strong&gt; 을 정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-감상에-도움이-되는-포인트"&gt;4. 감상에 도움이 되는 포인트&lt;/h2&gt;
&lt;h3 id="41-슬램덩크와는-정반대의-현실성"&gt;4.1. 《슬램덩크》와는 정반대의 &amp;ldquo;현실성&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;이노우에 본인이 인정했듯, 《슬램덩크》는 만화로서의 재미는 최고였지만 농구라는 스포츠 자체의 현실성은 다소 약했습니다. 《리얼》은 정반대입니다. 작중에는 만화적 과장이 섞인 농구 만화를 대놓고 비꼬는 장면까지 등장합니다. 아이들이 농구 만화에 열광하는 모습을 본 타카하시가 &amp;ldquo;저렇게 긴 농구 코트가 어디 있냐&amp;quot;고 비웃는 대목인데, 이는 사실상 작가 자신의 전작 《슬램덩크》 애니메이션을 향한 자기반성이라는 해석이 많습니다.&lt;/p&gt;</description></item><item><title>리얼(リアル, REAL) 리뷰 Part 1: 휠체어 위의 청춘, 그리고 이노우에 다케히코의 또 다른 얼굴</title><link>https://philipjkim.cc/posts/20260619-real-review-01/</link><pubDate>Fri, 19 Jun 2026 10:34:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20260619-real-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;어제는 《슬램덩크》의 작가 이노우에 다케히코(井上雄彦)의 검호 만화 《배가본드》를 다루었습니다. 오늘은 같은 작가가 《배가본드》와 거의 같은 시기에 시작해, 지금도 느리지만 꾸준히 이어 가고 있는 또 하나의 대표작 《리얼(リアル, REAL)》을 살펴봅니다.&lt;/p&gt;
&lt;p&gt;《배가본드》가 16세기 일본의 검객을 그린 시대극이라면, 《리얼》은 현대 일본을 배경으로 한 &lt;strong&gt;휠체어 농구&lt;/strong&gt; 만화입니다. 같은 작가, 같은 &amp;ldquo;농구&amp;quot;라는 키워드, 그러나 전혀 다른 무대 위에서 펼쳐지는 이야기입니다. 흥미롭게도 두 작품 모두 오랜 휴재로 독자를 애태웠지만, 《배가본드》가 10년 넘게 완전히 멈춰 있는 것과 달리 《리얼》은 느린 걸음이나마 계속 전진하고 있습니다. 그 대비 자체가 이 작품을 이야기할 때 빼놓을 수 없는 대목입니다.&lt;/p&gt;</description></item><item><title>배가본드(バガボンド) 리뷰 Part 2: 감상 포인트, 그리고 10년 휴재의 이유</title><link>https://philipjkim.cc/posts/20260618-vagabond-review-02/</link><pubDate>Thu, 18 Jun 2026 10:58:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260618-vagabond-review-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Part 1에서는 작가 이노우에 다케히코와 작품 개요, 그리고 등장인물의 실존/픽션 여부를 살펴보았습니다. Part 2에서는 작품을 감상할 때 도움이 될 포인트들과, 많은 독자들이 가장 궁금해하는 &lt;strong&gt;장기 휴재의 이유와 재연재 가능성&lt;/strong&gt; 을 정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-감상에-도움이-되는-포인트"&gt;4. 감상에 도움이 되는 포인트&lt;/h2&gt;
&lt;h3 id="41-챙챙챙이-없는-결투--12합의-진검승부"&gt;4.1. &amp;ldquo;챙챙챙&amp;quot;이 없는 결투 — 1~2합의 진검승부&lt;/h3&gt;
&lt;p&gt;흔한 무협물이나 판타지물처럼 칼이 수십 번 부딪히며 &amp;ldquo;챙챙챙&amp;rdquo; 하는 묘사는 《배가본드》에 거의 없습니다. 무사시 대 요시오카 세이쥬로, 인슌전, 잇토사이전 등 주요 일대일 승부는 실제 진검승부처럼 대부분 1~2합, 길어도 다섯 합 이내에 간결하게 결판납니다.&lt;/p&gt;</description></item><item><title>배가본드(バガボンド) 리뷰 Part 1: 이노우에 다케히코, 그리고 무사시의 사람들</title><link>https://philipjkim.cc/posts/20260618-vagabond-review-01/</link><pubDate>Thu, 18 Jun 2026 10:56:58 +0900</pubDate><guid>https://philipjkim.cc/posts/20260618-vagabond-review-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;《배가본드(バガボンド)》는 《슬램덩크》의 작가 이노우에 다케히코(井上雄彦)가 그린 검호(劍豪) 만화입니다. 일본의 전설적인 검객 미야모토 무사시(宮本武蔵)의 일대기를 소재로 하며, 압도적인 작화와 깊은 심리 묘사로 &amp;ldquo;완결만 된다면 걸작의 반열&amp;quot;이라는 평가를 받아 온 작품입니다.&lt;/p&gt;
&lt;p&gt;이 글은 두 편으로 나뉩니다. Part 1에서는 작가 소개, 작품의 기본 정보, 그리고 등장인물들이 실제 역사와 얼마나 같고 다른지를 다룹니다. Part 2에서는 작품을 감상할 때 도움이 될 포인트들과, 10년 넘게 이어지는 장기 휴재의 배경 및 재연재 가능성을 살펴봅니다.&lt;/p&gt;</description></item><item><title>한여름 제철 스시 재료: 오마카세에서 만나는 고급 어종 6선</title><link>https://philipjkim.cc/posts/20260617-midsummer-sushi-fish/</link><pubDate>Wed, 17 Jun 2026 09:57:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20260617-midsummer-sushi-fish/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;지난 글 &lt;a href="https://philipjkim.cc/posts/20260413-spring-early-summer-sushi-fish/"&gt;봄부터 초여름 제철 스시 재료&lt;/a&gt; 에서 봄~초여름(3~7월) 어종을 다루었다면, 이번에는 본격적인 무더위가 찾아오는 &lt;strong&gt;한여름(6월 중순~9월 초)&lt;/strong&gt; 으로 넘어가 보겠습니다. 수온이 가장 높이 오르는 이 시기는 흰살생선에게는 산란을 마치고 살을 회복하며 기름을 올리는 계절이고, 장어류에게는 일 년 중 가장 빛나는 전성기입니다.&lt;/p&gt;
&lt;p&gt;여름 오마카세는 무겁고 기름진 겨울의 미식과는 결이 다릅니다. 더위에 지친 입맛을 살리는 &lt;strong&gt;청량함, 단단한 식감, 그리고 불향과 데침(湯引き)으로 끌어올린 향&lt;/strong&gt; 이 주인공이 됩니다. 한국의 하이엔드 스시야에서 이 계절에 실제로 만날 수 있는 여름 제철 어종 여섯 가지를 정리해 보았습니다.&lt;/p&gt;</description></item><item><title>게임 리뷰: 오락실을 평정한 전설, 세이부컵 축구</title><link>https://philipjkim.cc/posts/20260616-game-review-seibu-cup-soccer/</link><pubDate>Tue, 16 Jun 2026 14:12:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20260616-game-review-seibu-cup-soccer/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.ytimg.com/vi/8BDYMhqjyRI/maxresdefault.jpg" alt="team_selection"&gt;&lt;/p&gt;
&lt;h2 id="서문-동전-한-닢과-김주성"&gt;서문: 동전 한 닢과 김주성&lt;/h2&gt;
&lt;p&gt;1992년, 슈팅 게임 라이덴(雷電)으로 이름을 날리던 일본의 세이부 개발(セイブ開発)이 난데없이 축구 게임을 하나 내놓습니다. 제목은 &lt;strong&gt;세이부컵 축구(セイブカップサッカー)&lt;/strong&gt;. 해외 수출판 제목은 &lt;em&gt;Olympic Soccer &amp;lsquo;92&lt;/em&gt; 였습니다.&lt;/p&gt;
&lt;p&gt;버추어 스트라이커도, 테크모 월드컵 98 도 아직 세상에 없던 시절입니다. 그 공백기에 이 게임은 빠르고 호쾌한 진행과 손에 착 감기는 조작감 하나로 한국 오락실을 평정했습니다. 1992~95년 사이 초중고를 다니며 오락실 문턱이 닳도록 드나들던 분이라면, 이 게임의 정식 명칭은 몰라도 별명 하나는 분명히 기억하실 겁니다. 바로 &lt;strong&gt;&amp;lsquo;김주성 축구&amp;rsquo;&lt;/strong&gt; 입니다.&lt;/p&gt;</description></item><item><title>2026 월드컵을 200% 즐기는 법 (3): 그래도, 다시 재미있어진다</title><link>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-03/</link><pubDate>Mon, 15 Jun 2026 13:23:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-01/"&gt;1부&lt;/a&gt;에서는 요즘 축구가 왜 다 똑같아 보이는지를, &lt;a href="https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-02/"&gt;2부&lt;/a&gt;에서는 그 시절 우리가 사랑했던 색깔들을 되짚었습니다. 이제 마지막입니다. 진행 중인 2026 월드컵을, 옛날 팬의 눈으로도 충분히 재미있게 즐기는 구체적인 방법을 이야기하겠습니다.&lt;/p&gt;
&lt;p&gt;미리 한 가지 짚자면, 이 대회는 옛날 팬에게 유난히 친절합니다. 이유는 차차 말씀드리겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-플레어는-죽지-않았다-더-어려졌을-뿐"&gt;1. 플레어는 죽지 않았다, 더 어려졌을 뿐&lt;/h2&gt;
&lt;p&gt;2006년쯤 축구를 떠난 분들은 &amp;ldquo;호나우지뉴와 함께 발재간도 끝났다&amp;quot;고 생각하실지 모릅니다. 그렇지 않습니다. 화려함은 사라진 게 아니라 더 어리고 빨라졌습니다.&lt;/p&gt;</description></item><item><title>2026 월드컵을 200% 즐기는 법 (2): 그땐 나라마다, 리그마다 색깔이 있었다</title><link>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-02/</link><pubDate>Mon, 15 Jun 2026 13:20:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-01/"&gt;1부&lt;/a&gt;에서는 요즘 축구가 왜 다 비슷해 보이는지를 따져봤습니다. 펩의 점유와 클롭의 압박이 하나로 합쳐진 표준 모델이 전 세계로 퍼졌고, 그 결과 팀마다의 개성이 옅어졌다는 이야기였습니다.&lt;/p&gt;
&lt;p&gt;그렇다면 우리가 진짜 그리워하는 건 무엇일까요. 2부는 잠깐 추억 여행입니다. 다만 미리 양해를 구합니다. 이 글은 객관적 분석이라기보다는, 그 시절을 함께 통과한 사람들끼리 나누는 &amp;ldquo;야, 그때 그 선수 기억나냐&amp;rdquo; 류의 대화에 가깝습니다. 1부에서 말씀드린 &amp;ldquo;장밋빛 회상&amp;quot;의 혐의를 스스로 인정하면서, 그래도 한 번쯤은 마음껏 추억에 젖어보자는 겁니다.&lt;/p&gt;</description></item><item><title>2026 월드컵을 200% 즐기는 법 (1): 왜 요즘 축구는 다 똑같아 보일까</title><link>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-01/</link><pubDate>Mon, 15 Jun 2026 13:18:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20260615-enjoying-world-cup-2026-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;오랜만에 새벽에 일어나 월드컵 중계를 켰는데, 묘한 기분이 드신 적 없으십니까. 분명히 처음 보는 두 팀인데, 어쩐지 같은 팀이 청백 유니폼만 바꿔 입고 뛰는 것 같은 그런 느낌입니다.&lt;/p&gt;
&lt;p&gt;2026 월드컵은 이미 시작됐습니다. 6월 11일 멕시코시티 에스타디오 아스테카에서 개막했고, 대한민국은 첫 경기에서 체코를 2~1로 잡으며 산뜻하게 출발했습니다. 그런데 정작 중계를 보다가 &amp;ldquo;어, 내가 보던 그 축구가 아닌데?&amp;rdquo; 하고 고개를 갸웃하신 분이 적지 않을 겁니다.&lt;/p&gt;</description></item><item><title>2025.06 vs 2026.06, AGI는 얼마나 가까워졌나 Part 3: 검증된 진보와 보도자료 사이</title><link>https://philipjkim.cc/posts/20260612-agi-progress-one-year-03/</link><pubDate>Fri, 12 Jun 2026 16:26:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20260612-agi-progress-one-year-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="이어가며"&gt;이어가며&lt;/h2&gt;
&lt;p&gt;Part 1은 능력의 측정값을, Part 2는 전문가들의 예측 이동을 봤습니다. 마지막 편은 가장 검증이 어려운 영역, &lt;strong&gt;현실&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;p&gt;벤치마크 점수가 오르는 것과 그 능력이 현실에서 돈과 시간을 절약하는 것은 다른 문제입니다. 이번 편의 기준선은 하나입니다. &lt;strong&gt;벤더가 발표한 숫자인가, 독립 기관이 검증한 숫자인가.&lt;/strong&gt; 이 구분을 축으로 실전 배치·경제·노동을 보고, 회의론과 낙관론을 각각 가장 강한 형태로 세운 뒤 종합하겠습니다.&lt;/p&gt;</description></item><item><title>2025.06 vs 2026.06, AGI는 얼마나 가까워졌나 Part 2: 전문가들은 시계를 어떻게 다시 맞췄나</title><link>https://philipjkim.cc/posts/20260612-agi-progress-one-year-02/</link><pubDate>Fri, 12 Jun 2026 16:24:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20260612-agi-progress-one-year-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="이어가며"&gt;이어가며&lt;/h2&gt;
&lt;p&gt;Part 1에서는 능력의 변화를 측정값으로 봤습니다. 벤치마크 점수, METR 자율 작업 시간지평, 올림피아드 성적이 1년 사이에 모두 크게 올랐습니다.&lt;/p&gt;
&lt;p&gt;이번 편의 질문은 다릅니다. &lt;strong&gt;그 변화를 가장 가까이서 지켜보는 사람들은, AGI가 언제 올지에 대한 자신의 예상을 어떻게 바꿨는가.&lt;/strong&gt; 랩을 이끄는 CEO들, 분야를 만든 연구자들, 그리고 예측시장과 전문가 설문을 차례로 봅니다.&lt;/p&gt;
&lt;p&gt;미리 결론의 형태를 말하면, 지난 1년의 패턴은 &lt;strong&gt;수렴이 아니라 분기(分岐)&lt;/strong&gt; 였습니다. 랩 CEO들은 이미 공격적이던 일정을 유지하거나 약간 앞당겼고, 일부 핵심 연구자들은 &amp;ldquo;스케일링은 한계에 왔고 새 아이디어가 필요하다&amp;quot;는 쪽으로 더 단단해졌습니다. 그리고 그 사이에서 &amp;ldquo;AGI란 무엇인가&amp;quot;라는 정의 자체가 공개적으로 갈라졌습니다.&lt;/p&gt;</description></item><item><title>2025.06 vs 2026.06, AGI는 얼마나 가까워졌나 Part 1: 측정값으로 본 1년</title><link>https://philipjkim.cc/posts/20260612-agi-progress-one-year-01/</link><pubDate>Fri, 12 Jun 2026 16:22:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20260612-agi-progress-one-year-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-1년이라는-자"&gt;들어가며: 1년이라는 자&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;AGI가 가까워졌다&amp;quot;는 말은 너무 자주, 너무 가볍게 쓰입니다. 정작 검증하기는 어렵습니다. 기준 시점이 모호하고, 누가 무엇을 근거로 말하는지가 흐릿하기 때문입니다.&lt;/p&gt;
&lt;p&gt;이 글은 그 모호함을 줄이기 위해 두 개의 고정된 시점을 잡습니다. &lt;strong&gt;2025년 6월&lt;/strong&gt; 과 &lt;strong&gt;2026년 6월&lt;/strong&gt; 입니다. 정확히 1년 간격을 두고, 그 사이에 AI의 능력이 측정 가능한 지표로 얼마나 달라졌는지, 그리고 AGI 실현에 대한 전문가들의 예상이 어떻게 이동했는지를 따라가 봅니다.&lt;/p&gt;</description></item><item><title>음반 소개: 아야카(絢香) - 遊音倶楽部 〜2nd grade〜 (2020): 7년 만에 돌아온 두 번째 음악 동아리</title><link>https://philipjkim.cc/posts/20260611-album-review-ayaka-yuon-club-2nd-grade/</link><pubDate>Thu, 11 Jun 2026 14:56:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20260611-album-review-ayaka-yuon-club-2nd-grade/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/71BOVEucPBL._UF894,1000_QL80_.jpg" alt="album_cover"&gt;&lt;/p&gt;
&lt;p&gt;2020년 5월 발매된 아야카(絢香)의 두 번째 커버 앨범 &lt;em&gt;遊音倶楽部 〜2nd grade〜&lt;/em&gt; 는 2013년 &lt;em&gt;〜1st grade〜&lt;/em&gt; 로부터 약 7년 만에 나온 후속작입니다. 1970년대 아라이 유미·이츠와 마유미부터 1980년대 레베카, 1990년대 미스터 칠드런·나카지마 미유키·포르노그래피티, 2000년대 이후 히라이 켄·백넘버·사카낙션·쿠와타 케이스케까지, 전 10곡 전곡 커버로 일본 대중음악의 또 다른 한 챕터를 노래합니다. 전작보다 원곡과 원작자의 이야기에 한층 무게를 실어, 명곡들의 배경까지 함께 따라 읽는 리뷰입니다.&lt;/p&gt;</description></item><item><title>음반 소개: 아야카(絢香) - 遊音倶楽部 〜1st grade〜 (2013): 일본 대중음악 교과서를 노래하다</title><link>https://philipjkim.cc/posts/20260610-album-review-ayaka-yuon-club-1st-grade/</link><pubDate>Wed, 10 Jun 2026 18:18:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260610-album-review-ayaka-yuon-club-1st-grade/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/51VlmPWZrPL._UF894,1000_QL80_.jpg" alt="album_cover"&gt;&lt;/p&gt;
&lt;p&gt;2013년 9월 발매된 아야카(絢香)의 커버 앨범 &lt;em&gt;遊音倶楽部 〜1st grade〜&lt;/em&gt; 는 바세도병 투병으로 인한 긴 공백을 끝내고 독립 레이블로 돌아온 그가, 어린 시절부터 부르며 자신의 뿌리가 된 곡들을 직접 골라 담은 작품입니다. 1970년대 아라이 유미부터 1990년대 미스터 칠드런·스피츠·서던 올 스타즈·우타다 히카루, 2000년대 히라이 켄·오다 카즈마사까지 이어지는 전 11곡 전곡 커버로, 단순한 유명곡 모음을 넘어 일본 대중음악의 계보를 훑는 한 장의 교과서 같은 앨범입니다.&lt;/p&gt;</description></item><item><title>인물 소개: 필리포 인자기: 기술 없는 천재, 골문 앞의 여우</title><link>https://philipjkim.cc/posts/20260610-introduction-to-inzaghi/</link><pubDate>Wed, 10 Jun 2026 17:26:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20260610-introduction-to-inzaghi/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-오프사이드-라인에서-태어난-남자"&gt;1. 서론: 오프사이드 라인에서 태어난 남자&lt;/h2&gt;
&lt;p&gt;알렉스 퍼거슨 감독은 필리포 인자기를 두고 이렇게 말했습니다. &amp;ldquo;저 친구는 오프사이드인 채로 태어난 게 분명하다.&amp;rdquo; 요한 크루이프는 한술 더 떴습니다. &amp;ldquo;사실 인자기는 축구를 전혀 할 줄 모른다. 그저 늘 옳은 위치에 있을 뿐이다.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;축구 역사상 이토록 조롱과 찬사가 한 몸에 뒤섞인 선수도 드뭅니다. 인자기는 동료들조차 &amp;ldquo;공을 제대로 다룰 줄 모른다&amp;rdquo; 고 거리낌 없이 말한 공격수였습니다. 그의 드리블은 투박했고, 패스는 평범했으며, 빌드업에 기여하는 법이 없었습니다. 발재간으로 상대를 벗겨내거나, 중원에서 경기를 조율하거나, 환상적인 개인기로 관중을 열광시키는 일은 그의 사전에 없었습니다.&lt;/p&gt;</description></item><item><title>인물 소개: 후안 로만 리켈메: 마지막 엔간체, 느림의 미학</title><link>https://philipjkim.cc/posts/20260610-introduction-to-riquelme/</link><pubDate>Wed, 10 Jun 2026 16:41:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20260610-introduction-to-riquelme/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-시간을-멈추는-남자"&gt;1. 서론: 시간을 멈추는 남자&lt;/h2&gt;
&lt;p&gt;축구는 점점 빨라지는 스포츠입니다. 한 세기에 걸쳐 선수들은 더 빨리 달렸고, 더 강하게 압박했으며, 공을 잡는 순간 주어지는 시간은 점점 더 짧아졌습니다. 현대 축구의 모든 진화는 &amp;lsquo;속도&amp;rsquo; 라는 하나의 방향을 향해 달려왔다고 해도 과언이 아닙니다.&lt;/p&gt;
&lt;p&gt;후안 로만 리켈메는 그 흐름에 정면으로 맞선 선수였습니다. 그는 빠르지 않았습니다. 폭발적인 드리블도, 지칠 줄 모르는 활동량도 없었습니다. 오히려 그는 느렸고, 걸었으며, 종종 경기장 한복판에 멈춰 서 있는 것처럼 보였습니다. 그러나 그가 공을 잡는 순간, 경기의 시계는 그의 박자에 맞춰 다시 흘렀습니다. 모두가 빨라질 때 홀로 느려짐으로써 경기를 지배하는 것, 이것이 리켈메가 구현한 역설의 예술이었습니다.&lt;/p&gt;</description></item><item><title>코믹스 원작 vs. 라이트노벨 원작 애니메이션 Part 3: 무엇이, 어떻게 다른가</title><link>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-03/</link><pubDate>Tue, 09 Jun 2026 09:48:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-01/"&gt;Part 1&lt;/a&gt;에서는 코믹스(만화) 원작 5선을, &lt;a href="https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-02/"&gt;Part 2&lt;/a&gt;에서는 라이트노벨 원작 5선을 살펴봤습니다. 양쪽 진영의 대표 선수들을 모두 만나봤으니, 이제 본격적으로 둘을 나란히 놓고 비교할 차례입니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 만화 원작과 라노벨 원작 애니메이션이 &lt;strong&gt;제작 방식, 장르, 페이싱, 작화, 흥행&lt;/strong&gt; 측면에서 어떻게 다른지를 하나씩 뜯어보겠습니다. 단순히 &amp;ldquo;뭐가 더 낫다&amp;quot;는 우열 가리기가 아니라, 출발점이 다른 두 매체가 애니메이션이라는 결승선에 어떻게 도달하는지를 보는 작업입니다.&lt;/p&gt;</description></item><item><title>코믹스 원작 vs. 라이트노벨 원작 애니메이션 Part 2: 라이트노벨이 열어젖힌 이세계</title><link>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-02/</link><pubDate>Tue, 09 Jun 2026 09:47:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-01/"&gt;Part 1&lt;/a&gt;에서는 만화가 낳은 괴물들 — 코믹스 원작 애니메이션 5선을 살펴봤습니다. 진격의 거인부터 스파이 패밀리까지, 비주얼이 강하고 장르가 다양한 작품들이었습니다.&lt;/p&gt;
&lt;p&gt;이번 Part 2에서는 진영을 바꿉니다. 이번 주인공은 &lt;strong&gt;라이트노벨(라노벨)&lt;/strong&gt; 입니다. 만화가 그림에서 출발한다면 라노벨은 글에서 출발하고, 이 출발점의 차이가 전혀 다른 풍경을 만들어냅니다. 한 가지 미리 말씀드리면, 이번 5선에는 유독 &amp;ldquo;이세계&amp;quot;라는 단어가 자주 등장할 겁니다. 왜 그런지는 작품들을 보면 자연스럽게 이해되실 겁니다.&lt;/p&gt;</description></item><item><title>코믹스 원작 vs. 라이트노벨 원작 애니메이션 Part 1: 만화가 낳은 괴물들</title><link>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-01/</link><pubDate>Tue, 09 Jun 2026 09:45:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20260609-anime-manga-vs-light-novel-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-원작이-만화냐-라노벨이냐-그게-뭐가-중요한가요"&gt;들어가며: 원작이 만화냐 라노벨이냐, 그게 뭐가 중요한가요?&lt;/h2&gt;
&lt;p&gt;애니메이션을 한두 시즌쯤 보다 보면 이상한 패턴이 눈에 들어오기 시작합니다. 어떤 애니는 1화부터 작화가 미쳐 돌아가고 액션이 시원시원한데, 어떤 애니는 캐릭터들이 방 안에 둘러앉아 끝없이 수다를 떨고 주인공의 머릿속 독백이 한참 이어집니다. 둘 다 재미있을 수 있지만, 분명히 결이 다릅니다.&lt;/p&gt;
&lt;p&gt;이 차이를 만드는 가장 큰 변수 중 하나가 바로 &lt;strong&gt;&amp;ldquo;원작이 무엇이냐&amp;rdquo;&lt;/strong&gt; 입니다. 대부분의 인기 TV 애니메이션은 오리지널 기획이 아니라 원작이 따로 있고, 그 원작은 십중팔구 둘 중 하나입니다. &lt;strong&gt;만화(코믹스)&lt;/strong&gt; 거나 &lt;strong&gt;라이트노벨&lt;/strong&gt; 이거나.&lt;/p&gt;</description></item><item><title>개발자를 위한 Discord 완전정복 Part 3: Discord를 원격 Control Plane으로</title><link>https://philipjkim.cc/posts/20260605-discord-developer-guide-03/</link><pubDate>Fri, 05 Jun 2026 18:09:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20260605-discord-developer-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260605-discord-developer-guide-01/"&gt;Part 1&lt;/a&gt;에서 Discord의 역사를, &lt;a href="https://philipjkim.cc/posts/20260605-discord-developer-guide-02/"&gt;Part 2&lt;/a&gt;에서 개발자에게 풀린 무료 기능들을 살펴봤습니다. 마지막 Part 3에서는 이 기능들을 조합해 &lt;strong&gt;Discord를 원격 control plane(제어 평면)&lt;/strong&gt; 으로 쓰는 실전 활용법을 다룹니다.&lt;/p&gt;
&lt;p&gt;핵심 아이디어는 단순합니다. Discord 봇은 &lt;strong&gt;어디서나 접근 가능한 양방향 메시지 채널&lt;/strong&gt;입니다. 폰에서도, PC에서도 같은 채널에 메시지를 보낼 수 있습니다. 그렇다면 그 메시지를 받아 &lt;strong&gt;내 서버에서 명령을 실행하거나, 장기 실행 작업을 조종하거나, AI 에이전트를 지휘&lt;/strong&gt;할 수 있지 않을까요? 바로 이 발상이 최근 개발자 사이에서 뜨거운 &amp;ldquo;Discord를 control plane으로&amp;rdquo; 패턴입니다.&lt;/p&gt;</description></item><item><title>개발자를 위한 Discord 완전정복 Part 2: 공짜로 풀어준 대인배 기능들</title><link>https://philipjkim.cc/posts/20260605-discord-developer-guide-02/</link><pubDate>Fri, 05 Jun 2026 18:07:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260605-discord-developer-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260605-discord-developer-guide-01/"&gt;Part 1&lt;/a&gt;에서는 Discord가 어떻게 태어나 성장했고 어떤 결정으로 지금의 모습이 되었는지를 살펴봤습니다. 이번 Part 2에서는 &lt;strong&gt;개발자 입장에서 Discord가 얼마나 대인배인지&lt;/strong&gt; 를 이야기합니다.&lt;/p&gt;
&lt;p&gt;결론부터 말하면, &lt;strong&gt;API·봇·Webhook·Gateway·Interactions·OAuth2·임베드·CDN 첨부·음성 채널·스레드·포럼 채널이 전부 무료&lt;/strong&gt;입니다. 서버 크기 제한도 없습니다. 흔히 보이는 유료 구독 &lt;strong&gt;Nitro는 개인 사용자(엔드유저) 대상&lt;/strong&gt;이지 개발자 기능이 아닙니다. 봇을 만들고 운영하는 데 Discord에 내는 비용은 0원이며, 드는 비용이 있다면 봇을 돌릴 본인 호스팅 비용뿐입니다.&lt;/p&gt;</description></item><item><title>개발자를 위한 Discord 완전정복 Part 1: 탄생, 성장, 그리고 결정적 순간들</title><link>https://philipjkim.cc/posts/20260605-discord-developer-guide-01/</link><pubDate>Fri, 05 Jun 2026 18:05:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20260605-discord-developer-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;개발자라면 한 번쯤은 Discord 서버에 들어가 본 적이 있을 것입니다. 오픈소스 프로젝트의 커뮤니티, 사내 봇 알림 채널, 혹은 그냥 친구들과 게임하며 떠드는 음성 채널까지. 어느새 Discord는 개발자 생태계의 기본 인프라 중 하나가 되었습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈는 Discord라는 서비스를 &lt;strong&gt;개발자의 시선으로&lt;/strong&gt; 뜯어봅니다. 3부작으로 구성했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Part 1 (이 글)&lt;/strong&gt;: Discord가 어떤 니즈에서 태어났고, 어떻게 성장했으며, 서비스를 지금의 모습으로 만든 결정적 의사결정들을 살펴봅니다. 마지막엔 개발자가 특히 주목할 만한 엔지니어링 의사결정(Elixir, Go→Rust, Cassandra→ScyllaDB)을 다룹니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 2&lt;/strong&gt;: Webhook, 봇, 슬래시 커맨드 같은 Discord의 &lt;strong&gt;개발자 친화적이고 대인배스러운 무료 기능들&lt;/strong&gt;을 실전 관점에서 정리합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 3&lt;/strong&gt;: Discord를 원격 control plane으로 활용하는 방법 — AI 코딩 에이전트 원격 제어, ChatOps, 홈랩 모니터링 등 — 과 그 best practice를 다룹니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;그럼 1편을 시작합니다.&lt;/p&gt;</description></item><item><title>훌라(Hula) 완전정복 Part 2: 전투훌라 실전 전략</title><link>https://philipjkim.cc/posts/20260604-hula-card-game-guide-02/</link><pubDate>Thu, 04 Jun 2026 16:35:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260604-hula-card-game-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;기술을 익히기 전에, 손은 눈보다 빨라야 돼.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="../20260604-hula-card-game-guide-01/"&gt;Part 1&lt;/a&gt;에서 훌라의 유래와 규칙, 그리고 전투훌라의 핵심을 익히셨습니다. 이제 규칙은 알았으니 문제는 &amp;ldquo;어떻게 이기느냐&amp;rdquo; 입니다. 카드를 받아 들고 멍하니 있다가 남의 땡큐에 차례를 다 빼앗기는 호구가 될 것인가, 아니면 버려진 카드를 세어 가며 판을 읽는 타짜가 될 것인가. 이 글이 그 갈림길의 이정표가 되어 드리겠습니다.&lt;/p&gt;
&lt;p&gt;다시 한번 단서를 답니다. 아래 전략은 &lt;strong&gt;확립된 룰에 기반한 정석&lt;/strong&gt;과 &lt;strong&gt;커뮤니티에서 통용되는 휴리스틱(경험칙)&lt;/strong&gt; 이 섞여 있습니다. 수치로 된 팁(&amp;ldquo;첫 턴 스톱은 35점 이하&amp;rdquo; 같은)은 절대 공식이 아니라 &amp;ldquo;대체로 그렇다더라&amp;rdquo; 수준의 경험칙이니, 참고만 하시고 본인 감각으로 보정하시길 바랍니다.&lt;/p&gt;</description></item><item><title>훌라(Hula) 완전정복 Part 1: 유래부터 규칙, 전투훌라까지</title><link>https://philipjkim.cc/posts/20260604-hula-card-game-guide-01/</link><pubDate>Thu, 04 Jun 2026 16:33:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20260604-hula-card-game-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;이 패가 단풍이야, 단풍.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;영화 〈타짜〉의 명대사를 빌려왔지만, 오늘 다룰 게임은 화투가 아닙니다. 트럼프 카드 한 벌이면 충분한, 그런데도 의외로 정식 룰을 아는 사람이 드문 게임. 바로 &lt;strong&gt;훌라(Hula)&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;p&gt;명절에 친척들이 모이면 한쪽에서 &amp;ldquo;훌라 한 판?&amp;rdquo; 소리가 나오는데, 막상 끼려고 하면 &amp;ldquo;넌 룰 모르니까 옆에서 보고 있어&amp;rdquo; 라는 말을 듣기 십상입니다. 이 글은 바로 그런 분들을 위한 것입니다. 훌라를 한 번도 해본 적 없는 분도 이 글 두 편만 읽으면 다음 명절엔 당당히 패를 받을 수 있도록, &lt;strong&gt;Part 1에서는 유래와 규칙&lt;/strong&gt;을, &lt;strong&gt;Part 2에서는 전투훌라 전략&lt;/strong&gt;을 다루겠습니다.&lt;/p&gt;</description></item><item><title>하이볼 완전 정복: 유래부터 제조법, 안주 페어링까지</title><link>https://philipjkim.cc/posts/20260602-highball-guide/</link><pubDate>Tue, 02 Jun 2026 18:58:24 +0900</pubDate><guid>https://philipjkim.cc/posts/20260602-highball-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;언젠가부터 동네 이자카야는 물론이고 편의점 냉장고에서도 쉽게 만날 수 있게 된 술이 있습니다. 바로 &lt;strong&gt;하이볼(Highball)&lt;/strong&gt; 입니다. 맥주처럼 부담 없이 들이켜기엔 위스키의 향이 살아 있고, 위스키 스트레이트처럼 독하지도 않아 식사와 함께 즐기기 좋은 술이지요.&lt;/p&gt;
&lt;p&gt;이 글에서는 하이볼이 무엇인지, 어디서 비롯되었는지, 알아두면 좋은 상식과 집에서 따라 할 수 있는 제조법, 그리고 곁들이면 잘 어울리는 안주까지 차근차근 정리해 보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="하이볼이란-무엇인가"&gt;하이볼이란 무엇인가&lt;/h2&gt;
&lt;p&gt;하이볼은 한마디로 &lt;strong&gt;증류주에 탄산수나 청량음료 같은 비알코올 음료를 섞어 길게 늘여 마시는 음료&lt;/strong&gt; 를 가리키는 말입니다. 가장 널리 알려진 형태는 &lt;strong&gt;위스키 + 탄산수(소다수)&lt;/strong&gt; 조합이지만, 엄밀히 따지면 하이볼은 특정 한 가지 칵테일이 아니라 &amp;ldquo;증류주를 탄산수 등으로 희석해 키 큰(high) 잔에 담아내는 방식&amp;rdquo; 자체를 가리키는 넓은 범주에 가깝습니다.&lt;/p&gt;</description></item><item><title>MLB 매니아를 위한 KBO 입문 가이드 Part 3: 통산 기록과 KBO만의 "대첩" 밈</title><link>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-03/</link><pubDate>Mon, 01 Jun 2026 13:02:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-01/"&gt;Part 1&lt;/a&gt;에서는 리그 구조와 룰을, &lt;a href="https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-02/"&gt;Part 2&lt;/a&gt;에서는 2024~2025 두 시즌의 흐름을 살펴봤습니다. 마지막 Part 3에서는 KBO 입문자가 가장 헷갈리는(그리고 가장 재미있어하는) 두 가지를 다룹니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;통산 기록 비교&lt;/strong&gt;: KBO와 MLB의 숫자를 나란히 놓고 비교&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;대첩&amp;quot;이라는 자학 어법&lt;/strong&gt;: KBO 팬덤의 가장 독특한 밈 문화&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="통산-기록-비교-숫자의-스케일"&gt;통산 기록 비교: 숫자의 스케일&lt;/h2&gt;
&lt;p&gt;MLB와 KBO는 리그 역사(MLB 1903년 / KBO 1982년)와 경기 수가 다르기 때문에 단순 비교에는 한계가 있습니다. 다만 각 부문 1위의 숫자가 갖는 의미와 그 기록을 만든 선수의 이야기는 두 리그를 이해하는 좋은 지표입니다.&lt;/p&gt;</description></item><item><title>MLB 매니아를 위한 KBO 입문 가이드 Part 2: 2024~2025 시즌으로 보는 두 리그의 흐름</title><link>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-02/</link><pubDate>Mon, 01 Jun 2026 13:01:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-01/"&gt;Part 1&lt;/a&gt;에서는 KBO와 MLB의 구조적 차이와 룰, 응원 문화를 살펴봤습니다. Part 2에서는 2024~2025 두 시즌의 흐름을 통해 두 리그의 현재 모습을 비교해보겠습니다. 결론부터 말씀드리면 같은 야구지만 흐름은 꽤 다릅니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2024-시즌-두-리그-모두-우승팀이-압도적이었다"&gt;2024 시즌: 두 리그 모두 우승팀이 압도적이었다&lt;/h2&gt;
&lt;h3 id="mlb-2024-다저스-vs-양키스-21세기-첫-클래식-매치업"&gt;MLB 2024: 다저스 vs 양키스, 21세기 첫 클래식 매치업&lt;/h3&gt;
&lt;p&gt;MLB 2024년의 하이라이트는 단연 월드시리즈였습니다. LA 다저스가 양키스를 4승 1패로 꺾고 통산 8번째 우승을 차지했는데, 다저스와 양키스가 월드시리즈에서 만난 것은 1981년 이후 43년 만이었습니다(&lt;a href="https://en.wikipedia.org/wiki/2024_World_Series"&gt;Wikipedia: 2024 World Series&lt;/a&gt;). 시리즈 MVP는 다저스의 프레디 프리먼이 수상했고, 그는 1~4차전 첫 타석에서 모두 홈런을 친 월드시리즈 최초의 4경기 연속 홈런 기록을 세웠습니다.&lt;/p&gt;</description></item><item><title>MLB 매니아를 위한 KBO 입문 가이드 Part 1: 리그 구조와 룰, 문화의 차이</title><link>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-01/</link><pubDate>Mon, 01 Jun 2026 13:00:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260601-mlb-fan-guide-to-kbo-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-왜-지금-kbo인가"&gt;들어가며: 왜 지금 KBO인가&lt;/h2&gt;
&lt;p&gt;MLB를 오래 본 팬에게 KBO는 종종 &amp;ldquo;수준 낮은 더블 A 야구&amp;quot;로 치부되어 왔습니다. 솔직히 말씀드리면 평균적인 경기 수준은 여전히 MLB와 격차가 있습니다. 그러나 2024년 KBO 리그가 사상 최초로 단일 시즌 1,000만 관중을 돌파(&lt;a href="https://www.koreabaseball.com/MediaNews/Notice/View.aspx?bdSe=10205"&gt;KBO 보도자료, 2024-09-15&lt;/a&gt;) 한 데서 알 수 있듯, 한국 프로야구는 단순히 경기력만으로 설명할 수 없는 고유의 매력을 갖춘 콘텐츠가 되었습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈는 MLB는 익숙하지만 KBO는 잘 모르는 야구 팬을 위해 세 편으로 나누어 다음을 정리합니다.&lt;/p&gt;</description></item><item><title>아스날 2025-26 심층 분석 Part 3: 무패의 군단 vs 2025-26, 22년의 거리</title><link>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-03/</link><pubDate>Sat, 30 May 2026 22:50:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;감수: 야구왕이포터 님&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260530-arsenal-2025-26-deep-dive-01"&gt;Part 1&lt;/a&gt;에서 우승의 배경과 아르테타의 진화를, &lt;a href="../20260530-arsenal-2025-26-deep-dive-02"&gt;Part 2&lt;/a&gt;에서 Best 11과 핵심 선수들을 다뤘습니다. 마지막 Part 3에서는 시계를 22년 전으로 돌립니다. 아스날이 마지막으로 리그 정상에 섰던 그 시즌, &lt;strong&gt;2003-04 무패의 군단(The Invincibles)&lt;/strong&gt; 과 2025-26 우승 스쿼드를 정면으로 비교합니다.&lt;/p&gt;
&lt;p&gt;먼저 두 팀의 전술 철학이 어떻게 다른지 살펴본 뒤, 포지션별로 1대1 맞대결을 펼쳐 보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="두-챔피언-두-시대"&gt;두 챔피언, 두 시대&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;구분&lt;/th&gt;
 &lt;th&gt;2003-04 (무패의 군단)&lt;/th&gt;
 &lt;th&gt;2025-26&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;감독&lt;/td&gt;
 &lt;td&gt;아르센 벵거&lt;/td&gt;
 &lt;td&gt;미켈 아르테타&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;성적&lt;/td&gt;
 &lt;td&gt;38전 26승 12무 &lt;strong&gt;0패&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;38전 25승 7무 5패 (한 경기 남기고 확정)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;포메이션&lt;/td&gt;
 &lt;td&gt;4-4-2 (벤캄프 처지면 4-2-3-1)&lt;/td&gt;
 &lt;td&gt;4-2-3-1 기반 (공격 시 3-2-5)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;최다 득점&lt;/td&gt;
 &lt;td&gt;티에리 앙리 39골&lt;/td&gt;
 &lt;td&gt;빅토르 요케레스 21골(전 대회)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;정체성&lt;/td&gt;
 &lt;td&gt;역습·개인 기량·수직성&lt;/td&gt;
 &lt;td&gt;점유·구조·세트피스&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;유럽 대항전&lt;/td&gt;
 &lt;td&gt;챔피언스리그 8강&lt;/td&gt;
 &lt;td&gt;챔피언스리그 &lt;strong&gt;결승&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;가장 먼저 눈에 띄는 차이는 &amp;lsquo;무패&amp;rsquo;입니다. 2003-04 아스날은 리그 38경기를 단 한 번도 지지 않은, 잉글랜드 축구 역사에서 거의 유일무이한 위업을 달성했습니다. 2025-26 아스날은 5패를 안았지만, 대신 무패의 군단이 끝내 닿지 못한 &lt;strong&gt;챔피언스리그 결승&lt;/strong&gt;에 올랐습니다. 두 팀의 위대함은 서로 다른 무대에서 빛납니다.&lt;/p&gt;</description></item><item><title>아스날 2025-26 심층 분석 Part 2: Best 11과 우승의 주역들</title><link>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-02/</link><pubDate>Sat, 30 May 2026 22:40:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;감수: 야구왕이포터 님&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260530-arsenal-2025-26-deep-dive-01"&gt;Part 1&lt;/a&gt;에서는 22년 만의 우승을 만든 배경과 아르테타의 진화를 다뤘습니다. 이번 Part 2에서는 그 우승의 실제 주인공인 &lt;strong&gt;선수들&lt;/strong&gt;을 들여다봅니다. 먼저 시즌 Best 11을 전 포지션에 걸쳐 소개하고, 이어 팀을 대표하는 세 기둥 — 가브리에우 마갈량이스(DF), 데클란 라이스(MF), 부카요 사카(FW) — 를 별도 섹션으로 깊이 분석합니다. 마지막으로 라이스와 수비멘디의 미드필드 케미스트리, 그리고 레딧·팬 커뮤니티의 반응까지 정리합니다.&lt;/p&gt;</description></item><item><title>아스날 2025-26 심층 분석 Part 1: 22년의 기다림은 어떻게 끝났나</title><link>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-01/</link><pubDate>Sat, 30 May 2026 22:33:38 +0900</pubDate><guid>https://philipjkim.cc/posts/20260530-arsenal-2025-26-deep-dive-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;감수: 야구왕이포터 님&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2026년 5월 30일, 부다페스트 푸스카스 아레나. 아스날은 디펜딩 챔피언 파리 생제르맹(PSG)을 상대로 클럽 역사상 두 번째 UEFA 챔피언스리그 결승전을 치릅니다. 이 글을 쓰는 시점에 결승전 결과는 아직 나오지 않았습니다. 하지만 결과와 무관하게, 2025-26 시즌은 이미 아스날 140년 역사에서 손꼽히는 시즌으로 기록되었습니다. 그 이유는 단 하나, &lt;strong&gt;프리미어리그 우승&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;p&gt;2004년 5월, &amp;lsquo;무패의 군단(The Invincibles)&amp;lsquo;이 마지막 리그 트로피를 들어 올린 이후 무려 22년. 그동안 아스날은 다섯 번이나 신부 들러리에 머물렀고, 최근 세 시즌은 연속으로 준우승에 그쳤습니다. 그 길고 긴 기다림이 마침내 끝났습니다.&lt;/p&gt;</description></item><item><title>섬세한 감성의 설계자, 작곡가 황성제</title><link>https://philipjkim.cc/posts/20260530-hwang-sung-je-hitmaker/</link><pubDate>Sat, 30 May 2026 14:10:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260530-hwang-sung-je-hitmaker/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.8 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="황성제-그는-누구인가"&gt;황성제, 그는 누구인가&lt;/h2&gt;
&lt;p&gt;황성제(1975~)는 1990년대 후반부터 현재까지 한국 대중음악의 한복판에서 활동해 온 &lt;strong&gt;작곡가이자 편곡가, 음악 프로듀서&lt;/strong&gt; 입니다. 발라드부터 댄스, R&amp;amp;B, OST까지 장르를 가리지 않지만, 그를 가장 잘 설명하는 키워드는 &lt;strong&gt;섬세한 멜로디와 정교한 편곡&lt;/strong&gt; 입니다. 특히 김연우, 박정현, 박효신, 이수영, 보아처럼 가창력으로 정평이 난 가수들의 곡을 다수 만들며, &amp;ldquo;노래 잘하는 사람의 노래를 만드는 작곡가&amp;quot;라는 인상을 남겼습니다.&lt;/p&gt;
&lt;p&gt;그의 음악 인생에서 빼놓을 수 없는 이름이 바로 &lt;strong&gt;이승환&lt;/strong&gt; 입니다. 황성제는 이승환이 설립한 종합 엔터테인먼트사 &lt;strong&gt;드림팩토리의 전속 1호 작곡가&lt;/strong&gt; 로 커리어를 본격적으로 시작했고, 1998년 이승환의 &lt;strong&gt;&amp;ldquo;통화 남녀&amp;rdquo;&lt;/strong&gt; 작곡을 통해 작곡가로 데뷔했습니다. 이후 이승환의 거의 모든 앨범에 비중 있게 참여하며, 두 사람은 20년 넘게 이어지는 음악적 동반자 관계를 이어 왔습니다.&lt;/p&gt;</description></item><item><title>Agentic Coding 시대의 Repo 부트스트래핑 가이드 Part 2: Go + Templ + HTMX To-Do 앱으로 직접 만들어 보기</title><link>https://philipjkim.cc/posts/20260528-repo-bootstrapping-guide-02/</link><pubDate>Thu, 28 May 2026 19:03:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260528-repo-bootstrapping-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260528-repo-bootstrapping-guide-01/"&gt;Part 1&lt;/a&gt; 에서는 2026년 5월 기준 de-facto 가 된 spec 문서들의 지형도와 best practices 를 정리했습니다. 2편에서는 가상의 Go + Templ + HTMX 기반 To-Do 앱 &lt;code&gt;gotodo&lt;/code&gt; 를 새로 부트스트래핑한다고 가정하고, 각 문서를 실제로 어떻게 채우는지 발췌 형태로 따라갑니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="가상-프로젝트-gotodo"&gt;가상 프로젝트: &lt;code&gt;gotodo&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;스택은 다음과 같습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go 1.23&lt;/strong&gt; — 표준 라이브러리 중심&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://templ.guide"&gt;templ&lt;/a&gt;&lt;/strong&gt; — Go 네이티브 SSR 템플릿 (type-safe)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://htmx.org"&gt;HTMX 2.0&lt;/a&gt;&lt;/strong&gt; — 클라이언트 JS 최소화&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQLite + &lt;code&gt;modernc.org/sqlite&lt;/code&gt;&lt;/strong&gt; — CGO 없는 순수 Go 드라이버&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;목표는 단순합니다. 할 일 추가/완료/삭제만 되는 SSR 미니멀 앱. 1인 로컬 사용을 가정합니다.&lt;/p&gt;</description></item><item><title>Agentic Coding 시대의 Repo 부트스트래핑 가이드 Part 1: AGENTS.md 와 spec 문서 지형도</title><link>https://philipjkim.cc/posts/20260528-repo-bootstrapping-guide-01/</link><pubDate>Thu, 28 May 2026 19:02:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260528-repo-bootstrapping-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-readme-한-장으로-안-되는-시대"&gt;들어가며: README 한 장으로 안 되는 시대&lt;/h2&gt;
&lt;p&gt;신규 서비스를 위한 git repo 를 막 만들었다고 합시다. 2년 전이라면 &lt;code&gt;README.md&lt;/code&gt; 한 장에 빌드 명령과 디렉터리 구조를 적고, 나머지는 코드와 머릿속에서 합의된 관행으로 굴러갔습니다. 새 팀원이 들어오면 옆 자리 동료가 30분쯤 설명해 주고, 그걸로 충분했습니다.&lt;/p&gt;
&lt;p&gt;지금은 그 &amp;ldquo;옆 자리 동료&amp;rdquo; 역할의 절반 이상을 Claude Code, Codex CLI, Gemini CLI, Cursor 같은 에이전트가 맡고 있습니다. 그런데 에이전트는 옆 자리에 앉지 않습니다. 매 세션마다 처음 합류한 신입처럼 repo 에 들어와서, 우리가 적어 둔 텍스트만 읽고 일을 시작합니다. &lt;strong&gt;에이전트에게 &amp;ldquo;이 프로젝트는 이런 곳이고, 이런 규칙으로 일한다&amp;rdquo; 를 전달하는 문서가 부실하면, 에이전트가 만드는 결과물의 품질은 운에 좌우됩니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>1년 후의 공동 지능 Part 2: 2026 상반기에 새로 드러난 것들</title><link>https://philipjkim.cc/posts/20260528-co-intelligence-revisited-02/</link><pubDate>Thu, 28 May 2026 16:38:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260528-co-intelligence-revisited-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 (1M context) 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260528-co-intelligence-revisited-01/"&gt;Part 1&lt;/a&gt; 에서는 에단 몰릭의 4가지 규칙이 1년 후 어떻게 다시 읽히는지를 다뤘습니다. 이 글은 같은 1년 동안 &lt;strong&gt;원래 규칙에는 없었지만 지금은 핵심이 된 다섯 가지 주제&lt;/strong&gt;를 정리합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;agentic coding 의 본격화 — 도구 지형의 재편&lt;/li&gt;
&lt;li&gt;vibe coding 과 새로 발견된 보안 문제들&lt;/li&gt;
&lt;li&gt;인지 위축(cognitive atrophy)과 스킬 형성의 비대칭&lt;/li&gt;
&lt;li&gt;MCP — 에이전트 간 표준의 등장&lt;/li&gt;
&lt;li&gt;컨텍스트 엔지니어링 — 새로운 핵심 역량&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;각 주제 끝에서 1년 전의 네 가지 규칙 중 어디와 연결되는지 짚어 두겠습니다.&lt;/p&gt;</description></item><item><title>1년 후의 공동 지능 Part 1: 에단 몰릭의 4가지 규칙은 2026년에도 유효한가</title><link>https://philipjkim.cc/posts/20260528-co-intelligence-revisited-01/</link><pubDate>Thu, 28 May 2026 16:37:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20260528-co-intelligence-revisited-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 (1M context) 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며--1년-사이에-일어난-일"&gt;들어가며 — 1년 사이에 일어난 일&lt;/h2&gt;
&lt;p&gt;작년 6월, 저는 &lt;a href="https://philipjkim.cc/posts/20250623-the-four-rules-of-co-intelligence-with-ai/"&gt;에단 몰릭이 말하는 AI와의 &amp;ldquo;공동 지능&amp;quot;을 위한 4가지 규칙&lt;/a&gt;이라는 포브스 인터뷰를 번역해 올렸습니다. 와튼 스쿨의 에단 몰릭(Ethan Mollick) 교수가 자신의 책 &lt;em&gt;Co-Intelligence: Living and Working with AI&lt;/em&gt;(2024)에서 제시한 네 가지 규칙을 설명한 인터뷰였습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;항상 AI를 자리에 초대하라(Always invite AI to the table)&lt;/li&gt;
&lt;li&gt;인간이 (의사결정) 과정에 참여하라(Be the human in the loop)&lt;/li&gt;
&lt;li&gt;AI를 사람처럼 대하되, 어떤 종류의 사람인지 알려줘라(Treat AI like a person, but tell it what kind of person it is)&lt;/li&gt;
&lt;li&gt;이것이 당신이 사용하게 될 최악의 AI라고 가정하라(Assume this is the worst AI you will ever use)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;그로부터 1년 가량이 지난 2026년 5월 현재, 이 규칙들은 여전히 유효할까요? 결론부터 말씀드리면, 큰 틀에서는 맞지만 &lt;strong&gt;세부 작동 방식과 강조점은 상당히 바뀌었습니다.&lt;/strong&gt; 몰릭 자신도 2026년 3월 &lt;a href="https://www.oneusefulthing.org/p/the-shape-of-the-thing"&gt;The Shape of the Thing&lt;/a&gt;이라는 글에서 &amp;ldquo;우리는 AI와 함께 일하는 시대(co-intelligence)에서 AI를 관리하는 시대(managing AIs)로 넘어가고 있다&amp;quot;고 새 프레임을 제시했습니다.&lt;/p&gt;</description></item><item><title>일본 애니메이션 타임루프물 추천 7선</title><link>https://philipjkim.cc/posts/20260528-anime-time-loop-recommendations/</link><pubDate>Thu, 28 May 2026 10:45:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260528-anime-time-loop-recommendations/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;같은 시간을 반복해서 살아가는 주인공. 그가 죽거나 실패할 때마다 시계는 다시 처음으로 되돌아갑니다. 그리고 그는 이전의 기억을 안고 다시 한번 같은 상황과 마주합니다. &lt;strong&gt;타임루프(time loop)&lt;/strong&gt; 라는 장르는 이 단순한 설정만으로도 묘한 긴장감과 철학적 질문을 만들어 냅니다. &amp;ldquo;만약 한 번 더 기회가 있다면 무엇을 바꿀 것인가?&amp;rdquo;, &amp;ldquo;수없이 반복되는 삶 속에서도 의미를 찾을 수 있는가?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;일본 애니메이션은 유독 이 장르에서 강합니다. 청춘 로맨스부터 SF 스릴러, 미스터리 호러, 다크 판타지까지 다양한 톤으로 변주되어 왔고, 각 작품마다 &amp;ldquo;반복&amp;quot;이라는 장치를 통해 인물의 성장과 선택의 무게를 깊이 있게 풀어 냅니다. 이번 글에서는 타임루프 장르에 입문하거나, 명작을 놓치고 싶지 않은 분들을 위해 반드시 보아야 할 일본 애니메이션 7편을 추천드립니다.&lt;/p&gt;</description></item><item><title>정신적으로 강한 사람들의 6가지 습관 Part 2: 감사·반응·사람 + 추천 도서</title><link>https://philipjkim.cc/posts/20260526-6-habits-of-mentally-strong-people-02/</link><pubDate>Tue, 26 May 2026 08:19:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260526-6-habits-of-mentally-strong-people-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Accidental Genius, &lt;a href="https://factsbyaccidentalgenius.quora.com/6-habits-of-mentally-strong-people"&gt;6 habits of mentally strong people&lt;/a&gt; — &amp;ldquo;6 habits of mentally strong people&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260526-6-habits-of-mentally-strong-people-01/"&gt;Part 1&lt;/a&gt;에서는 자기 통제, 과정에 대한 신뢰, 말 줄이기라는 세 가지 습관을 다뤘습니다. 이 세 가지가 정신력의 &amp;ldquo;토대&amp;quot;였다면, Part 2의 세 가지는 그 토대 위에서 일상의 감정과 관계를 다루는 &amp;ldquo;운영 원리&amp;quot;에 가깝습니다.&lt;/p&gt;
&lt;p&gt;Part 2에서 다루는 세 가지는 다음과 같습니다.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;기대하지 말고, 모든 것에 감사하라&lt;/li&gt;
&lt;li&gt;덜 반응하는 법을 배워라&lt;/li&gt;
&lt;li&gt;친구를 신중하게 골라라&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;그리고 글의 마지막에는 여섯 가지 습관 각각을 더 깊이 탐구할 수 있는 &lt;strong&gt;추천 도서&lt;/strong&gt;를 정리했습니다.&lt;/p&gt;</description></item><item><title>정신적으로 강한 사람들의 6가지 습관 Part 1: 통제·과정·침묵</title><link>https://philipjkim.cc/posts/20260526-6-habits-of-mentally-strong-people-01/</link><pubDate>Tue, 26 May 2026 08:19:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20260526-6-habits-of-mentally-strong-people-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Accidental Genius, &lt;a href="https://factsbyaccidentalgenius.quora.com/6-habits-of-mentally-strong-people"&gt;6 habits of mentally strong people&lt;/a&gt; — &amp;ldquo;6 habits of mentally strong people&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;정신적으로 강하다는 것은 감정을 느끼지 않는다는 뜻이 아닙니다. 오히려 그 반대입니다. 강한 사람은 누구보다 또렷하게 감정을 느끼면서도, 그 감정에 휘둘려 행동하지 않습니다. 화가 나도 화에 끌려가지 않고, 불안해도 불안에 잠식되지 않으며, 칭찬을 받아도 들뜨지 않고, 비난을 받아도 무너지지 않습니다.&lt;/p&gt;
&lt;p&gt;원문은 이러한 정신력을 만드는 여섯 가지 습관을 짧고 강렬한 문장으로 정리합니다. 각 문장은 그 자체로 완결된 격언이지만, 막상 일상에 적용하려고 하면 &amp;ldquo;그래서 구체적으로 무엇을 하라는 것인가?&amp;ldquo;라는 질문에 부딪힙니다.&lt;/p&gt;</description></item><item><title>Cory Wong, 그루브 디자이너 Part 2: 비슷한 스타일의 기타리스트와 밴드 5</title><link>https://philipjkim.cc/posts/20260521-cory-wong-02/</link><pubDate>Thu, 21 May 2026 15:57:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260521-cory-wong-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="../20260521-cory-wong-01"&gt;지난 편&lt;/a&gt;에서 우리는 Cory Wong이 단순한 기타리스트가 아니라 &amp;ldquo;그루브 디자이너&amp;quot;에 가깝다는 점을 살펴봤습니다. 이번 편에서는 그의 스타일을 사랑하는 사람들이라면 &lt;strong&gt;거의 무조건 좋아하게 되는&lt;/strong&gt; 다른 아티스트들을 소개합니다.&lt;/p&gt;
&lt;p&gt;추천 기준은 다음과 같습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;리듬 중심의 사고&lt;/li&gt;
&lt;li&gt;빈 공간을 잘 활용&lt;/li&gt;
&lt;li&gt;밴드 앙상블 위주의 미학&lt;/li&gt;
&lt;li&gt;funk/소울/네오소울/디스코 계열&lt;/li&gt;
&lt;li&gt;테크닉을 자랑하기보다 곡을 살리는 태도&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-nile-rodgers--cory-wong-계보의-대부"&gt;1. Nile Rodgers — Cory Wong 계보의 &amp;ldquo;대부&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Cory Wong을 이야기할 때 빠질 수 없는 인물이 바로 &lt;strong&gt;Nile Rodgers&lt;/strong&gt; 입니다. 1970년대 Chic의 리듬 기타리스트로 시작해 David Bowie, Madonna, Daft Punk까지 50년에 걸쳐 팝 역사에서 그루브의 한 축을 만들어낸 거장입니다.&lt;/p&gt;</description></item><item><title>Cory Wong, 그루브 디자이너 Part 1: 그는 왜 뮤지션들에게 사랑받는가</title><link>https://philipjkim.cc/posts/20260521-cory-wong-01/</link><pubDate>Thu, 21 May 2026 15:56:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260521-cory-wong-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;요즘 음악 듣는 사람들 중에 Cory Wong이라는 기타리스트의 이름을 한 번쯤은 들어보지 않았을까 합니다. 유튜브에는 그의 라이브 클립이 수백만 뷰를 기록하고, SNS에서는 그의 연주 영상이 끊임없이 공유됩니다.&lt;/p&gt;
&lt;p&gt;흥미로운 점은 그를 가장 열광적으로 추앙하는 사람들이 일반 청취자보다 &lt;strong&gt;다른 뮤지션들&lt;/strong&gt;이라는 사실입니다. 베이시스트, 드러머, 작곡가, 세션 연주자들이 그의 이름을 꺼낼 때의 표정은 단순한 팬심이 아니라 일종의 경외에 가깝습니다.&lt;/p&gt;
&lt;p&gt;왜일까요? 그가 화려한 솔로를 치는 사람이라서? 빠른 속주의 달인이라서? &lt;strong&gt;아닙니다.&lt;/strong&gt; 오히려 정반대의 이유 때문입니다.&lt;/p&gt;</description></item><item><title>Superpowers 플러그인 가이드 Part 4: 명시 호출 vs 자동 트리거 — 실전 가이드와 한계</title><link>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-04/</link><pubDate>Wed, 20 May 2026 16:58:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260520-superpowers-plugin-guide-01/"&gt;1편&lt;/a&gt; 에서 개요와 설치를, &lt;a href="../20260520-superpowers-plugin-guide-02/"&gt;2편&lt;/a&gt; 에서 핵심 워크플로우를, &lt;a href="../20260520-superpowers-plugin-guide-03/"&gt;3편&lt;/a&gt; 에서 품질 보증 스킬을 다뤘습니다. 마지막 4편에서는 실전에서 가장 자주 부딪히는 질문에 답합니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;이거 그냥 두면 알아서 다 해주는 건가요, 아니면 매번 &lt;code&gt;/superpowers:xxx&lt;/code&gt; 로 호출해야 하나요?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;답은 &lt;strong&gt;&amp;ldquo;대부분 자동이지만, 의도적으로 명시 호출해야 더 잘 작동하는 케이스가 있다&amp;rdquo;&lt;/strong&gt; 입니다. 이 글에서는 두 모드의 비교 분석, 트러블슈팅, 커스터마이즈 방법, 그리고 Java/Go 백엔드 개발 현장에서의 실용 팁과 한계를 정리합니다.&lt;/p&gt;</description></item><item><title>Superpowers 플러그인 가이드 Part 3: 품질 보증 스킬 — TDD, Systematic Debugging, Verification, Code Review</title><link>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-03/</link><pubDate>Wed, 20 May 2026 16:57:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260520-superpowers-plugin-guide-01/"&gt;1편&lt;/a&gt; 에서 Superpowers 의 개요와 설치를, &lt;a href="../20260520-superpowers-plugin-guide-02/"&gt;2편&lt;/a&gt; 에서 핵심 워크플로우를 다뤘습니다. 3편은 그 워크플로우 안에서 작동하면서 &lt;strong&gt;에이전트의 합리화와 빠져나갈 구멍을 차단&lt;/strong&gt; 하는 품질 보증 스킬들을 자세히 들여다봅니다.&lt;/p&gt;
&lt;p&gt;이 스킬들은 모두 &amp;ldquo;Iron Law&amp;rdquo; 라는 이름의 명문화된 규칙을 갖고 있다는 공통점이 있습니다. 그리고 각 스킬의 문서 안에는 &lt;strong&gt;&amp;ldquo;Red Flags&amp;rdquo; 표&lt;/strong&gt; 가 들어 있어, 에이전트가 빠져나가려 할 때 흔히 하는 합리화의 패턴들을 그대로 박아두었습니다. 이게 결과적으로 모델의 행동을 바꿉니다.&lt;/p&gt;</description></item><item><title>Superpowers 플러그인 가이드 Part 2: 핵심 워크플로우 — Brainstorming부터 Subagent-driven Development까지</title><link>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-02/</link><pubDate>Wed, 20 May 2026 16:56:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="../20260520-superpowers-plugin-guide-01/"&gt;1편&lt;/a&gt; 에서는 Superpowers 가 무엇이고 어떻게 자동 트리거되는지를 다뤘습니다. 2편은 가장 핵심이라고 할 수 있는 &lt;strong&gt;개발 워크플로우 전체&lt;/strong&gt; 를 깊게 들여다봅니다.&lt;/p&gt;
&lt;p&gt;전체 흐름은 다음과 같습니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart LR
 A[brainstorming] --&amp;gt; B[using-git-worktrees]
 B --&amp;gt; C[writing-plans]
 C --&amp;gt; D{독립 태스크?}
 D --&amp;gt;|yes| E[subagent-driven-development]
 D --&amp;gt;|no/사람 체크포인트 선호| F[executing-plans]
 E --&amp;gt; G[finishing-a-development-branch]
 F --&amp;gt; G

 style A fill:#90EE90,color:#000000
 style B fill:#87CEEB,color:#000000
 style C fill:#FFD700,color:#000000
 style D fill:#FFB6C1,color:#000000
 style E fill:#DDA0DD,color:#000000
 style F fill:#DDA0DD,color:#000000
 style G fill:#FFA07A,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 글에서는 각 스킬이 실제로 무엇을 하는지, 그리고 &lt;strong&gt;Go 기반 백엔드 서비스에 새 API 엔드포인트를 추가&lt;/strong&gt; 하는 시나리오를 따라가며 흐름을 체험해 봅니다.&lt;/p&gt;</description></item><item><title>Superpowers 플러그인 가이드 Part 1: 소개, 설치, 그리고 철학</title><link>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-01/</link><pubDate>Wed, 20 May 2026 16:55:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260520-superpowers-plugin-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;Claude Code, Codex CLI, Cursor 등 코딩 에이전트(coding agent)를 매일 쓰는 백엔드 개발자라면 한 번쯤은 이런 경험이 있을 겁니다. &amp;ldquo;간단한 기능 하나만 추가해줘&amp;rdquo; 라고 했더니, 요구사항 정리 없이 코드를 우다다 쏟아내다가 절반쯤에서 길을 잃고, 테스트도 빠진 채 &amp;ldquo;완료했습니다&amp;rdquo; 라고 보고하는 경우 말입니다. 모델은 똑똑한데, 작업 방식이 들쭉날쭉해서 결과의 품질이 운에 좌우됩니다.&lt;/p&gt;
&lt;p&gt;Jesse Vincent 가 만든 &lt;strong&gt;&lt;a href="https://github.com/obra/superpowers"&gt;Superpowers&lt;/a&gt;&lt;/strong&gt; 는 바로 이 지점을 노린 플러그인입니다. 모델을 더 똑똑하게 만드는 게 아니라, 모델이 &lt;strong&gt;언제, 어떤 순서로, 어떤 규율로&lt;/strong&gt; 일해야 하는지를 강제하는 &amp;ldquo;방법론(methodology)&amp;rdquo; 자체를 플러그인 형태로 주입합니다.&lt;/p&gt;</description></item><item><title>번역글: 자신을 존중하는 방법</title><link>https://philipjkim.cc/posts/20260519-how-to-respect-yourself/</link><pubDate>Tue, 19 May 2026 07:33:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260519-how-to-respect-yourself/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Moxie, &lt;a href="https://www.quora.com/profile/Moxie-179/HOW-TO-RESPECT-YOUR-SELF"&gt;How to Respect Yourself&lt;/a&gt; — &amp;ldquo;How to Respect Yourself&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="자신을-존중하는-방법"&gt;자신을 존중하는 방법&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;(1)&lt;/strong&gt; 당신을 찾지 않는 사람을 더 이상 찾지 마세요.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(2)&lt;/strong&gt; 매달리지 마세요.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(3)&lt;/strong&gt; 필요 이상으로 말하지 마세요.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(4)&lt;/strong&gt; 누군가 당신을 무례하게 대한다면, 그 자리에서 곧바로 짚고 넘어가세요.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(5)&lt;/strong&gt; 상대가 당신의 것을 누리는 것보다, 당신이 상대의 것을 누리는 일이 더 잦지 않게 하세요.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(6)&lt;/strong&gt; 어떤 사람들에게는 방문하는 횟수를 줄이세요. 특히 그 사람이 같은 마음으로 화답하지 않는다면 더더욱.&lt;/p&gt;</description></item><item><title>타율 vs OPS: 클래식 강타자와 세이버메트릭스 강타자 비교 — MLB·KBO 사례 분석</title><link>https://philipjkim.cc/posts/20260504-classic-vs-sabermetrics-hitter/</link><pubDate>Mon, 04 May 2026 10:51:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20260504-classic-vs-sabermetrics-hitter/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며--같은-단어-다른-강타자"&gt;들어가며 — 같은 단어, 다른 강타자&lt;/h2&gt;
&lt;p&gt;야구 팬들이 &amp;ldquo;강타자&amp;quot;라는 단어를 쓸 때, 머릿속에 떠올리는 이미지는 사람마다 꽤 다릅니다. 어떤 이는 &amp;ldquo;삼진을 거의 당하지 않고 매 타석 공을 어떻게든 그라운드 안으로 맞혀 보내는 컨택트의 달인&amp;quot;을 떠올리고, 어떤 이는 &amp;ldquo;한 시즌에 50개 이상 담장을 넘기는 거포&amp;quot;를 떠올립니다. 둘 다 강타자라는 말이 어색하지 않지만, 두 선수를 한 줄로 세우는 데 사용하는 자(尺)는 시대에 따라 크게 바뀌어 왔습니다.&lt;/p&gt;</description></item><item><title>Agentic Coding 시대의 개발방법론 — 더 중요해진 5가지, 무용해진 5가지</title><link>https://philipjkim.cc/posts/20260428-agentic-coding-methodologies-survived-and-faded/</link><pubDate>Tue, 28 Apr 2026 12:40:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20260428-agentic-coding-methodologies-survived-and-faded/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-사라진-것이-아니라-재배치되었다"&gt;들어가며: 사라진 것이 아니라 재배치되었다&lt;/h2&gt;
&lt;p&gt;2025년 한 해를 거치면서 백엔드 개발자가 키보드 앞에서 보내는 시간의 모양이 크게 달라졌습니다. Claude Code, Cursor, Codex 같은 에이전트가 대부분의 코드를 직접 작성하고, 사람은 명세를 다듬고, 결과를 검증하고, 다음 작업을 지시하는 시간이 길어졌습니다. Stack Overflow의 &lt;a href="https://stackoverflow.blog/2025/12/29/developers-remain-willing-but-reluctant-to-use-ai-the-2025-developer-survey-results-are-here/"&gt;2025 Developer Survey&lt;/a&gt;는 응답자의 66%가 &lt;em&gt;almost-right AI code&lt;/em&gt; 를 고치는 데 더 많은 시간을 쓰고 있다고 답했습니다.&lt;/p&gt;
&lt;p&gt;이 변화 앞에서 가장 자주 듣는 잘못된 결론이 &lt;em&gt;&amp;ldquo;이제 SW 엔지니어링 방법론은 다 의미가 없어졌다&amp;rdquo;&lt;/em&gt; 입니다. 하지만 2025년 하반기에서 2026년 초까지 Kent Beck, Birgitta Böckeler, Simon Willison, Armin Ronacher, Steve Yegge처럼 실제로 에이전트와 매일 일하는 시니어 엔지니어들이 남긴 글을 읽어 보면 정반대 그림이 보입니다. &lt;strong&gt;방법론이 사라진 것이 아니라, 어떤 것은 더 중요해지고 어떤 것은 의미를 잃는 형태로 재배치되었습니다&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>야구의 이상한 매력 Part 4: 데이터의 천국, 왜 너드들이 야구에 미치는가</title><link>https://philipjkim.cc/posts/20260427-baseball-unique-charm-04/</link><pubDate>Mon, 27 Apr 2026 18:34:38 +0900</pubDate><guid>https://philipjkim.cc/posts/20260427-baseball-unique-charm-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="영화-머니볼이-왜-야구에서만-만들어질-수-있었는가"&gt;영화 〈머니볼〉이 왜 야구에서만 만들어질 수 있었는가&lt;/h2&gt;
&lt;p&gt;2011년 영화 〈머니볼(Moneyball)〉을 본 분들이 있을 겁니다. 브래드 피트가 오클랜드 애슬레틱스의 단장 빌리 빈(Billy Beane)을 연기하고, 조나 힐이 통계학자 피터 브랜드를 연기한 영화입니다. 가난한 팀이 데이터 분석으로 비싼 팀들을 이긴다는 이야기입니다.&lt;/p&gt;
&lt;p&gt;이 영화는 마이클 루이스(Michael Lewis)의 동명 논픽션을 원작으로 합니다. 그리고 이 책의 부제는 다음과 같습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The Art of Winning an Unfair Game&lt;/strong&gt;
(불공정한 게임에서 이기는 기술)&lt;/p&gt;</description></item><item><title>야구의 이상한 매력 Part 3: 매 타석은 체스 한 판</title><link>https://philipjkim.cc/posts/20260427-baseball-unique-charm-03/</link><pubDate>Mon, 27 Apr 2026 18:34:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260427-baseball-unique-charm-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="한-타석에서-실제로-무슨-일이-벌어지는가"&gt;한 타석에서 실제로 무슨 일이 벌어지는가&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260427-baseball-unique-charm-02/"&gt;Part 2&lt;/a&gt;에서 투수와 타자가 한 팀 안의 두 직업이라고 정리했습니다. 그렇다면 이 둘이 실제로 한 타석에서 만나면 무슨 일이 일어날까요?&lt;/p&gt;
&lt;p&gt;겉으로 보면 단순합니다. 투수가 던지고, 타자가 칩니다. 한 타석은 평균 3.9구, 약 1~2분이면 끝납니다.&lt;/p&gt;
&lt;p&gt;그런데 그 1~2분 안에 양 진영에서 실제로 일어나는 일은 매우 정교합니다. 한 번의 투구가 던져지기 전에 다음 변수들이 모두 계산됩니다.&lt;/p&gt;</description></item><item><title>야구의 이상한 매력 Part 2: 한 팀 안의 두 직업, 투수와 타자</title><link>https://philipjkim.cc/posts/20260427-baseball-unique-charm-02/</link><pubDate>Mon, 27 Apr 2026 18:34:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260427-baseball-unique-charm-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="한-팀-안에-두-종류의-운동선수가-있다"&gt;한 팀 안에 두 종류의 운동선수가 있다&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260427-baseball-unique-charm-01/"&gt;Part 1&lt;/a&gt;에서 야구는 1대1 대결의 무한 반복이라고 정리했습니다. 그렇다면 그 1대1의 두 주인공은 누구인가? &lt;strong&gt;투수와 타자&lt;/strong&gt;입니다. 그리고 이 둘은 같은 유니폼을 입고 같은 팀에서 뛰지만, 사실상 거의 다른 종목의 운동선수에 가깝습니다.&lt;/p&gt;
&lt;p&gt;다른 메이저 스포츠를 떠올려 봅시다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;축구&lt;/strong&gt;: 골키퍼 한 명을 빼면 나머지 10명은 모두 비슷한 동작 세트를 합니다. 뛰고, 패스하고, 슛합니다. 미드필더와 공격수의 차이는 역할 비중이지 동작 자체는 아닙니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;농구&lt;/strong&gt;: 포인트가드와 센터의 신체 조건은 다르지만, 결국 슛, 드리블, 패스, 리바운드라는 같은 도구 세트로 게임을 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;미식축구&lt;/strong&gt;: 쿼터백, 라인맨, 리시버 등 포지션이 갈리지만, 모두 한 플레이에 동시에 필드 위에서 부딪칩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;야구는 어떨까요? 투수는 마운드 위에서 한 명이 공을 던집니다. 타자는 타석에서 한 명이 그 공을 칩니다. &lt;strong&gt;이 둘은 동작이 다르고, 훈련법이 다르고, 신체 조건이 다르고, 평가 지표가 다릅니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>야구의 이상한 매력 Part 1: 시간을 멈춘 스포츠</title><link>https://philipjkim.cc/posts/20260427-baseball-unique-charm-01/</link><pubDate>Mon, 27 Apr 2026 18:34:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260427-baseball-unique-charm-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-축구-팬이-야구-중계를-처음-켰을-때"&gt;들어가며: 축구 팬이 야구 중계를 처음 켰을 때&lt;/h2&gt;
&lt;p&gt;손흥민 골을 보려고 EPL 새벽 중계를 챙겨 보던 친구가 있습니다. 어느 날 미국 출장을 다녀오더니 이렇게 말했습니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;호텔에서 야구 보다가 진짜 답답해 죽는 줄 알았어. 한 번 던지고, 또 한 번 던지고, 자꾸 멈추고. 4시간 동안 점수가 5대 3이라고? 그게 끝이라고?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;그 친구는 NBA 플레이오프는 새벽 3시에도 챙겨 봅니다. 평균 109점 vs 105점이 1초 차이로 갈리는 그 긴장감을 사랑합니다. 그런 사람이 야구를 켜면 정말로 이렇게 느낍니다.&lt;/p&gt;</description></item><item><title>경마식 베팅 게임 설계 가이드 Part 2: 시스템 구축과 봇 유저 시뮬레이션</title><link>https://philipjkim.cc/posts/20260423-horse-racing-betting-game-design-02/</link><pubDate>Thu, 23 Apr 2026 10:15:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260423-horse-racing-betting-game-design-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260423-horse-racing-betting-game-design-01/"&gt;Part 1&lt;/a&gt; 에서 경마식 베팅의 유래·구조·승식 체계를 정리했습니다. 이번 편에서는 실제로 경마식 베팅을 서비스에 도입할 때 마주치는 &lt;strong&gt;엔지니어링/운영 이슈&lt;/strong&gt; 와, 초기 유저가 부족할 때 풀을 채우기 위한 &lt;strong&gt;봇 유저 시뮬레이션&lt;/strong&gt; 을 다룹니다.&lt;/p&gt;
&lt;p&gt;전자는 경험 많은 설계자라면 체크리스트처럼 훑어도 좋고, 후자는 간단해 보이지만 제대로 구현하려면 생각보다 품이 많이 드는 주제입니다. 특히 &amp;ldquo;실제 사람이 건 것처럼&amp;rdquo; 보이게 하려면 단순 랜덤 함수로는 한참 부족합니다.&lt;/p&gt;</description></item><item><title>경마식 베팅 게임 설계 가이드 Part 1: 유래, 파리뮤추얼 구조, 승식 종류</title><link>https://philipjkim.cc/posts/20260423-horse-racing-betting-game-design-01/</link><pubDate>Thu, 23 Apr 2026 10:14:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260423-horse-racing-betting-game-design-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;이전 글 &lt;a href="https://philipjkim.cc/posts/20260415-betting-game-design-guide/"&gt;유저가 픽하는 게임의 밸런스 설계 가이드: 파리뮤추얼부터 AMM까지&lt;/a&gt; 에서는 픽 게임에서 활용할 수 있는 여섯 가지 배당 메커니즘을 훑어봤습니다. 그 중 &lt;strong&gt;파리뮤추얼(pari-mutuel)&lt;/strong&gt; 은 한 줄로 요약하면 &amp;ldquo;운영자가 몫을 떼고 남은 돈을 승자끼리 나눠 갖는 방식&amp;rdquo; 입니다. 실제 현장에서 가장 오래 검증된 이 구조는 경마·경륜·경정 같은 공영 베팅의 근간이기도 합니다.&lt;/p&gt;
&lt;p&gt;그런데 현업에서 &amp;ldquo;경마식 베팅을 우리 서비스에 넣자&amp;rdquo; 는 요구가 들어오면, 단순히 &amp;ldquo;파리뮤추얼로 계산하면 됩니다&amp;rdquo; 만으로는 구현에 들어갈 수 없습니다. 단승·복승·쌍승·삼쌍승 같은 &lt;strong&gt;승식(Bet Type)&lt;/strong&gt; 마다 풀과 계산식이 다르고, 승식별로 베터가 기대하는 배당 수준과 난이도가 천차만별이기 때문입니다.&lt;/p&gt;</description></item><item><title>90년대 발라드의 설계자, 작곡가 오태호</title><link>https://philipjkim.cc/posts/20260420-oh-tae-ho-hitmaker/</link><pubDate>Mon, 20 Apr 2026 14:07:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20260420-oh-tae-ho-hitmaker/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.7 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="오태호-그는-누구인가"&gt;오태호, 그는 누구인가&lt;/h2&gt;
&lt;p&gt;오태호(1968~)는 1980년대 후반부터 1990년대를 관통하며 &lt;strong&gt;한국 발라드의 뼈대를 세운 싱어송라이터이자 작사·작곡가&lt;/strong&gt; 입니다. 서정적인 가사와 담백한 멜로디의 결합으로, 1990년대 초중반 발라드계를 대표하는 이름 중 하나로 꼽힙니다.&lt;/p&gt;
&lt;p&gt;흥미롭게도 그의 음악적 출발점은 록이었습니다. 서울고등학교 시절 록 기타리스트를 꿈꾸던 그는 신중현의 아들 신윤철 등과 함께 연합 밴드에서 활동했고, 1987년 &lt;strong&gt;이승환과 함께 인디 밴드 &amp;lsquo;아카시아&amp;rsquo;로 데뷔&lt;/strong&gt;, 이듬해에는 소프트록 성향의 &lt;strong&gt;&amp;lsquo;공중전화&amp;rsquo;&lt;/strong&gt; 에 기타리스트로 참여합니다. 기타 실력은 당시 신대철(시나위)이 라이벌로 여길 정도였고, 조용필의 세션 제의까지 받았을 만큼 뛰어났습니다.&lt;/p&gt;</description></item><item><title>맞춰잡는 투수의 미학: 현대 MLB 최고의 효율형 선발투수 3인</title><link>https://philipjkim.cc/posts/20260416-mlb-contact-management-pitchers/</link><pubDate>Thu, 16 Apr 2026 14:24:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20260416-mlb-contact-management-pitchers/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-맞춰잡는-투수란-무엇인가"&gt;1. &amp;lsquo;맞춰잡는 투수&amp;rsquo;란 무엇인가&lt;/h2&gt;
&lt;p&gt;현대 메이저리그는 삼진의 시대입니다. 160km를 넘나드는 포심 패스트볼과 날카로운 스위퍼로 타자의 방망이를 공중에 멈추게 하는 것이 대세가 된 지 오래입니다. 하지만 그 흐름 속에서 조금 다른 방식으로 승리를 쌓아가는 투수들이 있습니다. 바로 &lt;strong&gt;&amp;lsquo;맞춰잡는(Contact Management)&amp;rsquo; 유형의 선발투수&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;p&gt;이 유형의 투수들은 삼진보다 &lt;strong&gt;범타(Weak Contact)&lt;/strong&gt; 유도를 핵심 무기로 삼습니다. 타자의 배트에 공을 맞추되, 정타를 허용하지 않는 것이 철학입니다. 그 결과물은 명확합니다:&lt;/p&gt;</description></item><item><title>유저가 픽하는 게임의 밸런스 설계 가이드: 파리뮤추얼부터 AMM까지</title><link>https://philipjkim.cc/posts/20260415-betting-game-design-guide/</link><pubDate>Wed, 15 Apr 2026 17:22:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260415-betting-game-design-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;스포츠 토토, 판타지 리그, 예측 시장, 심지어 DAO 투표까지 — 유저가 여러 선택지 중 하나를 &amp;ldquo;찍는&amp;rdquo; 게임은 생각보다 많습니다. 이런 게임의 재미와 밸런스를 결정하는 핵심은 &lt;strong&gt;&amp;ldquo;픽의 결과를 어떻게 점수로 환산하느냐&amp;rdquo;&lt;/strong&gt; 에 있습니다.&lt;/p&gt;
&lt;p&gt;단순히 &amp;ldquo;맞히면 +1, 틀리면 0&amp;quot;으로 끝내면 게임이 금방 지루해집니다. 모두가 뻔한 정답만 찍게 되고, 변별력이 사라지며, 운영자 입장에서는 상위권이 고정되어 신규 유저 유입이 막히죠. 반대로 너무 복잡하면 유저가 전략을 이해하지 못하고 이탈합니다.&lt;/p&gt;</description></item><item><title>KBO 역대 대첩 TOP 5: 우리는 왜 이걸 보고 있을까</title><link>https://philipjkim.cc/posts/20260415-kbo-top-5-daecheop/</link><pubDate>Wed, 15 Apr 2026 10:05:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20260415-kbo-top-5-daecheop/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-대첩이란-무엇인가"&gt;들어가며: 대첩이란 무엇인가&lt;/h2&gt;
&lt;p&gt;야구에서 &amp;ldquo;명경기&amp;quot;라는 단어는 보통 양 팀이 끝까지 집중력을 잃지 않고, 좋은 투구와 좋은 타격, 좋은 수비가 어우러진 경기를 칭찬하는 표현입니다. 그런데 KBO 팬들은 또 다른 종류의 &amp;ldquo;명경기&amp;quot;를 부르는 그들만의 단어를 가지고 있습니다. 바로 &lt;strong&gt;대첩&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;p&gt;대첩은 칭찬이 아닙니다. 정확히 말하면, &lt;strong&gt;칭찬도 욕도 아닌 그 사이 어딘가에 있는 묘한 헌사&lt;/strong&gt; 입니다. 양 팀이 사이좋게 자멸하고, 볼넷과 폭투와 실책이 난무하며, 9회까지 가도 도무지 끝날 기미가 보이지 않는 그런 경기. 보고 있으면 이게 프로 경기가 맞는지 의심이 들면서도, 또 묘하게 채널을 돌리지 못하는 그런 경기. KBO 팬이라면 누구나 한 번쯤은 &amp;ldquo;내가 이걸 왜 보고 있지?&amp;ldquo;라는 자문과 함께 새벽까지 TV 앞을 떠나지 못한 기억이 있을 겁니다.&lt;/p&gt;</description></item><item><title>봄부터 초여름 제철 스시 재료: 오마카세에서 만나는 고급 어종 7선</title><link>https://philipjkim.cc/posts/20260413-spring-early-summer-sushi-fish/</link><pubDate>Mon, 13 Apr 2026 14:22:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260413-spring-early-summer-sushi-fish/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;봄부터 초여름(3~7월) 사이는 바닷물이 서서히 따뜻해지며 다양한 어종들이 산란기를 앞두고 살을 찌우거나, 반대로 산란을 마치고 새로운 먹이 활동을 시작하는 역동적인 시기입니다. 한국의 남해·제주 앞바다와 일본 연안에서 잡히는 생선 중, 하이엔드 스시 오마카세에서 이타마에(板前)가 자신의 기량을 드러내기 위해 즐겨 사용하는 고급 어종 7가지를 정리해 보았습니다.&lt;/p&gt;
&lt;p&gt;이전 글에서 다루었던 &lt;strong&gt;&amp;lsquo;나마자케(生酒)&amp;lsquo;와 &amp;lsquo;일반 사케&amp;rsquo;의 특성&lt;/strong&gt; 을 염두에 두고 페어링을 살펴보시면 더욱 흥미로우실 겁니다.&lt;/p&gt;</description></item><item><title>2년 후 프로그래밍은 어떤 모습일까 — 아무도 모릅니다</title><link>https://philipjkim.cc/posts/20260410-nobody-knows-programming-in-two-years/</link><pubDate>Fri, 10 Apr 2026 12:58:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20260410-nobody-knows-programming-in-two-years/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 아래 두 편의 글을 재구성한 것입니다:&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Charles Humble, &lt;a href="https://leaddev.com/ai/nobody-knows-what-programming-will-look-like-in-two-years"&gt;Nobody knows what programming will look like in two years&lt;/a&gt; (LeadDev, 2026.02.18)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Tom Johnson, &lt;a href="https://idratherbewriting.com/blog/nobody-knows-two-years-from-now"&gt;Nobody knows what it will look like in 2 years&lt;/a&gt; (I&amp;rsquo;d Rather Be Writing, 2026.03.03)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="업계를-떠나야-할까요"&gt;&amp;ldquo;업계를 떠나야 할까요?&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;지난 2년간 개발자 멘토링과 컨퍼런스를 다니며, 프로그래머이자 작가이자 작곡가인 Charles Humble은 이전 30년간 한 번도 들어본 적 없는 질문을 반복적으로 듣게 되었습니다.&lt;/p&gt;</description></item><item><title>번역글: AI와 함께 더 빨리 실패하기</title><link>https://philipjkim.cc/posts/20260408-failing-faster-with-ai-translation/</link><pubDate>Wed, 08 Apr 2026 14:39:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20260408-failing-faster-with-ai-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Dave Thomas, Pragmatic Programmers Newsletter — &amp;ldquo;Failing Faster With AI&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;모든 거대한 컴퓨팅 재앙은 너무 많은 아이디어를 한곳에 집어넣으려다 생겨났습니다.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— Gordon Bell&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;지난 8년쯤 개인 프로젝트를 하나 진행해 왔습니다. 1970년대 중반의 오래된 PIC 언어를 구현하는 것으로 시작했습니다. 셀 수 없이 많은 반복을 거쳤는데, 순수한 PIC 언어로 출발해서 오늘날에는 프로토타입 기반 스크립팅 언어와 애니메이션 기능을 내장한 형태가 되었습니다.&lt;/p&gt;</description></item><item><title>히트곡 제조기, 작곡가 윤일상</title><link>https://philipjkim.cc/posts/20260408-yoon-il-sang-hitmaker/</link><pubDate>Wed, 08 Apr 2026 14:08:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20260408-yoon-il-sang-hitmaker/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="윤일상-그는-누구인가"&gt;윤일상, 그는 누구인가&lt;/h2&gt;
&lt;p&gt;윤일상(1968~)은 한국 대중음악 역사에서 &lt;strong&gt;가장 많은 히트곡을 배출한 작곡가&lt;/strong&gt; 중 한 명입니다. 1990년대 음반 시장의 황금기부터 2000년대 디지털 음원 시대까지, 시대를 가리지 않고 대중의 마음을 사로잡는 곡을 써왔습니다.&lt;/p&gt;
&lt;p&gt;서울예술대학 작곡과를 졸업한 그는 1990년대 초반 쿨(Cool)의 프로듀싱을 통해 이름을 알리기 시작했습니다. 이후 발라드, 댄스, R&amp;amp;B, OST 등 장르의 경계 없이 활동하며, &amp;ldquo;히트곡 제조기&amp;quot;라는 별명을 얻었습니다. 작곡뿐 아니라 편곡과 프로듀싱까지 겸하면서 가수의 개성에 맞춘 곡을 만들어내는 능력이 탁월합니다.&lt;/p&gt;</description></item><item><title>투승타타(投勝打打) — 야구 전통 지표의 가치와 한계</title><link>https://philipjkim.cc/posts/20260407-tuseungtata-analysis/</link><pubDate>Tue, 07 Apr 2026 13:57:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20260407-tuseungtata-analysis/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="투승타타란-무엇인가"&gt;투승타타란 무엇인가&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&amp;ldquo;투수는 승리, 타자는 타점.&amp;rdquo;&lt;/strong&gt; 이 문장의 앞글자를 딴 &lt;strong&gt;투승타타(投勝打打)&lt;/strong&gt; 는 야구에서 각 포지션의 가치를 평가하는 전통적 기준을 압축한 표현입니다. 투수의 핵심 지표는 &lt;strong&gt;승수(Wins)&lt;/strong&gt;, 타자의 핵심 지표는 &lt;strong&gt;타점(RBI)&lt;/strong&gt; 이라는 것이 골자입니다.&lt;/p&gt;
&lt;p&gt;이 관점은 수십 년간 한국과 미국, 일본 프로야구 모두에서 주류 평가 기준이었습니다. 사이영상(Cy Young Award)은 오랫동안 승수가 많은 투수에게 돌아갔고, MVP 투표에서 타점은 타자의 가치를 판단하는 핵심 근거였습니다. 그러나 2000년대 이후 세이버메트릭스(Sabermetrics)의 확산과 함께 이 전통적 관점에 대한 반론이 점점 강해지고 있습니다.&lt;/p&gt;</description></item><item><title>투수 지표 가이드 Part 2: 투수 스타일 분석과 미래 성적 예측</title><link>https://philipjkim.cc/posts/20260402-baseball-pitcher-metrics-02/</link><pubDate>Thu, 02 Apr 2026 08:54:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260402-baseball-pitcher-metrics-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260402-baseball-pitcher-metrics-01/"&gt;Part 1&lt;/a&gt;에서 투수 평가의 주요 지표들을 살펴보았습니다. 이번 글에서는 이 지표들을 실제 MLB 투수들의 데이터와 함께 조합하여, 투수의 스타일을 분류하고 미래 성적을 예측하는 방법을 다룹니다. 특히 미래 예측 파트에서는 과거 데이터를 기반으로 한 예측이 실제로 어떻게 적중했는지를 연도별 데이터 비교를 통해 검증해보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="투수-스타일-분류-실제-투수-데이터로-보는-네-가지-아키타입"&gt;투수 스타일 분류: 실제 투수 데이터로 보는 네 가지 아키타입&lt;/h2&gt;
&lt;h3 id="1-파워-투수-power-pitcher"&gt;1. 파워 투수 (Power Pitcher)&lt;/h3&gt;
&lt;p&gt;순수한 구위로 타자를 압도하는 유형입니다. 삼진이 많고 플라이볼 비율이 높은 경향이 있어 홈런에 취약할 수 있습니다.&lt;/p&gt;</description></item><item><title>투수 지표 가이드 Part 1: 전통 지표부터 세이버메트릭스까지</title><link>https://philipjkim.cc/posts/20260402-baseball-pitcher-metrics-01/</link><pubDate>Thu, 02 Apr 2026 08:54:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260402-baseball-pitcher-metrics-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;야구는 &amp;ldquo;기록의 스포츠&amp;quot;라고 불립니다. 특히 투수는 경기의 흐름을 좌우하는 핵심 포지션으로, 오랜 세월에 걸쳐 다양한 통계 지표가 개발되어 왔습니다. 전통적으로 승수(W)와 평균자책점(ERA)이 투수 평가의 기준이었지만, 2000년대 이후 세이버메트릭스의 부상과 함께 FIP, xFIP, SIERA 등 새로운 지표들이 투수의 실력을 더 정밀하게 측정하고 있습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈에서는 투수 평가에 사용되는 주요 지표들을 체계적으로 정리하고, 이를 활용해 투수의 스타일을 분석하고 미래 성적을 예측하는 방법까지 다룹니다. 각 지표를 설명할 때마다 실제 MLB 투수들의 데이터를 함께 살펴보겠습니다.&lt;/p&gt;</description></item><item><title>크로스플랫폼 To-Do 앱 만들기 Part 4: UI 다듬기와 빌드/배포</title><link>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-04/</link><pubDate>Wed, 01 Apr 2026 09:12:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시리즈-목차"&gt;시리즈 목차&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Part 1: Flutter 소개와 개발 환경 설정&lt;/li&gt;
&lt;li&gt;Part 2: 기본 UI 구성과 상태 관리&lt;/li&gt;
&lt;li&gt;Part 3: 로컬 저장소 연동과 CRUD 완성&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 4: UI 다듬기와 빌드/배포 (이번 글)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="part-3-회고"&gt;Part 3 회고&lt;/h2&gt;
&lt;p&gt;Part 3까지 진행하면서 할 일의 추가, 수정, 삭제, 완료 토글 기능과 로컬 저장소 연동까지 모두 구현했습니다. 기능적으로는 완성된 상태이지만, 실제로 사용자에게 배포하려면 몇 가지 더 다듬어야 할 부분이 있습니다.&lt;/p&gt;</description></item><item><title>크로스플랫폼 To-Do 앱 만들기 Part 3: 상태 관리와 로컬 데이터 저장</title><link>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-03/</link><pubDate>Wed, 01 Apr 2026 09:11:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-02/"&gt;Part 2&lt;/a&gt;에서는 Flutter 위젯을 활용해 To-Do 앱의 UI를 구성했습니다. 할 일을 추가하고, 완료 처리하고, 삭제하는 기본 기능까지 구현했는데요. 한 가지 치명적인 문제가 있었습니다. &lt;strong&gt;앱을 종료했다가 다시 실행하면 모든 데이터가 사라진다&lt;/strong&gt; 는 점입니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;setState&lt;/code&gt;로 관리하던 &lt;code&gt;List&amp;lt;Todo&amp;gt;&lt;/code&gt; 는 메모리에만 존재하기 때문입니다. 이번 Part 3에서는 &lt;strong&gt;Riverpod&lt;/strong&gt; 을 사용한 상태 관리 리팩토링과 &lt;strong&gt;sqflite&lt;/strong&gt; 를 이용한 로컬 데이터 영구 저장을 구현합니다.&lt;/p&gt;
&lt;h2 id="1-setstate의-한계"&gt;1. setState의 한계&lt;/h2&gt;
&lt;p&gt;Part 2에서 사용한 &lt;code&gt;setState&lt;/code&gt;는 간단한 프로토타입에는 충분하지만, 앱 규모가 커지면 여러 문제가 생깁니다.&lt;/p&gt;</description></item><item><title>크로스플랫폼 To-Do 앱 만들기 Part 2: Flutter 기초와 UI 구현</title><link>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-02/</link><pubDate>Wed, 01 Apr 2026 09:10:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-01/"&gt;Part 1&lt;/a&gt;에서 Flutter SDK 설치, 에디터 설정, 에뮬레이터 구성 등 개발 환경을 갖추었습니다. 이제 본격적으로 코드를 작성할 차례입니다.&lt;/p&gt;
&lt;p&gt;이번 Part 2에서는 Dart 언어의 핵심 문법을 빠르게 훑어본 뒤, Flutter의 위젯 시스템을 이해하고, 실제로 동작하는 To-Do 리스트 앱의 UI를 구현합니다. 이 글을 따라 하면 할 일을 추가하고, 완료 표시하고, 삭제하는 기본 기능이 모두 갖춰진 앱을 만들 수 있습니다.&lt;/p&gt;</description></item><item><title>크로스플랫폼 To-Do 앱 만들기 Part 1: 프레임워크 선택과 개발 환경 설정</title><link>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-01/</link><pubDate>Wed, 01 Apr 2026 09:09:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260401-flutter-todo-app-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시리즈-소개"&gt;시리즈 소개&lt;/h2&gt;
&lt;p&gt;이 시리즈에서는 &lt;strong&gt;Flutter&lt;/strong&gt; 를 사용하여 크로스플랫폼 To-Do 앱을 처음부터 끝까지 만들어 봅니다. 하나의 코드베이스로 Android, iOS, 그리고 웹까지 동작하는 앱을 완성하는 것이 목표입니다.&lt;/p&gt;
&lt;p&gt;시리즈는 총 4개의 파트로 구성됩니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Part 1 (이번 글)&lt;/strong&gt; : 프레임워크 선택과 개발 환경 설정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 2&lt;/strong&gt;: UI 구성과 기본 기능 구현&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 3&lt;/strong&gt;: 상태 관리와 로컬 데이터 저장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 4&lt;/strong&gt;: 마무리, 테스트, 빌드 및 배포&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;각 파트는 실습 중심으로 진행됩니다. 따라해 보시면서 자연스럽게 Flutter 개발의 흐름을 익히실 수 있습니다.&lt;/p&gt;</description></item><item><title>Push Your Luck 게임 디자인 가이드 Part 2: 수학적 최적화와 게임 이론</title><link>https://philipjkim.cc/posts/20260330-go-or-stop-game-design-02/</link><pubDate>Mon, 30 Mar 2026 13:38:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260330-go-or-stop-game-design-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260330-go-or-stop-game-design-01/"&gt;Part 1&lt;/a&gt;에서 Push Your Luck 메카닉의 구조와 실제 사례를 살펴보았습니다. 이번 Part 2에서는 수학적 프레임워크를 기반으로 최적의 파라미터를 도출하고, 게임 이론을 적용하는 방안을 다룹니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="수학적-프레임워크-최적-중단-문제"&gt;수학적 프레임워크: 최적 중단 문제&lt;/h2&gt;
&lt;h3 id="기본-모델-정의"&gt;기본 모델 정의&lt;/h3&gt;
&lt;p&gt;변수를 정의합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;p&lt;/strong&gt;: 매일 도전 과제의 성공 확률 (0 &amp;lt; p &amp;lt; 1)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;n&lt;/strong&gt;: 현재 콤보 수 (연속 성공 횟수)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;R(n)&lt;/strong&gt;: 콤보 n에서 Stop했을 때 받는 리워드&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;V(n)&lt;/strong&gt;: 콤보 n에서 &lt;strong&gt;최적 전략&lt;/strong&gt; 을 따랐을 때의 기대값&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;플레이어가 콤보 n에서 내리는 결정은 다음과 같습니다.&lt;/p&gt;</description></item><item><title>Push Your Luck 게임 디자인 가이드 Part 1: 메카닉 분석과 실제 사례</title><link>https://philipjkim.cc/posts/20260330-go-or-stop-game-design-01/</link><pubDate>Mon, 30 Mar 2026 13:37:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260330-go-or-stop-game-design-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;다음과 같은 게임을 상상해 봅시다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;매일 하나의 도전 과제가 주어집니다. 성공률은 평균 N%입니다. 연속으로 성공할 때마다 콤보가 쌓이고, 콤보가 높을수록 받을 수 있는 리워드가 커집니다. 플레이어는 매일 두 가지 선택지 앞에 놓입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go&lt;/strong&gt;: 내일 도전을 이어가서 더 큰 리워드를 노린다&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stop&lt;/strong&gt;: 현재 콤보로 리워드를 수령하고, 내일부터 0콤보로 다시 시작한다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;단, 도전에 실패하면 콤보는 0으로 리셋되고 아무 리워드도 받지 못합니다.&lt;/p&gt;</description></item><item><title>영화 리뷰: 어른 김장하 — 진짜 어른의 의미를 묻다</title><link>https://philipjkim.cc/posts/20260327-movie-review-grown-up-kim-jang-ha/</link><pubDate>Fri, 27 Mar 2026 09:13:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20260327-movie-review-grown-up-kim-jang-ha/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="영화-소개"&gt;영화 소개&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;어른 김장하&lt;/strong&gt; (A Man Who Heals the City)는 2023년 11월 15일 개봉한 다큐멘터리 영화입니다. 감독 김현지, 제작 MBC경남, 배급 시네마달. 러닝타임 105분, 전체관람가.&lt;/p&gt;
&lt;p&gt;경남 진주에서 약 60년간 한약방을 운영한 한약사 김장하 선생의 삶을 담았습니다. 전 재산을 사회에 환원하면서도 인터뷰 한 번 하지 않고, 자신의 옷 한 벌도 허투루 사지 않는 한 사람의 이야기입니다.&lt;/p&gt;
&lt;p&gt;이 작품은 김주완 전 경남도민일보 기자의 책 《줬으면 그만이지》 와 함께 기획되었으며, &lt;strong&gt;제59회 백상예술대상 TV부문 교양 작품상&lt;/strong&gt; 을 수상했습니다. 지역 방송국 자체제작 프로그램이 백상예술대상에서 작품상을 받은 것은 백상 역사 58년 만에 처음이었습니다.&lt;/p&gt;</description></item><item><title>번역글: 공중누각 — 여전히 보람찬 일</title><link>https://philipjkim.cc/posts/20260326-castles-in-the-air-translation/</link><pubDate>Thu, 26 Mar 2026 15:05:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260326-castles-in-the-air-translation/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 번역되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: Dave Thomas, &lt;a href="https://media.pragprog.com/newsletters/2025-03-25.html"&gt;Pragmatic Programmers Newsletter&lt;/a&gt; — &amp;ldquo;Castles in the Air: It&amp;rsquo;s Still Just as Rewarding&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;마지막으로, 이토록 다루기 쉬운 매체에서 일하는 기쁨이 있습니다. 프로그래머는 시인과 마찬가지로, 순수한 사고의 재료에서 겨우 한 발짝 떨어진 곳에서 일합니다. 그는 공중에, 공기로 누각을 짓습니다. 상상력을 발휘하여 창조하는 것입니다. 이처럼 유연하고, 다듬고 고쳐 쓰기 쉬우며, 웅장한 개념적 구조물을 실현하는 데 이토록 적합한 창작 매체는 거의 없습니다.&lt;/p&gt;</description></item><item><title>Fantasy Baseball(MLB) 완전 가이드: 리그 형식부터 선수 운영 노하우까지</title><link>https://philipjkim.cc/posts/20260326-fantasy-baseball-guide/</link><pubDate>Thu, 26 Mar 2026 14:37:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260326-fantasy-baseball-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="fantasy-baseball이란"&gt;Fantasy Baseball이란?&lt;/h2&gt;
&lt;p&gt;Fantasy Baseball은 실제 MLB 선수들의 경기 성적을 기반으로 가상의 팀을 구성하고 다른 참가자들과 경쟁하는 게임입니다. 참가자(매니저)는 드래프트를 통해 선수를 선발하고, 시즌 동안 선수를 교체·트레이드하며 최고의 성적을 목표로 팀을 운영합니다.&lt;/p&gt;
&lt;p&gt;MLB의 긴 시즌(162경기)은 Fantasy Sports에 매우 적합합니다. 매일 경기가 있어 꾸준한 관리가 필요하고, 표본이 크기 때문에 운보다 실력이 결과에 더 많이 반영됩니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 &lt;strong&gt;Yahoo Fantasy Sports(YFS)&lt;/strong&gt; 를 기준으로 설명하지만, ESPN이나 Fantrax 등 다른 플랫폼에서도 기본 개념은 대부분 동일합니다.&lt;/p&gt;</description></item><item><title>아키하바라 집중 분석: 7개 키워드로 읽는 도쿄의 전자·서브컬처 성지</title><link>https://philipjkim.cc/posts/20260323-akihabara-deep-dive/</link><pubDate>Mon, 23 Mar 2026 13:59:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20260323-akihabara-deep-dive/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;도쿄 치요다구에 위치한 &lt;strong&gt;아키하바라(秋葉原)&lt;/strong&gt; 는 전 세계적으로 &amp;ldquo;전자상가&amp;quot;와 &amp;ldquo;오타쿠의 성지&amp;quot;로 알려져 있습니다. 하지만 이 동네의 정체성은 70년이 넘는 시간 동안 끊임없이 변해왔습니다. 전후 라디오 부품 암시장에서 시작해, 가전 거리를 거쳐, 애니메이션·게임·아이돌 문화의 중심지로 탈바꿈했고, 지금은 대규모 재개발을 앞두고 있습니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 &lt;strong&gt;7개의 키워드&lt;/strong&gt; 를 축으로 아키하바라의 역사, 현재, 그리고 관광지로서의 매력을 사실 자료에 기반해 정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="아키하바라-약사略史"&gt;아키하바라 약사(略史)&lt;/h2&gt;
&lt;p&gt;아키하바라의 역사를 이해하면 각 키워드가 왜 이 거리와 연결되는지 자연스럽게 보입니다.&lt;/p&gt;</description></item><item><title>AI 에이전트 시대의 C 언어 Part 2: AI는 C를 살리는가, 대체하는가</title><link>https://philipjkim.cc/posts/20260320-c-language-in-ai-agent-era-02/</link><pubDate>Fri, 20 Mar 2026 14:09:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260320-c-language-in-ai-agent-era-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260320-c-language-in-ai-agent-era-01/"&gt;Part 1&lt;/a&gt;에서는 AI 에이전트 등장 이전에 이미 진행되고 있던 C 언어의 위상 변화를 살펴보았습니다. 메모리 안전성 논쟁, 정부 권고, 주요 프로젝트의 탈C 마이그레이션이 그 핵심이었습니다.&lt;/p&gt;
&lt;p&gt;Part 2에서는 &lt;strong&gt;AI 코딩 에이전트&lt;/strong&gt; 가 이 흐름에 어떤 영향을 미치고 있는지 분석합니다. 결론부터 말하면, AI는 C를 살리는 동시에 대체하고 있습니다. 이 역설적인 &lt;strong&gt;이중 현상&lt;/strong&gt; 이 이 글의 핵심 주제입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-ai가-c-개발을-돕는-방식-더-안전한-c"&gt;1. AI가 C 개발을 돕는 방식: &amp;ldquo;더 안전한 C&amp;rdquo;&lt;/h2&gt;
&lt;h3 id="linux-커널의-ai-코드-리뷰"&gt;Linux 커널의 AI 코드 리뷰&lt;/h3&gt;
&lt;p&gt;세계 최대 C 코드베이스인 Linux 커널에서도 AI 도구가 활용되기 시작했습니다. Btrfs 개발자 Chris Mason은 2026년 초 &lt;strong&gt;review-prompts&lt;/strong&gt; 프로젝트를 시작했습니다. Claude Code 등 AI 도구를 활용해 커널 패치를 리뷰하는 프롬프트 모음으로, 대형 diff를 작은 단위로 분할해 C 특유의 문제점을 효과적으로 잡아냅니다.&lt;/p&gt;</description></item><item><title>AI 에이전트 시대의 C 언어 Part 1: 흔들리는 위상과 새로운 도전자들</title><link>https://philipjkim.cc/posts/20260320-c-language-in-ai-agent-era-01/</link><pubDate>Fri, 20 Mar 2026 14:08:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260320-c-language-in-ai-agent-era-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;C 언어는 1972년 탄생 이래 50년 넘게 시스템 프로그래밍의 근간이었습니다. Linux 커널, Windows, macOS, PostgreSQL, Python 런타임, nginx — 우리가 매일 쓰는 소프트웨어의 토대 상당 부분이 C로 작성되어 있습니다.&lt;/p&gt;
&lt;p&gt;그러나 최근 몇 년간 C 언어의 입지에 큰 변화가 일어나고 있습니다. 메모리 안전성 문제를 둘러싼 논쟁이 격화되고, 미국 정부 기관이 공식적으로 C 사용을 자제하라고 권고하며, Rust를 비롯한 대안 언어들이 빠르게 성장하고 있습니다. 여기에 2024년부터 본격화된 &lt;strong&gt;AI 코딩 에이전트(Claude Code, Codex, Gemini CLI 등)&lt;/strong&gt; 의 등장은 이 흐름을 더욱 가속하고 있습니다.&lt;/p&gt;</description></item><item><title>초한지 vs 은하영웅전설: 양대 세력 대결에서 리더십과 인재가 승패를 가르는 법</title><link>https://philipjkim.cc/posts/20260320-chu-han-vs-lotgh-leadership-comparison/</link><pubDate>Fri, 20 Mar 2026 13:36:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260320-chu-han-vs-lotgh-leadership-comparison/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며-왜-이-두-작품인가"&gt;들어가며: 왜 이 두 작품인가&lt;/h2&gt;
&lt;p&gt;중국의 고전 &lt;strong&gt;초한지&lt;/strong&gt; 와 일본의 SF 소설 &lt;strong&gt;은하영웅전설&lt;/strong&gt; 은 장르도, 시대도, 배경도 전혀 다릅니다. 한쪽은 기원전 206~202년의 실제 역사를 바탕으로 한 고전이고, 다른 한쪽은 먼 미래 은하계를 무대로 한 가상의 서사입니다.&lt;/p&gt;
&lt;p&gt;그럼에도 이 두 작품을 나란히 놓고 싶은 이유는 하나입니다. &lt;strong&gt;삼국지와 달리, 두 작품 모두 명확한 양대 세력의 대결&lt;/strong&gt; 을 중심축으로 삼고 있기 때문입니다.&lt;/p&gt;</description></item><item><title>미국·프랑스·일본의 아침과 점심: 각 나라 대표 메뉴 구성과 레시피</title><link>https://philipjkim.cc/posts/20260319-world-breakfast-recipes/</link><pubDate>Thu, 19 Mar 2026 20:11:01 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-world-breakfast-recipes/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;식사는 그 나라의 문화를 가장 잘 보여주는 일상입니다. 같은 끼니라도 미국, 프랑스, 일본은 구성과 철학이 완전히 다릅니다. 이 글에서는 세 나라의 전형적인 아침식사 문화와 집에서 재현할 수 있는 레시피를 소개하고, 이어서 각 나라 대표 체인의 점심 세트 메뉴 구성을 비교합니다.&lt;/p&gt;
&lt;h1 id="아침식사"&gt;아침식사&lt;/h1&gt;
&lt;hr&gt;
&lt;h2 id="미국의-아침식사"&gt;미국의 아침식사&lt;/h2&gt;
&lt;p&gt;미국의 아침식사는 &lt;strong&gt;풍성하고 든든한 한 끼&lt;/strong&gt; 가 특징입니다. 달걀 요리를 중심으로 고기류(베이컨, 소시지), 빵류(토스트, 팬케이크, 와플), 감자 요리(해시브라운) 등이 함께 나옵니다.&lt;/p&gt;</description></item><item><title>3대 참회록 — 아우구스티누스, 루소, 톨스토이가 자기 자신에게 던진 질문</title><link>https://philipjkim.cc/posts/20260319-three-great-confessions/</link><pubDate>Thu, 19 Mar 2026 17:38:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-three-great-confessions/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;서양 문학사에서 &lt;strong&gt;&amp;ldquo;3대 참회록&amp;rdquo;&lt;/strong&gt; 이라 불리는 세 작품이 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;아우구스티누스&lt;/strong&gt;의 《고백록(Confessiones)》 — 397~400년&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;장 자크 루소&lt;/strong&gt;의 《고백록(Les Confessions)》 — 1782년(사후 출판)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;레프 톨스토이&lt;/strong&gt;의 《참회록(Исповедь / A Confession)》 — 1882년&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;약 1,500년에 걸쳐 쓰인 이 세 작품은 모두 같은 형식을 취합니다. 저자가 자기 자신의 삶을 돌아보며, 자신의 과오와 진실을 고백하는 것입니다. 하지만 같은 형식 안에서 세 사람이 묻는 질문은 놀라울 정도로 다릅니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《예술이란 무엇인가》 — 아름다움을 넘어 감정의 전염을 말하다</title><link>https://philipjkim.cc/posts/20260319-tolstoy-what-is-art/</link><pubDate>Thu, 19 Mar 2026 13:51:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-tolstoy-what-is-art/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《예술이란 무엇인가(Что такое искусство?)》&lt;/strong&gt; 는 레프 톨스토이가 1897년에 발표한 예술론입니다. 소설이 아닌 이론서이지만, 톨스토이의 후기 사상을 이해하는 데 있어 가장 핵심적인 텍스트 중 하나입니다.&lt;/p&gt;
&lt;p&gt;이 책에서 톨스토이는 놀라울 정도로 급진적인 주장을 펼칩니다. 셰익스피어는 과대평가되었고, 베토벤의 후기 작품은 나쁜 예술이며, 바그너의 오페라는 인위적인 기만이라는 것입니다. 세계적 대문호가 서양 예술의 정전(正典)을 정면으로 부정하는 이 책은 발표 당시에도 격렬한 논쟁을 불러일으켰고, 지금도 읽는 이를 불편하게 만듭니다.&lt;/p&gt;</description></item><item><title>펑크 리듬 기타 리프 해부: 스타일별 핵심 곡 분석</title><link>https://philipjkim.cc/posts/20260319-funk-rhythm-guitar-riffs/</link><pubDate>Thu, 19 Mar 2026 10:45:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-funk-rhythm-guitar-riffs/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;펑크 기타는 화려한 솔로가 아니라 &lt;strong&gt;리듬&lt;/strong&gt; 으로 말하는 악기입니다. 코드 하나, 음 하나로도 곡 전체의 그루브를 만들어내는 것이 펑크 리듬 기타의 본질입니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 펑크 기타의 핵심 스타일들을 각각 대표하는 곡들을 골라, 리듬 구조와 화성, 그리고 연습할 때 집중해야 할 포인트를 분석합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="펑크-리듬-기타-용어-사전"&gt;펑크 리듬 기타 용어 사전&lt;/h2&gt;
&lt;p&gt;본문에 자주 등장하는 펑크 기타 용어들을 먼저 정리합니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;용어&lt;/th&gt;
 &lt;th&gt;설명&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Chicken scratch&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;왼손으로 현을 뮤트한 채 오른손으로 스트러밍하여 &amp;ldquo;칙칙&amp;rdquo; 하는 퍼커시브한 소리를 내는 기법. 펑크 리듬 기타의 가장 기본적인 테크닉입니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Chanking&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Jimmy Nolen이 James Brown 밴드에서 만들어낸 chicken scratch의 원조 명칭. 뮤트 스트러밍과 스타카토 코드를 조합하여 기타를 타악기처럼 사용합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Chucking&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Nile Rodgers 스타일의 트라이어드 연주 기법. 2~3개 현 위의 작은 코드를 &amp;ldquo;던지듯(chuck)&amp;rdquo; 짧고 날카롭게 치는 것을 말합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Skank / Skanking&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;레게에서 유래한 용어로, 업비트에 짧은 코드 스탭을 넣는 리듬 기타 패턴. 펑크에서는 업비트 강조 스트러밍 전반을 가리키기도 합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Ghost note / Ghost strum&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;음정이 들리지 않는 뮤트된 스트럼. 16비트 그루브에서 음표 사이의 빈 공간을 채우며, 리듬의 연속성과 퍼커시브한 질감을 만듭니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Shell voicing&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;코드의 핵심 구성음(보통 3rd, 7th) 만으로 구성된 최소한의 보이싱. 풀 코드 대신 사용하여 사운드를 가볍게 유지하고 베이스에게 저역을 양보합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Double-stop&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;두 개의 현을 동시에 연주하는 기법. 풀 코드보다 가볍고 기동성이 높아 빠른 16비트 펑크 리듬에 적합합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Stab&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;짧고 강한 코드 어택. 특정 박에서 코드를 날카롭게 &amp;ldquo;찌르듯&amp;rdquo; 치고 즉시 뮤트하는 것을 말합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Vamp&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;짧은 코드 진행(보통 1~2코드)을 반복하는 구조. 펑크에서는 화성보다 리듬의 변화로 음악을 이끌어갈 때 자주 사용됩니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Interlock(ing)&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;기타와 베이스(또는 다른 악기)가 서로의 빈 공간을 채우며 하나의 그루브를 만드는 앙상블 기법. James Brown 밴드의 핵심 원리입니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="papas-got-a-brand-new-bag--james-brown-1965"&gt;Papa&amp;rsquo;s Got a Brand New Bag — James Brown (1965)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Chicken scratch의 탄생&lt;/p&gt;</description></item><item><title>베이스라인으로 듣는 Stevie Wonder</title><link>https://philipjkim.cc/posts/20260319-stevie-wonder-bass-lines-top-7/</link><pubDate>Thu, 19 Mar 2026 09:33:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-stevie-wonder-bass-lines-top-7/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Stevie Wonder의 음악은 멜로디와 가사뿐 아니라, &lt;strong&gt;베이스라인&lt;/strong&gt; 으로도 독보적인 위치를 차지하고 있습니다. 1960년대 Motown 시절부터 1980년대 펑크까지, 그의 곡에 담긴 베이스라인은 단순한 반주를 넘어 곡의 정체성 그 자체가 되었습니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 베이스라인이 특히 빛나는 7곡을 골라, 각 곡의 매력과 그 뒤에 숨은 이야기를 살펴봅니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="sir-duke-1977"&gt;Sir Duke (1977)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;베이스가 멜로디 악기로 승격된 대표 사례&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;앨범 &lt;em&gt;Songs in the Key of Life&lt;/em&gt; (1976)에 수록된 이 곡은 Duke Ellington에게 바치는 헌정곡입니다. 베이시스트 &lt;strong&gt;Nathan Watts&lt;/strong&gt; 가 연주했습니다.&lt;/p&gt;</description></item><item><title>Motown의 숨겨진 심장: 베이시스트 James Jamerson</title><link>https://philipjkim.cc/posts/20260319-james-jamerson-motown-bassist/</link><pubDate>Thu, 19 Mar 2026 08:50:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-james-jamerson-motown-bassist/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="motown이란-무엇인가"&gt;Motown이란 무엇인가&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Motown Records&lt;/strong&gt; 는 1959년 Berry Gordy Jr.가 미시간 주 디트로이트에 설립한 레코드 레이블입니다. 이름은 디트로이트의 별명인 &amp;ldquo;Motor Town&amp;quot;에서 따왔습니다. Motown은 단순한 음반사를 넘어 하나의 음악적 운동이자 문화 현상이었습니다. 1960년대와 70년대에 걸쳐 The Supremes, The Temptations, Marvin Gaye, Stevie Wonder, The Jackson 5 등 수많은 전설적인 아티스트들을 배출했으며, 이들의 음악은 인종의 벽을 허물고 미국 대중음악의 지형을 근본적으로 바꿔놓았습니다.&lt;/p&gt;</description></item><item><title>한 시대를 풍미한 Boney M: 음악 스타일과 대표곡 분석</title><link>https://philipjkim.cc/posts/20260319-boney-m-music-and-legacy/</link><pubDate>Thu, 19 Mar 2026 08:39:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20260319-boney-m-music-and-legacy/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="boney-m이란-누구인가"&gt;Boney M이란 누구인가&lt;/h2&gt;
&lt;p&gt;1970년대 후반, 디스코 열풍이 전 세계를 휩쓸던 시절, 유럽에서 탄생한 한 그룹이 있었습니다. &lt;strong&gt;Boney M&lt;/strong&gt; 은 단순한 디스코 그룹을 넘어, 레게와 칼립소, 소울, 팝을 자유자재로 넘나들며 독자적인 사운드를 구축한 프로젝트였습니다. 그들의 음악은 발매 후 반세기가 지난 지금도 전 세계 파티와 크리스마스 시즌에 빠짐없이 울려 퍼지고 있습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="결성-배경"&gt;결성 배경&lt;/h2&gt;
&lt;p&gt;Boney M은 독일의 전설적인 프로듀서 &lt;strong&gt;프랭크 파리안(Frank Farian)&lt;/strong&gt; 이 1976년에 만든 프로젝트 그룹입니다. 파리안은 원래 솔로 가수이자 프로듀서로 활동하고 있었는데, 자신이 녹음한 곡 &lt;em&gt;Baby Do You Wanna Bump&lt;/em&gt; 가 네덜란드와 벨기에에서 히트하면서 TV 출연 요청이 쏟아지자 문제에 봉착했습니다. 혼자서는 무대를 채울 수 없었기 때문입니다.&lt;/p&gt;</description></item><item><title>브롬톤 자전거: 역사, 특징, 그리고 왜 브롬톤이어야 하는가</title><link>https://philipjkim.cc/posts/20260318-brompton-bicycle-guide/</link><pubDate>Wed, 18 Mar 2026 14:49:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260318-brompton-bicycle-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="브롬톤-그-이름의-무게"&gt;브롬톤, 그 이름의 무게&lt;/h2&gt;
&lt;p&gt;접이식 자전거 시장에는 수많은 브랜드가 존재한다. 다혼(Dahon), 턴(Tern), 버디(Birdy), 미니벨로 계열까지 선택지는 넓다. 그런데도 &amp;ldquo;접이식 자전거&amp;quot;라는 단어를 들었을 때 많은 사람들이 가장 먼저 떠올리는 이름이 있다. 바로 &lt;strong&gt;브롬톤(Brompton)&lt;/strong&gt; 이다.&lt;/p&gt;
&lt;p&gt;브롬톤은 단순한 접이식 자전거가 아니다. 반세기에 가까운 역사를 가진, 영국 제조업의 자존심이자, &amp;ldquo;접이식 자전거란 이런 것이다&amp;quot;라는 기준을 세운 자전거다. 이 글에서는 브롬톤의 역사부터 특징, 장단점, 그리고 왜 다른 접이식 자전거가 아닌 브롬톤이어야 하는지를 깊이 있게 다뤄본다.&lt;/p&gt;</description></item><item><title>톨스토이의 《세 죽음》 — 귀부인, 농부, 나무가 말하는 죽음의 세 얼굴</title><link>https://philipjkim.cc/posts/20260318-tolstoy-three-deaths/</link><pubDate>Wed, 18 Mar 2026 10:23:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260318-tolstoy-three-deaths/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《세 죽음(Три смерти)》&lt;/strong&gt; 은 레프 톨스토이가 1859년에 발표한 단편소설입니다. 톨스토이의 초기 작품에 속하지만, 이미 그의 핵심적 문제의식 — 죽음 앞에서 인간은 어떻게 살아야 하는가 — 이 명확하게 드러나 있습니다.&lt;/p&gt;
&lt;p&gt;이 작품은 세 존재의 죽음을 나란히 놓습니다. &lt;strong&gt;귀부인, 농부(마부), 나무.&lt;/strong&gt; 같은 사건인 죽음을 세 번 반복하면서, 톨스토이는 존재의 위계를 뒤집습니다. 사회적으로 가장 높은 귀부인의 죽음이 가장 비참하고, 가장 낮은 나무의 죽음이 가장 아름답습니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《무도회 후》 — 하룻밤 사이에 무너진 세계</title><link>https://philipjkim.cc/posts/20260318-tolstoy-after-the-ball/</link><pubDate>Wed, 18 Mar 2026 10:23:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20260318-tolstoy-after-the-ball/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《무도회 후(После бала)》&lt;/strong&gt; 는 레프 톨스토이가 1903년에 집필하고 사후인 1911년에 발표된 단편소설입니다. 20페이지 남짓한 짧은 분량이지만, 인간의 인식이 한순간에 뒤집히는 경험을 이토록 선명하게 포착한 작품은 드뭅니다.&lt;/p&gt;
&lt;p&gt;이 작품은 톨스토이의 최후기 작품에 속합니다. 《이반 일리치의 죽음》(1886)이 개인의 삶과 죽음을 다루었고, 《주인과 하인》(1895)이 자기 희생을 통한 구원을 그렸다면, 《무도회 후》는 시선을 &lt;strong&gt;사회 체제의 폭력&lt;/strong&gt;으로 돌립니다. 아름다운 무도회와 잔혹한 체벌이라는 두 장면의 극단적 대비를 통해, 톨스토이는 러시아 사회의 위선을 한 편의 그림처럼 보여줍니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《주인과 하인》 — 눈보라 속에서 발견한 삶의 의미</title><link>https://philipjkim.cc/posts/20260318-tolstoy-master-and-man/</link><pubDate>Wed, 18 Mar 2026 10:17:58 +0900</pubDate><guid>https://philipjkim.cc/posts/20260318-tolstoy-master-and-man/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《주인과 하인(Хозяин и работник)》&lt;/strong&gt; 은 레프 톨스토이가 1895년에 발표한 중편소설입니다. 80페이지 남짓한 분량에 눈보라라는 하나의 상황만을 담고 있지만, 그 안에서 인간 존재의 가장 근본적인 질문이 펼쳐집니다 — 무엇을 위해 살 것인가, 그리고 어떻게 죽을 것인가.&lt;/p&gt;
&lt;p&gt;이 작품은 톨스토이 후기 작품 중에서도 독특한 위치를 차지합니다. 《이반 일리치의 죽음》(1886)이 죽음 앞에서 삶의 허위를 폭로했고, 《사람에게는 몇 평의 땅이 필요한가》(1886)가 욕망의 끝을 보여주었다면, 이 작품은 한 발 더 나아가 &lt;strong&gt;죽음을 통한 구원의 가능성&lt;/strong&gt;을 그립니다. 톨스토이의 후기 작품들 중 가장 따뜻한 결말을 가진 작품이라 할 수 있습니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《사람에게는 몇 평의 땅이 필요한가》 — 욕망이 그리는 원, 그 끝에 남는 것</title><link>https://philipjkim.cc/posts/20260317-tolstoy-how-much-land-does-a-man-need/</link><pubDate>Tue, 17 Mar 2026 17:19:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260317-tolstoy-how-much-land-does-a-man-need/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《사람에게는 몇 평의 땅이 필요한가(Много ли человеку земли нужно)》&lt;/strong&gt; 는 레프 톨스토이가 1886년에 발표한 단편소설입니다. 분량은 20~30페이지에 불과하지만, 인간의 욕망과 그 끝에 대해 이토록 정확하게 말하는 이야기는 드뭅니다.&lt;/p&gt;
&lt;p&gt;이 작품은 같은 해에 발표된 《이반 일리치의 죽음》과 쌍을 이루는 작품입니다. 《이반 일리치의 죽음》이 죽음의 거울 앞에서 삶의 진위를 묻는다면, 이 작품은 &lt;strong&gt;욕망의 끝에서 삶의 의미를 묻습니다.&lt;/strong&gt; 두 작품 모두 톨스토이가 영적 위기를 겪은 뒤 완전히 달라진 시선으로 쓴 후기 작품이며, 형식은 다르지만 같은 질문을 던집니다 — &amp;ldquo;당신은 무엇을 위해 살고 있는가?&amp;rdquo;&lt;/p&gt;</description></item><item><title>슈베르트의 아르페지오네 소나타 — 사라진 악기가 남긴 가장 아름다운 노래</title><link>https://philipjkim.cc/posts/20260316-schubert-arpeggione-sonata/</link><pubDate>Mon, 16 Mar 2026 21:45:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260316-schubert-arpeggione-sonata/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;Franz Schubert의 &lt;strong&gt;아르페지오네 소나타 A단조, D.821&lt;/strong&gt;은 1824년 11월 빈에서 작곡된 작품입니다. 원래는 &lt;strong&gt;아르페지오네(arpeggione)&lt;/strong&gt; 라는 악기를 위해 쓰였지만, 이 악기가 발명된 지 불과 10여 년 만에 사라지면서 오늘날에는 &lt;strong&gt;첼로 또는 비올라 + 피아노&lt;/strong&gt;로 연주됩니다.&lt;/p&gt;
&lt;p&gt;아르페지오네란 1823년 빈의 악기 제작자 &lt;strong&gt;요한 게오르크 슈타우퍼(Johann Georg Stauffer)&lt;/strong&gt; 가 만든 6현 악기입니다. 기타처럼 프렛이 있고 기타와 동일하게 조율되지만, 첼로처럼 활로 연주합니다. 기타와 첼로의 혼종이라 할 수 있습니다. 프렛 덕분에 음정이 안정적이었지만, 큰 공간에서의 음량 부족과 연주의 어색함 때문에 1830년대 초에는 거의 자취를 감추었습니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《이반 일리치의 죽음》 — 죽음이라는 거울 앞에 선 삶의 진위</title><link>https://philipjkim.cc/posts/20260316-tolstoy-death-of-ivan-ilyich/</link><pubDate>Mon, 16 Mar 2026 21:26:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20260316-tolstoy-death-of-ivan-ilyich/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《이반 일리치의 죽음(Смерть Ивана Ильича)》&lt;/strong&gt; 은 레프 톨스토이가 1886년에 발표한 중편소설입니다. 분량은 60~80페이지에 불과하지만, 톨스토이 후기 문학의 정수에 가까운 작품으로 평가받습니다.&lt;/p&gt;
&lt;p&gt;단순히 &amp;ldquo;한 사람이 죽어가는 이야기&amp;quot;가 아닙니다. 이 작품은 &lt;strong&gt;어떻게 살아야 하는가&lt;/strong&gt;를 죽음의 순간에서 거꾸로 묻습니다. 톨스토이는 《안나 카레니나》(1877) 이후 약 9년간 소설을 쓰지 않았습니다. 그 사이에 심각한 영적 위기를 겪고 《참회록(A Confession)》을 쓴 뒤, 완전히 달라진 시선으로 다시 소설에 돌아왔습니다. 《이반 일리치의 죽음》은 그 귀환의 첫 번째 작품이자, 변화된 톨스토이의 문학적 선언입니다.&lt;/p&gt;</description></item><item><title>톨스토이의 《크로이처 소나타》 — 사랑의 이름으로 행사되는 폭력에 대한 해부</title><link>https://philipjkim.cc/posts/20260313-tolstoy-kreutzer-sonata/</link><pubDate>Fri, 13 Mar 2026 15:13:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20260313-tolstoy-kreutzer-sonata/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="들어가며"&gt;들어가며&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;《크로이처 소나타(The Kreutzer Sonata)》&lt;/strong&gt; 는 러시아의 대문호 레프 톨스토이가 1889년에 발표한 중편소설입니다. 결혼, 성욕, 질투, 도덕을 매우 급진적으로 비판한 이 작품은 발표 당시 여러 나라에서 검열과 금서 조치를 받을 만큼 큰 논란을 일으켰습니다.&lt;/p&gt;
&lt;p&gt;단순한 &amp;ldquo;질투에 의한 살인 이야기&amp;quot;로 보기에는 이 작품이 던지는 질문이 너무 깊습니다. 사랑이란 무엇인가, 결혼이라는 제도는 과연 사랑을 담는 그릇인가, 욕망과 소유욕은 어디서부터 폭력이 되는가 — 이런 질문들이 작품 전체를 관통합니다.&lt;/p&gt;</description></item><item><title>AI 코딩 시대의 그림자, 7개월 후: 무엇이 변했고 무엇이 남았나</title><link>https://philipjkim.cc/posts/20260313-ai-coding-shadows-revisited/</link><pubDate>Fri, 13 Mar 2026 09:11:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20260313-ai-coding-shadows-revisited/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 philipjkim 이 초안을 작성했으며, 이후 Claude Opus 4.6 을 이용한 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;지난 2025년 8월, &lt;a href="https://philipjkim.cc/posts/20250805-shadows-of-ai-coding-era/"&gt;AI 코딩 시대의 그림자: LLM 의존이 개발자에게 미치는 잠재적 위험 5가지&lt;/a&gt;라는 글을 썼습니다. 당시 &lt;code&gt;vibe-coding&lt;/code&gt;이라는 단어가 막 퍼지기 시작하던 때였고, AI 코딩 도구에 대한 기대와 우려가 공존하던 시기였습니다.&lt;/p&gt;
&lt;p&gt;7개월이 흘렀습니다. 그 사이 Claude Code, Cursor, Windsurf 같은 AI 코딩 에이전트들은 단순한 코드 생성을 넘어 프로젝트 전체를 자율적으로 다루는 수준에 도달했습니다. 개발자들의 일상에서 AI agent 없이 코딩하는 시간은 점점 줄어들고 있고, 많은 팀에서 AI agent는 이미 팀원 한 명에 준하는 역할을 하고 있습니다.&lt;/p&gt;</description></item><item><title>NLH 스타팅 핸드 가이드 Part 3: 핸드 예시, 멀티웨이 팟, 3bet 전략</title><link>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-03/</link><pubDate>Thu, 12 Mar 2026 12:26:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-01/"&gt;Part 1&lt;/a&gt;에서 핸드 등급 분류를, &lt;a href="https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-02/"&gt;Part 2&lt;/a&gt;에서 포지션별 레인지와 벳 사이즈 대응을 다뤘습니다. 이번 마지막 Part에서는 &lt;strong&gt;구체적인 핸드 예시&lt;/strong&gt;, &lt;strong&gt;멀티웨이 팟 조정&lt;/strong&gt;, &lt;strong&gt;3bet 팟 전략&lt;/strong&gt;, 그리고 &lt;strong&gt;상황별 스타일 전환&lt;/strong&gt;을 다룹니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="구체적인-핸드-예시-포지션별-결정"&gt;구체적인 핸드 예시: 포지션별 결정&lt;/h2&gt;
&lt;h3 id="예시-1-ako-티어-2"&gt;예시 1: AKo (티어 2)&lt;/h3&gt;
&lt;p&gt;오프수트 에이스킹. 프리미엄에 가까운 강한 핸드지만, 수티드가 아니므로 플러시 가능성이 없습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;포지션&lt;/th&gt;
 &lt;th style="text-align: left"&gt;TAG&lt;/th&gt;
 &lt;th style="text-align: left"&gt;LAG&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;BTN&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;CO&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;MP&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;UTG&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;BB vs BTN 오픈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;SB vs CO 오픈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;vs 3bet (IP)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;콜 또는 4bet&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;vs 3bet (OOP)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4bet 또는 콜&lt;/td&gt;
 &lt;td style="text-align: left"&gt;4bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;두 스타일 모두 어떤 포지션에서든 플레이합니다. 차이는 3bet을 받았을 때 나타나는데, TAG는 콜도 혼합하지만 LAG는 4bet을 더 선호합니다. AKo는 콜보다 4bet이 나은 경우가 많습니다 — 에퀴티가 높고, 상대의 약한 핸드를 폴드시키는 가치가 있기 때문입니다.&lt;/p&gt;</description></item><item><title>NLH 스타팅 핸드 가이드 Part 2: TAG/LAG 포지션별 레인지와 벳 사이즈 대응</title><link>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-02/</link><pubDate>Thu, 12 Mar 2026 12:26:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-01/"&gt;Part 1&lt;/a&gt;에서 TAG/LAG 스타일의 차이와 5단계 핸드 등급 분류를 다뤘습니다. 이번 Part 2에서는 각 스타일별로 &lt;strong&gt;포지션에 따른 구체적인 레인지&lt;/strong&gt;, &lt;strong&gt;벳 사이즈&lt;/strong&gt;, 그리고 &lt;strong&gt;선 플레이어의 오픈 사이즈에 따른 대응 방법&lt;/strong&gt;을 정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="tag-스타일-포지션별-스타팅-핸드-레인지"&gt;TAG 스타일: 포지션별 스타팅 핸드 레인지&lt;/h2&gt;
&lt;h3 id="tag---btn-button"&gt;TAG - BTN (Button)&lt;/h3&gt;
&lt;p&gt;버튼은 최고의 포지션입니다. TAG도 여기서는 상대적으로 넓게 플레이합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;오픈 레이즈 레인지&lt;/strong&gt; (VPIP ~22-25%):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;티어&lt;/th&gt;
 &lt;th style="text-align: left"&gt;핸드&lt;/th&gt;
 &lt;th style="text-align: left"&gt;액션&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 1&lt;/td&gt;
 &lt;td style="text-align: left"&gt;AA, KK, QQ, AKs&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈 (2.5~3x)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 2&lt;/td&gt;
 &lt;td style="text-align: left"&gt;JJ, TT, AKo, AQs, AJs, KQs&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 3&lt;/td&gt;
 &lt;td style="text-align: left"&gt;99, 88, AQo, ATs, KJs, QJs, JTs, AJo, KQo&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 4&lt;/td&gt;
 &lt;td style="text-align: left"&gt;77, 66, A9s~A2s, KTs, QTs, T9s, 98s, 87s&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 5&lt;/td&gt;
 &lt;td style="text-align: left"&gt;55~22 (선택적)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈 또는 폴드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;vs 오픈 레이즈 (CO가 오픈)&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>NLH 스타팅 핸드 가이드 Part 1: TAG/LAG 스타일과 핸드 등급 분류</title><link>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-01/</link><pubDate>Thu, 12 Mar 2026 12:26:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260312-nlh-starting-hands-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;노 리밋 홀덤에서 프리플랍 핸드 선택은 &lt;strong&gt;장기 수익의 토대&lt;/strong&gt;입니다. 아무리 포스트플랍을 잘해도, 잘못된 핸드로 팟에 참여하면 결국 손실이 누적됩니다. 반대로, 올바른 핸드 선택만으로도 초중급 테이블에서는 충분히 수익을 낼 수 있습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈에서는 &lt;strong&gt;플레이 스타일(TAG/LAG)&lt;/strong&gt; 과 &lt;strong&gt;포지션(SB/BB/UTG/MP/CO/BTN)&lt;/strong&gt; 에 따른 스타팅 핸드 선택을 체계적으로 정리합니다. 핸드 등급 분류부터 벳 사이즈에 따른 대응, 구체적인 예시까지 실전에서 바로 적용할 수 있는 가이드를 제공합니다.&lt;/p&gt;</description></item><item><title>웹서비스 내부 구조 아키텍처 가이드 Part 2: EDA, VSA, Modular Monolith</title><link>https://philipjkim.cc/posts/20260312-web-service-architecture-guide-02/</link><pubDate>Thu, 12 Mar 2026 10:07:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260312-web-service-architecture-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260312-web-service-architecture-guide-01/"&gt;Part 1&lt;/a&gt;에서는 Layered Architecture, Ports &amp;amp; Adapters 계열(Hexagonal/Onion/Clean), CQRS를 다뤘습니다. Part 2에서는 나머지 세 아키텍처와 전체 비교를 다룹니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-event-driven-architecture-eda"&gt;4. Event-Driven Architecture (EDA)&lt;/h2&gt;
&lt;h3 id="개요"&gt;개요&lt;/h3&gt;
&lt;p&gt;Event-Driven Architecture는 &lt;strong&gt;시스템 구성 요소 간의 통신을 이벤트를 통해 수행&lt;/strong&gt; 하는 설계 패턴입니다. 컴포넌트가 서로 직접 호출하는 대신, &amp;ldquo;무언가가 발생했다&amp;quot;는 사실을 이벤트로 발행하면, 관심 있는 컴포넌트가 이를 구독하여 반응합니다.&lt;/p&gt;
&lt;p&gt;이 글의 전제가 Kafka/RabbitMQ 같은 메시지 브로커를 포함하는 환경이므로, EDA를 내부 구조 패턴으로 다루는 것은 매우 자연스럽습니다. 메시지 브로커가 있다는 것 자체가 이미 이벤트 기반 통신의 인프라를 갖추고 있다는 뜻이기 때문입니다.&lt;/p&gt;</description></item><item><title>웹서비스 내부 구조 아키텍처 가이드 Part 1: Layered, Ports &amp; Adapters, CQRS</title><link>https://philipjkim.cc/posts/20260312-web-service-architecture-guide-01/</link><pubDate>Thu, 12 Mar 2026 10:07:29 +0900</pubDate><guid>https://philipjkim.cc/posts/20260312-web-service-architecture-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;이 글은 웹서비스를 전제로 합니다. 구체적으로는 HTML/CSS/JS 프런트엔드, REST/gRPC 기반 백엔드, RDB/Redis/NoSQL 저장소, Kafka/RabbitMQ 같은 메시지 브로커가 있는 환경을 상정합니다.&lt;/p&gt;
&lt;p&gt;비교 대상은 &amp;ldquo;배포 아키텍처&amp;quot;가 아닙니다. 마이크로서비스냐 모놀리스냐의 문제가 아니라, &lt;strong&gt;애플리케이션 내부 코드를 어떻게 나누고, 의존성을 어느 방향으로 흐르게 하며, 변경을 어떤 단위로 흡수할 것인가&lt;/strong&gt; 에 관한 내부 구조 아키텍처입니다. Microsoft도 논리적 계층(layer)과 물리적 계층(tier)을 구분하며, 논리적 계층 분리가 반드시 별도 서버 분리를 의미하지는 않는다고 설명합니다.&lt;/p&gt;</description></item><item><title>오마하 스타팅 핸드 가이드 Part 3: 핸드 예시, 멀티웨이 팟, 3bet 전략</title><link>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-03/</link><pubDate>Wed, 11 Mar 2026 14:11:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-01/"&gt;Part 1&lt;/a&gt;에서 핸드 등급 분류를, &lt;a href="https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-02/"&gt;Part 2&lt;/a&gt;에서 포지션별 레인지를 다뤘습니다. 이번 마지막 Part에서는 &lt;strong&gt;구체적인 핸드 예시&lt;/strong&gt;, &lt;strong&gt;멀티웨이 팟 조정&lt;/strong&gt;, &lt;strong&gt;3bet 팟 전략&lt;/strong&gt;, 그리고 &lt;strong&gt;상황별 스타일 전환&lt;/strong&gt;을 다룹니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="구체적인-핸드-예시-포지션별-결정"&gt;구체적인 핸드 예시: 포지션별 결정&lt;/h2&gt;
&lt;h3 id="예시-1-akqj-티어-2"&gt;예시 1: &lt;code&gt;A♠K♠Q♥J♣&lt;/code&gt; (티어 2)&lt;/h3&gt;
&lt;p&gt;싱글 수티드 하이 런다운. 넛 스트레이트와 넛 플러시 가능성이 모두 있는 강한 핸드입니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;포지션&lt;/th&gt;
 &lt;th style="text-align: left"&gt;TAG&lt;/th&gt;
 &lt;th style="text-align: left"&gt;LAG&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;BTN&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;CO&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;MP&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;UTG&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;오픈 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;BB vs BTN 오픈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet 또는 콜&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;SB vs CO 오픈&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;td style="text-align: left"&gt;3bet&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;두 스타일 모두 어떤 포지션에서든 플레이하는 핸드입니다. 차이는 BB에서 나타나는데, TAG는 콜도 혼합하지만 LAG는 밸류 3bet을 선호합니다.&lt;/p&gt;</description></item><item><title>오마하 스타팅 핸드 가이드 Part 2: TAG/LAG 포지션별 스타팅 핸드 레인지</title><link>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-02/</link><pubDate>Wed, 11 Mar 2026 14:11:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-01/"&gt;Part 1&lt;/a&gt;에서 TAG/LAG 스타일의 차이와 5단계 핸드 등급 분류를 다뤘습니다. 이번 Part 2에서는 각 스타일별로 &lt;strong&gt;포지션에 따른 구체적인 레인지와 베팅 사이즈&lt;/strong&gt;를 정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="tag-스타일-포지션별-스타팅-핸드-레인지"&gt;TAG 스타일: 포지션별 스타팅 핸드 레인지&lt;/h2&gt;
&lt;h3 id="tag---btn-button"&gt;TAG - BTN (Button)&lt;/h3&gt;
&lt;p&gt;버튼은 최고의 포지션입니다. TAG도 여기서는 상대적으로 넓게 플레이합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;오픈 레이즈 레인지&lt;/strong&gt; (VPIP ~22-25%):&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;티어&lt;/th&gt;
 &lt;th style="text-align: left"&gt;핸드&lt;/th&gt;
 &lt;th style="text-align: left"&gt;액션&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 1&lt;/td&gt;
 &lt;td style="text-align: left"&gt;모든 프리미엄&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈 (3-3.5x)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 2&lt;/td&gt;
 &lt;td style="text-align: left"&gt;모든 강한 핸드&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 3&lt;/td&gt;
 &lt;td style="text-align: left"&gt;대부분&lt;/td&gt;
 &lt;td style="text-align: left"&gt;레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 4&lt;/td&gt;
 &lt;td style="text-align: left"&gt;선택적&lt;/td&gt;
 &lt;td style="text-align: left"&gt;림퍼 있으면 레이즈, 아니면 폴드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;티어 5&lt;/td&gt;
 &lt;td style="text-align: left"&gt;없음&lt;/td&gt;
 &lt;td style="text-align: left"&gt;폴드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;vs 오픈 레이즈 (CO가 오픈)&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>오마하 스타팅 핸드 가이드 Part 1: TAG/LAG 스타일과 핸드 등급 분류</title><link>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-01/</link><pubDate>Wed, 11 Mar 2026 14:11:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260311-omaha-starting-hands-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;오마하에서 프리플랍은 홀덤보다 &lt;strong&gt;더 중요합니다&lt;/strong&gt;. 4장의 카드가 만들어내는 조합의 차이가 포스트플랍 전체를 좌우하기 때문입니다. 잘못된 핸드로 팟에 들어가면 아무리 포스트플랍을 잘해도 장기적으로 손실입니다.&lt;/p&gt;
&lt;p&gt;이 시리즈에서는 &lt;strong&gt;플레이 스타일(TAG/LAG)&lt;/strong&gt; 과 &lt;strong&gt;포지션(SB/BB/CO/BTN)&lt;/strong&gt; 에 따른 스타팅 핸드 선택을 체계적으로 정리합니다. 핸드 등급 분류부터 구체적인 베팅 전략까지, 실전에서 바로 적용할 수 있는 가이드를 제공합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Part 1&lt;/strong&gt; (이 글): TAG/LAG 스타일과 핸드 등급 분류&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 2&lt;/strong&gt;: TAG/LAG 포지션별 스타팅 핸드 레인지&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Part 3&lt;/strong&gt;: 핸드 예시, 멀티웨이 팟, 3bet 팟 전략&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="플레이-스타일-tag-vs-lag"&gt;플레이 스타일: TAG vs LAG&lt;/h2&gt;
&lt;h3 id="tag-tight-aggressive"&gt;TAG (Tight-Aggressive)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;TAG&lt;/strong&gt;는 &amp;ldquo;타이트하게 선택하고, 선택한 핸드는 공격적으로&amp;rdquo; 플레이하는 스타일입니다.&lt;/p&gt;</description></item><item><title>Strat Showdown: SSS vs. HSS — 어떤 픽업 구성이 나에게 맞을까?</title><link>https://philipjkim.cc/posts/20260310-strat-showdown-sss-vs-hss/</link><pubDate>Tue, 10 Mar 2026 17:39:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20260310-strat-showdown-sss-vs-hss/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;스트라토캐스터(Stratocaster)는 1954년 Leo Fender가 설계한 이래 70년 넘게 일렉트릭 기타의 대명사로 자리 잡아왔습니다. 그런데 스트랫을 하나 장만하려 할 때 가장 먼저 부딪히는 갈림길이 있습니다. 바로 &lt;strong&gt;픽업 구성&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSS&lt;/strong&gt;: 싱글코일 3개 (Single-Single-Single)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HSS&lt;/strong&gt;: 브리지에 험버커, 나머지 싱글코일 2개 (Humbucker-Single-Single)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Reddit, The Gear Page, Strat-Talk 같은 기타 커뮤니티에서 이 주제는 끝없이 반복되는 논쟁거리입니다. 이 글에서는 양쪽의 핵심 쟁점을 하나씩 짚어보고, 최종적으로 어떤 기준으로 선택하면 좋을지 정리합니다.&lt;/p&gt;</description></item><item><title>Go 웹 프레임워크 비교: Chi vs. Gin</title><link>https://philipjkim.cc/posts/20260307-go-web-framework-chi-vs-gin/</link><pubDate>Sat, 07 Mar 2026 00:21:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20260307-go-web-framework-chi-vs-gin/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Go로 웹 애플리케이션을 만들 때, 가장 많이 비교되는 두 선택지가 &lt;strong&gt;Chi&lt;/strong&gt;와 &lt;strong&gt;Gin&lt;/strong&gt;입니다. GitHub 스타 기준으로 Gin이 압도적인 인기를 누리고 있지만(Gin ~80k vs Chi ~19k), 실무에서의 선택은 단순한 인기도만으로 결정할 문제가 아닙니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 두 라이브러리의 &lt;strong&gt;설계 철학&lt;/strong&gt;부터 시작해서, 실제 코드 레벨에서의 차이를 비교합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="설계-철학-라우터-vs-프레임워크"&gt;설계 철학: 라우터 vs. 프레임워크&lt;/h2&gt;
&lt;p&gt;Chi와 Gin의 가장 근본적인 차이는 &lt;strong&gt;자기 자신을 어떻게 정의하는가&lt;/strong&gt;에 있습니다.&lt;/p&gt;</description></item><item><title>HTMX와 함께 사용할 Go 템플릿 기술 비교: html/template vs. Templ</title><link>https://philipjkim.cc/posts/20260307-go-html-template-vs-templ-with-htmx/</link><pubDate>Sat, 07 Mar 2026 00:01:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260307-go-html-template-vs-templ-with-htmx/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Go로 SSR 웹 앱을 만들 때 HTMX와 함께 사용할 템플릿 기술로 두 가지 선택지가 있습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go 표준 &lt;code&gt;html/template&lt;/code&gt; + 커스텀 PageRenderer (페이지별 독립 템플릿 세트)&lt;/li&gt;
&lt;li&gt;Templ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;이 글에서는 두 방식의 장단점을 실무 관점에서 비교합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="타입-안전성"&gt;타입 안전성&lt;/h2&gt;
&lt;p&gt;가장 큰 갈림길입니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;html/template&lt;/code&gt;은 런타임에 템플릿을 파싱하고 데이터를 바인딩합니다. &lt;code&gt;{{ .Titl }}&lt;/code&gt;이라고 써도 빌드는 통과합니다. 런타임에 빈 문자열이 나오거나 에러가 발생하고 나서야 문제를 알 수 있습니다.&lt;/p&gt;</description></item><item><title>가민(Garmin)의 HRV 소개: 측정, 해석, 그리고 관리</title><link>https://philipjkim.cc/posts/20260306-garmin-hrv-introduction/</link><pubDate>Fri, 06 Mar 2026 11:08:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260306-garmin-hrv-introduction/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hrv란-무엇인가"&gt;HRV란 무엇인가&lt;/h2&gt;
&lt;p&gt;HRV(Heart Rate Variability, 심박변이도)는 심장 박동 간의 시간 간격이 얼마나 불규칙한지를 나타내는 지표입니다. 심장은 메트로놈처럼 정확한 간격으로 뛰지 않습니다. 건강한 심장은 오히려 박동 사이의 간격이 미세하게 변동합니다. 이 변동의 크기가 바로 HRV입니다.&lt;/p&gt;
&lt;p&gt;구체적으로, 심전도(ECG)나 광학 심박 센서에서 측정되는 R-R 간격(연속된 두 심박 사이의 시간)의 변이를 분석한 값입니다.&lt;/p&gt;
&lt;h3 id="가민에서의-hrv-계산"&gt;가민에서의 HRV 계산&lt;/h3&gt;
&lt;p&gt;가민은 HRV의 정확한 계산 공식을 공개하지 않지만, 업계 표준과 가민의 공식 문서를 종합하면 &lt;strong&gt;RMSSD(Root Mean Square of Successive Differences)&lt;/strong&gt; 방식을 사용하는 것으로 알려져 있습니다.&lt;/p&gt;</description></item><item><title>파리 Passy 묘지에 안장된 유명 인물들</title><link>https://philipjkim.cc/posts/20260305-famous-people-buried-at-passy-cemetery/</link><pubDate>Thu, 05 Mar 2026 14:54:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20260305-famous-people-buried-at-passy-cemetery/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://frenchmoments.eu/wp-content/uploads/2017/09/Passy-Cemetery-Paris-10-%C2%A9-French-Moments.jpg" alt="Passy Cemetry with Eiffel Tower"&gt;
*출처: &lt;a href="https://frenchmoments.eu/passy-cemetery-paris/"&gt;https://frenchmoments.eu/passy-cemetery-paris/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;파리 16구 트로카데로 언덕 위, 에펠탑이 바라보이는 조용한 곳에 &lt;strong&gt;Cimetière de Passy(파시 묘지)&lt;/strong&gt; 가 자리잡고 있습니다. 1820년에 개장한 이 묘지는 파리에서 가장 작은 공공묘지 중 하나이지만, 안장된 인물들의 면면은 그 어떤 묘지에도 뒤지지 않습니다. 화려한 영묘와 조각상들 사이를 거닐다 보면, 프랑스와 세계의 예술·문화·정치사를 수놓은 거장들의 이름을 만나게 됩니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 Passy 묘지에 안장된 대표적인 유명 인물 9명을 소개합니다.&lt;/p&gt;</description></item><item><title>AI 시대의 Spring 기술 스택 재정비: 명시성을 되찾기 위한 선택들</title><link>https://philipjkim.cc/posts/20260304-spring-stack-for-ai-era/</link><pubDate>Wed, 04 Mar 2026 16:20:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-spring-stack-for-ai-era/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Claude Code 같은 AI 코딩 도구를 본격적으로 활용하기 시작하면서, 그동안 당연하게 쓰던 기술 스택에 대해 다시 생각하게 되었습니다. JPA의 dirty checking이 정말 편한 건지, Lombok 없이는 못 사는 건지, RestTemplate과 Retrofit이 뒤섞인 코드베이스가 과연 합리적인 건지.&lt;/p&gt;
&lt;p&gt;결론부터 말하면, &lt;strong&gt;AI가 생성한 코드를 사람이 빠르게 읽고 검증하려면 &amp;ldquo;마법(magic)&amp;ldquo;보다 &amp;ldquo;명시성(explicitness)&amp;ldquo;이 훨씬 중요하다&lt;/strong&gt;는 생각에 도달했습니다. 이 글에서는 그 관점에서 기존 Java/Spring 기술 스택의 각 영역을 하나씩 짚어봅니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 5: 의존성 깨기 기법 카탈로그</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-05/</link><pubDate>Wed, 04 Mar 2026 10:03:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;원서 Chapter 25는 25가지 의존성 깨기(Dependency-Breaking) 기법을 카탈로그 형태로 제시합니다. 각 기법은 &amp;ldquo;테스트 하네스에 코드를 넣기 위해 의존성을 어떻게 끊을 것인가&amp;quot;라는 질문에 대한 구체적인 답입니다.&lt;/p&gt;
&lt;p&gt;다만 일부 기법은 C/C++ 전용이거나, 현대 Java에서는 불필요합니다. Link Substitution, Text Redefinition, Replace Function with Function Pointer 같은 기법이 대표적입니다. 이 파트에서는 2026년 현재 Java 개발에서 특히 유용한 핵심 기법들을 선별하여 정리합니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 4: 대규모 코드 문제 다루기</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-04/</link><pubDate>Wed, 04 Mar 2026 10:03:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;레거시 시스템에서 가장 자주 마주치는 문제는 규모의 문제입니다. 한 클래스가 수천 줄, 한 메서드가 수백 줄인 코드는 현업에서 흔히 발견됩니다. 이런 코드는 읽기 어렵고, 테스트하기 어렵고, 변경하면 예상치 못한 곳에서 장애가 발생합니다.&lt;/p&gt;
&lt;p&gt;이번 글에서는 Michael Feathers의 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; 14~22장을 바탕으로, 대규모 코드 문제를 다루는 전략을 JDK 25 기준의 modern Java 코드로 살펴봅니다. SOLID 원칙 중 SRP, ISP, OCP의 실전 적용이 핵심입니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 3: 테스트 하네스에 코드 넣기</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-03/</link><pubDate>Wed, 04 Mar 2026 10:03:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;레거시 코드를 변경하려면 먼저 테스트를 작성해야 합니다. 하지만 테스트를 작성하려면 코드의 의존성을 깨야 합니다. 의존성을 깨려면 코드를 변경해야 하는데, 변경의 안전성을 보장해줄 테스트가 아직 없습니다.&lt;/p&gt;
&lt;p&gt;이것이 Feathers가 말하는 &amp;ldquo;레거시 코드의 딜레마&amp;quot;입니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In legacy code, the weights work against us. We have to pull out a piece to work with because we can&amp;rsquo;t easily test it in place.
— Michael Feathers, &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; (2004)&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 2: 안전한 코드 변경 패턴 — Sprout와 Wrap</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-02/</link><pubDate>Wed, 04 Mar 2026 10:03:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도입"&gt;도입&lt;/h2&gt;
&lt;p&gt;Part 1에서 다룬 Legacy Code Change Algorithm의 5단계 중, 이번 글은 &amp;ldquo;변경 및 리팩터링&amp;rdquo; 단계에 해당하는 실전 패턴들을 다룹니다. Michael Feathers의 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; 6~8장에 등장하는 핵심 기법입니다.&lt;/p&gt;
&lt;p&gt;레거시 코드에 기능을 추가해야 하는데 시간이 없을 때, 기존 코드를 전면 리팩터링하는 것은 현실적이지 않습니다. 이때 사용할 수 있는 4가지 패턴이 있습니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;패턴&lt;/th&gt;
 &lt;th&gt;핵심 아이디어&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Sprout Method&lt;/td&gt;
 &lt;td&gt;새 기능을 별도 메서드로 추출&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Sprout Class&lt;/td&gt;
 &lt;td&gt;새 기능을 별도 클래스로 분리&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wrap Method&lt;/td&gt;
 &lt;td&gt;기존 메서드를 감싸서 전후 동작 추가&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wrap Class&lt;/td&gt;
 &lt;td&gt;Decorator 패턴으로 기존 클래스를 감싸기&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;이 4가지 패턴의 공통점은 &lt;strong&gt;기존 코드를 가능한 한 건드리지 않으면서 새 기능을 추가&lt;/strong&gt;한다는 것입니다.&lt;/p&gt;</description></item><item><title>WELC ver. 2026 Part 1: 레거시 코드의 정의와 변경의 역학</title><link>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-01/</link><pubDate>Wed, 04 Mar 2026 10:03:48 +0900</pubDate><guid>https://philipjkim.cc/posts/20260304-working-effectively-with-legacy-code-2026-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시리즈-소개"&gt;시리즈 소개&lt;/h2&gt;
&lt;p&gt;2004년 Michael Feathers가 출판한 &lt;em&gt;Working Effectively with Legacy Code&lt;/em&gt; (a.k.a. WELC)는 레거시 코드를 안전하게 변경하는 기법들을 체계적으로 정리한 명저입니다. 출판된 지 20년이 넘었지만, 이 책이 제시하는 원칙과 알고리즘은 여전히 유효합니다. 코드베이스가 노후화되는 속도보다 개발자가 이 책을 읽는 속도가 느린 것이 문제일 뿐입니다.&lt;/p&gt;
&lt;p&gt;원서의 예제는 Java 1.4/5, C++, C 시대의 코드입니다. 이 시리즈에서는 JDK 25 (2025년 9월 GA, LTS) 기준의 modern Java로 핵심 기법들을 재현합니다. Sealed class, record, text block, pattern matching 등 최신 언어 기능을 적극 활용하여, 원서의 기법이 오늘날 어떤 형태로 적용되는지 보여드리겠습니다.&lt;/p&gt;</description></item><item><title>현악기 비올라 소개: 오케스트라의 숨은 심장</title><link>https://philipjkim.cc/posts/20260302-introducing-viola/</link><pubDate>Mon, 02 Mar 2026 17:26:07 +0900</pubDate><guid>https://philipjkim.cc/posts/20260302-introducing-viola/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="비올라-이-악기는-대체-뭔가"&gt;비올라, 이 악기는 대체 뭔가&lt;/h2&gt;
&lt;p&gt;비올라(Viola)는 바이올린과 첼로 사이에 있는 현악기입니다. 바이올린보다 약간 크고, 음역은 바이올린보다 완전5도 낮습니다. C3–E6 정도의 음역을 커버합니다.&lt;/p&gt;
&lt;p&gt;겉보기에는 &amp;ldquo;큰 바이올린&amp;quot;처럼 생겼지만, 음색은 완전히 다릅니다. 바이올린이 맑고 화려한 소프라노라면, 비올라는 &lt;strong&gt;따뜻하고 그늘진 알토&lt;/strong&gt;입니다. 높은 음역에서는 바이올린 못지않게 빛나지만, 낮은 음역에서는 베일에 싸인 듯 신비롭고 멜랑콜리한 음색을 냅니다.&lt;/p&gt;
&lt;p&gt;그리고 이 악기는 농담의 대상으로도 꽤 유명합니다. (이건 뒤에서 다룹니다.)&lt;/p&gt;</description></item><item><title>Redis를 활용한 초경량 메시징 전략: Pub-Sub과 Worker Queue 완벽 정리</title><link>https://philipjkim.cc/posts/20260226-redis-for-message-queue/</link><pubDate>Thu, 26 Feb 2026 19:38:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260226-redis-for-message-queue/</guid><description>&lt;p&gt;Redis를 단순히 &amp;lsquo;캐시&amp;rsquo;로만 쓰고 계신가요? 사실 Redis는 백엔드 엔지니어의 도구 상자에서 가장 다재다능한 &lt;strong&gt;&amp;lsquo;메시지 브로커&amp;rsquo;&lt;/strong&gt; 이기도 합니다. 별도의 무거운 MQ(Message Queue)를 설치하기엔 부담스럽고, 속도는 포기할 수 없을 때 Redis는 최고의 선택지가 됩니다.&lt;/p&gt;
&lt;p&gt;Go 언어를 이용해 Redis의 두 가지 핵심 메시징 패턴인 &lt;strong&gt;Pub-Sub&lt;/strong&gt;과 &lt;strong&gt;Worker Queue&lt;/strong&gt;를 구현하는 방법을 정리해 보았습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-왜-redis-메시지-큐인가"&gt;1. 왜 Redis 메시지 큐인가?&lt;/h2&gt;
&lt;p&gt;RabbitMQ나 Kafka는 훌륭하지만, 운영 오버헤드가 큽니다. 반면 Redis는 이미 많은 프로젝트에서 캐시용으로 사용 중이며, 다음과 같은 장점이 있습니다.&lt;/p&gt;</description></item><item><title>완벽한 균형의 미학: 현악 4중주(String Quartet)</title><link>https://philipjkim.cc/posts/20260226-introduction-to-string-quartets/</link><pubDate>Thu, 26 Feb 2026 10:25:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20260226-introduction-to-string-quartets/</guid><description>&lt;p&gt;&lt;img src="https://serenademagazine.com/content/images/wp-content/uploads/2023/05/fab655c7cb68314c8e567daa9db84cdca5b4cf69.jpg" alt="image"&gt;&lt;/p&gt;
&lt;p&gt;클래식 음악의 수많은 장르 중에서도 &lt;strong&gt;&amp;lsquo;현악 4중주(String Quartet)&amp;rsquo;&lt;/strong&gt; 는 작곡가들의 가장 내밀하고 철학적인 사유가 담기는 그릇으로 평가받습니다. 화려한 오케스트라의 웅장함과는 다른, 네 대의 현악기가 만들어내는 치밀하고 완벽한 대화의 세계를 알아봅니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-현악-4중주가-탄생하게-된-배경"&gt;1. 현악 4중주가 탄생하게 된 배경&lt;/h2&gt;
&lt;p&gt;현악 4중주의 역사는 18세기 고전주의 시대로 거슬러 올라갑니다. 바로크 시대에는 건반 악기(하프시코드 등)가 저음을 받쳐주는 &amp;lsquo;통주저음(Basso Continuo)&amp;rsquo; 중심의 음악이 주를 이루었습니다.&lt;/p&gt;
&lt;p&gt;현악 4중주의 형태를 확립하여 &lt;strong&gt;&amp;lsquo;현악 4중주의 아버지&amp;rsquo;&lt;/strong&gt; 라 불리는 인물은 &lt;strong&gt;조셉 하이든(Joseph Haydn)&lt;/strong&gt; 입니다. 1750년대, 하이든이 퓌른베르크 남작의 저택에 초대받았을 때 연주할 수 있는 인원이 바이올린 2명, 비올라 1명, 첼로 1명뿐이었습니다. 하이든은 이 네 명만을 위한 곡을 우연히 작곡하게 되었고, 건반 악기의 도움 없이 네 대의 현악기만으로 완벽한 화성을 만들어낼 수 있다는 것을 깨달았습니다. 이후 모차르트와 베토벤을 거치며 현악 4중주는 클래식 음악의 가장 중요한 실내악 형식으로 자리 잡았습니다.&lt;/p&gt;</description></item><item><title>AI 시대 엔지니어의 심화 전략: 복리 게임, 거울의 한계, 선제적 AI 활용</title><link>https://philipjkim.cc/posts/20260225-digging-deeper-ai-coding-review/</link><pubDate>Wed, 25 Feb 2026 13:54:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20260225-digging-deeper-ai-coding-review/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이 글의 시작이 된 에세이&lt;/strong&gt;: &lt;a href="https://flowkater.io/posts/2026-02-19-code-reading-era/"&gt;코드를 읽지 않는 시대, 엔지니어는 무엇을 읽어야 하는가&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-복리-게임-정의-본질-그리고-승리-전략"&gt;1. 복리 게임: 정의, 본질, 그리고 승리 전략&lt;/h2&gt;
&lt;h3 id="복리-게임이란-무엇인가"&gt;복리 게임이란 무엇인가&lt;/h3&gt;
&lt;p&gt;Kent Beck이 제시한 &lt;strong&gt;복리 게임(The Compounding Game)&lt;/strong&gt; 은 소프트웨어 개발의 본질을 설명하는 프레임이다. 이를 이해하려면 먼저 그 반대편에 있는 결승선 게임과 대비해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;결승선 게임(The Finish Line Game)&lt;/strong&gt; 은 명확한 종료 조건이 있는 게임이다. &amp;ldquo;X를 하는 소프트웨어가 필요하다 → X를 구현하면 끝.&amp;rdquo; 일회성 스크립트, PoC, 해커톤 프로젝트가 여기에 해당한다. 가장 빠르게 결승선에 도달하는 사람이 이기고, 결승선을 넘으면 게임이 끝난다. AI 바이브 코딩이 압도적으로 유리한 영역이기도 하다.&lt;/p&gt;</description></item><item><title>책 소개: 정문정 작가의 《무례한 사람에게 웃으며 대처하는 법》</title><link>https://philipjkim.cc/posts/20260225-book-review-how-to-react-to-bad-people/</link><pubDate>Wed, 25 Feb 2026 10:35:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20260225-book-review-how-to-react-to-bad-people/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini Pro 3 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-챕터별-핵심-요약-및-액션-플랜"&gt;📖 챕터별 핵심 요약 및 액션 플랜&lt;/h2&gt;
&lt;h3 id="1장-착한-사람이-될-필요는-없어"&gt;1장. 착한 사람이 될 필요는 없어&lt;/h3&gt;
&lt;p&gt;우리는 흔히 &amp;lsquo;착한 사람&amp;rsquo;이 되어야 한다는 강박에 시달립니다. 하지만 저자는 말합니다. 타인의 기대에 부응하느라 나를 잃어버리는 것은 &amp;lsquo;착함&amp;rsquo;이 아니라 &amp;lsquo;자신에 대한 방임&amp;rsquo;이라고요.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;요약:&lt;/strong&gt; 거절하지 못하는 성격은 결국 스스로를 병들게 합니다. 무례한 요구를 거절하는 것은 나쁜 짓이 아니라, 나를 보호하는 당연한 권리입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="액션-플랜"&gt;액션 플랜&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;거절 근육 키우기:&lt;/strong&gt; 일주일에 최소 한 번, 내키지 않는 부탁에 대해 &amp;ldquo;죄송하지만 이번엔 어려울 것 같습니다&amp;quot;라고 명확히 거절해 보세요. 사족(긴 변명)은 붙이지 않는 것이 포인트입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;착한 아이 콤플렉스 진단:&lt;/strong&gt; 내가 타인의 눈치를 보느라 하고 싶은 말을 참은 순간을 기록해 보세요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2장-좋게-좋게-넘어가지-않아야-좋은-세상이-온다"&gt;2장. 좋게 좋게 넘어가지 않아야 좋은 세상이 온다&lt;/h3&gt;
&lt;p&gt;불편한 상황에서 웃으며 넘어가면 상대는 &amp;lsquo;그래도 되는 줄&amp;rsquo; 압니다. 침묵은 암묵적인 동의와 같습니다.&lt;/p&gt;</description></item><item><title>The Healthy Programmer (2nd Edition) — Part 3</title><link>https://philipjkim.cc/posts/20260212-healthy-programmer-pt3/</link><pubDate>Thu, 12 Feb 2026 13:11:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260212-healthy-programmer-pt3/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;원서&lt;/strong&gt;: &lt;em&gt;The Healthy Programmer, Second Edition&lt;/em&gt; — Joe Kutner (Pragmatic Bookshelf, 2026)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-9-큐비클-밖에서-생각하기-thinking-outside-the-cube"&gt;Chapter 9: 큐비클 밖에서 생각하기 (Thinking Outside the Cube)&lt;/h2&gt;
&lt;h3 id="비타민-d-충전하기"&gt;비타민 D 충전하기&lt;/h3&gt;
&lt;p&gt;핀란드는 북극권에 위치하여 겨울에는 해가 뜨지 않는 날도 있지만, 여름 축제와 야외 활동으로 충분한 비타민 D를 합성해 왔습니다. 프로그래머의 사무실도 일종의 &lt;strong&gt;인공 북극권&lt;/strong&gt;과 같습니다 — 이른 아침에 출근하여 해질 무렵 퇴근하면 자연광에 노출될 기회가 거의 없습니다.&lt;/p&gt;</description></item><item><title>The Healthy Programmer (2nd Edition) — Part 2</title><link>https://philipjkim.cc/posts/20260212-healthy-programmer-pt2/</link><pubDate>Thu, 12 Feb 2026 13:11:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20260212-healthy-programmer-pt2/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;원서&lt;/strong&gt;: &lt;em&gt;The Healthy Programmer, Second Edition&lt;/em&gt; — Joe Kutner (Pragmatic Bookshelf, 2026)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-5-허리-통증-예방-preventing-back-pain"&gt;Chapter 5: 허리 통증 예방 (Preventing Back Pain)&lt;/h2&gt;
&lt;h3 id="코어-근육-유닛-테스트하기"&gt;코어 근육 유닛 테스트하기&lt;/h3&gt;
&lt;p&gt;1753년 카를 필리프 에마누엘 바흐가 건반 연주의 올바른 자세에 대한 책을 출판하기 전까지, 대부분의 하프시코드 연주자들은 통증을 감수해야 한다고 생각했습니다. 프로그래머도 비슷한 상황입니다. 주당 40시간 이상 키보드 앞에 앉아 있으면서도 올바른 자세 교육을 거의 받지 못합니다. &lt;strong&gt;허리 통증은 미국에서 1차 진료 방문 원인 상위 5위&lt;/strong&gt;에 들며, 프로그래머에게 해당하는 근육성 허리 통증이 전체의 75%를 차지합니다.&lt;/p&gt;</description></item><item><title>The Healthy Programmer (2nd Edition) — Part 1</title><link>https://philipjkim.cc/posts/20260212-healthy-programmer-pt1/</link><pubDate>Thu, 12 Feb 2026 13:11:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20260212-healthy-programmer-pt1/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;em&gt;이 글은 Claude Opus 4.6 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;원서&lt;/strong&gt;: &lt;em&gt;The Healthy Programmer, Second Edition&lt;/em&gt; — Joe Kutner (Pragmatic Bookshelf, 2026)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="서문-preface"&gt;서문 (Preface)&lt;/h2&gt;
&lt;h3 id="이-책을-읽어야-하는-이유"&gt;이 책을 읽어야 하는 이유&lt;/h3&gt;
&lt;p&gt;이 책을 읽어야 하는 첫 번째 이유는 &lt;strong&gt;여러분의 생명&lt;/strong&gt;이 달려 있기 때문입니다. 두 번째 이유는 &lt;strong&gt;여러분의 커리어&lt;/strong&gt;가 달려 있기 때문입니다. 저자는 허리 통증으로 더 이상 책상에 앉을 수 없게 된 프로그래머, 반복적인 키보드 사용으로 손목을 다쳐 일상생활조차 어려워진 프로그래머를 직접 만났다고 합니다. 미국의 사망 원인 1위는 심장 질환이며, 제2형 당뇨와 비만도 꾸준히 증가하고 있습니다. 프로그래머의 생활 방식이 이러한 문제에 기여하지만, 대부분의 경우 운동과 영양 관리를 통해 &lt;strong&gt;예방이 가능&lt;/strong&gt;합니다.&lt;/p&gt;</description></item><item><title>사고의 외주화: AI 시대, Co-pilot과 Autopilot 사이</title><link>https://philipjkim.cc/posts/20260211-outsourcing-of-thinking/</link><pubDate>Wed, 11 Feb 2026 10:30:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260211-outsourcing-of-thinking/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini 3 Pro 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;최근 생성형 AI(Generative AI)의 발전 속도는 경이롭다 못해 두렵기까지 합니다. ChatGPT나 Claude, Gemini 같은 도구들은 이제 단순히 정보를 검색해 주는 차원을 넘어, 복잡한 코드를 짜고, 에세이를 작성하며, 심지어 창의적인 기획안까지 제안합니다.&lt;/p&gt;
&lt;p&gt;하지만 이 압도적인 편리함 이면에는 우리가 놓치고 있는 심각한 부작용이 도사리고 있습니다. 바로 &lt;strong&gt;&amp;lsquo;사고의 외주화(Outsourcing of Thinking)&amp;rsquo;&lt;/strong&gt; 입니다. 이는 단순 반복 작업을 기계에 맡기는 &amp;lsquo;자동화&amp;rsquo;와는 다릅니다. 인간 고유의 영역이라 믿었던 &lt;strong&gt;추론, 판단, 맥락 파악&lt;/strong&gt;이라는 인지적 노동 자체를 AI에게 전적으로 의탁하는 현상을 말합니다.&lt;/p&gt;</description></item><item><title>STITCH 스택으로 JavaScript 없이 모던 웹앱 만들기</title><link>https://philipjkim.cc/posts/20260211-to-do-with-stitch-stack/</link><pubDate>Wed, 11 Feb 2026 10:24:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260211-to-do-with-stitch-stack/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java 백엔드 개발자가 프론트엔드 프레임워크 없이도 인터랙티브한 웹 애플리케이션을 만들 수 있다면 어떨까요? 이 글에서는 &lt;strong&gt;STITCH 스택&lt;/strong&gt;으로 JavaScript 로직을 최소화한 To-Do 앱을 처음부터 끝까지 만들어봅니다.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;이 글은 &lt;a href="https://philipjkim.cc/posts/20260211-to-do-app-with-modern-go-stack/"&gt;GoTHIC 스택 가이드&lt;/a&gt;의 Java/Spring 버전입니다. Go 백엔드에 관심이 있다면 GoTHIC 편도 확인해보세요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="stitch-스택이란"&gt;STITCH 스택이란&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;STITCH&lt;/strong&gt;는 &lt;strong&gt;S&lt;/strong&gt;(pring Boot) + &lt;strong&gt;T&lt;/strong&gt;(hymeleaf) + &lt;strong&gt;I&lt;/strong&gt;(nteractive) + &lt;strong&gt;T&lt;/strong&gt;(ailwindCSS + DaisyUI) + &lt;strong&gt;C&lt;/strong&gt;(omponents) + &lt;strong&gt;H&lt;/strong&gt;(TMX)의 축약어입니다. &amp;ldquo;꿰매다&amp;quot;라는 뜻 그대로, 서버 사이드 렌더링과 클라이언트 인터랙션을 자연스럽게 이어붙이는 풀스택 조합입니다.&lt;/p&gt;</description></item><item><title>GoTHIC 스택으로 JavaScript 없이 모던 웹앱 만들기</title><link>https://philipjkim.cc/posts/20260211-to-do-app-with-modern-go-stack/</link><pubDate>Wed, 11 Feb 2026 09:31:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20260211-to-do-app-with-modern-go-stack/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Go 백엔드 개발자가 프론트엔드 프레임워크 없이도 인터랙티브한 웹 애플리케이션을 만들 수 있다면 어떨까요? 이 글에서는 &lt;strong&gt;GoTHIC 스택&lt;/strong&gt;으로 JavaScript 로직을 최소화한 To-Do 앱을 처음부터 끝까지 만들어봅니다. 핫 리로드까지 &lt;code&gt;air&lt;/code&gt;로 세팅하면 개발 경험도 꽤 쾌적합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="gothic-스택이란"&gt;GoTHIC 스택이란&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;GoTHIC&lt;/strong&gt;은 &lt;strong&gt;Go&lt;/strong&gt;(+Gin) + &lt;strong&gt;T&lt;/strong&gt;(empl) + &lt;strong&gt;H&lt;/strong&gt;(TMX) + &lt;strong&gt;I&lt;/strong&gt;nteractive &lt;strong&gt;C&lt;/strong&gt;omponents(Alpine.js + TailwindCSS + DaisyUI)의 축약어입니다. GoTH(Go + Templ + HTMX) 스택을 확장하여 클라이언트 인터랙션과 스타일링까지 아우르는 풀스택 조합입니다.&lt;/p&gt;</description></item><item><title>파리의 소울 푸드, 잠봉 뵈르(Jambon-Beurre) 소개</title><link>https://philipjkim.cc/posts/20260210-introduction-to-jambon-beurre/</link><pubDate>Tue, 10 Feb 2026 10:23:19 +0900</pubDate><guid>https://philipjkim.cc/posts/20260210-introduction-to-jambon-beurre/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini 3 Pro 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cdn.tasteatlas.com//images/dishes/40f12ab0bcf240f99e86c52615b2f475.jpg?mw=900" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;화려한 프랑스 요리들 사이에서, 가장 단순하지만 가장 강력한 아이콘을 꼽으라면 단연 &lt;strong&gt;잠봉 뵈르(Jambon-Beurre)&lt;/strong&gt; 일 것입니다. 바삭한 바게트, 신선한 버터, 그리고 짭짤한 햄. 단 세 가지 재료로 만들어내는 이 완벽한 균형은 프랑스인들의 점심을 책임지는 소울 푸드입니다.&lt;/p&gt;
&lt;p&gt;오늘은 이 단순함의 미학, 잠봉 뵈르에 대한 깊이 있는 이야기를 다뤄보려 합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-잠봉-뵈르jambon-beurre란-무엇인가"&gt;1. 잠봉 뵈르(Jambon-Beurre)란 무엇인가?&lt;/h2&gt;
&lt;p&gt;잠봉 뵈르는 프랑스어로 &lt;strong&gt;&amp;lsquo;햄(Jambon)&amp;lsquo;과 &amp;lsquo;버터(Beurre)&amp;rsquo;&lt;/strong&gt; 를 뜻합니다. 이름 그대로 바게트를 반으로 갈라 버터를 바르고 얇게 저민 햄을 끼워 넣은 샌드위치입니다.&lt;/p&gt;</description></item><item><title>스트라토캐스터 스트링 게이지 가이드</title><link>https://philipjkim.cc/posts/20260209-string-gauge-guide-for-strat/</link><pubDate>Mon, 09 Feb 2026 10:54:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20260209-string-gauge-guide-for-strat/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini 3 Pro 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;스트라토캐스터(Stratocaster)는 부품 하나하나가 유기적으로 연결된 &amp;lsquo;살아있는&amp;rsquo; 악기입니다. 그중에서도 스트링 게이지(String Gauge)의 변화는 가장 저렴하면서도 기타의 성향을 극적으로 바꾸는 튜닝입니다.&lt;/p&gt;
&lt;p&gt;단순히 &amp;ldquo;손이 아프다/안 아프다&amp;quot;를 넘어, 게이지별 톤의 물리학적 변화와 그에 따른 싱크로나이즈드 트레몰로 브릿지 세팅법, 그리고 하드웨어 셋업의 핵심을 정리했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-게이지별-톤--연주감-심층-분석"&gt;1. 게이지별 톤 &amp;amp; 연주감 심층 분석&lt;/h2&gt;
&lt;p&gt;스트링이 굵어질수록 &lt;strong&gt;질량(Mass)&lt;/strong&gt; 이 증가하여, 같은 음정(Pitch)을 내기 위해 더 강한 &lt;strong&gt;장력(Tension)&lt;/strong&gt; 이 필요합니다. 이는 픽업의 자기장 안에서 진동하는 금속의 양과 운동 에너지가 달라짐을 의미합니다.&lt;/p&gt;</description></item><item><title>블루스(Blues): 현대 대중음악의 영혼과 뿌리에 관한 심층 분석</title><link>https://philipjkim.cc/posts/20260206-introduction-to-blues/</link><pubDate>Fri, 06 Feb 2026 14:02:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260206-introduction-to-blues/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-고통에서-피어난-예술-블루스의-정의와-본질"&gt;서론: 고통에서 피어난 예술, 블루스의 정의와 본질&lt;/h2&gt;
&lt;p&gt;블루스는 단순한 음악 장르를 넘어, 인간의 고통과 희망을 가장 원초적으로 담아낸 예술 형태이자 20세기 이후 등장한 거의 모든 대중음악의 모태입니다. 재즈, 로큰롤, R&amp;amp;B, 소울, 펑크(Funk), 그리고 힙합에 이르기까지 현대 음악의 지형도에서 블루스의 유전자를 공유하지 않은 장르는 존재하지 않는다고 해도 과언이 아닙니다. 본 포스트는 블루스라는 거대한 음악적 우주를 항해하고자 하는 청자와 연주자들을 위해 작성되었습니다. 우리는 블루스의 어원과 역사적 기원부터 시작하여, 각 지역별로 독특하게 분화된 하위 장르의 특성을 분석하고, 피아노, 기타, 베이스, 드럼이라는 네 가지 핵심 악기의 관점에서 반드시 연구해야 할 명반들을 심도 있게 탐구할 것입니다.&lt;/p&gt;</description></item><item><title>Claude Code Compaction 가이드</title><link>https://philipjkim.cc/posts/20260204-about-claude-code-compaction/</link><pubDate>Wed, 04 Feb 2026 19:28:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20260204-about-claude-code-compaction/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Claude Code를 하루 종일 사용하다 보면 어느 순간 &amp;ldquo;Compacting our conversation&amp;hellip;&amp;rdquo; 메시지와 함께 작업 흐름이 끊기는 경험을 하게 됩니다. 이 글에서는 Compaction이 무엇인지, 왜 자주 발생하는지, 그리고 어떻게 줄일 수 있는지 실전 전략을 공유합니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="compaction이란"&gt;Compaction이란?&lt;/h2&gt;
&lt;p&gt;Claude Code는 대화 내용, 읽은 파일, 명령어 출력 등을 &lt;strong&gt;Context Window&lt;/strong&gt;라는 제한된 공간에 저장합니다. 이 공간이 가득 차면 Claude는 더 이상 새로운 정보를 처리할 수 없게 됩니다.&lt;/p&gt;</description></item><item><title>일렉트릭 베이스 4현과 5현의 구조적, 음향학적, 연주적 특성 비교</title><link>https://philipjkim.cc/posts/20260202-bass-comparison-4-vs-5-strings/</link><pubDate>Mon, 02 Feb 2026 13:32:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260202-bass-comparison-4-vs-5-strings/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini Pro 3 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="요약-executive-summary"&gt;&lt;strong&gt;요약 (Executive Summary)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;본 포스트는 현대 대중음악의 저음역을 담당하는 일렉트릭 베이스 기타의 두 가지 주류 형태인 4현(4-String)과 5현(5-String) 모델을 다각도로 비교 분석한다. 단순히 음역대의 확장(Low B string의 유무)을 넘어, 악기의 물리적 구조가 파생시키는 음향학적(Acoustical) 차이, 전자기적(Electromagnetic) 반응의 변화, 그리고 연주자에게 요구되는 인체공학적(Ergonomic) 및 기술적(Technical) 적응성을 심도 있게 규명한다.&lt;/p&gt;
&lt;p&gt;분석 결과, &lt;strong&gt;&amp;ldquo;5현 베이스가 4현 베이스의 상위 호환이며 모든 기능을 대체할 수 있다&amp;quot;는 통념은 음향학적, 연주적 관점에서 타당하지 않음&lt;/strong&gt;이 밝혀졌다. 4현 베이스는 특유의 넥 공명(Resonance)과 픽업 구조(Pickup Geometry)로 인해 5현 모델이 물리적으로 재현하기 어려운 고유한 톤 엔벨로프(Tone Envelope)와 타격감(Punch)을 제공한다. 반면, 5현 베이스는 음역의 확장 외에도 포지션 이동의 효율성(Economy of Motion), 팀버(Timbre)의 다양성, 그리고 이조(Transposition)의 용이성이라는 독보적인 강점을 지닌다. 본고는 공신력 있는 음향학 자료와 마커스 밀러(Marcus Miller), 리 스클라(Lee Sklar), 앤서니 잭슨(Anthony Jackson), 피노 팔라디노(Pino Palladino) 등 세계적인 프로 뮤지션들의 인터뷰 및 연주 철학을 바탕으로, 각 악기의 선택 당위성을 논리적으로 제시한다.&lt;/p&gt;</description></item><item><title>Mermaid 다이어그램 가이드 Part 4: State Diagram</title><link>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-04/</link><pubDate>Wed, 28 Jan 2026 10:37:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="state-diagram이란"&gt;State Diagram이란?&lt;/h2&gt;
&lt;p&gt;상태 다이어그램(State Diagram)은 시스템이나 객체가 가질 수 있는 상태(State)와 상태 간의 전이(Transition)를 시각화합니다. 주문 처리, 사용자 인증, TCP 연결 등 유한 상태 기계(Finite State Machine)를 표현할 때 필수적인 도구입니다.&lt;/p&gt;
&lt;h2 id="기본-문법"&gt;기본 문법&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;stateDiagram-v2
 [*] --&amp;gt; Idle
 Idle --&amp;gt; Processing
 Processing --&amp;gt; Completed
 Completed --&amp;gt; [*]
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;stateDiagram-v2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [*] --&amp;gt; Idle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Idle --&amp;gt; Processing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Processing --&amp;gt; Completed
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Completed --&amp;gt; [*]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;stateDiagram-v2&lt;/code&gt;를 사용하면 최신 렌더러로 그려집니다. 구버전 &lt;code&gt;stateDiagram&lt;/code&gt;도 여전히 사용 가능합니다.&lt;/p&gt;</description></item><item><title>Mermaid 다이어그램 가이드 Part 3: Sequence Diagram</title><link>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-03/</link><pubDate>Wed, 28 Jan 2026 10:37:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="sequence-diagram이란"&gt;Sequence Diagram이란?&lt;/h2&gt;
&lt;p&gt;시퀀스 다이어그램은 객체들 간의 메시지 교환을 시간 순서에 따라 보여주는 다이어그램입니다. API 호출 흐름, 인증 과정, 트랜잭션 처리 등을 문서화할 때 특히 유용합니다.&lt;/p&gt;
&lt;h2 id="기본-문법"&gt;기본 문법&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;sequenceDiagram
 participant A as 클라이언트
 participant B as 서버
 A-&amp;gt;&amp;gt;B: 요청
 B--&amp;gt;&amp;gt;A: 응답
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sequenceDiagram
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant A as 클라이언트
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; participant B as 서버
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A-&amp;gt;&amp;gt;B: 요청
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B--&amp;gt;&amp;gt;A: 응답
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="participant-정의"&gt;Participant 정의&lt;/h2&gt;
&lt;h3 id="자동-정의"&gt;자동 정의&lt;/h3&gt;
&lt;p&gt;메시지에서 처음 등장하는 이름이 자동으로 participant가 됩니다.&lt;/p&gt;</description></item><item><title>Mermaid 다이어그램 가이드 Part 2: Flowchart 심화 - Subgraph와 레이아웃 제어</title><link>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-02/</link><pubDate>Wed, 28 Jan 2026 10:37:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="subgraph-기본"&gt;Subgraph 기본&lt;/h2&gt;
&lt;p&gt;Subgraph는 관련된 노드들을 논리적으로 그룹화하는 기능입니다. 시스템의 계층 구조나 도메인 영역을 시각적으로 구분할 때 유용합니다.&lt;/p&gt;
&lt;h3 id="기본-문법"&gt;기본 문법&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph 그룹명
 A --&amp;gt; B
 end
 C --&amp;gt; A
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flowchart TB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; subgraph 그룹명
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A --&amp;gt; B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; end
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; C --&amp;gt; A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="id와-제목-분리"&gt;ID와 제목 분리&lt;/h3&gt;
&lt;p&gt;Subgraph에 별도의 ID를 지정하면 참조가 쉬워집니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph api[API Layer]
 A[Controller]
 B[Service]
 end
 subgraph db[Data Layer]
 C[(MySQL)]
 D[(Redis)]
 end
 A --&amp;gt; B
 B --&amp;gt; C
 B --&amp;gt; D
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flowchart TB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; subgraph api[API Layer]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A[Controller]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B[Service]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; end
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; subgraph db[Data Layer]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; C[(MySQL)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; D[(Redis)]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; end
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A --&amp;gt; B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B --&amp;gt; C
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B --&amp;gt; D
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="subgraph-방향-제어"&gt;Subgraph 방향 제어&lt;/h2&gt;
&lt;p&gt;이것이 Mermaid 레이아웃의 핵심입니다. &lt;code&gt;direction&lt;/code&gt; 키워드로 각 subgraph 내부의 배치 방향을 개별적으로 지정할 수 있습니다.&lt;/p&gt;</description></item><item><title>Mermaid 다이어그램 가이드 Part 1: Flowchart 기본</title><link>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-01/</link><pubDate>Wed, 28 Jan 2026 10:37:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260128-mermaid-diagram-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="mermaid란"&gt;Mermaid란?&lt;/h2&gt;
&lt;p&gt;Mermaid는 마크다운 스타일의 텍스트로 다이어그램을 생성하는 JavaScript 기반 도구입니다. 별도의 드로잉 도구 없이도 Git에서 버전 관리가 가능한 다이어그램을 작성할 수 있어, 개발 문서화에 특히 유용합니다.&lt;/p&gt;
&lt;p&gt;GitHub, GitLab, Notion, Obsidian 등 다양한 플랫폼에서 기본 지원되며, VS Code 확장 프로그램을 통해 실시간 미리보기도 가능합니다.&lt;/p&gt;
&lt;h2 id="flowchart-기본-문법"&gt;Flowchart 기본 문법&lt;/h2&gt;
&lt;p&gt;Flowchart는 프로세스의 흐름을 시각화하는 가장 기본적인 다이어그램입니다. 노드(Node)와 엣지(Edge)로 구성됩니다.&lt;/p&gt;
&lt;h3 id="다이어그램-선언"&gt;다이어그램 선언&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TD
 A --&amp;gt; B
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flowchart TD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A --&amp;gt; B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;flowchart&lt;/code&gt; 키워드로 시작하며, 바로 뒤에 방향을 지정합니다. &lt;code&gt;graph&lt;/code&gt; 키워드도 사용 가능하지만 &lt;code&gt;flowchart&lt;/code&gt;가 더 많은 기능을 지원합니다.&lt;/p&gt;</description></item><item><title>책 소개: 마크 비트먼의 『How to Cook Everything』</title><link>https://philipjkim.cc/posts/20260126-book-review-how-to-cook-everything/</link><pubDate>Mon, 26 Jan 2026 10:20:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20260126-book-review-how-to-cook-everything/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Google Gemini Pro Deep Research 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- Thanks to: gunjasal 님 (책 소개)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/717Bn&amp;#43;ADXsL._AC_UF1000,1000_QL80_.jpg" alt="book_cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-요리법의-민주화와-주방의-바이블"&gt;서론: 요리법의 민주화와 &amp;lsquo;주방의 바이블&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;20세기 후반부터 21세기 초반에 이르는 요리 문헌의 역사는 단순한 레시피의 나열을 넘어선, 가정 요리(home cooking)의 패러다임 전환을 목격했다. 줄리아 차일드(Julia Child)가 프랑스 요리의 엄격한 기술을 미국 가정에 도입하며 &amp;lsquo;미식(gourmet)&amp;lsquo;의 시대를 열었다면, 마크 비트먼(Mark Bittman)은 그 엄격함을 해체하고 요리의 본질적 즐거움과 접근성을 회복시키는 데 주력했다. 그의 저서 『How to Cook Everything』(1998)은 단순한 요리책이 아닌, 현대 미국 가정 요리의 지형을 바꾼 &amp;lsquo;주방의 바이블&amp;rsquo;로 자리 잡았다.&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 6: 고급 패턴과 Best Practices</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-06/</link><pubDate>Fri, 23 Jan 2026 17:21:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-06/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 1시간 30분
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐⭐⭐⭐⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Part 1-5 완료
&lt;strong&gt;Claude Code 버전&lt;/strong&gt;: 2.1.x (Opus 4.5)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="0-claude-code-21-주요-신기능"&gt;0. Claude Code 2.1 주요 신기능&lt;/h2&gt;
&lt;p&gt;본격적인 내용에 앞서, Claude Code 2.1에서 추가된 핵심 기능들을 정리합니다:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;기능&lt;/th&gt;
 &lt;th&gt;설명&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Session Teleportation&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/teleport&lt;/code&gt;, &lt;code&gt;/remote-env&lt;/code&gt;로 로컬↔클라우드 세션 이동&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hot Reload for Skills&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Skills 수정 시 재시작 없이 즉시 반영&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Setup Hook&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--init&lt;/code&gt;, &lt;code&gt;--init-only&lt;/code&gt;, &lt;code&gt;--maintenance&lt;/code&gt; CLI 플래그용 훅&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Task Management&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;의존성 추적이 포함된 태스크 관리 시스템&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Language Output&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;language&lt;/code&gt; 설정으로 출력 언어 지정&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Opus 4.5&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Pro 사용자에게 Opus 4.5 모델 제공&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;respectGitignore&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;@-mention&lt;/code&gt; 파일 선택에서 gitignore 적용&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;showTurnDuration&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;턴 소요 시간 표시 설정&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="1-hooks-예외-없는-강제-자동화"&gt;1. Hooks: 예외 없는 강제 자동화&lt;/h2&gt;
&lt;h3 id="11-claudemd-vs-hooks의-근본적-차이"&gt;1.1 CLAUDE.md vs Hooks의 근본적 차이&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph Comparison[&amp;#34;CLAUDE.md vs Hooks&amp;#34;]
 direction TB

 subgraph Advisory[&amp;#34;📄 CLAUDE.md = &amp;#39;권고&amp;#39; (Advisory)&amp;#34;]
 A1[&amp;#34;&amp;#39;테스트를 실행해주세요&amp;#39;&amp;lt;br/&amp;gt;&amp;#39;린트를 돌려주세요&amp;#39;&amp;#34;]
 A2[&amp;#34;→ Claude가 따를 수도 있고, 잊을 수도 있음&amp;lt;br/&amp;gt;→ 복잡한 대화에서 규칙이 희석될 수 있음&amp;#34;]
 end

 subgraph Enforcement[&amp;#34;⚡ Hooks = &amp;#39;강제&amp;#39; (Enforcement)&amp;#34;]
 E1[&amp;#34;파일 저장 시 → 자동으로 린트 실행&amp;lt;br/&amp;gt;대화 시작 시 → 자동으로 컨텍스트 로드&amp;#34;]
 E2[&amp;#34;→ 예외 없이 항상 실행됨&amp;lt;br/&amp;gt;→ Claude의 판단과 무관하게 트리거&amp;#34;]
 end
 end

 style Advisory fill:#fff9c4,color:#000000
 style Enforcement fill:#c8e6c9,color:#000000
 style A1 fill:#fffde7,color:#000000
 style A2 fill:#ffecb3,color:#000000
 style E1 fill:#e8f5e9,color:#000000
 style E2 fill:#a5d6a7,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="12-hooks-이벤트-종류"&gt;1.2 Hooks 이벤트 종류&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;이벤트&lt;/th&gt;
 &lt;th&gt;트리거 시점&lt;/th&gt;
 &lt;th&gt;사용 예시&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PreToolUse&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;도구 실행 직전&lt;/td&gt;
 &lt;td&gt;위험한 명령 차단, 로깅&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;PostToolUse&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;도구 실행 직후&lt;/td&gt;
 &lt;td&gt;린트 자동 실행, 검증&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Notification&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;알림 발생 시&lt;/td&gt;
 &lt;td&gt;외부 시스템 연동&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Stop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;작업 완료/중단 시&lt;/td&gt;
 &lt;td&gt;정리 작업, 리포트&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;Setup&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;--init&lt;/code&gt;, &lt;code&gt;--init-only&lt;/code&gt;, &lt;code&gt;--maintenance&lt;/code&gt; 실행 시&lt;/td&gt;
 &lt;td&gt;저장소 초기화, 유지보수 (2.1+ 신규)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;💡 &lt;strong&gt;Claude Code 2.1+ 변경사항&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 5: 나만의 Plugin Marketplace 만들기 - 팀/조직 확장</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-05/</link><pubDate>Fri, 23 Jan 2026 17:21:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 1시간 30분
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐⭐⭐⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Part 1-4 완료, Git/GitHub 기본 지식
&lt;strong&gt;Claude Code 버전&lt;/strong&gt;: 2.1.x&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-plugin-구조-이해"&gt;1. Plugin 구조 이해&lt;/h2&gt;
&lt;h3 id="11-plugin-디렉토리-구조"&gt;1.1 Plugin 디렉토리 구조&lt;/h3&gt;
&lt;p&gt;💡 &lt;strong&gt;주의&lt;/strong&gt;: 2026년 기준, &lt;code&gt;marketplace.json&lt;/code&gt;에서 Skills를 로드하려면 &lt;code&gt;skills&lt;/code&gt; 필드가 &lt;strong&gt;필수&lt;/strong&gt;입니다. 이 필드가 없으면 Skills가 로드되지 않습니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;my-plugin/
├── .claude-plugin/
│ └── plugin.json # 필수: 플러그인 메타데이터
├── skills/ # 선택: Skills
│ └── my-skill/
│ └── SKILL.md
├── commands/ # 선택: Slash Commands
│ └── my-command.md
├── agents/ # 선택: Subagents
│ └── my-agent.md
├── hooks/ # 선택: Hooks 설정
│ └── hooks.json
├── .mcp.json # 선택: MCP 서버 설정
└── README.md # 권장: 문서화
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="12-pluginjson-필수-필드"&gt;1.2 plugin.json 필수 필드&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;my-awesome-plugin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;플러그인 설명&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;author&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Your Name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;homepage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/you/my-plugin&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="13-pluginjson-전체-스키마"&gt;1.3 plugin.json 전체 스키마&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;my-awesome-plugin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;이 플러그인이 무엇을 하는지 간단히 설명&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;author&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Your Name &amp;lt;you@example.com&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;homepage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/you/my-plugin&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;repository&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;git&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/you/my-plugin.git&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;license&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MIT&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;keywords&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;go&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;testing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;conventions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;engines&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;claude-code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;gt;=2.0.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;dependencies&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;plugins&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;other-plugin@marketplace&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-첫-번째-plugin-만들기"&gt;2. 첫 번째 Plugin 만들기&lt;/h2&gt;
&lt;h3 id="21-시나리오"&gt;2.1 시나리오&lt;/h3&gt;
&lt;p&gt;Java/Kotlin 개발팀을 위한 Plugin을 만들어봅시다. 다음을 포함합니다:&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 4: Plugins &amp; Marketplace - 재사용 가능한 확장 패키지</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-04/</link><pubDate>Fri, 23 Jan 2026 17:21:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 1시간
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐⭐⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Part 1, 2, 3 완료
&lt;strong&gt;Claude Code 버전&lt;/strong&gt;: 2.1.x (VSCode Native Plugin Management 지원)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-plugin이란-무엇인가"&gt;1. Plugin이란 무엇인가?&lt;/h2&gt;
&lt;h3 id="11-skills-vs-commands-vs-plugins-vs-subagents-개념-정리"&gt;1.1 Skills vs Commands vs Plugins vs Subagents 개념 정리&lt;/h3&gt;
&lt;p&gt;Claude Code의 확장 시스템은 여러 요소로 구성됩니다. 각각의 역할을 명확히 이해해야 합니다:&lt;/p&gt;
&lt;p&gt;💡 &lt;strong&gt;Claude Code 2.1+ 업데이트&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VSCode Native Plugin Management&lt;/strong&gt;: VS Code 확장에서 플러그인을 직접 탐색하고 관리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Task Management System&lt;/strong&gt;: 의존성 추적이 포함된 새로운 태스크 관리 시스템이 추가되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anthropic 공식 Marketplace&lt;/strong&gt;: &lt;code&gt;anthropics/claude-code&lt;/code&gt; 저장소에 공식 플러그인 마켓플레이스가 포함되어 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph ExtSystem[&amp;#34;Claude Code 확장 시스템 전체 구조&amp;#34;]
 direction TB

 subgraph Components[&amp;#34;구성 요소&amp;#34;]
 direction LR
 Skills[&amp;#34;🧠 Skills&amp;#34;]
 Commands[&amp;#34;⌨️ Commands&amp;#34;]
 Subagents[&amp;#34;👨‍💼 Subagents&amp;#34;]
 Plugins[&amp;#34;📦 Plugins&amp;#34;]
 end

 subgraph Features[&amp;#34;특징&amp;#34;]
 direction LR
 SK_F[&amp;#34;자동 호출&amp;lt;br/&amp;gt;참조 지식&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;#39;레시피북&amp;#39;&amp;#34;]
 CMD_F[&amp;#34;수동 호출&amp;lt;br/&amp;gt;/command&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;#39;단축키&amp;#39;&amp;#34;]
 SA_F[&amp;#34;위임 실행&amp;lt;br/&amp;gt;격리 컨텍스트&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;#39;전문가&amp;#39;&amp;#34;]
 PL_F[&amp;#34;배포 패키지&amp;lt;br/&amp;gt;(컨테이너)&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&amp;#39;도구상자&amp;#39;&amp;#34;]
 end

 Skills --&amp;gt; SK_F
 Commands --&amp;gt; CMD_F
 Subagents --&amp;gt; SA_F
 Plugins --&amp;gt; PL_F

 subgraph PluginContents[&amp;#34;Plugin이 포함할 수 있는 것&amp;#34;]
 direction LR
 P_Skills[&amp;#34;Skills&amp;#34;]
 P_Commands[&amp;#34;Commands&amp;#34;]
 P_Subagent[&amp;#34;Subagent&amp;#34;]
 P_Hooks[&amp;#34;Hooks&amp;#34;]
 P_MCP[&amp;#34;MCP&amp;#34;]
 end
 end

 style Skills fill:#c8e6c9,color:#000000
 style Commands fill:#bbdefb,color:#000000
 style Subagents fill:#fff9c4,color:#000000
 style Plugins fill:#ffccbc,color:#000000
 style SK_F fill:#e8f5e9,color:#000000
 style CMD_F fill:#e3f2fd,color:#000000
 style SA_F fill:#fffde7,color:#000000
 style PL_F fill:#fbe9e7,color:#000000
 style PluginContents fill:#f5f5f5,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="12-각-요소-상세-비교"&gt;1.2 각 요소 상세 비교&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;요소&lt;/th&gt;
 &lt;th&gt;호출 방식&lt;/th&gt;
 &lt;th&gt;컨텍스트&lt;/th&gt;
 &lt;th&gt;주요 용도&lt;/th&gt;
 &lt;th&gt;저장 위치&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;자동 (description 매칭)&lt;/td&gt;
 &lt;td&gt;메인에 주입&lt;/td&gt;
 &lt;td&gt;참조 지식, 패턴&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Commands&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;수동 (&lt;code&gt;/command&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;메인에서 실행&lt;/td&gt;
 &lt;td&gt;반복 작업 자동화&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.claude/commands/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Subagents&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;명시적 위임&lt;/td&gt;
 &lt;td&gt;격리된 윈도우&lt;/td&gt;
 &lt;td&gt;독립적 작업 처리&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.claude/agents/&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;설치 후 내부 요소 사용&lt;/td&gt;
 &lt;td&gt;해당 없음&lt;/td&gt;
 &lt;td&gt;배포/공유 패키지&lt;/td&gt;
 &lt;td&gt;Marketplace&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Hooks&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;이벤트 트리거&lt;/td&gt;
 &lt;td&gt;자동 실행&lt;/td&gt;
 &lt;td&gt;강제 자동화&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.claude/settings.json&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;외부 도구 연결&lt;/td&gt;
 &lt;td&gt;도구로 사용&lt;/td&gt;
 &lt;td&gt;외부 시스템 통합&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;.mcp.json&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="13-plugin이-해결하는-문제"&gt;1.3 Plugin이 해결하는 문제&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph Before[&amp;#34;❌ Plugin 등장 이전&amp;#34;]
 Q[&amp;#34;&amp;#39;팀원 A의 Claude Code 설정을&amp;lt;br/&amp;gt;팀원 B에게 공유하려면?&amp;#39;&amp;#34;]
 B1[&amp;#34;1. Skills 폴더 복사&amp;lt;br/&amp;gt;2. Commands 폴더 복사&amp;lt;br/&amp;gt;3. Agents 폴더 복사&amp;lt;br/&amp;gt;4. 설정 파일 수정&amp;lt;br/&amp;gt;5. 버전 관리 별도&amp;lt;br/&amp;gt;6. 업데이트 수동 반영&amp;#34;]
 BR[&amp;#34;→ 복잡하고 오류 발생 가능성 높음&amp;#34;]
 end

 subgraph After[&amp;#34;✅ Plugin 등장 이후&amp;#34;]
 A1[&amp;#34;/plugin marketplace add my-team/our-plugins&amp;#34;]
 A2[&amp;#34;/plugin install our-coding-standards@our-plugins&amp;#34;]
 AR[&amp;#34;→ 버전 관리, 자동 업데이트,&amp;lt;br/&amp;gt;의존성 해결 모두 자동&amp;#34;]
 end

 Before --&amp;gt; After

 style Before fill:#ffcdd2,color:#000000
 style After fill:#c8e6c9,color:#000000
 style Q fill:#ef9a9a,color:#000000
 style BR fill:#ef9a9a,color:#000000
 style A1 fill:#a5d6a7,color:#000000
 style A2 fill:#a5d6a7,color:#000000
 style AR fill:#a5d6a7,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="2-marketplace-시스템-이해"&gt;2. Marketplace 시스템 이해&lt;/h2&gt;
&lt;h3 id="21-marketplace란"&gt;2.1 Marketplace란?&lt;/h3&gt;
&lt;p&gt;Marketplace는 &lt;strong&gt;Plugin들의 카탈로그&lt;/strong&gt;입니다. Plugin을 검색하고 설치할 수 있는 저장소입니다.&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 3: Skills 시스템 - 온디맨드 전문가 활용하기</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-03/</link><pubDate>Fri, 23 Jan 2026 17:20:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 1시간
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐⭐⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Part 1, 2 완료
&lt;strong&gt;Claude Code 버전&lt;/strong&gt;: 2.1.x (Hot Reload 지원)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-skills란-무엇인가"&gt;1. Skills란 무엇인가?&lt;/h2&gt;
&lt;h3 id="11-claudemd-vs-skills의-핵심-차이"&gt;1.1 CLAUDE.md vs Skills의 핵심 차이&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;CLAUDE.md&lt;/strong&gt;는 항상 로드되는 &amp;ldquo;기본 매뉴얼&amp;quot;입니다. 반면 &lt;strong&gt;Skills&lt;/strong&gt;는 필요할 때만 로드되는 &amp;ldquo;전문 레시피북&amp;quot;입니다.&lt;/p&gt;
&lt;p&gt;💡 &lt;strong&gt;Claude Code 2.1+ 새 기능&lt;/strong&gt;: &lt;strong&gt;Hot Reload&lt;/strong&gt; - Skills를 수정하면 Claude Code를 재시작하지 않아도 즉시 반영됩니다. &lt;code&gt;~/.claude/skills/&lt;/code&gt; 또는 &lt;code&gt;.claude/skills/&lt;/code&gt; 디렉토리의 변경사항이 실시간으로 적용됩니다.&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 2: CLAUDE.md 최적화 - 비대해지는 것을 막아라</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-02/</link><pubDate>Fri, 23 Jan 2026 17:20:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 45분
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Part 1 완료, CLAUDE.md 사용 경험
&lt;strong&gt;Claude Code 버전&lt;/strong&gt;: 2.1.x&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-왜-claudemd는-간결해야-하는가"&gt;1. 왜 CLAUDE.md는 간결해야 하는가?&lt;/h2&gt;
&lt;h3 id="11-llm의-instruction-following-한계"&gt;1.1 LLM의 Instruction-following 한계&lt;/h3&gt;
&lt;p&gt;연구에 따르면 프론티어 LLM도 &lt;strong&gt;약 150-200개의 지시사항&lt;/strong&gt;만 일관되게 따를 수 있습니다. Claude Code의 시스템 프롬프트 자체가 이미 ~50개의 지시를 포함하고 있어, CLAUDE.md에 사용할 수 있는 &amp;ldquo;지시 예산&amp;quot;은 제한적입니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TB
 subgraph Capacity[&amp;#34;LLM 지시 따르기 용량&amp;#34;]
 direction TB
 Title[&amp;#34;📊 총 용량: ~150-200개 지시&amp;#34;]

 subgraph Components[&amp;#34;구성 요소&amp;#34;]
 direction LR
 A[&amp;#34;🤖 Claude Code&amp;lt;br/&amp;gt;시스템 프롬프트&amp;lt;br/&amp;gt;(~50개)&amp;#34;]
 B[&amp;#34;📄 CLAUDE.md&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;(당신의 몫)&amp;#34;]
 C[&amp;#34;🧠 Skills/Rules&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;(추가 지시)&amp;#34;]
 end

 Warning[&amp;#34;⚠️ 초과 시 → 균일하게 모든 지시를 무시하기 시작&amp;#34;]
 end

 Title --&amp;gt; Components
 Components --&amp;gt; Warning

 style Title fill:#e3f2fd,color:#000000
 style A fill:#bbdefb,color:#000000
 style B fill:#c8e6c9,color:#000000
 style C fill:#fff9c4,color:#000000
 style Warning fill:#ffcdd2,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="12-토큰-비용과-context-window"&gt;1.2 토큰 비용과 Context Window&lt;/h3&gt;
&lt;p&gt;CLAUDE.md는 &lt;strong&gt;모든 대화에서 항상 로드&lt;/strong&gt;됩니다. 파일이 커질수록:&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 1: CLAUDE.md 기초 - 첫 발을 내딛다</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-01/</link><pubDate>Fri, 23 Jan 2026 17:20:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 30분
&lt;strong&gt;난이도&lt;/strong&gt;: ⭐
&lt;strong&gt;사전 요구사항&lt;/strong&gt;: Claude Code 설치 완료 (v2.1.x)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-claude-code란-무엇인가"&gt;1. Claude Code란 무엇인가?&lt;/h2&gt;
&lt;h3 id="11-agentic-coding의-개념"&gt;1.1 Agentic Coding의 개념&lt;/h3&gt;
&lt;p&gt;Claude Code는 단순한 코드 자동완성 도구가 아닙니다. &lt;strong&gt;Agentic Coding Assistant&lt;/strong&gt;로서, 터미널에서 직접 코드베이스를 읽고, 파일을 생성/수정하고, 테스트를 실행하고, Git 작업까지 수행할 수 있습니다. 2025년 2월 첫 출시 이후 빠르게 발전하여, 현재 버전 2.1.x에서는 &lt;strong&gt;Opus 4.5&lt;/strong&gt; 모델을 지원하며 더욱 강력한 기능을 제공합니다.&lt;/p&gt;</description></item><item><title>Claude Code 완전 정복 가이드 Part 0: Overview</title><link>https://philipjkim.cc/posts/20260123-claude-code-guide-00/</link><pubDate>Fri, 23 Jan 2026 17:20:48 +0900</pubDate><guid>https://philipjkim.cc/posts/20260123-claude-code-guide-00/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;버전&lt;/strong&gt;: 2026년 1월 기준 (Claude Code 2.1.17 / Opus 4.5)&lt;br&gt;
&lt;strong&gt;대상 독자&lt;/strong&gt;: Claude Code를 처음 시작하거나, 이미 사용 중이지만 더 효율적으로 활용하고 싶은 개발자&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="-이-가이드의-목표"&gt;🎯 이 가이드의 목표&lt;/h2&gt;
&lt;p&gt;이 가이드는 Claude Code 초보 사용자가 &lt;strong&gt;CLAUDE.md 파일 하나 만드는 것&lt;/strong&gt;에서 시작해서, &lt;strong&gt;Skills와 Plugins를 활용한 고급 워크플로우&lt;/strong&gt;까지 단계별로 성장할 수 있도록 구성되어 있습니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TD
 A[&amp;#34;📝 CLAUDE.md&amp;lt;br/&amp;gt;생성&amp;#34;] --&amp;gt; B[&amp;#34;⚡ 최적화&amp;lt;br/&amp;gt;전략&amp;#34;]
 B --&amp;gt; C[&amp;#34;🧠 Skills&amp;lt;br/&amp;gt;분리&amp;#34;]
 C --&amp;gt; D[&amp;#34;🔌 Plugins&amp;lt;br/&amp;gt;활용&amp;#34;]
 D --&amp;gt; E[&amp;#34;🏪 Marketplace&amp;lt;br/&amp;gt;구축&amp;#34;]
 E --&amp;gt; F[&amp;#34;🎯 고급 패턴&amp;lt;br/&amp;gt;통합&amp;#34;]
 
 style A fill:#bbdefb,color:#000000
 style B fill:#c8e6c9,color:#000000
 style C fill:#fff9c4,color:#000000
 style D fill:#ffccbc,color:#000000
 style E fill:#d1c4e9,color:#000000
 style F fill:#f8bbd0,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;h2 id="-가이드-구성"&gt;📚 가이드 구성&lt;/h2&gt;
&lt;h3 id="part-1-claudemd-기초---첫-발을-내딛다"&gt;Part 1: CLAUDE.md 기초 - 첫 발을 내딛다&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 30분 | &lt;strong&gt;난이도&lt;/strong&gt;: ⭐&lt;/p&gt;</description></item><item><title>Java: JEP 444, 485, 506, 519 설명</title><link>https://philipjkim.cc/posts/20260122-java-4-new-features/</link><pubDate>Thu, 22 Jan 2026 14:06:58 +0900</pubDate><guid>https://philipjkim.cc/posts/20260122-java-4-new-features/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="jep-444-virtual-threads-java-21---정식-릴리스"&gt;JEP 444: Virtual Threads (Java 21 - 정식 릴리스)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;개요:&lt;/strong&gt;
경량 스레드를 제공하여 수십만~수백만 개의 동시 작업을 효율적으로 처리할 수 있게 합니다. 플랫폼 스레드와 달리 OS 스레드를 1:1로 매핑하지 않습니다.&lt;/p&gt;
&lt;h3 id="예제-1-대량의-http-요청-처리"&gt;예제 1: 대량의 HTTP 요청 처리&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Before (Platform Threads):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 스레드 풀 사용 (제한된 스레드 수)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExecutorService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Executors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newFixedThreadPool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IntStream&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;10_000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mapToObj&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.com/data/&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toList&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;futures&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;urls&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;futures&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// HTTP 요청 시뮬레이션&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 결과 수집&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;futures&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 100개 스레드로 10,000개 요청 처리 → 느림&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;After (Virtual Threads):&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>AI-Native 아키텍처: Java 25와 Spring Boot 4.0 시대의 에이전트 중심 개발 패러다임</title><link>https://philipjkim.cc/posts/20260122-ai-native-changes-for-java/</link><pubDate>Thu, 22 Jan 2026 09:30:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20260122-ai-native-changes-for-java/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Google Gemini Pro Deep Research 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-소프트웨어-개발의-새로운-지평"&gt;서론: 소프트웨어 개발의 새로운 지평&lt;/h2&gt;
&lt;p&gt;2026년을 맞이하며 엔터프라이즈 소프트웨어 개발 생태계는 전례 없는 전환점을 맞이하고 있습니다. 인공지능(AI), 특히 대규모 언어 모델(LLM)이 단순한 코딩 보조 도구를 넘어 자율적으로 소프트웨어를 설계, 구현, 수정하는 &amp;lsquo;에이전트(Agent)&amp;lsquo;로 진화함에 따라, 우리가 코드를 작성하는 방식과 시스템을 아키텍처링하는 원칙 자체가 근본적으로 재평가되고 있습니다. 과거 10년이 마이크로서비스와 클라우드 네이티브의 시대였다면, 향후 10년은 인간 개발자와 AI 에이전트가 공존하며 협업하는 &amp;lsquo;AI-Native&amp;rsquo; 시대가 될 것입니다.&lt;/p&gt;</description></item><item><title>Java to Go: #5. 프로젝트 구조와 생태계</title><link>https://philipjkim.cc/posts/20260121-java-to-go-guide-05/</link><pubDate>Wed, 21 Jan 2026 12:28:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20260121-java-to-go-guide-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;지금까지 Go의 철학, 문법, 에러 처리, 동시성을 살펴봤다. 이제 실제 프로젝트를 시작하는 데 필요한 것들을 다룬다. Maven/Gradle에서 Go Modules로, JUnit에서 testing 패키지로, Spring에서 Go 라이브러리 조합으로 전환하는 방법을 알아보자.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-go-modules-기초"&gt;1. Go Modules 기초&lt;/h2&gt;
&lt;h3 id="gomod와-gosum"&gt;go.mod와 go.sum&lt;/h3&gt;
&lt;p&gt;Go 1.11부터 도입된 Go Modules가 공식 의존성 관리 시스템이다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 새 모듈 초기화&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir myproject &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; myproject
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go mod init github.com/username/myproject
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;생성된 &lt;code&gt;go.mod&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;module github.com/username/myproject

go 1.21
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;의존성을 추가하면:&lt;/p&gt;</description></item><item><title>Java to Go: #4. 동시성: Goroutine과 Channel</title><link>https://philipjkim.cc/posts/20260121-java-to-go-guide-04/</link><pubDate>Wed, 21 Jan 2026 12:28:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260121-java-to-go-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Go의 동시성 모델은 Java와 근본적으로 다르다. &lt;code&gt;Thread&lt;/code&gt;, &lt;code&gt;synchronized&lt;/code&gt;, &lt;code&gt;ExecutorService&lt;/code&gt;에 익숙한 개발자라면 처음엔 낯설겠지만, Go의 방식이 얼마나 우아한지 금방 알게 될 것이다. &amp;ldquo;공유 메모리로 통신하지 말고, 통신으로 메모리를 공유하라&amp;quot;는 Go의 철학을 이해해보자.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-goroutine-경량-스레드"&gt;1. Goroutine: 경량 스레드&lt;/h2&gt;
&lt;h3 id="go-키워드-하나로-시작하는-동시성"&gt;go 키워드 하나로 시작하는 동시성&lt;/h3&gt;
&lt;p&gt;Java에서 새 스레드를 만들려면:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Thread&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello from thread&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 또는 ExecutorService&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExecutorService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Executors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newFixedThreadPool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;submit&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello from thread pool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Go에서는 &lt;code&gt;go&lt;/code&gt; 키워드 하나면 된다:&lt;/p&gt;</description></item><item><title>Java to Go: #3. 에러 처리와 Null 안전성</title><link>https://philipjkim.cc/posts/20260121-java-to-go-guide-03/</link><pubDate>Wed, 21 Jan 2026 12:28:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20260121-java-to-go-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java 개발자가 Go를 배울 때 가장 큰 패러다임 전환이 필요한 부분이 에러 처리다. &lt;code&gt;try-catch&lt;/code&gt;에 익숙한 우리에게 &lt;code&gt;if err != nil&lt;/code&gt;의 반복은 처음엔 원시적으로 느껴진다. 하지만 이 방식에는 명확한 철학이 있다. 이번 편에서 그 철학을 이해하고, Go 방식의 에러 처리에 익숙해져 보자.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-java의-exception-vs-go의-error"&gt;1. Java의 Exception vs Go의 error&lt;/h2&gt;
&lt;h3 id="근본적인-차이"&gt;근본적인 차이&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Java:&lt;/strong&gt; 예외는 &amp;ldquo;특별한 상황&amp;quot;이다. 정상 흐름과 분리되어 throw/catch로 처리된다.&lt;/p&gt;</description></item><item><title>Java to Go: #2. 문법 전환 가이드: Java 코드를 Go로 옮기기</title><link>https://philipjkim.cc/posts/20260121-java-to-go-guide-02/</link><pubDate>Wed, 21 Jan 2026 12:28:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260121-java-to-go-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Part 1에서 Go의 철학과 언제 Go를 선택해야 하는지 살펴봤다. 이제 실제 코드 레벨에서 Java와 Go가 어떻게 다른지 1:1로 비교해보자. Java 문법에 익숙한 개발자가 Go 코드를 읽고 쓸 수 있도록 핵심 차이점을 정리한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-변수-선언과-타입-시스템"&gt;1. 변수 선언과 타입 시스템&lt;/h2&gt;
&lt;h3 id="기본-변수-선언"&gt;기본 변수 선언&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Java:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;14159&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Go:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Alice&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.14159&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Go에서는 타입이 변수명 뒤에 온다. 처음엔 어색하지만, 복잡한 타입 선언에서는 오히려 읽기 쉽다.&lt;/p&gt;</description></item><item><title>Java to Go: #1. Go 첫인상: 철학과 패러다임의 차이</title><link>https://philipjkim.cc/posts/20260121-java-to-go-guide-01/</link><pubDate>Wed, 21 Jan 2026 12:28:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20260121-java-to-go-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Java를 수년간 써온 개발자가 Go를 처음 접하면 당혹스럽다. &amp;ldquo;왜 이렇게 만들었지?&amp;ldquo;라는 생각이 끊이지 않는다. 이 글에서는 Go의 설계 철학을 이해하고, Java에서 Go로의 전환이 언제 적절한지 판단할 수 있는 기준을 제시한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-go의-설계-철학-less-is-more"&gt;1. Go의 설계 철학: &amp;ldquo;Less is more&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;Go는 2009년 Google에서 Robert Griesemer, Rob Pike, Ken Thompson이 만들었다. 세 사람 모두 수십 년 경력의 시스템 프로그래머로, C++의 복잡성에 지쳐 있었다. Go의 탄생 배경 자체가 &amp;ldquo;복잡함에 대한 반발&amp;quot;이다.&lt;/p&gt;</description></item><item><title>Go to Rust: #10. 프로젝트 관리와 실전 패턴</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-10/</link><pubDate>Mon, 19 Jan 2026 16:10:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-10/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;이 마지막 섹션에서는 실제 Rust 프로젝트를 구성하고 관리하는 방법을 학습합니다. Cargo 심화, 모듈 시스템, 테스트, 그리고 Go 코드를 Rust로 포팅할 때 유용한 패턴들을 다룹니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="101-cargo-심화"&gt;10.1 Cargo 심화&lt;/h2&gt;
&lt;h3 id="cargotoml-상세-설정"&gt;Cargo.toml 상세 설정&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;package&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;myapp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;edition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2021&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;authors&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Your Name &amp;lt;you@example.com&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;A sample Rust application&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;license&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MIT&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;repository&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/you/myapp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;keywords&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cli&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tool&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;categories&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;command-line-utilities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serde&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;derive&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;tokio&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;full&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dev-dependencies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;criterion&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 벤치마크용&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;build-dependencies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;cc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 빌드 스크립트용&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;default&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;serde_json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;full&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yaml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;myapp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/main.rs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="nx"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mytool&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/bin/mytool.rs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;release&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;opt-level&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;lto&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="의존성-관리"&gt;의존성 관리&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 버전 지정&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serde&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# ^1.0.0 (1.x.x)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serde&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;=1.0.104&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 정확히 1.0.104&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serde&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;gt;=1.0, &amp;lt;2.0&amp;#34;&lt;/span&gt; &lt;span class="c"&gt;# 범위&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Git 의존성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mylib&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/user/mylib&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mylib&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/user/mylib&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;branch&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mylib&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/user/mylib&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;tag&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;v1.0.0&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mylib&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;git&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/user/mylib&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rev&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;abc123&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 로컬 경로&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;mylib&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;../mylib&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 선택적 의존성&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;serde_json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;optional&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# 피처 플래그&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;tokio&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rt-multi-thread&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;macros&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="go-modules와-비교"&gt;Go modules와 비교&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;# Go: go.mod
module github.com/user/myapp

go 1.21

require (
 github.com/gin-gonic/gin v1.9.0
 github.com/lib/pq v1.10.0
)
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# Rust: Cargo.toml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;package&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;myapp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;edition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2021&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;axum&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.7&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;sqlx&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;0.7&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;features&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;postgres&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;측면&lt;/th&gt;
 &lt;th&gt;Go&lt;/th&gt;
 &lt;th&gt;Cargo&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;의존성 파일&lt;/td&gt;
 &lt;td&gt;go.mod&lt;/td&gt;
 &lt;td&gt;Cargo.toml&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;락 파일&lt;/td&gt;
 &lt;td&gt;go.sum&lt;/td&gt;
 &lt;td&gt;Cargo.lock&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;저장소&lt;/td&gt;
 &lt;td&gt;분산 (GitHub 등)&lt;/td&gt;
 &lt;td&gt;중앙 (crates.io)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;버전 관리&lt;/td&gt;
 &lt;td&gt;Git 태그&lt;/td&gt;
 &lt;td&gt;SemVer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="피처-플래그"&gt;피처 플래그&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-toml" data-lang="toml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;default&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;std&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;alloc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;serde&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;serde_json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;full&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;yaml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;toml&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 조건부 컴파일
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[cfg(feature = &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;json&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;)]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;pub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;parse_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nc"&gt;Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cm"&gt;/* ... */&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[cfg(feature = &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;)]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;::&lt;span class="n"&gt;collections&lt;/span&gt;::&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#[cfg(not(feature = &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;std&amp;#34;&lt;/span&gt;&lt;span class="cp"&gt;))]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;alloc&lt;/span&gt;::&lt;span class="n"&gt;collections&lt;/span&gt;::&lt;span class="n"&gt;BTreeMap&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HashMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="102-모듈-시스템"&gt;10.2 모듈 시스템&lt;/h2&gt;
&lt;h3 id="파일-시스템과-모듈-구조"&gt;파일 시스템과 모듈 구조&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;myapp/
├── Cargo.toml
└── src/
 ├── main.rs # 바이너리 루트
 ├── lib.rs # 라이브러리 루트
 ├── config.rs # config 모듈
 ├── utils/
 │ ├── mod.rs # utils 모듈
 │ ├── helpers.rs # utils::helpers
 │ └── format.rs # utils::format
 └── handlers/
 ├── mod.rs
 ├── user.rs
 └── post.rs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;lib.rs:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #9. 비동기 프로그래밍</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-09/</link><pubDate>Mon, 19 Jan 2026 16:09:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-09/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rust의 &lt;code&gt;async/await&lt;/code&gt;는 Go의 goroutine과 근본적으로 다른 접근 방식입니다. Go는 런타임이 모든 것을 관리하지만, Rust는 명시적인 비동기 모델을 사용합니다. 이 섹션에서는 Rust의 비동기 생태계와 Tokio 런타임을 학습합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="91-비동기의-필요성"&gt;9.1 비동기의 필요성&lt;/h2&gt;
&lt;h3 id="동기-vs-비동기"&gt;동기 vs 비동기&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;동기 (Synchronous):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 순차적 실행, 블로킹
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;fetch_data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nc"&gt;Data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 대기
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;비동기 (Asynchronous):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 대기 중 다른 작업 가능
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;async&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;fetch_data&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nc"&gt;Data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;http_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 양보
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="go의-goroutine-모델"&gt;Go의 goroutine 모델&lt;/h3&gt;
&lt;p&gt;Go는 런타임이 내장되어 있어 동기 코드처럼 보이지만 비동기로 동작합니다:&lt;/p&gt;</description></item><item><title>Go to Rust: #8. 동시성 프로그래밍</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-08/</link><pubDate>Mon, 19 Jan 2026 16:09:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-08/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rust의 &amp;ldquo;Fearless Concurrency&amp;quot;는 컴파일 타임에 데이터 레이스를 방지합니다. Go의 고루틴과 채널에 익숙하다면, Rust의 동시성 모델이 어떻게 다른지 이해하는 것이 중요합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="81-rust의-동시성-철학"&gt;8.1 Rust의 동시성 철학&lt;/h2&gt;
&lt;h3 id="fearless-concurrency란"&gt;&amp;ldquo;Fearless Concurrency&amp;quot;란?&lt;/h3&gt;
&lt;p&gt;Go의 철학: &amp;ldquo;Don&amp;rsquo;t communicate by sharing memory; share memory by communicating.&amp;rdquo;
Rust의 철학: &amp;ldquo;Fearless Concurrency through ownership.&amp;rdquo;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Go&lt;/th&gt;
 &lt;th&gt;Rust&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;런타임에 데이터 레이스 감지 (&lt;code&gt;-race&lt;/code&gt;)&lt;/td&gt;
 &lt;td&gt;컴파일 타임에 데이터 레이스 방지&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;고루틴 + 채널 권장&lt;/td&gt;
 &lt;td&gt;소유권 + 타입 시스템으로 안전성 보장&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;공유 메모리도 가능 (주의 필요)&lt;/td&gt;
 &lt;td&gt;공유 메모리도 안전하게 사용 가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="데이터-레이스의-세-가지-조건"&gt;데이터 레이스의 세 가지 조건&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;두 스레드가 같은 데이터에 접근&lt;/li&gt;
&lt;li&gt;적어도 하나가 쓰기 작업&lt;/li&gt;
&lt;li&gt;접근이 동기화되지 않음&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Rust는 소유권 규칙으로 이를 컴파일 타임에 방지합니다:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #7. 컬렉션과 이터레이터</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-07/</link><pubDate>Mon, 19 Jan 2026 16:09:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-07/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rust의 컬렉션은 Go와 유사한 기능을 제공하지만, 소유권 시스템과 결합되어 더 안전합니다. 특히 이터레이터 시스템은 Go의 &lt;code&gt;range&lt;/code&gt;보다 훨씬 강력하며, 함수형 프로그래밍 스타일을 지원합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="71-표준-컬렉션-개요"&gt;7.1 표준 컬렉션 개요&lt;/h2&gt;
&lt;h3 id="go와-rust-컬렉션-매핑"&gt;Go와 Rust 컬렉션 매핑&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Go&lt;/th&gt;
 &lt;th&gt;Rust&lt;/th&gt;
 &lt;th&gt;설명&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[]T&lt;/code&gt; (slice)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;Vec&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;동적 배열&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;[N]T&lt;/code&gt; (array)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[T; N]&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;고정 배열&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;String&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;소유된 문자열&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt; (리터럴)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;amp;str&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;문자열 슬라이스&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;map[K]V&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;HashMap&amp;lt;K, V&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;해시 맵&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;HashSet&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;해시 셋&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BTreeMap&amp;lt;K, V&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;정렬된 맵&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;BTreeSet&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;정렬된 셋&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;VecDeque&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;양방향 큐&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;container/list&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;LinkedList&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;이중 연결 리스트&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="72-vec-심화"&gt;7.2 Vec&lt;T&gt; 심화&lt;/h2&gt;
&lt;h3 id="생성-방법들"&gt;생성 방법들&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 빈 벡터
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;::&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// vec! 매크로 (가장 흔함)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 같은 값으로 초기화
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 용량 미리 할당
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;::&lt;span class="n"&gt;with_capacity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 이터레이터에서 수집
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;: &lt;span class="nb"&gt;Vec&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="n"&gt;collect&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// from_iter
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Vec&lt;/span&gt;::&lt;span class="n"&gt;from_iter&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="기본-연산"&gt;기본 연산&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 추가
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 끝에 추가
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 인덱스에 삽입: [0, 1, 2, 3, 4]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 제거
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 끝에서 제거, Option&amp;lt;T&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;removed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 인덱스에서 제거, T
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;retain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;|&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 조건에 맞는 것만 유지
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 접근
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 패닉 가능
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Option&amp;lt;&amp;amp;T&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Option&amp;lt;&amp;amp;T&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;last&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// Option&amp;lt;&amp;amp;T&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 수정
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;Some&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first_mut&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="go의-append-vs-rust의-push"&gt;Go의 append vs Rust의 push&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Go: append는 새 슬라이스 반환 가능&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 재할당 가능&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 용량 확인&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Rust: push는 in-place 수정
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// v가 mut이어야 함
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 용량
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;capacity&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reserve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 추가 용량 확보
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shrink_to_fit&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 불필요한 용량 해제
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="소유권과-vec"&gt;소유권과 Vec&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 인덱스 접근은 빌림
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 불변 빌림
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// for 루프는 소유권 이동 또는 빌림 선택 가능
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// v의 소유권 이동, s: String
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// v는 더 이상 사용 불가
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// v 빌림, s: &amp;amp;String
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// v 여전히 사용 가능
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 가변 빌림, s: &amp;amp;mut String
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="슬라이싱"&gt;슬라이싱&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 슬라이스 참조
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slice&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// [2, 3, 4]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slice&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 전체
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 가변 슬라이스
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;vec!&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;slice&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nc"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;i32&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;mut&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// v는 [1, 20, 3, 4, 5]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="73-문자열-처리"&gt;7.3 문자열 처리&lt;/h2&gt;
&lt;h3 id="string-vs-str"&gt;String vs &amp;amp;str&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// String: 힙에 할당된 소유 문자열
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owned&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owned&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;owned&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;to_owned&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// &amp;amp;str: 문자열 슬라이스 (빌림)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;borrowed&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 정적 문자열
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;borrowed&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;owned&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// String에서 빌림
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;borrowed&lt;/span&gt;: &lt;span class="kp"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kt"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;owned&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 부분 슬라이스
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;특성&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;String&lt;/code&gt;&lt;/th&gt;
 &lt;th&gt;&lt;code&gt;&amp;amp;str&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;소유권&lt;/td&gt;
 &lt;td&gt;있음&lt;/td&gt;
 &lt;td&gt;없음 (빌림)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;힙 할당&lt;/td&gt;
 &lt;td&gt;예&lt;/td&gt;
 &lt;td&gt;아니오&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;가변&lt;/td&gt;
 &lt;td&gt;가능&lt;/td&gt;
 &lt;td&gt;불가능&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;크기&lt;/td&gt;
 &lt;td&gt;가변&lt;/td&gt;
 &lt;td&gt;고정 (뷰)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;함수 인자&lt;/td&gt;
 &lt;td&gt;소유권 필요시&lt;/td&gt;
 &lt;td&gt;대부분&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="utf-8-인코딩"&gt;UTF-8 인코딩&lt;/h3&gt;
&lt;p&gt;Rust 문자열은 항상 유효한 UTF-8입니다:&lt;/p&gt;</description></item><item><title>Go to Rust: #6. 에러 처리</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-06/</link><pubDate>Mon, 19 Jan 2026 16:09:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-06/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rust의 에러 처리는 Go와 철학적으로 유사합니다. 두 언어 모두 예외(exception)를 사용하지 않고 명시적인 에러 반환을 선호합니다. 하지만 Rust는 타입 시스템을 통해 에러 처리를 강제하여, Go에서 흔히 발생하는 &amp;ldquo;에러 무시&amp;rdquo; 문제를 원천 차단합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="61-rust의-에러-처리-철학"&gt;6.1 Rust의 에러 처리 철학&lt;/h2&gt;
&lt;h3 id="복구-가능한-에러-vs-복구-불가능한-에러"&gt;복구 가능한 에러 vs 복구 불가능한 에러&lt;/h3&gt;
&lt;p&gt;Rust는 에러를 두 가지로 구분합니다:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;복구 가능한 에러 (Recoverable)&lt;/strong&gt;: &lt;code&gt;Result&amp;lt;T, E&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파일을 찾을 수 없음&lt;/li&gt;
&lt;li&gt;네트워크 연결 실패&lt;/li&gt;
&lt;li&gt;잘못된 사용자 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;복구 불가능한 에러 (Unrecoverable)&lt;/strong&gt;: &lt;code&gt;panic!&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #5. 트레이트와 제네릭</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-05/</link><pubDate>Mon, 19 Jan 2026 09:56:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;트레이트(Trait)는 Rust의 다형성 메커니즘입니다. Go의 인터페이스와 비슷한 역할을 하지만, 구현 방식과 기능에서 큰 차이가 있습니다. 이 섹션에서는 트레이트와 제네릭을 Go와 비교하며 깊이 있게 학습합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="51-트레이트-기초"&gt;5.1 트레이트 기초&lt;/h2&gt;
&lt;h3 id="트레이트란"&gt;트레이트란?&lt;/h3&gt;
&lt;p&gt;트레이트는 타입이 구현해야 하는 메서드 집합을 정의합니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 트레이트 정의
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;trait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 타입 정의
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 트레이트 구현
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;impl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Article&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-&amp;gt; &lt;span class="nb"&gt;String&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;format!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt; by &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;author&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="go-interface-vs-rust-trait"&gt;Go interface vs Rust trait&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;가장 큰 차이: 암묵적 vs 명시적&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #4. 구조체, 열거형, 패턴 매칭</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-04/</link><pubDate>Mon, 19 Jan 2026 09:56:10 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;이 섹션에서는 Rust에서 데이터를 구조화하는 방법을 학습합니다. Go 개발자에게 구조체는 익숙하겠지만, Rust의 열거형(enum)은 Go의 &lt;code&gt;const&lt;/code&gt;/&lt;code&gt;iota&lt;/code&gt;보다 훨씬 강력하며, 패턴 매칭은 &lt;code&gt;switch&lt;/code&gt;문을 완전히 새로운 수준으로 끌어올립니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="41-구조체-struct"&gt;4.1 구조체 (Struct)&lt;/h2&gt;
&lt;h3 id="구조체-정의와-인스턴스-생성"&gt;구조체 정의와 인스턴스 생성&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 구조체 정의
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;struct&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign_in_count&lt;/span&gt;: &lt;span class="kt"&gt;u64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;active&lt;/span&gt;: &lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 인스턴스 생성
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alice&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;: &lt;span class="nb"&gt;String&lt;/span&gt;::&lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;alice@example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sign_in_count&lt;/span&gt;: &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;active&lt;/span&gt;: &lt;span class="nc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 필드 접근
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="fm"&gt;println!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Username: &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Go struct와의 문법 비교:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #3. 소유권과 빌림 (Ownership &amp; Borrowing)</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-03/</link><pubDate>Mon, 19 Jan 2026 09:56:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;소유권(Ownership)은 Rust의 가장 독특하고 중요한 개념입니다. Go의 가비지 컬렉션과 완전히 다른 접근 방식으로, 컴파일 타임에 메모리 안전성을 보장합니다. 이 섹션은 Rust 학습에서 가장 중요한 부분이므로 충분한 시간을 들여 이해하시기 바랍니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="31-소유권이란-무엇인가"&gt;3.1 소유권이란 무엇인가?&lt;/h2&gt;
&lt;h3 id="메모리-관리의-세-가지-방식"&gt;메모리 관리의 세 가지 방식&lt;/h3&gt;
&lt;p&gt;프로그래밍 언어들은 메모리를 관리하는 방식이 다릅니다:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 가비지 컬렉션 (Go, Java, Python, JavaScript)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Go: GC가 알아서 정리&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;example&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;slice&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;make&lt;/span&gt;&lt;span class="p"&gt;([]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 함수 종료 후 GC가 언젠가 정리&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;장점: 개발자가 메모리 관리 신경 안 써도 됨&lt;/li&gt;
&lt;li&gt;단점: GC 일시 정지, 예측 불가능한 지연, 메모리 오버헤드&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. 수동 관리 (C, C++)&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #2. 기본 문법과 타입 시스템</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-02/</link><pubDate>Mon, 19 Jan 2026 09:55:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;이 섹션에서는 Rust의 기본 문법을 Go와 비교하며 학습합니다. Go 개발자에게 익숙한 개념들이 Rust에서 어떻게 표현되는지, 그리고 Rust만의 독특한 특징은 무엇인지 알아봅니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="21-변수와-가변성"&gt;2.1 변수와 가변성&lt;/h2&gt;
&lt;h3 id="let-vs-var-불변이-기본인-이유"&gt;let vs var: 불변이 기본인 이유&lt;/h3&gt;
&lt;p&gt;Go에서는 변수가 기본적으로 가변(mutable)입니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Go: 기본이 가변&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// OK&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Rust에서는 &lt;strong&gt;불변(immutable)이 기본&lt;/strong&gt;입니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Rust: 기본이 불변
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;let&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 컴파일 에러!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;왜 불변이 기본일까요?&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Go to Rust: #1. 시작하기 - Rust 소개와 환경 설정</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-01/</link><pubDate>Mon, 19 Jan 2026 09:55:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Go 개발자로서 새로운 언어를 배우려면 먼저 그 언어가 왜 존재하는지, 어떤 문제를 해결하려고 하는지 이해하는 것이 중요합니다. 이 섹션에서는 Rust의 설계 철학을 Go와 비교하며 이해하고, 개발 환경을 설정한 뒤 첫 프로젝트를 생성해봅니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="11-rust는-왜-배워야-하는가"&gt;1.1 Rust는 왜 배워야 하는가?&lt;/h2&gt;
&lt;h3 id="rust의-설계-철학"&gt;Rust의 설계 철학&lt;/h3&gt;
&lt;p&gt;Rust는 Mozilla Research에서 시작되어 2015년에 1.0이 릴리스된 시스템 프로그래밍 언어입니다. Rust의 핵심 목표는 세 가지입니다:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;안전성(Safety)&lt;/strong&gt;: 메모리 안전성을 컴파일 타임에 보장&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;속도(Speed)&lt;/strong&gt;: C/C++에 필적하는 성능&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동시성(Concurrency)&lt;/strong&gt;: 데이터 레이스 없는 동시성 프로그래밍&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Go도 비슷한 시기(2009년)에 등장했지만, 설계 목표가 다릅니다:&lt;/p&gt;</description></item><item><title>Go to Rust: #0. Overview</title><link>https://philipjkim.cc/posts/20260119-go-to-rust-guide-00/</link><pubDate>Mon, 19 Jan 2026 08:36:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20260119-go-to-rust-guide-00/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;From Go to Rust: A Comprehensive Guide for Go Developers&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Go 언어에 익숙한 개발자가 Rust를 체계적으로 학습할 수 있도록 구성된 가이드입니다. Go와의 비교를 통해 새로운 개념을 빠르게 이해하고, 실무에서 바로 적용할 수 있는 실용적인 내용을 담았습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="가이드의-특징"&gt;가이드의 특징&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Go 개발자 관점&lt;/strong&gt;: 모든 개념을 Go와 비교하여 설명, 익숙한 개념에서 출발&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;실용적 접근&lt;/strong&gt;: 이론보다 실제 코드 예제 중심&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;점진적 난이도&lt;/strong&gt;: 기초부터 고급까지 체계적 진행&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;실전 지향&lt;/strong&gt;: 각 섹션에 Go ↔ Rust 코드 변환 예제 포함&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;함정 주의&lt;/strong&gt;: Go 개발자가 흔히 하는 실수와 해결법 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="섹션별-상세-목차"&gt;섹션별 상세 목차&lt;/h2&gt;
&lt;hr&gt;
&lt;h2 id="section-1-시작하기---rust-소개와-환경-설정"&gt;Section 1: 시작하기 - Rust 소개와 환경 설정&lt;/h2&gt;
&lt;p&gt;Rust의 설계 철학을 이해하고, Go와의 포지셔닝 차이를 명확히 합니다. 개발 환경을 설정하고 첫 프로젝트를 생성합니다.&lt;/p&gt;</description></item><item><title>Modern Worship &amp; Pop Guitar – Technique Playbook</title><link>https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/</link><pubDate>Fri, 16 Jan 2026 18:54:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="table-of-contents"&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#1-%eb%b0%b4%eb%93%9c%ec%97%90%ec%84%9c-%ea%b8%b0%ed%83%80%ec%9d%98-%ec%9e%90%eb%a6%ac"&gt;밴드에서 기타의 자리&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#2-%ed%95%b5%ec%8b%ac-%eb%b3%b4%ec%9d%b4%ec%8b%b1-%eb%8d%94%eb%b8%94%ec%8a%a4%ed%83%91%ea%b3%bc-6%eb%8f%84"&gt;핵심 보이싱: 더블스탑과 6도&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#3-%ec%9b%80%ec%a7%81%ec%9e%84-%eb%a7%8c%eb%93%a4%ea%b8%b0-sus-%ed%95%b4%ec%86%8c%ec%99%80-%eb%9d%bc%ec%9d%b8"&gt;움직임 만들기: Sus 해소와 라인&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#4-%ea%b2%8c%ec%9d%b8%eb%b3%84-%ec%a0%91%ea%b7%bc%eb%b2%95"&gt;게인별 접근법&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#5-%ed%8a%b9%ec%88%98-%ed%85%8c%ed%81%ac%eb%8b%89"&gt;특수 테크닉&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#6-%ec%9e%a5%eb%b9%84%ec%99%80-%ed%8f%ac%ec%a7%80%ec%85%98"&gt;장비와 포지션&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#7-%ec%8b%a4%ec%a0%84-%ec%a0%81%ec%9a%a9-%ea%b0%80%ec%9d%b4%eb%93%9c"&gt;실전 적용 가이드&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#8-%ec%97%b0%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c"&gt;연습 가이드&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://philipjkim.cc/posts/20260116-modern-worship-guitar-guide/#appendix-g%ed%82%a4-%eb%b3%b4%ec%9d%b4%ec%8b%b1-%eb%a0%88%ed%8d%bc%eb%9f%b0%ec%8a%a4"&gt;Appendix: G키 보이싱 레퍼런스&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="1-밴드에서-기타의-자리"&gt;1. 밴드에서 기타의 자리&lt;/h2&gt;
&lt;h3 id="11-주파수-대역의-이해"&gt;1.1 주파수 대역의 이해&lt;/h3&gt;
&lt;p&gt;밴드에서 기타가 가장 잘 들리는 음역은 &lt;strong&gt;중·중상단&lt;/strong&gt;이다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;줄&lt;/th&gt;
 &lt;th&gt;대역&lt;/th&gt;
 &lt;th&gt;충돌 대상&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;4~6번줄&lt;/td&gt;
 &lt;td&gt;저음&lt;/td&gt;
 &lt;td&gt;베이스와 충돌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1번줄&lt;/td&gt;
 &lt;td&gt;고음&lt;/td&gt;
 &lt;td&gt;보컬과 충돌&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2·3번줄&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;중음&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;기타의 자리&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-가이드톤-철학"&gt;1.2 가이드톤 철학&lt;/h3&gt;
&lt;p&gt;3도와 7도(가이드톤)가 자연스럽게 2·3번줄에 놓여 있기 때문에, 이 두 줄만으로도 코드의 성격이 전달된다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #21. 실전 핸드 리뷰 - 배운 것을 적용하기</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-21/</link><pubDate>Fri, 16 Jan 2026 18:45:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-21/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;핸드 리뷰는 거울이다. 자신의 플레이를 직시할 용기가 있어야 성장한다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;시리즈의 마지막 편입니다. 지금까지 배운 모든 개념을 &lt;strong&gt;실전 핸드 리뷰&lt;/strong&gt;를 통해 종합해보겠습니다. 핸드 리뷰는 포커 실력 향상의 가장 효과적인 방법이며, 이론을 실전으로 연결하는 다리입니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 핸드 리뷰 방법론을 배우고, 실제 핸드 예시를 분석하며, 21편 전체를 총정리합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="핸드-리뷰-방법론"&gt;핸드 리뷰 방법론&lt;/h2&gt;
&lt;h3 id="왜-핸드-리뷰가-중요한가"&gt;왜 핸드 리뷰가 중요한가&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 실수 발견&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;무의식적 리크 파악&lt;/li&gt;
&lt;li&gt;반복되는 패턴 인식&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;2. 이론 ↔ 실전 연결&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #20. 멘탈 게임과 장기적 성장</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-20/</link><pubDate>Fri, 16 Jan 2026 18:45:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-20/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;포커에서 가장 중요한 스킬은 카드를 읽는 것이 아니라 자신을 다스리는 것이다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;지금까지 우리는 포커의 &lt;strong&gt;기술적인 면&lt;/strong&gt;을 배웠습니다. 포지션, 핸드 선택, 베팅 전략, GTO&amp;hellip; 하지만 이 모든 지식이 있어도 &lt;strong&gt;멘탈 게임&lt;/strong&gt;이 받쳐주지 않으면 장기적으로 성공할 수 없습니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 포커에서 가장 과소평가되지만 가장 중요한 요소인 멘탈 게임, 분산 관리, 뱅크롤 관리, 그리고 지속적인 성장 방법을 배워보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="분산variance의-현실"&gt;분산(Variance)의 현실&lt;/h2&gt;
&lt;h3 id="분산이란"&gt;분산이란?&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;분산&lt;/strong&gt;은 결과가 기대값 주변에서 얼마나 흩어지는지를 나타냅니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #19. 토너먼트 전략 (下) - 파이널 테이블과 다양한 포맷</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-19/</link><pubDate>Fri, 16 Jan 2026 18:45:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-19/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;파이널 테이블은 모든 것이 걸린 무대다. 여기서 진정한 챔피언이 결정된다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;토너먼트의 꽃은 &lt;strong&gt;파이널 테이블&lt;/strong&gt;입니다. 수백, 수천 명 중 최후의 9명(또는 6명)에 올라 우승을 다투는 순간입니다. 또한 토너먼트에는 MTT 외에도 SNG, 스핀앤고, 위성 등 다양한 포맷이 있습니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 파이널 테이블 전략과 다양한 토너먼트 포맷별 접근법을 배워보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="파이널-테이블-전략"&gt;파이널 테이블 전략&lt;/h2&gt;
&lt;h3 id="파이널-테이블의-특수성"&gt;파이널 테이블의 특수성&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 페이 점프가 크다&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;순위&lt;/th&gt;
 &lt;th&gt;프라이즈 (예시)&lt;/th&gt;
 &lt;th&gt;점프&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;9위&lt;/td&gt;
 &lt;td&gt;$1,000&lt;/td&gt;
 &lt;td&gt;-&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;8위&lt;/td&gt;
 &lt;td&gt;$1,200&lt;/td&gt;
 &lt;td&gt;+$200&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7위&lt;/td&gt;
 &lt;td&gt;$1,500&lt;/td&gt;
 &lt;td&gt;+$300&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6위&lt;/td&gt;
 &lt;td&gt;$2,000&lt;/td&gt;
 &lt;td&gt;+$500&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5위&lt;/td&gt;
 &lt;td&gt;$2,800&lt;/td&gt;
 &lt;td&gt;+$800&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4위&lt;/td&gt;
 &lt;td&gt;$4,000&lt;/td&gt;
 &lt;td&gt;+$1,200&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3위&lt;/td&gt;
 &lt;td&gt;$6,000&lt;/td&gt;
 &lt;td&gt;+$2,000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2위&lt;/td&gt;
 &lt;td&gt;$10,000&lt;/td&gt;
 &lt;td&gt;+$4,000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;1위&lt;/td&gt;
 &lt;td&gt;$18,000&lt;/td&gt;
 &lt;td&gt;+$8,000&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;순위가 올라갈수록 점프가 커짐&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #18. 토너먼트 전략 (上) - ICM과 단계별 전략</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-18/</link><pubDate>Fri, 16 Jan 2026 18:45:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-18/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;토너먼트에서 칩은 돈이 아니다. 칩의 가치는 상황에 따라 변한다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;토너먼트 포커는 캐시게임과 &lt;strong&gt;근본적으로 다른 게임&lt;/strong&gt;입니다. 캐시게임에서 칩은 곧 돈이지만, 토너먼트에서 칩은 프라이즈 풀의 지분을 나타내며, 그 가치는 상황에 따라 변합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 토너먼트 특유의 개념인 ICM과 단계별 전략을 배워보겠습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="캐시게임-vs-토너먼트-근본적-차이"&gt;캐시게임 vs 토너먼트: 근본적 차이&lt;/h2&gt;
&lt;h3 id="칩-가치의-차이"&gt;칩 가치의 차이&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;캐시게임&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 칩 = $1 (또는 해당 금액)&lt;/li&gt;
&lt;li&gt;항상 동일한 가치&lt;/li&gt;
&lt;li&gt;cEV(Chip EV) = $EV&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;토너먼트&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #17. GTO와 익스플로잇의 균형</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-17/</link><pubDate>Fri, 16 Jan 2026 18:45:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-17/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;GTO는 방패이고, 익스플로잇은 창이다. 둘 다 능숙하게 다뤄야 전사가 된다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;현대 포커에서 &lt;strong&gt;GTO(Game Theory Optimal)&lt;/strong&gt; 는 피할 수 없는 개념이 되었습니다. 솔버가 보급되면서 &amp;ldquo;최적의 플레이&amp;quot;에 대한 기준이 생겼고, 이를 이해하지 못하면 상위 레벨에서 경쟁하기 어렵습니다.&lt;/p&gt;
&lt;p&gt;하지만 동시에, 실제 테이블에서 GTO만 고집하면 돈을 테이블 위에 남겨두게 됩니다. 이번 편에서는 GTO의 본질을 이해하고, 언제 GTO를 따르고 언제 익스플로잇해야 하는지 배워보겠습니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #16. 라이브 vs 온라인 - 플랫폼별 차이와 적응</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-16/</link><pubDate>Fri, 16 Jan 2026 18:21:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-16/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;같은 포커지만 다른 게임이다. 둘 다 마스터하면 완전한 플레이어가 된다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;온라인 포커와 라이브 포커는 같은 규칙을 따르지만, &lt;strong&gt;실제 경험은 크게 다릅니다&lt;/strong&gt;. 게임 속도, 상대 풀, 정보 수집 방법, 심지어 수익 구조까지 차이가 있습니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 두 플랫폼의 핵심 차이점과 각각에 맞는 전략을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="게임-속도와-핸드-볼륨의-차이"&gt;게임 속도와 핸드 볼륨의 차이&lt;/h2&gt;
&lt;h3 id="속도-비교"&gt;속도 비교&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;플랫폼&lt;/th&gt;
 &lt;th&gt;시간당 핸드 수&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;라이브&lt;/td&gt;
 &lt;td&gt;25-35핸드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;온라인 싱글 테이블&lt;/td&gt;
 &lt;td&gt;60-80핸드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;온라인 2테이블&lt;/td&gt;
 &lt;td&gt;120-160핸드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;온라인 4테이블&lt;/td&gt;
 &lt;td&gt;240-320핸드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;온라인은 라이브보다 2-10배 빠릅니다&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #15. 헤즈업 플레이 - 1:1 대결의 기술</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-15/</link><pubDate>Fri, 16 Jan 2026 18:21:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-15/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;헤즈업은 포커의 가장 순수한 형태다. 오직 당신과 상대, 그리고 카드뿐.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;헤즈업(Heads-Up)은 오직 두 명의 플레이어가 대결하는 포커입니다. 토너먼트 파이널, 캐시게임 숏핸디드, 또는 전용 헤즈업 테이블에서 경험할 수 있습니다. 헤즈업에서는 6-max나 풀링과는 &lt;strong&gt;완전히 다른 전략&lt;/strong&gt;이 필요합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 헤즈업 특유의 원리와 전략을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="헤즈업이-다른-이유"&gt;헤즈업이 다른 이유&lt;/h2&gt;
&lt;h3 id="블라인드-구조의-차이"&gt;블라인드 구조의 차이&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;6-max/풀링&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SB → BB 순서&lt;/li&gt;
&lt;li&gt;버튼은 SB 왼쪽&lt;/li&gt;
&lt;li&gt;프리플랍: SB 먼저 행동&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;헤즈업&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #14. 딥스택 전략 - 100BB+ 플레이의 세계</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-14/</link><pubDate>Fri, 16 Jan 2026 18:21:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-14/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;딥스택에서 진짜 포커가 시작된다. 모든 스트릿이 의미를 가진다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;딥스택 포커는 100BB, 150BB, 심지어 200BB 이상의 스택으로 플레이하는 것을 말합니다. 캐시게임에서 흔하고, 토너먼트 초반에도 경험할 수 있습니다. 딥스택에서는 숏스택과 정반대의 원리가 작동합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 딥스택 특유의 전략과 사고방식을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="딥스택이-게임을-바꾸는-방식"&gt;딥스택이 게임을 바꾸는 방식&lt;/h2&gt;
&lt;h3 id="높은-spr"&gt;높은 SPR&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SPR 비교&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;스택&lt;/th&gt;
 &lt;th&gt;오픈-콜 후 SPR&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;40BB&lt;/td&gt;
 &lt;td&gt;~5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;100BB&lt;/td&gt;
 &lt;td&gt;~13&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;200BB&lt;/td&gt;
 &lt;td&gt;~27&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;높은 SPR의 의미&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #13. 숏스택 전략 - 20-40BB 플레이의 특수성</title><link>https://philipjkim.cc/posts/20260116-nlh-guide-13/</link><pubDate>Fri, 16 Jan 2026 18:21:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20260116-nlh-guide-13/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;숏스택은 단순하다. 하지만 단순함 속에 정교함이 있다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;토너먼트 중반 이후, 리바이 후, 또는 의도적으로 숏스택으로 플레이할 때 - 20-40BB 스택은 포커에서 자주 마주치는 상황입니다. 이 스택 깊이에서는 100BB 전략이 통하지 않습니다. 완전히 다른 접근이 필요합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 숏스택 특유의 전략과 의사결정 프레임워크를 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="숏스택의-정의와-특수성"&gt;숏스택의 정의와 특수성&lt;/h2&gt;
&lt;h3 id="스택-깊이-분류"&gt;스택 깊이 분류&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;스택 깊이&lt;/th&gt;
 &lt;th&gt;BB 수&lt;/th&gt;
 &lt;th&gt;특징&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;딥스택&lt;/td&gt;
 &lt;td&gt;150BB+&lt;/td&gt;
 &lt;td&gt;복잡한 포스트플랍, 스펙 핸드 가치&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;표준 스택&lt;/td&gt;
 &lt;td&gt;80-150BB&lt;/td&gt;
 &lt;td&gt;일반적인 전략 적용&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;미디엄 스택&lt;/td&gt;
 &lt;td&gt;40-80BB&lt;/td&gt;
 &lt;td&gt;조정 필요, 3-bet 팟 주의&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;숏스택&lt;/td&gt;
 &lt;td&gt;20-40BB&lt;/td&gt;
 &lt;td&gt;푸시/폴드 근접, 단순화&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;매우 숏&lt;/td&gt;
 &lt;td&gt;10-20BB&lt;/td&gt;
 &lt;td&gt;거의 푸시/폴드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;데스퍼레이트&lt;/td&gt;
 &lt;td&gt;&amp;lt;10BB&lt;/td&gt;
 &lt;td&gt;순수 푸시/폴드&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="숏스택이-특별한-이유"&gt;숏스택이 특별한 이유&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. SPR이 낮다&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #12. 멀티웨이 팟 전략 - 3명 이상일 때 달라지는 모든 것</title><link>https://philipjkim.cc/posts/20260115-nlh-guide-12/</link><pubDate>Thu, 15 Jan 2026 07:16:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20260115-nlh-guide-12/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;헤즈업에서 강한 핸드가 멀티웨이에서는 평범해진다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;지금까지 우리가 다룬 대부분의 전략은 &lt;strong&gt;헤즈업(1:1)&lt;/strong&gt; 상황을 기준으로 했습니다. 하지만 실제 포커에서는 3명 이상이 플랍을 보는 &lt;strong&gt;멀티웨이 팟&lt;/strong&gt;이 자주 발생합니다. 특히 라이브 게임이나 낮은 스테이크 온라인에서는 매우 흔합니다.&lt;/p&gt;
&lt;p&gt;멀티웨이 팟에서는 전략이 &lt;strong&gt;근본적으로 달라집니다&lt;/strong&gt;. 이번 편에서는 그 차이점과 조정 방법을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="멀티웨이-팟의-근본적-특성"&gt;멀티웨이 팟의 근본적 특성&lt;/h2&gt;
&lt;h3 id="에퀴티-분배"&gt;에퀴티 분배&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;헤즈업&lt;/strong&gt;: 에퀴티가 두 명에게 분배
&lt;strong&gt;멀티웨이&lt;/strong&gt;: 에퀴티가 여러 명에게 분배&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #11. 익스플로잇 전략 - 상대 유형별 조정</title><link>https://philipjkim.cc/posts/20260115-nlh-guide-11/</link><pubDate>Thu, 15 Jan 2026 07:16:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260115-nlh-guide-11/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;GTO는 상대를 모를 때 쓰는 것이다. 상대를 알면 착취하라.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;지금까지 우리는 균형 잡힌(GTO에 가까운) 전략을 배웠습니다. 하지만 실제 포커 테이블에서 완벽하게 균형 잡힌 플레이어는 거의 없습니다. 대부분의 상대는 &lt;strong&gt;분명한 약점&lt;/strong&gt;을 가지고 있고, 이를 착취(Exploit)하는 것이 수익의 핵심입니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 상대 유형을 분류하고, 각 유형에 맞는 익스플로잇 전략을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="익스플로잇이란"&gt;익스플로잇이란?&lt;/h2&gt;
&lt;h3 id="gto-vs-익스플로잇"&gt;GTO vs 익스플로잇&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;GTO (Game Theory Optimal)&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;상대가 누구든 손해 보지 않는 전략&lt;/li&gt;
&lt;li&gt;착취 불가능&lt;/li&gt;
&lt;li&gt;상대 약점을 활용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;익스플로잇 (Exploitative)&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #10. 블러프의 기술</title><link>https://philipjkim.cc/posts/20260115-nlh-guide-10/</link><pubDate>Thu, 15 Jan 2026 07:16:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20260115-nlh-guide-10/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;블러프 없는 포커는 포커가 아니다. 하지만 블러프만 하는 것도 포커가 아니다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;블러프는 포커의 &lt;strong&gt;꽃&lt;/strong&gt;입니다. 약한 핸드로 상대를 폴드시키고 팟을 가져가는 쾌감은 포커의 가장 큰 매력 중 하나입니다. 하지만 무분별한 블러프는 파산의 지름길이기도 합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 블러프의 종류, 적절한 빈도, 그리고 좋은 블러프 스팟을 찾는 방법을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="블러프의-종류-퓨어-블러프-vs-세미블러프"&gt;블러프의 종류: 퓨어 블러프 vs 세미블러프&lt;/h2&gt;
&lt;h3 id="퓨어-블러프-pure-bluff"&gt;퓨어 블러프 (Pure Bluff)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;정의&lt;/strong&gt;: 쇼다운 밸류가 전혀 없는 핸드로 베팅하여 상대를 폴드시키려는 플레이&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #9. 핸드 리딩의 기초</title><link>https://philipjkim.cc/posts/20260115-nlh-guide-09/</link><pubDate>Thu, 15 Jan 2026 07:16:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20260115-nlh-guide-09/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;포커는 카드 게임이 아니라 사람 게임이다. 상대를 읽어라.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;핸드 리딩(Hand Reading)은 포커에서 가장 중요하면서도 가장 어려운 기술입니다. 상대의 정확한 두 장을 맞추는 것이 아니라, &lt;strong&gt;상대가 가질 수 있는 핸드의 범위(레인지)&lt;/strong&gt; 를 추론하고, 각 스트릿에서 그 레인지를 좁혀가는 과정입니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 핸드 리딩의 기본 원리와 실전 적용법을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="핸드-리딩이란"&gt;핸드 리딩이란?&lt;/h2&gt;
&lt;h3 id="레인지-기반-사고"&gt;레인지 기반 사고&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;핸드 리딩 ≠ 상대 핸드 정확히 맞추기&lt;/strong&gt;
&lt;strong&gt;핸드 리딩 = 상대가 가질 수 있는 핸드들의 범위 추론&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #8. 3-bet과 4-bet 전략</title><link>https://philipjkim.cc/posts/20260115-nlh-guide-08/</link><pubDate>Thu, 15 Jan 2026 07:16:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20260115-nlh-guide-08/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;3-bet은 단순한 레이즈가 아니다. 선전포고다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;지금까지 우리는 오픈 레이즈와 콜, 그리고 포스트플랍 플레이를 다뤘습니다. 이제 한 단계 더 나아가 &lt;strong&gt;프리플랍 전쟁&lt;/strong&gt;의 핵심인 3-bet과 4-bet 전략을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;3-bet을 제대로 활용하면 더 많은 팟을 쟁취하고, 상대에게 어려운 결정을 강요할 수 있습니다. 반대로 3-bet에 제대로 대응하지 못하면 프리플랍에서부터 돈이 새어나갑니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="베팅-라운드-용어-정리"&gt;베팅 라운드 용어 정리&lt;/h2&gt;
&lt;p&gt;혼란을 피하기 위해 용어를 명확히 합시다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;용어&lt;/th&gt;
 &lt;th&gt;의미&lt;/th&gt;
 &lt;th&gt;예시&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1-bet&lt;/td&gt;
 &lt;td&gt;블라인드 (강제 베팅)&lt;/td&gt;
 &lt;td&gt;BB가 1BB를 냄&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2-bet&lt;/td&gt;
 &lt;td&gt;첫 번째 레이즈 (오픈)&lt;/td&gt;
 &lt;td&gt;UTG가 3BB로 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3-bet&lt;/td&gt;
 &lt;td&gt;두 번째 레이즈 (리레이즈)&lt;/td&gt;
 &lt;td&gt;BTN이 9BB로 리레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4-bet&lt;/td&gt;
 &lt;td&gt;세 번째 레이즈&lt;/td&gt;
 &lt;td&gt;UTG가 24BB로 다시 레이즈&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5-bet&lt;/td&gt;
 &lt;td&gt;네 번째 레이즈 (보통 올인)&lt;/td&gt;
 &lt;td&gt;BTN 올인&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="3-bet의-목적-밸류-블러프-아이솔레이션"&gt;3-bet의 목적: 밸류, 블러프, 아이솔레이션&lt;/h2&gt;
&lt;h3 id="1-밸류-3-bet"&gt;1. 밸류 3-bet&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;목적&lt;/strong&gt;: 강한 핸드로 팟을 키워 더 많은 돈을 딸 준비&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #7. 리버 플레이 - 마지막 결정</title><link>https://philipjkim.cc/posts/20260114-nlh-guide-07/</link><pubDate>Wed, 14 Jan 2026 11:15:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20260114-nlh-guide-07/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;리버에서 모든 진실이 드러난다. 더 이상 숨을 곳은 없다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;리버는 포커 핸드의 &lt;strong&gt;최종장&lt;/strong&gt;입니다. 다섯 번째 커뮤니티 카드가 깔리고, 더 이상 나올 카드가 없습니다. 드로우의 희망도 없고, 역전의 기회도 없습니다. 지금 가진 핸드가 전부입니다.&lt;/p&gt;
&lt;p&gt;리버에서의 결정은 순수하게 &lt;strong&gt;&amp;ldquo;이기고 있는가, 지고 있는가&amp;rdquo;&lt;/strong&gt; 로 귀결됩니다. 이번 편에서는 리버에서 최선의 결정을 내리는 방법을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="리버의-특성"&gt;리버의 특성&lt;/h2&gt;
&lt;h3 id="드로우가-사라진다"&gt;드로우가 사라진다&lt;/h3&gt;
&lt;p&gt;리버에서는 &lt;strong&gt;모든 드로우가 종결&lt;/strong&gt;됩니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #6. 턴 플레이 - 두 번째 배럴의 기술</title><link>https://philipjkim.cc/posts/20260114-nlh-guide-06/</link><pubDate>Wed, 14 Jan 2026 11:14:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260114-nlh-guide-06/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;턴은 진실의 순간이다. 블러프인가, 밸류인가.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;플랍에서 C-bet을 했고, 상대가 콜했습니다. 이제 턴 카드가 깔리고, 당신은 중요한 결정 앞에 서 있습니다. &lt;strong&gt;두 번째 배럴(Double Barrel)&lt;/strong&gt; 을 쏠 것인가, 포기할 것인가?&lt;/p&gt;
&lt;p&gt;턴은 포커에서 가장 복잡하고 중요한 스트릿입니다. 팟이 커지기 시작하고, 한 번의 실수가 스택의 상당 부분을 날릴 수 있습니다. 이번 편에서는 턴에서의 의사결정 프레임워크를 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="턴의-특수성-팟이-커지고-spr이-작아지는-지점"&gt;턴의 특수성: 팟이 커지고 SPR이 작아지는 지점&lt;/h2&gt;
&lt;h3 id="spr-stack-to-pot-ratio의-변화"&gt;SPR (Stack-to-Pot Ratio)의 변화&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;SPR&lt;/strong&gt;은 남은 스택을 현재 팟으로 나눈 값입니다. SPR이 낮을수록 올인 압박이 커집니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #5. 플랍 플레이 (下) - 드로우와 메이드 핸드</title><link>https://philipjkim.cc/posts/20260114-nlh-guide-05/</link><pubDate>Wed, 14 Jan 2026 11:14:48 +0900</pubDate><guid>https://philipjkim.cc/posts/20260114-nlh-guide-05/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;드로우는 가능성이고, 메이드 핸드는 현실이다. 둘 다 제대로 플레이해야 한다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;플랍이 깔리면 당신의 핸드는 크게 두 가지 상태 중 하나입니다: &lt;strong&gt;이미 완성된 메이드 핸드&lt;/strong&gt;이거나, &lt;strong&gt;아직 완성되지 않은 드로우&lt;/strong&gt;입니다. 각각의 상황에서 어떻게 플레이해야 최대의 가치를 뽑거나 손실을 최소화할 수 있는지 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="드로우의-세계"&gt;드로우의 세계&lt;/h2&gt;
&lt;h3 id="드로우의-종류"&gt;드로우의 종류&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;플러시 드로우 (Flush Draw)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;같은 수트 4장, 1장 더 필요&lt;/li&gt;
&lt;li&gt;아웃: 9개&lt;/li&gt;
&lt;li&gt;플랍→리버 확률: ~35%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;오픈엔드 스트레이트 드로우 (OESD)&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #4. 플랍 플레이 (上) - C-bet과 보드 텍스처</title><link>https://philipjkim.cc/posts/20260114-nlh-guide-04/</link><pubDate>Wed, 14 Jan 2026 11:14:38 +0900</pubDate><guid>https://philipjkim.cc/posts/20260114-nlh-guide-04/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;플랍은 핸드의 운명이 결정되는 곳이다.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;프리플랍에서 좋은 결정을 내렸다면, 이제 진짜 포커가 시작됩니다. 플랍에서 5장의 커뮤니티 카드 중 3장이 공개되고, 당신의 핸드가 어떤 방향으로 갈지 대략적인 그림이 그려집니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 플랍에서 가장 중요한 두 가지 개념인 &lt;strong&gt;보드 텍스처 읽기&lt;/strong&gt;와 &lt;strong&gt;컨티뉴에이션 벳(C-bet)&lt;/strong&gt; 에 대해 깊이 있게 다루겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="보드-텍스처란-무엇인가"&gt;보드 텍스처란 무엇인가&lt;/h2&gt;
&lt;p&gt;보드 텍스처(Board Texture)는 &lt;strong&gt;플랍에 깔린 3장의 카드가 만들어내는 특성&lt;/strong&gt;입니다. 같은 탑 페어라도 보드에 따라 가치가 완전히 달라집니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #3. 팟 오즈와 임플라이드 오즈 - 콜의 수학</title><link>https://philipjkim.cc/posts/20260113-nlh-guide-03/</link><pubDate>Tue, 13 Jan 2026 11:13:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20260113-nlh-guide-03/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;포커는 수학 게임이다. 감으로 하면 감옥 간다.&amp;rdquo; - 포커 격언&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;포커에서 &amp;ldquo;콜할까, 폴드할까?&amp;ldquo;라는 질문에 답하려면 수학이 필요합니다. 직관이나 감으로도 플레이할 수 있지만, 장기적으로 수익을 내려면 &lt;strong&gt;팟 오즈(Pot Odds)&lt;/strong&gt; 와 &lt;strong&gt;임플라이드 오즈(Implied Odds)&lt;/strong&gt; 를 이해해야 합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 콜의 수학적 기초를 다지고, 이를 실전에 적용하는 방법을 배워보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="팟-오즈란-무엇인가"&gt;팟 오즈란 무엇인가&lt;/h2&gt;
&lt;h3 id="기본-개념"&gt;기본 개념&lt;/h3&gt;
&lt;p&gt;팟 오즈는 &lt;strong&gt;콜하기 위해 내야 하는 금액 대비 이길 경우 받을 수 있는 금액의 비율&lt;/strong&gt;입니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #2. 스타팅 핸드 - 프리플랍의 기술</title><link>https://philipjkim.cc/posts/20260113-nlh-guide-02/</link><pubDate>Tue, 13 Jan 2026 11:13:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20260113-nlh-guide-02/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Fold pre.&amp;rdquo; - 인터넷 포커 밈이자 진지한 조언&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;포커에서 가장 많이 하는 결정은 무엇일까요? 바로 &lt;strong&gt;프리플랍에서 이 핸드를 플레이할 것인가, 폴드할 것인가&lt;/strong&gt;입니다. 이 결정이 이후 모든 것의 시작점이 됩니다. 나쁜 핸드로 팟에 들어가면, 아무리 포스트플랍을 잘 플레이해도 손해를 줄이는 것이 최선입니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 어떤 핸드를 플레이해야 하는지, 그리고 그 이유가 무엇인지 깊이 있게 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="핸드-선택의-기본-원리-에퀴티-vs-플레이어빌리티"&gt;핸드 선택의 기본 원리: 에퀴티 vs 플레이어빌리티&lt;/h2&gt;
&lt;p&gt;스타팅 핸드를 평가할 때 두 가지 핵심 요소가 있습니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #1. 포지션 - 홀덤에서 가장 중요한 개념</title><link>https://philipjkim.cc/posts/20260113-nlh-guide-01/</link><pubDate>Tue, 13 Jan 2026 11:13:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20260113-nlh-guide-01/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;포지션이 핸드를 이긴다&amp;rdquo; - 포커 격언&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Texas Hold&amp;rsquo;em을 처음 배울 때 대부분의 사람들은 핸드의 강도에 집중합니다. AA가 좋고, 72o가 나쁘다는 건 누구나 압니다. 하지만 중급 이상의 플레이어와 초보자를 가르는 가장 큰 차이는 &lt;strong&gt;포지션에 대한 이해&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 왜 포지션이 홀덤에서 가장 중요한 개념인지, 그리고 이를 어떻게 활용해야 하는지 깊이 있게 다뤄보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="포지션이란-무엇인가"&gt;포지션이란 무엇인가&lt;/h2&gt;
&lt;p&gt;포지션은 단순히 &amp;ldquo;테이블에서 어디에 앉아 있는가&amp;quot;를 넘어서, &lt;strong&gt;베팅 라운드에서 몇 번째로 행동하는가&lt;/strong&gt;를 의미합니다.&lt;/p&gt;</description></item><item><title>Texas Hold'em 가이드: #0. Overview</title><link>https://philipjkim.cc/posts/20260113-nlh-guide-00/</link><pubDate>Tue, 13 Jan 2026 11:13:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260113-nlh-guide-00/</guid><description>&lt;p&gt;Texas Hold&amp;rsquo;em (NLH) 가이드에 대한 전체 내용 요약입니다. 이후 총 20회에 걸쳐 다양한 지식과 팁을 제공할 예정입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="part-1-기초를-다시-본다-3편"&gt;Part 1: 기초를 다시 본다 (3편)&lt;/h2&gt;
&lt;h3 id="1-포지션---홀덤에서-가장-중요한-개념"&gt;#1. 포지션 - 홀덤에서 가장 중요한 개념&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;왜 버튼이 &amp;ldquo;가장 좋은 자리&amp;quot;인가: 정보의 비대칭성&lt;/li&gt;
&lt;li&gt;얼리/미들/레이트 포지션별 플레이 철학&lt;/li&gt;
&lt;li&gt;블라인드에서의 수비 전략&lt;/li&gt;
&lt;li&gt;&amp;ldquo;포지션이 핸드를 이긴다&amp;quot;는 말의 진짜 의미&lt;/li&gt;
&lt;li&gt;초보자가 포지션을 무시할 때 잃는 것들&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-스타팅-핸드---프리플랍의-기술"&gt;#2. 스타팅 핸드 - 프리플랍의 기술&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;핸드 선택의 기본 원리: 에퀴티 vs 플레이어빌리티&lt;/li&gt;
&lt;li&gt;포지션별 오픈 레인지 구성하기&lt;/li&gt;
&lt;li&gt;프리미엄 핸드(AA, KK)부터 스펙 핸드(suited connectors)까지&lt;/li&gt;
&lt;li&gt;림프의 유혹을 버려야 하는 이유&lt;/li&gt;
&lt;li&gt;실전 프리플랍 차트 활용과 그 한계&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="3-팟-오즈와-임플라이드-오즈---콜의-수학"&gt;#3. 팟 오즈와 임플라이드 오즈 - 콜의 수학&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;팟 오즈 계산법: 기초부터 확실하게&lt;/li&gt;
&lt;li&gt;&amp;ldquo;2-4 룰&amp;quot;로 아웃 계산 빠르게 하기&lt;/li&gt;
&lt;li&gt;임플라이드 오즈: 보이지 않는 가치를 계산하다&lt;/li&gt;
&lt;li&gt;리버스 임플라이드 오즈: 드로우가 완성돼도 지는 상황&lt;/li&gt;
&lt;li&gt;수학적 사고와 직관의 균형&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="part-2-포스트플랍의-세계-4편"&gt;Part 2: 포스트플랍의 세계 (4편)&lt;/h2&gt;
&lt;h3 id="4-플랍-플레이-上---c-bet과-보드-텍스처"&gt;#4. 플랍 플레이 (上) - C-bet과 보드 텍스처&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;보드 텍스처 분류: 드라이 vs 웻, 하이 vs 로우&lt;/li&gt;
&lt;li&gt;C-bet의 목적: 밸류? 블러프? 아니면 둘 다?&lt;/li&gt;
&lt;li&gt;언제 C-bet하고 언제 체크해야 하나&lt;/li&gt;
&lt;li&gt;멀티웨이 팟에서의 C-bet 조정&lt;/li&gt;
&lt;li&gt;상대의 C-bet에 대응하기: 콜, 레이즈, 폴드&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5-플랍-플레이-下---드로우와-메이드-핸드"&gt;#5. 플랍 플레이 (下) - 드로우와 메이드 핸드&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;플러시 드로우 플레이: 패시브 vs 어그레시브&lt;/li&gt;
&lt;li&gt;오픈엔드 스트레이트 드로우의 가치&lt;/li&gt;
&lt;li&gt;탑 페어의 함정: &amp;ldquo;좋은 핸드&amp;quot;와 &amp;ldquo;넛&amp;quot;의 차이&lt;/li&gt;
&lt;li&gt;셋과 투 페어: 언제 슬로우플레이하고 언제 밸류벳하나&lt;/li&gt;
&lt;li&gt;오버페어로 큰 팟을 만들 때의 위험&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="6-턴-플레이---두-번째-배럴의-기술"&gt;#6. 턴 플레이 - 두 번째 배럴의 기술&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;턴의 특수성: 팟이 커지고 SPR이 작아지는 지점&lt;/li&gt;
&lt;li&gt;더블 배럴의 조건: 언제 계속 밀어붙이나&lt;/li&gt;
&lt;li&gt;턴에서 포기해야 할 때를 아는 것&lt;/li&gt;
&lt;li&gt;상대의 레인지가 턴에서 어떻게 변하는가&lt;/li&gt;
&lt;li&gt;팟 컨트롤: 빅 핸드 없이 쇼다운 가기&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="7-리버-플레이---마지막-결정"&gt;#7. 리버 플레이 - 마지막 결정&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;리버 밸류벳 사이징: 최대 추출의 기술&lt;/li&gt;
&lt;li&gt;씬 밸류벳: 마지날 핸드로 가치 뽑기&lt;/li&gt;
&lt;li&gt;리버 블러프의 조건과 스토리텔링&lt;/li&gt;
&lt;li&gt;블러프캐쳐로 콜할 때 고려할 것들&lt;/li&gt;
&lt;li&gt;&amp;ldquo;모르면 체크&amp;rdquo; - 리버에서 살아남는 법&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="part-3-중급-전략-5편"&gt;Part 3: 중급 전략 (5편)&lt;/h2&gt;
&lt;h3 id="8-3-bet과-4-bet-전략"&gt;#8. 3-bet과 4-bet 전략&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3-bet의 목적: 밸류, 블러프, 아이솔레이션&lt;/li&gt;
&lt;li&gt;포지션별 3-bet 레인지 구성하기&lt;/li&gt;
&lt;li&gt;3-bet에 대응하기: 콜, 4-bet, 폴드 기준&lt;/li&gt;
&lt;li&gt;라이트 4-bet과 올인 레인지&lt;/li&gt;
&lt;li&gt;3-bet 팟의 포스트플랍 전략&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="9-핸드-리딩의-기초"&gt;#9. 핸드 리딩의 기초&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프리플랍 액션으로 레인지 좁히기&lt;/li&gt;
&lt;li&gt;플랍-턴-리버로 레인지 업데이트하기&lt;/li&gt;
&lt;li&gt;상대가 &amp;ldquo;가질 수 없는&amp;rdquo; 핸드 찾기&lt;/li&gt;
&lt;li&gt;베팅 사이징이 알려주는 정보&lt;/li&gt;
&lt;li&gt;역방향 핸드 리딩: 내 핸드는 상대에게 어떻게 보이나&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="10-블러프의-기술"&gt;#10. 블러프의 기술&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;블러프의 종류: 퓨어 블러프 vs 세미블러프&lt;/li&gt;
&lt;li&gt;블러프 빈도와 MDF(Minimum Defense Frequency)&lt;/li&gt;
&lt;li&gt;좋은 블러프 스팟 찾기: 보드, 포지션, 히스토리&lt;/li&gt;
&lt;li&gt;블로커를 활용한 블러프&lt;/li&gt;
&lt;li&gt;오버블러프 vs 언더블러프: 당신은 어느 쪽인가&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="11-익스플로잇-전략---상대-유형별-조정"&gt;#11. 익스플로잇 전략 - 상대 유형별 조정&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;플레이어 유형 분류: TAG, LAG, 니트, 피쉬&lt;/li&gt;
&lt;li&gt;타이트한 상대 익스플로잇하기&lt;/li&gt;
&lt;li&gt;루즈한 상대 익스플로잇하기&lt;/li&gt;
&lt;li&gt;어그레시브한 상대 다루기&lt;/li&gt;
&lt;li&gt;HUD 스탯 읽는 법 (온라인)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-멀티웨이-팟-전략---3명-이상일-때-달라지는-모든-것"&gt;#12. 멀티웨이 팟 전략 - 3명 이상일 때 달라지는 모든 것&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;멀티웨이 팟의 근본적 특성: 에퀴티 분배와 실현의 어려움&lt;/li&gt;
&lt;li&gt;프리플랍: 멀티웨이에서 강해지는 핸드 vs 약해지는 핸드&lt;/li&gt;
&lt;li&gt;포스트플랍 조정: C-bet 빈도 급감, 체크 레인지 확대&lt;/li&gt;
&lt;li&gt;&amp;ldquo;샌드위치 효과&amp;rdquo; - 중간에 낀 플레이어의 고민&lt;/li&gt;
&lt;li&gt;멀티웨이에서 블러프가 거의 불가능한 이유&lt;/li&gt;
&lt;li&gt;넛 어드밴티지의 중요성 극대화&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="part-4-상황별-전략-4편"&gt;Part 4: 상황별 전략 (4편)&lt;/h2&gt;
&lt;h3 id="13-숏스택-전략---20-40bb-플레이의-특수성"&gt;#13. 숏스택 전략 - 20-40BB 플레이의 특수성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;숏스택의 정의와 왜 이 스택 깊이가 특별한가&lt;/li&gt;
&lt;li&gt;SPR(Stack-to-Pot Ratio)의 이해와 활용&lt;/li&gt;
&lt;li&gt;푸시/폴드 모드: 언제 올인 or 폴드만 해야 하나&lt;/li&gt;
&lt;li&gt;숏스택 프리플랍 차트와 레인지 조정&lt;/li&gt;
&lt;li&gt;숏스택으로 포스트플랍 플레이하기: 커밋 vs 폴드&lt;/li&gt;
&lt;li&gt;의도적 숏스택 전략(SSS)의 장단점&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="14-딥스택-전략---100bb-플레이의-세계"&gt;#14. 딥스택 전략 - 100BB+ 플레이의 세계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;딥스택이 게임을 바꾸는 방식: 임플라이드 오즈의 폭발&lt;/li&gt;
&lt;li&gt;스펙 핸드의 가치 상승: suited connectors, small pairs&lt;/li&gt;
&lt;li&gt;포지션의 중요성이 더욱 커지는 이유&lt;/li&gt;
&lt;li&gt;딥스택 포스트플랍: 더 많은 스트릿, 더 복잡한 결정&lt;/li&gt;
&lt;li&gt;팟 컨트롤의 기술: 100BB를 한 핸드에 잃지 않기&lt;/li&gt;
&lt;li&gt;딥스택 블러프와 멀티 배럴 전략&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="15-헤즈업-플레이---11-대결의-기술"&gt;#15. 헤즈업 플레이 - 1:1 대결의 기술&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;헤즈업이 다른 이유: 블라인드 구조와 포지션&lt;/li&gt;
&lt;li&gt;헤즈업 레인지 대폭 확장: 거의 모든 핸드가 플레이 가능&lt;/li&gt;
&lt;li&gt;어그레션의 중요성: 헤즈업에서 패시브는 죽음&lt;/li&gt;
&lt;li&gt;상대 적응(Adaptation)의 핵심: 익스플로잇 사이클&lt;/li&gt;
&lt;li&gt;헤즈업 포스트플랍: 더 얇은 밸류벳, 더 많은 블러프&lt;/li&gt;
&lt;li&gt;SNG/토너먼트 헤즈업 vs 캐시게임 헤즈업&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="16-라이브-vs-온라인---플랫폼별-차이와-적응"&gt;#16. 라이브 vs 온라인 - 플랫폼별 차이와 적응&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;게임 속도와 핸드 볼륨의 차이&lt;/li&gt;
&lt;li&gt;라이브 텔(Tell) 읽기: 베팅 패턴, 타이밍, 물리적 신호&lt;/li&gt;
&lt;li&gt;온라인 텔: 베팅 타이밍, 사이징 패턴, 자동 액션&lt;/li&gt;
&lt;li&gt;플레이어 풀의 차이: 라이브가 일반적으로 더 소프트한 이유&lt;/li&gt;
&lt;li&gt;멀티테이블링과 볼륨 플레이 (온라인)&lt;/li&gt;
&lt;li&gt;라이브 게임 에티켓과 테이블 이미지 관리&lt;/li&gt;
&lt;li&gt;뱅크롤 관리의 차이: 레이크, 팁, 이동 비용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="part-5-고급-개념-3편"&gt;Part 5: 고급 개념 (3편)&lt;/h2&gt;
&lt;h3 id="17-gto와-익스플로잇의-균형"&gt;#17. GTO와 익스플로잇의 균형&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;GTO란 무엇인가: 착취 불가능한 전략&lt;/li&gt;
&lt;li&gt;왜 GTO를 공부해야 하는가 (그리고 왜 맹신하면 안 되는가)&lt;/li&gt;
&lt;li&gt;솔버 활용법: 무엇을 배우고 무엇을 버릴 것인가&lt;/li&gt;
&lt;li&gt;GTO 기반 위에서 익스플로잇하기&lt;/li&gt;
&lt;li&gt;낮은 스테이크에서 GTO가 필요한가?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="18-토너먼트-전략-上---캐시게임과-다른-점"&gt;#18. 토너먼트 전략 (上) - 캐시게임과 다른 점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ICM 기초: 칩 ≠ 돈&lt;/li&gt;
&lt;li&gt;토너먼트 단계별 전략: 얼리/미들/레이트 스테이지&lt;/li&gt;
&lt;li&gt;버블 플레이: 생존 vs 어큐뮬레이션&lt;/li&gt;
&lt;li&gt;빅 스택 vs 숏 스택 다이내믹&lt;/li&gt;
&lt;li&gt;앤티 구조가 플레이에 미치는 영향&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="19-토너먼트-전략-下---파이널-테이블과-형식별-전략"&gt;#19. 토너먼트 전략 (下) - 파이널 테이블과 형식별 전략&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;파이널 테이블 다이내믹: 페이 점프와 ICM 압박&lt;/li&gt;
&lt;li&gt;숏스택 푸시/폴드 차트와 실전 적용&lt;/li&gt;
&lt;li&gt;MTT vs SNG vs 스핀앤고: 형식별 핵심 차이&lt;/li&gt;
&lt;li&gt;위성 토너먼트(Satellite) 전략&lt;/li&gt;
&lt;li&gt;딜 메이킹(Deal Making)의 기초&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="part-6-장기적-성장-2편"&gt;Part 6: 장기적 성장 (2편)&lt;/h2&gt;
&lt;h3 id="20-멘탈-게임과-장기적-성장"&gt;#20. 멘탈 게임과 장기적 성장&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;분산(Variance)의 이해: 실력과 결과의 괴리&lt;/li&gt;
&lt;li&gt;틸트의 종류와 대처법&lt;/li&gt;
&lt;li&gt;뱅크롤 관리: 스테이크 선택의 기준&lt;/li&gt;
&lt;li&gt;공부하는 법: 핸드 리뷰, 코칭, 커뮤니티&lt;/li&gt;
&lt;li&gt;포커를 장기적으로 즐기는 마인드셋&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="21-실전-핸드-리뷰---시리즈-총정리"&gt;#21. 실전 핸드 리뷰 - 시리즈 총정리&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;핸드 리뷰 방법론: 어떻게 자신의 플레이를 분석할 것인가&lt;/li&gt;
&lt;li&gt;프리플랍 실수 사례: 레인지 이탈, 포지션 무시&lt;/li&gt;
&lt;li&gt;포스트플랍 실수 사례: 팟 컨트롤 실패, 밸류 미스&lt;/li&gt;
&lt;li&gt;블러프 실수 사례: 스토리가 맞지 않는 블러프&lt;/li&gt;
&lt;li&gt;폴드 실수 사례: 너무 쉽게 포기하거나 너무 집착하거나&lt;/li&gt;
&lt;li&gt;시리즈 핵심 개념 총정리와 다음 단계&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="구조-설계-의도"&gt;구조 설계 의도&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;파트&lt;/th&gt;
 &lt;th style="text-align: center"&gt;편수&lt;/th&gt;
 &lt;th&gt;핵심 목표&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 1: 기초&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;3편&lt;/td&gt;
 &lt;td&gt;&amp;ldquo;알고 있다고 생각하는&amp;rdquo; 기초 개념을 제대로 정립. 포지션/핸드선택/수학 - 모든 것의 토대&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 2: 포스트플랍&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;4편&lt;/td&gt;
 &lt;td&gt;스트릿별 의사결정 프레임워크. 각 스트릿의 고유한 특성과 전략을 깊이 있게&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 3: 중급 전략&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;5편&lt;/td&gt;
 &lt;td&gt;상대와의 상호작용. 읽고, 블러프하고, 익스플로잇하고, 멀티웨이 상황 대응&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 4: 상황별 전략&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;4편&lt;/td&gt;
 &lt;td&gt;스택 깊이, 플레이어 수, 플랫폼에 따른 전략 조정. 실전 적응력 강화&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 5: 고급 개념&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;3편&lt;/td&gt;
 &lt;td&gt;GTO 이론과 토너먼트 특수 전략. 상위 레벨로의 도약&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Part 6: 장기 성장&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: center"&gt;2편&lt;/td&gt;
 &lt;td&gt;멘탈 관리와 실전 핸드 분석. 지속 가능한 포커 라이프&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="시리즈-로드맵"&gt;시리즈 로드맵&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[입문] ──────────────────────────────────────────────────────&amp;gt; [고급]

Part 1 Part 2 Part 3 Part 4 Part 5 Part 6
기초 개념 ─────&amp;gt; 스트릿별 ──────&amp;gt; 상대 읽기 ──&amp;gt; 상황 적응 ─────&amp;gt; 이론/MTT ──&amp;gt; 성장
(#1-3) 플레이 &amp;amp; 공격 (#13-16) (#17-19) (#20-21)
 (#4-7) (#8-12)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;각 파트는 이전 파트의 개념을 기반으로 하며, 독자가 순서대로 읽으면 자연스럽게 실력이 쌓이도록 설계되었습니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #14 - PLO8의 기초와 전략 - 하이-로우의 세계</title><link>https://philipjkim.cc/posts/20260112-plo-guide-14/</link><pubDate>Mon, 12 Jan 2026 10:16:29 +0900</pubDate><guid>https://philipjkim.cc/posts/20260112-plo-guide-14/</guid><description>&lt;p&gt;시리즈의 마지막 편에 오신 것을 환영합니다. 지금까지 PLO(Pot-Limit Omaha)의 모든 것을 다뤘습니다. 이제 완전히 새로운 차원의 오마하, &lt;strong&gt;PLO8 (Pot-Limit Omaha Hi-Lo)&lt;/strong&gt; 을 소개합니다.&lt;/p&gt;
&lt;p&gt;PLO8은 팟을 &lt;strong&gt;하이 핸드와 로우 핸드가 나눠 갖는&lt;/strong&gt; 스플릿 팟 게임입니다. 같은 4장의 홀 카드를 사용하지만, 전략은 완전히 다릅니다. 하이만 노리면 절반만 가져가고, 로우만 노리면 역시 절반입니다. &lt;strong&gt;스쿱(Scoop)&lt;/strong&gt; - 하이와 로우 모두 이겨서 팟 전체를 가져가는 것 - 이 승리의 핵심입니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 PLO8의 기본 규칙부터 스타팅 핸드 선택, 그리고 하이-로우를 동시에 노리는 전략까지 다룹니다. 시리즈를 마무리하며, 오마하 세계로의 여정을 완성합니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #13 - 멀티테이블링과 게임 선택 - 수익 극대화의 비밀</title><link>https://philipjkim.cc/posts/20260112-plo-guide-13/</link><pubDate>Mon, 12 Jan 2026 10:15:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20260112-plo-guide-13/</guid><description>&lt;p&gt;포커 수익은 두 가지로 결정됩니다. &lt;strong&gt;실력&lt;/strong&gt;과 &lt;strong&gt;볼륨&lt;/strong&gt;. 아무리 실력이 좋아도 핸드를 적게 플레이하면 수익이 제한됩니다. 반대로 실력이 부족한데 많이 플레이하면 손실만 커집니다.&lt;/p&gt;
&lt;p&gt;멀티테이블링은 시간당 핸드 수를 늘려 볼륨을 높이는 방법입니다. 하지만 PLO는 홀덤보다 &lt;strong&gt;훨씬 복잡&lt;/strong&gt;합니다. 무턱대고 테이블을 늘리면 플레이 품질이 급락합니다.&lt;/p&gt;
&lt;p&gt;게임 선택은 종종 간과되지만, &lt;strong&gt;수익에 가장 큰 영향&lt;/strong&gt;을 미치는 요소 중 하나입니다. 같은 실력이라도 좋은 게임에서 플레이하면 수익이 2-3배 차이 날 수 있습니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 PLO에서 효과적으로 멀티테이블하는 방법과 수익성 높은 게임을 찾고 선택하는 전략을 다룹니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #12 - 블로커, 분산, 멘탈 관리 - 오마하의 숨은 변수들</title><link>https://philipjkim.cc/posts/20260112-plo-guide-12/</link><pubDate>Mon, 12 Jan 2026 10:14:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20260112-plo-guide-12/</guid><description>&lt;p&gt;지금까지 오마하의 기술적 측면을 다뤘습니다. 핸드 선택, 포스트플랍 플레이, 수학적 계산. 하지만 포커에서 승리하려면 &lt;strong&gt;기술만으로는 부족&lt;/strong&gt;합니다. 고급 개념인 블로커의 활용, PLO 특유의 높은 분산에 대한 이해, 그리고 무엇보다 &lt;strong&gt;멘탈 관리&lt;/strong&gt;가 필요합니다.&lt;/p&gt;
&lt;p&gt;오마하는 홀덤보다 분산이 훨씬 큽니다. 프리플랍 에퀴티 차이가 작고, 강한 핸드끼리 충돌하는 경우가 많기 때문입니다. 이 높은 분산은 뱅크롤과 멘탈 모두에 큰 부담을 줍니다. 기술적으로 완벽해도 멘탈이 무너지면 모든 것이 무너집니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 블로커의 개념과 실전 활용, PLO의 분산 특성과 뱅크롤 관리, 그리고 다운스윙에서 멘탈을 유지하는 방법을 다룹니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #11 - 에퀴티와 확률 계산 - 오마하의 수학적 기초</title><link>https://philipjkim.cc/posts/20260112-plo-guide-11/</link><pubDate>Mon, 12 Jan 2026 10:14:24 +0900</pubDate><guid>https://philipjkim.cc/posts/20260112-plo-guide-11/</guid><description>&lt;p&gt;포커는 불완전한 정보 속에서 확률적 결정을 내리는 게임입니다. 감이나 직관도 중요하지만, &lt;strong&gt;수학적 기초&lt;/strong&gt; 없이는 장기적으로 수익을 낼 수 없습니다. 특히 오마하는 홀덤보다 복잡한 수학이 필요합니다. 4장의 카드, 6개의 조합, 다양한 드로우가 얽히면서 계산이 기하급수적으로 복잡해집니다.&lt;/p&gt;
&lt;p&gt;하지만 두려워할 필요 없습니다. 모든 상황을 정확히 계산할 필요는 없습니다. 핵심 원리를 이해하고, 실전에서 &lt;strong&gt;빠르게 근사치를 계산&lt;/strong&gt;하는 방법을 익히면 충분합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 오마하의 수학적 기초를 다룹니다. 아웃 계산, 팟 오즈, 임플라이드 오즈, 에퀴티 실현까지. 이 기초를 익히면 테이블에서 더 정확한 결정을 내릴 수 있습니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #10 - 3bet/4bet 팟 전략 - 프리플랍 전쟁에서 우위 점하기</title><link>https://philipjkim.cc/posts/20260112-plo-guide-10/</link><pubDate>Mon, 12 Jan 2026 10:14:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20260112-plo-guide-10/</guid><description>&lt;p&gt;지금까지 싱글 레이즈 팟을 중심으로 오마하를 배웠습니다. 하지만 실전에서는 &lt;strong&gt;3bet과 4bet&lt;/strong&gt;이 빈번하게 발생합니다. 특히 온라인 게임이나 공격적인 테이블에서는 프리플랍에서부터 치열한 레이즈 전쟁이 벌어집니다.&lt;/p&gt;
&lt;p&gt;3bet 팟은 싱글 레이즈 팟과 &lt;strong&gt;완전히 다른 게임&lt;/strong&gt;입니다. 팟이 크고, SPR이 낮으며, 플레이 가능한 스트릿이 줄어듭니다. 어떤 핸드로 3bet을 하고, 3bet에 어떻게 대응하며, 3bet 팟에서 플랍을 어떻게 플레이하는지를 이해하면 수익을 크게 늘릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 PLO에서의 3bet/4bet 전략을 체계적으로 다룹니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #9 리버 플레이 - 빅팟에서 올바른 결정 내리기</title><link>https://philipjkim.cc/posts/20260109-plo-guide-09/</link><pubDate>Fri, 09 Jan 2026 10:17:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20260109-plo-guide-09/</guid><description>&lt;p&gt;리버는 &lt;strong&gt;진실의 순간&lt;/strong&gt;입니다. 더 이상 다음 카드가 없습니다. 드로우는 완성됐거나 죽었고, 블러프는 성공하거나 캐치당합니다. 오마하에서 리버 결정은 종종 스택 전체가 걸린 상황에서 이루어집니다.&lt;/p&gt;
&lt;p&gt;홀덤 플레이어들은 리버에서 비교적 편안합니다. 핸드 강도가 명확하고, 상대 레인지도 어느 정도 좁혀져 있습니다. 하지만 오마하의 리버는 다릅니다. 넛이 아닌 핸드로 큰 팟에 직면하는 상황이 훨씬 자주 발생하고, &amp;ldquo;내가 이기고 있는가?&amp;ldquo;라는 질문에 대한 답이 훨씬 불확실합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 리버에서 올바른 결정을 내리는 방법을 배웁니다. 밸류벳 사이징, 블러프의 어려움과 기회, 세컨드 넛 딜레마, 그리고 가장 강력한 무기인 체크레이즈까지.&lt;/p&gt;</description></item><item><title>PLO 가이드: #8 턴 플레이 - 게임을 결정짓는 스트릿</title><link>https://philipjkim.cc/posts/20260109-plo-guide-08/</link><pubDate>Fri, 09 Jan 2026 10:12:48 +0900</pubDate><guid>https://philipjkim.cc/posts/20260109-plo-guide-08/</guid><description>&lt;p&gt;플랍에서 기초가 다져졌다면, 턴에서 승부가 결정됩니다. 오마하에서 턴은 &lt;strong&gt;가장 중요한 스트릿&lt;/strong&gt;이라 해도 과언이 아닙니다. 플랍에서는 아직 두 장의 카드가 남아있어 상황이 크게 바뀔 수 있지만, 턴에서는 한 장만 남습니다. 결정의 무게가 달라집니다.&lt;/p&gt;
&lt;p&gt;턴에서 팟은 이미 상당히 커져 있고, 한 번의 베팅이 스택의 상당 부분을 차지합니다. 드로우가 완성됐을 때 어떻게 밸류를 극대화하는지, 미스했을 때 포기할지 계속할지, 보드가 페어되면서 상황이 복잡해졌을 때 어떻게 대응하는지. 이번 편에서 턴 플레이의 핵심을 다룹니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #7 플랍 플레이 (下) - 드로우와 공격적 플레이</title><link>https://philipjkim.cc/posts/20260109-plo-guide-07/</link><pubDate>Fri, 09 Jan 2026 10:11:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20260109-plo-guide-07/</guid><description>&lt;p&gt;6편에서 플랍의 기초를 다졌습니다. 보드 텍스처를 읽고, 메이드 핸드의 상대적 강도를 평가하는 방법을 배웠습니다. 이번 편에서는 오마하의 &lt;strong&gt;꽃&lt;/strong&gt;이라 할 수 있는 드로우 플레이를 다룹니다.&lt;/p&gt;
&lt;p&gt;오마하에서 드로우는 단순히 &amp;ldquo;완성되길 기다리는 핸드&amp;quot;가 아닙니다. 강력한 드로우는 &lt;strong&gt;그 자체로 무기&lt;/strong&gt;입니다. 현재 메이드 핸드보다 에퀴티가 높은 경우도 많고, 공격적으로 플레이해서 상대를 폴드시키거나 팟을 키울 수 있습니다.&lt;/p&gt;
&lt;p&gt;드로우로 어떻게 공격적으로 플레이하는지, 언제 세미블러프가 효과적인지, 멀티웨이 팟에서는 어떻게 접근해야 하는지 알아봅시다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #6 플랍 플레이 (上) - 보드 텍스처 읽기와 핸드 강도 평가</title><link>https://philipjkim.cc/posts/20260109-plo-guide-06/</link><pubDate>Fri, 09 Jan 2026 10:10:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20260109-plo-guide-06/</guid><description>&lt;p&gt;프리플랍에서 좋은 핸드를 선택하는 것은 시작일 뿐입니다. 오마하에서 &lt;strong&gt;진짜 게임은 플랍부터&lt;/strong&gt; 시작됩니다. 프리플랍 에퀴티 차이가 홀덤보다 작기 때문에, 플랍 이후의 플레이가 수익의 대부분을 결정합니다.&lt;/p&gt;
&lt;p&gt;플랍을 제대로 플레이하려면 두 가지 능력이 필요합니다. 첫째, &lt;strong&gt;보드 텍스처를 정확히 읽는 것&lt;/strong&gt;. 둘째, &lt;strong&gt;그 보드에서 내 핸드의 진짜 강도를 평가하는 것&lt;/strong&gt;. 홀덤에서는 직관적으로 할 수 있는 이 작업이, 오마하에서는 훨씬 복잡해집니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 플랍 플레이의 기초를 다룹니다. 보드 텍스처 분류법, 메이드 핸드와 드로우의 관계, 그리고 각 상황에서 핸드 강도를 어떻게 평가해야 하는지 배웁니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #5 피해야 할 핸드와 홀덤 플레이어의 함정</title><link>https://philipjkim.cc/posts/20260108-plo-guide-05/</link><pubDate>Thu, 08 Jan 2026 13:06:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260108-plo-guide-05/</guid><description>&lt;p&gt;좋은 오마하 핸드를 아는 것만큼 중요한 것이 있습니다. &lt;strong&gt;나쁜 핸드를 피하는 것&lt;/strong&gt;입니다. 사실 오마하에서 수익의 상당 부분은 상대가 나쁜 핸드를 플레이할 때 발생합니다. 반대로 말하면, 당신이 나쁜 핸드를 플레이하면 상대에게 수익을 헌납하는 것입니다.&lt;/p&gt;
&lt;p&gt;특히 홀덤에서 넘어온 플레이어들은 &lt;strong&gt;홀덤에서는 괜찮았던 핸드&lt;/strong&gt;를 오마하에서도 플레이하는 실수를 반복합니다. &lt;code&gt;AK&lt;/code&gt;가 있으니까, &lt;code&gt;AA&lt;/code&gt;가 있으니까, 수티드니까&amp;hellip; 이런 홀덤식 사고가 오마하에서는 스택을 녹이는 원인이 됩니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 피해야 할 핸드 유형들과 홀덤 플레이어가 빠지기 쉬운 함정들을 집중적으로 다룹니다.&lt;/p&gt;</description></item><item><title>PLO 가이드: #4 스타팅 핸드 심화 - 포지션별, 상황별 핸드 선택</title><link>https://philipjkim.cc/posts/20260108-plo-guide-04/</link><pubDate>Thu, 08 Jan 2026 13:05:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20260108-plo-guide-04/</guid><description>&lt;p&gt;3편에서 좋은 오마하 핸드의 조건을 배웠습니다. 연결성, 수트, 하이카드. 이 세 요소가 조화를 이루는 핸드가 강력하다는 것을 이해했습니다. 하지만 실전에서는 &amp;ldquo;이 핸드가 좋은가?&amp;rdquo; 보다 &lt;strong&gt;&amp;ldquo;이 상황에서 이 핸드를 플레이해야 하는가?&amp;rdquo;&lt;/strong&gt; 가 더 중요한 질문입니다.&lt;/p&gt;
&lt;p&gt;같은 &lt;code&gt;JT98&lt;/code&gt; 더블 수티드라도 버튼에서 오픈하는 것과 UTG&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;에서 오픈하는 것은 완전히 다른 결정입니다. 앞에서 레이즈가 있었는지, 테이블에 몇 명이 앉아 있는지, 스택이 얼마나 깊은지에 따라 전략이 달라집니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 이런 &lt;strong&gt;상황별 핸드 선택&lt;/strong&gt;의 원리를 다룹니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #3 스타팅 핸드 기초 - 좋은 오마하 핸드의 조건</title><link>https://philipjkim.cc/posts/20260108-plo-guide-03/</link><pubDate>Thu, 08 Jan 2026 13:03:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20260108-plo-guide-03/</guid><description>&lt;p&gt;오마하에서 가장 큰 실수는 프리플랍에서 시작됩니다. 홀덤 플레이어들은 익숙한 패턴을 찾습니다. &amp;ldquo;오, &lt;code&gt;AA&lt;/code&gt;가 있네&amp;rdquo;, &amp;ldquo;&lt;code&gt;KQs&lt;/code&gt;&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;니까 플레이할 만하지&amp;rdquo;. 하지만 오마하에서는 &lt;strong&gt;4장 전체가 하나의 유닛&lt;/strong&gt;으로 작동해야 합니다. 2장이 좋아 보인다고 나머지 2장을 무시하면, 그 순간부터 돈이 새기 시작합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 오마하 스타팅 핸드의 기본 원리를 다룹니다. 270,725가지 조합 중에서 어떤 핸드가 수익성 있고, 어떤 핸드가 함정인지 구별하는 눈을 기르는 것이 목표입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #2 오마하 기본 규칙 - 홀덤 플레이어를 위한 빠른 적응 가이드</title><link>https://philipjkim.cc/posts/20260108-plo-guide-02/</link><pubDate>Thu, 08 Jan 2026 12:45:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20260108-plo-guide-02/</guid><description>&lt;p&gt;오마하 테이블에 처음 앉는 홀덤 플레이어들은 대부분 비슷한 경험을 합니다. &amp;ldquo;홀덤이랑 비슷하니까 금방 적응하겠지&amp;quot;라고 생각하고, 첫 몇 핸드에서 자신이 이겼는지 졌는지조차 헷갈리는 상황을 맞닥뜨립니다. 쇼다운에서 자신 있게 카드를 오픈했다가, 딜러가 팟을 상대방에게 밀어주는 당혹스러운 순간을 경험하기도 합니다.&lt;/p&gt;
&lt;p&gt;이번 편에서는 오마하의 기본 규칙을 명확하게 정리합니다. 특히 홀덤 플레이어가 가장 많이 실수하는 부분들을 집중적으로 다루겠습니다. 이 글을 읽고 나면, 적어도 규칙 때문에 헷갈리는 일은 없을 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO 가이드: #1 왜 오마하인가? - 홀덤 플레이어가 오마하에 빠지는 이유</title><link>https://philipjkim.cc/posts/20260108-plo-guide-01/</link><pubDate>Thu, 08 Jan 2026 12:41:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20260108-plo-guide-01/</guid><description>&lt;p&gt;텍사스 홀덤을 어느 정도 플레이해본 사람이라면, 한 번쯤 이런 생각을 해봤을 것입니다. &amp;ldquo;이 게임, 좀 풀린 것 같은데?&amp;rdquo; 프리플랍 차트는 거의 외웠고, 기본적인 포지션 플레이도 몸에 익었습니다. 상대방의 베팅 패턴도 어느 정도 읽힙니다. 물론 여전히 배울 것은 많지만, 처음 홀덤을 배울 때 느꼈던 그 짜릿한 발견의 순간들은 점점 줄어듭니다.&lt;/p&gt;
&lt;p&gt;만약 이런 상태라면, &lt;a href="https://en.wikipedia.org/wiki/Omaha_hold_%27em"&gt;팟 리밋 오마하(Pot-Limit Omaha, PLO)&lt;/a&gt;가 당신을 기다리고 있습니다. 오마하는 단순히 &amp;ldquo;카드가 2장 더 많은 홀덤&amp;quot;이 아닙니다. 완전히 다른 사고방식을 요구하는, 더 깊고 더 역동적인 게임입니다.&lt;/p&gt;</description></item><item><title>책 소개: Steven Pressfield 의 《The War of Art》</title><link>https://philipjkim.cc/posts/20260107-book-review-the-war-of-art/</link><pubDate>Wed, 07 Jan 2026 10:17:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20260107-book-review-the-war-of-art/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://contents.kyobobook.co.kr/sih/fit-in/458x0/pdt/9781936891023.jpg" alt="book cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-저자-steven-pressfield-소개"&gt;1. 저자 Steven Pressfield 소개&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Steven Pressfield&lt;/strong&gt;(1943년 9월 1일 출생)는 미국의 역사 소설가, 논픽션 작가, 시나리오 작가입니다. 그는 1995년 소설 &lt;em&gt;《The Legend of Bagger Vance》&lt;/em&gt; 와 2002년 논픽션 &lt;em&gt;《The War of Art》&lt;/em&gt; 로 가장 잘 알려져 있습니다.&lt;/p&gt;
&lt;p&gt;Pressfield는 1943년 트리니다드 포트오브스페인에서 해군 장교였던 아버지 밑에서 태어났습니다. 어린 시절 대부분을 캘리포니아 로스앤젤레스에서 보냈으며, 1965년 Duke University를 졸업했습니다. 1966년 미국 해병대에 입대하여 보병으로 복무했으며, 이 경험은 그의 글쓰기에 깊은 영향을 미쳤습니다.&lt;/p&gt;</description></item><item><title>책 소개: Anne Lamott 의 《Bird by Bird: Some Instructions on Writing and Life》</title><link>https://philipjkim.cc/posts/20260106-book-review-bird-by-bird/</link><pubDate>Tue, 06 Jan 2026 10:09:53 +0900</pubDate><guid>https://philipjkim.cc/posts/20260106-book-review-bird-by-bird/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://contents.kyobobook.co.kr/sih/fit-in/458x0/pdt/9780385480017.jpg" alt="book cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-저자-anne-lamott-소개"&gt;1. 저자 Anne Lamott 소개&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Anne Lamott&lt;/strong&gt;(1954년 4월 10일 출생)는 미국의 소설가, 논픽션 작가, 진보적 정치 활동가, 대중 연설가, 그리고 글쓰기 교사입니다. 캘리포니아주 마린 카운티에 거주하며, 그녀의 논픽션 작품들은 대부분 자전적입니다.&lt;/p&gt;
&lt;p&gt;샌프란시스코에서 태어난 Lamott는 티뷰론(Tiburon)의 부유한 교외 지역에서 자랐습니다. 그녀의 어머니 Dorothy Lamott는 변호사였고, 아버지 Kenneth Lamott는 작가이자 웨스트코스트의 문학계 인사였습니다. Lamott 가정에서 저녁 식사 후 독서는 일상적인 활동이었으며, 이러한 환경이 그녀의 글쓰기 열정에 큰 영향을 미쳤습니다.&lt;/p&gt;</description></item><item><title>책 소개: Elizabeth Gilbert 의 《Big Magic: Creative Living Beyond Fear》</title><link>https://philipjkim.cc/posts/20260105-book-review-big-magic/</link><pubDate>Mon, 05 Jan 2026 10:39:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20260105-book-review-big-magic/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://images.gr-assets.com/books/1451446242l/24453082.jpg" alt="book cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-저자-elizabeth-gilbert-소개"&gt;1. 저자 Elizabeth Gilbert 소개&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Elizabeth Gilbert&lt;/strong&gt; (1969년 7월 18일 출생) 는 미국의 저널리스트이자 작가로, 2006년 출간된 회고록 &lt;em&gt;《Eat, Pray, Love》&lt;/em&gt; 로 세계적인 명성을 얻었습니다. 이 책은 전 세계적으로 3,000만 부 이상 판매되어 30개 이상의 언어로 번역되었으며, 2010년 Julia Roberts 주연의 영화로도 제작되었습니다.&lt;/p&gt;
&lt;p&gt;코네티컷주 워터베리에서 태어난 Gilbert는 작은 크리스마스 트리 농장에서 자랐습니다. 아버지 John Gilbert는 화학 엔지니어였고, 어머니 Carole은 간호사로 Planned Parenthood 클리닉을 설립했습니다. TV나 레코드 플레이어 없이 자란 Gilbert 가족은 독서를 많이 했고, Elizabeth와 언니 Catherine은 책과 연극을 쓰며 시간을 보냈습니다.&lt;/p&gt;</description></item><item><title>책 소개: Julia Cameron 의 《The Artist's Way》</title><link>https://philipjkim.cc/posts/20260102-book-review-the-artists-way/</link><pubDate>Fri, 02 Jan 2026 18:07:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20260102-book-review-the-artists-way/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 4.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://contents.kyobobook.co.kr/sih/fit-in/400x0/pdt/9780143129257.jpg" alt="book cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-저자-julia-cameron-소개"&gt;1. 저자 Julia Cameron 소개&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Julia B. Cameron&lt;/strong&gt;(1948년 3월 4일 출생)은 미국의 교사, 작가, 예술가, 시인, 극작가, 소설가, 영화제작자, 작곡가 및 저널리스트입니다. 그녀는 1992년에 출판된 &lt;em&gt;《The Artist&amp;rsquo;s Way》&lt;/em&gt; 로 가장 잘 알려져 있으며, 이 책은 전 세계적으로 500만 부 이상 판매되어 40개 이상의 언어로 번역되었습니다.&lt;/p&gt;
&lt;p&gt;일리노이주 시카고 교외의 리버티빌에서 태어난 Cameron은 가톨릭 가정에서 7명의 자녀 중 둘째로 성장했습니다. 조지타운 대학교에서 학업을 시작한 후 포덤 대학교로 편입했으며, 이후 &lt;em&gt;The Washington Post&lt;/em&gt;와 &lt;em&gt;Rolling Stone&lt;/em&gt; 매거진에서 저널리스트로 활동했습니다.&lt;/p&gt;</description></item><item><title>책 소개: Rick Rubin 의 《The Creative Act: A Way of Being》</title><link>https://philipjkim.cc/posts/20251229-rick-rubin-the-creative-act/</link><pubDate>Mon, 29 Dec 2025 16:58:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20251229-rick-rubin-the-creative-act/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Gemini 3 pro 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://contents.kyobobook.co.kr/sih/fit-in/458x0/pdt/9780593652886.jpg" alt="book cover"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-창조적-존재론의-재정립"&gt;1. 서론: 창조적 존재론의 재정립&lt;/h2&gt;
&lt;h3 id="11-이-글의-목적-및-범위"&gt;1.1 이 글의 목적 및 범위&lt;/h3&gt;
&lt;p&gt;이 글은 현대 음악 산업의 거장이자 미니멀리즘 프로듀싱의 선구자인 릭 루빈(Rick Rubin)의 저서 《The Creative Act: A Way of Being》을 텍스트 적으로 해부하고, 이를 심리학, 신경과학, 행동경제학적 관점에서 재해석하여 실용적인 삶의 지침으로 변환하는 것을 목적으로 한다. 루빈은 창조성(Creativity)을 특정 직업군의 전유물인 &amp;lsquo;행위(Act)&amp;lsquo;가 아닌, 인간이라면 누구나 지닌 본질적인 &amp;lsquo;존재 방식(Way of Being)&amp;lsquo;으로 정의한다. 이 글은 책의 목차를 구성하는 78개의 사고 영역(78 Areas of Thought)을 핵심 골격으로 삼아, 추상적인 철학적 담론을 구체적인 행동 프로토콜로 치환하는 데 중점을 둔다. 특히 15,000단어 분량의 깊이를 지향하는 논의를 통해, 단순한 요약을 넘어선 &amp;lsquo;창조적 삶을 위한 종합 매뉴얼&amp;rsquo;을 제시하고자 한다.&lt;/p&gt;</description></item><item><title>밴드 소개: wacci (와치) - 일상의 사운드트랙</title><link>https://philipjkim.cc/posts/20251226-introduction-to-wacci/</link><pubDate>Fri, 26 Dec 2025 09:36:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20251226-introduction-to-wacci/</guid><description>&lt;p&gt;&lt;img src="https://wacci.jp/img/index/main_photo1_sp.jpg?20241021" alt="artist_photo"&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;울고 난 뒤에는 조금 웃을 수 있고, 웃은 뒤에는 더 많이 웃을 수 있는 노래.&amp;rdquo;
2009년 결성된 일본의 5인조 팝 밴드 &lt;strong&gt;wacci(와치)&lt;/strong&gt; 는 듣는 이의 모든 &amp;lsquo;일상&amp;rsquo; 속에 살며시 스며드는 음악을 추구합니다. 화려한 퍼포먼스나 자극적인 사운드 대신, 누구나 한 번쯤 겪어봤을 법한 연애, 이별, 직장 생활, 꿈에 대한 고민을 섬세한 가사와 따뜻한 멜로디로 풀어냅니다. 애니메이션 《4월은 너의 거짓말》의 엔딩곡부터 SNS를 강타한 이별 노래까지, wacci는 이제 일본 대중음악 씬에서 빼놓을 수 없는 &amp;lsquo;공감의 아이콘&amp;rsquo;으로 자리 잡았습니다.&lt;/p&gt;</description></item><item><title>르네상스 개발자: AWS CTO Werner Vogels 가 제시하는 AI 시대 개발자의 5가지 자질</title><link>https://philipjkim.cc/posts/20251219-the-renaissance-developer/</link><pubDate>Fri, 19 Dec 2025 13:47:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20251219-the-renaissance-developer/</guid><description>&lt;p&gt;&lt;em&gt;Claude Opus 4.5 을 활용해 작성한 글입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-왜-르네상스-개발자인가"&gt;서론: 왜 &amp;lsquo;르네상스 개발자&amp;rsquo;인가?&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;AI가 내 직업을 빼앗을까? 아마도, 그럴 것이다. 하지만, 이 질문을 재구성하는 게 좋겠다. AI가 개발자를 쓸모없게 만들까? 절대로 아니다. 진화한다면.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;— Werner Vogels, AWS CTO&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;보겔스 박사는 개발자가 어셈블리어, 구조적 프로그래밍, 객체 지향 언어, 클라우드 도입 등 시대에 따라 등장했던 새로운 도구를 통해 더 훌륭한 엔지니어로 진화해왔다고 강조합니다. AI 역시 마찬가지입니다.&lt;/p&gt;
&lt;p&gt;제프 베조스의 말을 인용하며, 보겔스 박사는 현재를 &amp;ldquo;우주 여행, 인공지능, 로봇공학 등 여러 황금기가 동시에 만나는 시대&amp;quot;라고 정의했습니다. 이러한 돌파구들이 서로를 강화하며 발전하는 모습이 바로 르네상스 시대와 닮아있다는 것입니다.&lt;/p&gt;</description></item><item><title>TotT: 도메인 객체로 변경에 유연한 코드 작성하기</title><link>https://philipjkim.cc/posts/20251204-write-resilient-code-using-domain-objects/</link><pubDate>Thu, 04 Dec 2025 10:12:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20251204-write-resilient-code-using-domain-objects/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2024/09/write-change-resilient-code-with-domain.html"&gt;https://testing.googleblog.com/2024/09/write-change-resilient-code-with-domain.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;제품의 요구사항은 자주 바뀔 수 있지만, 그 근본적인 아이디어는 보통 천천히 변합니다. 이는 흥미로운 통찰로 이어집니다. 만약 우리가 제품의 근본적인 아이디어와 일치하는 코드를 작성한다면, 그 코드는 미래의 제품 변경에도 살아남을 가능성이 더 높습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;도메인 객체(Domain objects)&lt;/strong&gt; 는 우리 코드 안에서 제품의 근본적인 아이디어와 일치하는 구성 요소(클래스나 인터페이스 같은)입니다. 제품 요구사항에 따른 원하는 행동(&amp;ldquo;텍스트를 흰색으로 설정&amp;rdquo;)에 맞춰 코드를 작성하는 대신, 우리는 기저에 깔린 아이디어(&amp;ldquo;텍스트 색상 설정&amp;rdquo;)에 맞춥니다.&lt;/p&gt;</description></item><item><title>TotT: SMURF - 테스트 피라미드를 넘어서</title><link>https://philipjkim.cc/posts/20251203-smurf-beyond-test-pyramid/</link><pubDate>Wed, 03 Dec 2025 07:56:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20251203-smurf-beyond-test-pyramid/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2023/09/else-nuances.html"&gt;https://testing.googleblog.com/2023/09/else-nuances.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;테스트 피라미드는 테스트 스위트의 발전을 안내하는 정석적인 경험 법칙(heuristic)입니다. 이는 단순한 메시지를 전달합니다. 통합 테스트보다 더 많은 단위 테스트를 선호하고, 엔드 투 엔드(end-to-end) 테스트보다 더 많은 통합 테스트를 선호하라는 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXej7qoczQGJ-CPfJ4LIt5l-nWvaGd9WXLPLEslXGzE5ih0C_jdCcK1Ds_QOpvLqD03hbNZXbnGvCNQ8Oy5cJOPZ5xR1qRT8pxp-CDF6KaFX1Dch9FOZjtbmBxzWK_y0OIjSnH8J6wYXV7obtmUaTX9BG5XW=s16000?key=9eA8neKwqCIgXwSUpDaoQQ" alt="test_pyramid"&gt;&lt;/p&gt;
&lt;p&gt;테스트 피라미드는 유용하지만, 테스트 스위트가 커지고 어려운 트레이드오프(trade-off) 상황에 직면했을 때 필요한 세부 정보가 부족합니다. &lt;strong&gt;테스트 스위트를 확장하려면 테스트 피라미드 그 이상이 필요합니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SMURF 는 테스트 스위트의 균형을 잡을 때 고려해야 할 트레이드오프들을 기억하기 쉬운 약어입니다:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>TotT: Else 문의 미묘한 차이</title><link>https://philipjkim.cc/posts/20251203-tott-else-nuances/</link><pubDate>Wed, 03 Dec 2025 07:49:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20251203-tott-else-nuances/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2023/09/else-nuances.html"&gt;https://testing.googleblog.com/2023/09/else-nuances.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;함수가 &lt;code&gt;if&lt;/code&gt; 문에서 일찍 종료(return)되는 경우, &lt;code&gt;else&lt;/code&gt; 절을 사용하는 것과 사용하지 않는 것은 동작상으로는 동일합니다. 하지만 &lt;code&gt;else&lt;/code&gt; 절과 가드 절(guard clause, &lt;code&gt;else&lt;/code&gt;가 없는 형태)을 적절히 사용하면 코드를 읽는 사람에게 의도를 더 명확하게 전달할 수 있습니다.&lt;/p&gt;
&lt;p&gt;함수 구조를 잡는 데 도움이 될 만한 다음 가이드라인들을 고려해 보세요:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;특수한 케이스를 미리 처리하기 위해 가드 절(Guard clause)을 사용하세요.&lt;/strong&gt; 이렇게 하면 나머지 코드는 핵심 로직에 집중할 수 있습니다. 가드 절은 조건을 확인하고 충족되지 않을 경우 빠르게 실패하거나 일찍 반환하여 중첩(nesting)을 줄여줍니다.&lt;/p&gt;</description></item><item><title>Go 웹 애플리케이션에서 static contents를 서빙하는 표준 패턴</title><link>https://philipjkim.cc/posts/20251126-go-static-contents-serving-pattern/</link><pubDate>Wed, 26 Nov 2025 08:07:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20251126-go-static-contents-serving-pattern/</guid><description>&lt;p&gt;복잡한 nginx 설정 파일, CDN 연동, 그리고 정적 파일 경로 문제로 골머리를 앓으신 적 있으신가요? Go 표준 라이브러리만으로도 정적 파일(CSS, JavaScript, 이미지 등)을 우아하게 서빙할 수 있습니다. 이번 글에서는 &lt;strong&gt;Go 웹 애플리케이션에서 static contents를 서빙하는 표준 패턴&lt;/strong&gt;을 알아보겠습니다. &lt;code&gt;http.FileServer&lt;/code&gt;, &lt;code&gt;http.Dir&lt;/code&gt;, 그리고 &lt;code&gt;http.StripPrefix&lt;/code&gt;의 조합만으로 프로덕션 레벨의 static file serving을 구현할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 GOTH Stack 웹 애플리케이션 개발 과정에서 발견한 패턴을 Claude Sonnet 을 이용해 정리한 것입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="문제-상황-url과-파일-시스템-경로의-불일치"&gt;문제 상황: URL과 파일 시스템 경로의 불일치&lt;/h2&gt;
&lt;p&gt;웹 애플리케이션을 개발하다 보면 다음과 같은 구조를 자주 마주치게 됩니다:&lt;/p&gt;</description></item><item><title>Go 웹 개발의 새로운 파도: GOTH 스택 (Go, Templ, HTMX) 시작하기</title><link>https://philipjkim.cc/posts/20251124-introduction-to-goth/</link><pubDate>Mon, 24 Nov 2025 18:12:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20251124-introduction-to-goth/</guid><description>&lt;p&gt;복잡한 리액트(React) 상태 관리, 비대해진 &lt;code&gt;node_modules&lt;/code&gt;, 그리고 끝없는 JSON 직렬화/역직렬화에 지치셨나요? 백엔드 개발자에게 가장 편안한 언어인 &lt;strong&gt;Go&lt;/strong&gt;를 사용하면서도, 현대적인 SPA(Single Page Application) 같은 사용자 경험을 제공하는 &lt;strong&gt;GOTH 스택&lt;/strong&gt;을 소개합니다. GOTH(Go + Templ + HTMX) 스택은 최근 Go 커뮤니티에서 &lt;strong&gt;&amp;ldquo;다시 재미있게 웹 개발을 하자(Make Web Dev Fun Again)&amp;rdquo;&lt;/strong&gt; 는 흐름과 함께 큰 주목을 받고 있습니다. 복잡한 JS 프레임워크 없이 Go의 강점인 단순함과 성능을 그대로 살릴 수 있는 것이 특징입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 요청에 대한 Gemini 3 Pro 의 답변입니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Go: `net/http` vs. `chi`</title><link>https://philipjkim.cc/posts/20251124-go-net-http-vs-chi/</link><pubDate>Mon, 24 Nov 2025 17:49:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20251124-go-net-http-vs-chi/</guid><description>&lt;p&gt;Go 언어의 웹 생태계에서 &lt;strong&gt;&lt;code&gt;net/http&lt;/code&gt; (표준 라이브러리)&lt;/strong&gt; 와 &lt;strong&gt;&lt;code&gt;chi&lt;/code&gt;&lt;/strong&gt; 는 가장 &amp;ldquo;Go스러운(Idiomatic)&amp;rdquo; 선택지로 꼽힙니다. Gin이나 Echo 같은 &amp;ldquo;웹 프레임워크&amp;quot;와 달리, chi는 표준 라이브러리의 인터페이스를 그대로 따르면서 부족한 라우팅 기능을 보강해주는 &amp;ldquo;라우터&amp;quot;이기 때문입니다.&lt;/p&gt;
&lt;p&gt;특히 &lt;strong&gt;Go 1.22 버전&lt;/strong&gt;부터 &lt;code&gt;net/http&lt;/code&gt;의 라우팅 기능이 대폭 강화되었기 때문에, 이 둘의 차이를 명확히 이해하는 것이 중요합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 요청에 대한 Gemini 3 Pro 의 답변입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-nethttp-vs-chi-요약-비교"&gt;1. &lt;code&gt;net/http&lt;/code&gt; vs &lt;code&gt;chi&lt;/code&gt; 요약 비교&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;특징&lt;/th&gt;
 &lt;th style="text-align: left"&gt;&lt;code&gt;net/http&lt;/code&gt; (Go 1.22+)&lt;/th&gt;
 &lt;th style="text-align: left"&gt;&lt;code&gt;chi&lt;/code&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;외부 의존성&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;없음 (Zero dependency)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;있음 (But 매우 가벼움)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;인터페이스&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;http.Handler&lt;/code&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;code&gt;http.Handler&lt;/code&gt; (100% 호환)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;라우팅 (Path)&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;지원 (&lt;code&gt;/items/{id}&lt;/code&gt;)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;강력하게 지원 (Regex 등 포함)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;메서드 매칭&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;지원 (&lt;code&gt;POST /items&lt;/code&gt;)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;지원 (&lt;code&gt;r.Post(&amp;quot;/items&amp;quot;, ...)&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;미들웨어 관리&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;직접 구현 필요 (복잡함)&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;매우 강력하고 간편함 (&lt;code&gt;Use&lt;/code&gt;)&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;라우팅 그룹&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;직접 구현 필요&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;기본 지원 (&lt;code&gt;Group&lt;/code&gt;)&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;속도&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;빠름&lt;/td&gt;
 &lt;td style="text-align: left"&gt;매우 빠름 (Radix Tree 기반)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="2-왜-앱이-커질수록-chi가-유리한가"&gt;2. 왜 앱이 커질수록 &lt;code&gt;chi&lt;/code&gt;가 유리한가?&lt;/h2&gt;
&lt;p&gt;앱이 복잡해진다는 것은 &lt;strong&gt;엔드포인트가 많아지고&lt;/strong&gt;, &lt;strong&gt;공통 로직(인증, 로깅, CORS 등)이 복잡해진다&lt;/strong&gt;는 뜻입니다. 이 지점에서 chi가 &lt;code&gt;net/http&lt;/code&gt;보다 압도적인 강점을 가집니다.&lt;/p&gt;</description></item><item><title>TotT: 함수 가독성 향상을 위해 추상화를 활용하세요</title><link>https://philipjkim.cc/posts/20251124-tott-abstraction-for-better-readability/</link><pubDate>Mon, 24 Nov 2025 10:02:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20251124-tott-abstraction-for-better-readability/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2023/09/use-abstraction-to-improve-function.html"&gt;https://testing.googleblog.com/2023/09/use-abstraction-to-improve-function.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;아래에 있는 두 가지 &lt;code&gt;createPizza&lt;/code&gt; 함수 버전 중 어느 쪽이 이해하기 더 쉬울까요?&lt;/p&gt;
&lt;h2 id="a-추상화-수준이-혼재된-버전-나쁜-예"&gt;A. 추상화 수준이 혼재된 버전 (나쁜 예)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;createPizza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Sauce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Sauce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cheese&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mozzarella&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Veg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Toppings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vegToppings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Meat&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Toppings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;meatToppings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cookingTemp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cookingTemp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;checkOvenInterval&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Temp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getOvenTemp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Baked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Insert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cookTime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Remove&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Baked&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Boxed&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;PutIn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Sliced&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SlicePizza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Ready&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;box&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="b-일관된-추상화-수준을-가진-버전-좋은-예"&gt;B. 일관된 추상화 수준을 가진 버전 (좋은 예)&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;createPizza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;box&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Sauce&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Sauce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Cheese&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Mozzarella&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;addToppings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;addToppings&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Veg&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Toppings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;vegToppings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kind&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Meat&amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Toppings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;meatToppings&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;heatOven&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bakePizza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;heatOven&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Oven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;bakePizza&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;oven&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Oven&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;box&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pizza&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;Pizza&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="추상화-수준을-일치시켜야-하는-이유"&gt;추상화 수준을 일치시켜야 하는 이유&lt;/h2&gt;
&lt;p&gt;여러분은 아마 오른쪽(좋은 예)이 더 쉽다고 답했을 것입니다. 하지만 그 이유는 무엇일까요?&lt;/p&gt;</description></item><item><title>온라인 포커의 먹이사슬: NLH vs PLO 피시(Fish) 공략 가이드</title><link>https://philipjkim.cc/posts/20251121-how-to-find-fish-in-olline-poker/</link><pubDate>Fri, 21 Nov 2025 13:02:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20251121-how-to-find-fish-in-olline-poker/</guid><description>&lt;p&gt;온라인 포커에서 수익을 내는 가장 확실한 방법은 무엇일까요? GTO(Game Theory Optimal)를 마스터하는 것도 중요하지만, 가장 빠른 길은 &lt;strong&gt;&amp;lsquo;나보다 못하는 플레이어(Fish)&amp;lsquo;를 찾아내어 그들의 실수를 내 수익으로 치환하는 것&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;p&gt;하지만 홀덤(NLH)과 오마하(PLO)는 게임의 성격이 다른 만큼, 서식하는 피시의 유형과 공략법도 다릅니다. 오늘은 이 두 게임에서 피시를 감별하는 방법과 유형별 &amp;ldquo;자금 수거(Stacking)&amp;rdquo; 전략을 심층 분석해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="-1-피시-감별법-게임-시작-전부터-알-수-있다"&gt;🌡️ 1. 피시 감별법: 게임 시작 전부터 알 수 있다&lt;/h3&gt;
&lt;p&gt;NLH와 PLO 공통적으로, 피시들은 게임을 시작하기도 전에 냄새를 풍깁니다. 로비와 HUD(Head-Up Display) 수치를 통해 그들을 찾아내세요.&lt;/p&gt;</description></item><item><title>블러프 캐치 전략: 당신은 언제 콜하고 언제 폴드해야 하는가?</title><link>https://philipjkim.cc/posts/20251121-how-to-catch-bluffs-in-nlh/</link><pubDate>Fri, 21 Nov 2025 11:25:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20251121-how-to-catch-bluffs-in-nlh/</guid><description>&lt;p&gt;텍사스 홀덤에서 가장 짜릿하면서도 어려운 결정은 바로 &amp;lsquo;히어로 콜(Hero Call)&amp;lsquo;입니다. 상대방의 마지막 베팅이 강한 핸드인지, 아니면 노골적인 블러프인지 판단하고 콜을 할 때, 당신의 포커 실력은 수익과 직결됩니다.&lt;/p&gt;
&lt;p&gt;블러프 캐칭(Bluff Catching)은 단순히 &amp;lsquo;감&amp;rsquo;이 아니라, &lt;strong&gt;팟 오즈, 상대방의 레인지, 그리고 베팅 스토리의 논리성&lt;/strong&gt;을 종합적으로 분석하는 전략입니다. 이 글에서는 각 스트리트별 블러프 캐치 전략과 함께, 당신의 플레이 성향(TAG vs. LAG)에 따른 대응 방식의 차이를 심층적으로 다뤄보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>NLH: 프리미엄 핸드와 '지옥의 플랍' 대응 전략</title><link>https://philipjkim.cc/posts/20251119-holdem-bad-flop-action-plans/</link><pubDate>Wed, 19 Nov 2025 09:59:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20251119-holdem-bad-flop-action-plans/</guid><description>&lt;p&gt;텍사스 홀덤에서 포켓 에이스(AA)를 들고 프리플랍에 팟을 키우는 것만큼 즐거운 일은 없습니다. 하지만 플랍에 9♥️ 8♥️ 7♣️ 같은 &amp;lsquo;지옥의 보드(Scary Board)&amp;lsquo;가 깔리는 순간, 당신의 AA는 한순간에 취약한 오버페어가 되어버립니다.&lt;/p&gt;
&lt;p&gt;강력한 프리플랍 베팅 레인지(AA, KK, AK, QQ)를 가진 플레이어가 불리한 플랍을 만났을 때, 어떻게 대처해야 스택을 보존하고 에퀴티(Equity)를 지켜낼 수 있을까요? 이 글은 GTO 원칙과 실제 플레이의 절충점을 기반으로 포지션별, 스트리트별 행동 전략을 심층 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>PLO에서 살아남기: 상대의 벳 사이즈가 '위험!'을 외칠 때</title><link>https://philipjkim.cc/posts/20251113-plo-how-to-fold/</link><pubDate>Thu, 13 Nov 2025 09:55:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20251113-plo-how-to-fold/</guid><description>&lt;p&gt;팟-리밋 오마하(PLO)는 아름답고도 잔인한 게임입니다. 4장의 카드는 무한한 가능성을 의미하지만, 동시에 무한한 함정을 의미하기도 하죠. 텍사스 홀덤에서는 탑 페어 킹 잭이 꽤 훌륭한 핸드일 수 있지만, PLO에서 탑 페어는 종종 파산으로 가는 급행열차 티켓일 뿐입니다.&lt;/p&gt;
&lt;p&gt;이 혼돈의 게임에서 당신의 스택을 지켜줄 가장 강력한 무기는 무엇일까요? 바로 &amp;lsquo;폴드(Fold)&amp;rsquo; 버튼입니다.&lt;/p&gt;
&lt;p&gt;특히 PLO는 &amp;lsquo;팟-리밋&amp;rsquo; 게임입니다. 즉, 상대방이 베팅할 수 있는 최대 크기는 팟의 크기에 의해 엄격하게 제한됩니다. 이 말은, 상대방의 &lt;strong&gt;&amp;lsquo;벳 사이즈(Bet Sizing)&amp;rsquo;&lt;/strong&gt; 가 단순한 숫자가 아니라, 그들의 핸드에 대한 가장 노골적인 &lt;strong&gt;&amp;lsquo;선언&amp;rsquo;&lt;/strong&gt; 이라는 뜻입니다.&lt;/p&gt;</description></item><item><title>카메라: 도구인가, 경험인가? RF 스타일 vs 미러리스 비교</title><link>https://philipjkim.cc/posts/20251112-camera-comparison-rf-vs-mirrorless/</link><pubDate>Wed, 12 Nov 2025 10:26:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20251112-camera-comparison-rf-vs-mirrorless/</guid><description>&lt;p&gt;오늘은 카메라 세계의 아주 흥미롭고도 근본적인 논쟁거리를 가져왔습니다. 바로 &lt;strong&gt;레인지파인더(RF) 스타일 카메라&lt;/strong&gt; 와 &lt;strong&gt;미러리스 렌즈 교환식 카메라(ILC)&lt;/strong&gt; 의 대결입니다. 이 논쟁을 가장 흥미롭게 보여주는 두 모델, 후지필름의 &lt;strong&gt;X100V&lt;/strong&gt; 와 &lt;strong&gt;X-T5&lt;/strong&gt; 를 기준으로 두 시스템의 철학과 장단점을 속속들이 파헤쳐 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://cameradecision.com/sizecomparison/Fujifilm-X-T5-vs-Fujifilm-X100V-size-comparison.jpg" alt="From: https://cameradecision.com/compare/Fujifilm-X-T5-vs-Fujifilm-X100V"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RF 스타일 대표:&lt;/strong&gt; 후지필름 X100V (고정 23mm f/2 렌즈, OVF/EVF 하이브리드 뷰파인더)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;미러리스 ILC 대표:&lt;/strong&gt; 후지필름 X-T5 (렌즈 교환식, EVF, IBIS 탑재)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;후지필름 공식 자료, dpreview 같은 전문 리뷰 사이트, 그리고 레딧(Reddit)의 r/fujifilm 커뮤니티에서 수없이 오간 실제 사용자들의 피드백을 종합하여, 스펙 시트를 넘어선 &amp;lsquo;경험의 차이&amp;rsquo;에 초점을 맞춰 분석해 드립니다.&lt;/p&gt;</description></item><item><title>Tips: 극동계는 부담스럽다면? 섭씨 -5°~5° 동계 백패킹/바이크패킹 완벽 가이드</title><link>https://philipjkim.cc/posts/20251110-winter-backpacking-guide/</link><pubDate>Mon, 10 Nov 2025 13:01:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20251110-winter-backpacking-guide/</guid><description>&lt;p&gt;&lt;em&gt;자료 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;섭씨 -5도에서 5도 사이, 즉 &amp;lsquo;극동계&amp;rsquo;가 아닌 &amp;lsquo;초-중급 동계&amp;rsquo; 백패킹과 바이크패킹은 겨울의 낭만을 즐기기에 가장 좋은 조건입니다. 하지만 이 온도 역시 철저한 준비 없이는 매우 위험할 수 있습니다.&lt;/p&gt;
&lt;p&gt;여러 아웃도어 전문가 블로그, MSR이나 REI와 같은 브랜드의 가이드, 그리고 Reddit의 r/backpacking, r/bikepacking 커뮤니티의 실제 경험을 종합하여 &amp;lsquo;춥지만 상쾌한&amp;rsquo; 동계 백패킹을 위한 가이드를 준비했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;겨울의 숲은 고요하고, 눈 덮인 풍경은 경이롭습니다. 쨍하게 차가운 공기 속에서 마시는 뜨거운 커피 한 잔의 매력에 빠진 분들이라면 동계 백패킹을 꿈꾸게 됩니다.&lt;/p&gt;</description></item><item><title>PLO 실전 해부: TAG vs. LAG, 스트리트별 심층 전략 분석</title><link>https://philipjkim.cc/posts/20251106-plo-postflop-strategies-tag-vs-lag/</link><pubDate>Thu, 06 Nov 2025 10:53:32 +0900</pubDate><guid>https://philipjkim.cc/posts/20251106-plo-postflop-strategies-tag-vs-lag/</guid><description>&lt;p&gt;&lt;em&gt;자료 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;PLO는 4장의 카드가 5장의 커뮤니티 카드와 만나 무한에 가까운 조합을 만들어내는 게임입니다. 같은 상황이라도 플레이어의 성향에 따라 접근 방식은 완전히 달라집니다. 포커 커뮤니티(Upswing Poker, Run It Once, Reddit의 r/poker)와 프로들의 전략을 기반으로, 대표적인 두 가지 성향인 &lt;strong&gt;Tight-Aggressive (TAG)&lt;/strong&gt; 와 &lt;strong&gt;Loose-Aggressive (LAG)&lt;/strong&gt; 가 동일한 상황에서 어떻게 다르게 플레이하는지 3가지 실전 예제를 통해 스트리트별로 심층 분석해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(기본 설정: 6-Max, $1/$2 PLO, 100BB ($200) 유효 스택)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>캔디드 포토와 순간을 포착하는 방법</title><link>https://philipjkim.cc/posts/20251105-candid-photos/</link><pubDate>Wed, 05 Nov 2025 12:04:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20251105-candid-photos/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.bergreenphotography.com/candid-photos/"&gt;https://www.bergreenphotography.com/candid-photos/&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;캔디드 포토&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;는 자연스럽게 보이게 하는 것이 목표라는 점을 알면 생각보다 더 어렵습니다. 자연스러워 보이게 하는 데 왜 그렇게 많은 노력이 필요할까요? 그 질문에는 답할 수 없지만, 캔디드 포토그래피를 마스터하기 위한 몇 가지 팁은 드릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;목표는 이야기를 전달할 수 있도록 캔디드한 순간을 보고 포착하는 법을 배우는 것입니다. 캔디드 웨딩 사진이든 인물 사진이든 실력을 향상시키고 싶다면 이 팁들이 도움이 될 것입니다. 전문 포토그래퍼로 10년을 보낸 저는 어려운 일을 쉽게 보이게 만드는 경험이 있습니다!&lt;/p&gt;</description></item><item><title>번역글: 35mm 렌즈 - 알아야 할 모든 것</title><link>https://philipjkim.cc/posts/20251103-tips-to-the-35mm-focal-length/</link><pubDate>Mon, 03 Nov 2025 11:25:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20251103-tips-to-the-35mm-focal-length/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.bergreenphotography.com/35mm-lens/"&gt;https://www.bergreenphotography.com/35mm-lens/&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;다재다능하고 가벼우며 컴팩트한 단렌즈에 관해서라면 35mm 렌즈는 탁월한 선택입니다. 풍경, 인물, 웨딩 또는 일상의 순간을 촬영하든 이 렌즈는 탁월한 결과를 제공합니다. 이 포스트에서는 35mm 렌즈가 왜 그렇게 특별한지 살펴보고, 다른 인기 있는 초점 거리와 비교하며, 이 렌즈를 최대한 활용하기 위한 실용적인 팁을 공유할 것입니다.&lt;/p&gt;
&lt;p&gt;또한, 여러분의 필요에 맞는 최고의 35mm 렌즈를 구매할 수 있는 유용한 비디오 링크와 제휴 링크도 포함할 것입니다. 35mm 렌즈 초점 거리는 이유 있는 인기입니다. 가볍고, 컴팩트하며, 다재다능하고, 스토리텔링에 좋습니다. 하지만 올바르게 사용하는 방법을 알아야 합니다.&lt;/p&gt;</description></item><item><title>PLO 포스트플랍 마스터하기: 플랍, 턴, 리버 베팅 전략 심층 분석</title><link>https://philipjkim.cc/posts/20251103-plo-postflop-strategy/</link><pubDate>Mon, 03 Nov 2025 10:56:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20251103-plo-postflop-strategy/</guid><description>&lt;p&gt;지난번 프리플랍 전략 가이드에서는 PLO가 &amp;lsquo;조화&amp;rsquo;와 &amp;lsquo;너트 잠재력&amp;rsquo;의 게임임을 강조했습니다. 탄탄한 프리플랍은 견고한 건물의 기초와 같습니다. 하지만 팟 리밋 오마하의 진정한 전쟁터는 바로 &lt;strong&gt;포스트플랍(Post-flop)&lt;/strong&gt; 입니다.&lt;/p&gt;
&lt;p&gt;4장의 카드는 플랍이 깔리는 순간 무한에 가까운 조합을 만들어냅니다. 이 복잡성 속에서 승리하기 위한 플랍, 턴, 리버의 핵심 전략을 심층적으로 다뤄보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;자료 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="1-plo-플랍턴리버-베팅-전략"&gt;1. PLO 플랍/턴/리버 베팅 전략&lt;/h3&gt;
&lt;p&gt;포스트플랍 전략은 크게 두 가지 시나리오로 나뉩니다: &lt;strong&gt;(1) 내 핸드와 보드의 조합이 좋지 않을 때&lt;/strong&gt; 와 &lt;strong&gt;(2) 조합이 좋을 때&lt;/strong&gt; 입니다.&lt;/p&gt;</description></item><item><title>PLO 프리플랍 마스터하기: 핸드 밸류 분석과 포지션별 베팅 전략</title><link>https://philipjkim.cc/posts/20251030-plo-preflop-strategy/</link><pubDate>Thu, 30 Oct 2025 17:40:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20251030-plo-preflop-strategy/</guid><description>&lt;p&gt;팟 리밋 오마하(PLO)는 텍사스 홀덤에 익숙한 많은 플레이어에게 새롭고 흥미로운 도전입니다. 2장이 아닌 4장의 홀 카드를 받는다는 점은 더 많은 조합과 가능성을 의미하지만, 동시에 더 많은 함정을 의미하기도 합니다.&lt;/p&gt;
&lt;p&gt;홀덤이 &amp;ldquo;핸드&amp;quot;의 게임이라면, PLO는 &amp;ldquo;&lt;strong&gt;조화(Harmony)&lt;/strong&gt;&amp;ldquo;와 &amp;ldquo;&lt;strong&gt;플레이어빌리티(Playability)&lt;/strong&gt;&amp;ldquo;의 게임입니다. 4장의 카드가 얼마나 잘 어울려 너트(Nut) 핸드를 만들 수 있는지가 프리플랍 핸드 가치를 결정합니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 여러 공신력 있는 포커 전략 사이트(Upswing Poker, Run It Once, PokerNews 등)의 핵심 컨텐츠를 기반으로, PLO 프리플랍 전략을 심층적으로 분석해 보겠습니다.&lt;/p&gt;</description></item><item><title>TotT: 관심사 분리? 끝!</title><link>https://philipjkim.cc/posts/20251020-tott-separation-of-concerns/</link><pubDate>Mon, 20 Oct 2025 13:17:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20251020-tott-separation-of-concerns/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2020/12/testing-on-toilet-separation-of.html"&gt;https://testing.googleblog.com/2020/12/testing-on-toilet-separation-of.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;다음 함수는 SpeedyImg라는 API를 사용하여 바이트 배열을 이미지로 디코딩합니다. 다른 팀이 소유한 API를 참조할 때 어떤 유지보수 문제가 발생할 수 있을까요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SpeedyImgImage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;decodeImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SpeedyImgDecoder&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decoders&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpeedyImgOptions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;getDefaultConvertOptions&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SpeedyImgDecoder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decoder&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decoders&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpeedyImgResult&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decodeResult&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;decoder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;formatBytes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SpeedyImgImage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;decodeResult&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;validateGoodImage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;throw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RuntimeException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;API 호출에 대한 세부 정보가 도메인 로직과 혼합되어 있어&lt;/strong&gt; 코드를 이해하기 어렵게 만들 수 있습니다. 예를 들어, &lt;code&gt;decoder.formatBytes()&lt;/code&gt; 호출은 API에서 필요하지만 바이트가 어떻게 포맷되는지는 도메인 로직과 관련이 없습니다.&lt;/p&gt;</description></item><item><title>장기 초반 행마의 3대 핵심 원칙</title><link>https://philipjkim.cc/posts/20251016-janggi-intro-strategy/</link><pubDate>Thu, 16 Oct 2025 10:53:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20251016-janggi-intro-strategy/</guid><description>&lt;p&gt;장기 초반 행마, 즉 &amp;lsquo;포진(布陣)&amp;lsquo;은 대국의 전체적인 방향을 결정하는 매우 중요한 단계입니다. 단순히 기물을 전개하는 것을 넘어, 앞으로의 전투를 유리하게 이끌기 위한 전략의 청사진을 그리는 과정입니다. 초(楚, 녹색)는 선수의 이점을 살려 공격의 주도권을 잡으려 하고, 한(漢, 적색)은 초의 의도를 방어하며 균형을 맞추거나 역습의 기회를 노립니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;학습 자료 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="장기-초반-행마의-3대-핵심-원칙"&gt;장기 초반 행마의 3대 핵심 원칙&lt;/h2&gt;
&lt;p&gt;어떤 포진을 사용하든, 아래의 3가지 원칙을 항상 염두에 두어야 합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;빠른 기물 진출 (특히 &amp;lsquo;마&amp;rsquo;와 &amp;lsquo;차&amp;rsquo;):&lt;/strong&gt; 전투의 주력 기물인 마(馬)와 차(車)가 나아갈 길을 빠르게 열어주어야 합니다. 기물이 진영 안에 갇혀 있으면 없는 것과 마찬가지입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;중앙 장악 (면포의 중요성):&lt;/strong&gt; 장기판의 중앙(특히 5, 6번째 세로줄)은 전투의 요충지입니다. 중앙에 포(包)를 배치하는 &amp;lsquo;면포(面前包)&amp;lsquo;는 중앙을 지키고 상대의 핵심부를 직접 겨누는 가장 기본적인 수입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;궁성 안정 (안궁, 安宮):&lt;/strong&gt; 왕(궁, 宮)의 안전을 확보하는 것은 모든 전략의 기본입니다. 초반에 궁과 사(士)를 움직여 견고한 수비 형태를 갖추는 &amp;lsquo;안궁&amp;rsquo;을 통해 왕을 지켜야 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="초楚-선공의-대표적인-초반-포진"&gt;초(楚, 선공)의 대표적인 초반 포진&lt;/h2&gt;
&lt;p&gt;선수를 쥔 초는 자신이 원하는 판으로 게임을 이끌어갈 수 있습니다. 초의 첫 수에 따라 대국의 양상이 거의 결정됩니다.&lt;/p&gt;</description></item><item><title>9x9 바둑 교재 '81 Little Lions' 리뷰: Chapter 5</title><link>https://philipjkim.cc/posts/20251015-81-lions-ch05/</link><pubDate>Wed, 15 Oct 2025 10:45:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20251015-81-lions-ch05/</guid><description>&lt;p&gt;&lt;em&gt;리뷰 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-on-jumps-뜀에-관하여"&gt;5. On Jumps (뜀에 관하여)&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;81 Little Lions&amp;quot;의 5장은 9x9 바둑의 가장 기본적인 행마 기술 중 하나인 &amp;lsquo;뜀(Jump)&amp;lsquo;에 대해 집중적으로 다룹니다. 저자 Immanuel deVillers는 자신의 돌이나 그룹으로부터 확장하는 행위가 9x9 게임의 가장 중요한 요소 중 하나라고 서두에 강조합니다. 뜀과 벌림(extension)은 상대에게 악용될 약점을 최소화하면서 판에 대한 통제력을 확보하는 좋은 방법입니다.&lt;/p&gt;
&lt;p&gt;그러나 저자는 맹목적으로 돌을 확장해서는 안 되며, 그 이후에 일어날 일들을 신중하게 생각해야 한다고 경고합니다. 9x9 바둑판은 공간이 좁아 한 번의 행마 실수가 돌이킬 수 없는 결과를 초래하는 경우가 많습니다. 따라서 뜀이라는 행마를 선택할 때, 그 간격의 안정성과 효율성을 정확히 이해하는 것이 필수적입니다.&lt;/p&gt;</description></item><item><title>9x9 바둑 교재 '81 Little Lions' 리뷰: Chapters 4</title><link>https://philipjkim.cc/posts/20251014-81-lions-ch04/</link><pubDate>Tue, 14 Oct 2025 13:24:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20251014-81-lions-ch04/</guid><description>&lt;p&gt;&lt;em&gt;리뷰 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-furikawari-바꿔치기"&gt;4. Furikawari (바꿔치기)&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;81 Little Lions&amp;quot;의 4장은 9x9 바둑의 정수를 담고 있는 고급 전략인 &amp;lsquo;후리카와리(Furikawari, 바꿔치기)&amp;lsquo;를 주제로 다룹니다. 저자 Immanuel deVillers는 후리카와리를 &lt;strong&gt;&amp;ldquo;상대의 잠재적인 영토와 자신의 잠재적인 영토를 교환하는 것&amp;rdquo;&lt;/strong&gt; 으로 단순 명료하게 정의하며 이 장을 시작합니다. 이 개념은 간단해 보이지만, 저자는 자신이 처음 후리카와리를 배웠을 때 실전에서 어떻게 활용해야 할지 막막했던 경험을 솔직하게 고백합니다. 그는 이 개념이 초심자에게는 다소 모호하게 느껴질 수 있으며, 게임 중에 바꿔치기가 발생했을 때 참고할 만한 구체적인 기술이 없어 어려움을 겪었다고 말합니다.&lt;/p&gt;</description></item><item><title>번역글: 28mm 화각 렌즈를 위한 10가지 통찰력 있는 팁</title><link>https://philipjkim.cc/posts/20251013-tips-to-the-28mm-focal-length/</link><pubDate>Mon, 13 Oct 2025 13:19:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20251013-tips-to-the-28mm-focal-length/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.theinspiredeye.net/28mm-focal-length/"&gt;https://www.theinspiredeye.net/28mm-focal-length/&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;당신은 이제 막 렌즈가 28mm 화각에 고정된 카메라를 손에 넣었습니다. 어쩌면 스트리트 포토그래피(거리 사진)를 하고 싶을지도 모르죠. 그런데 지금 패닉에 빠지셨다고요. 세상은 너무나도 넓고! 이렇게 넓은 화각으로 대체 어떻게 사진을 찍어야 할까요??? 잠깐. 진정하고, 숨을 쉬세요. 괜찮아질 겁니다. 여러분의 시작을 도와줄 28mm 화각 입문 가이드가 여기 있습니다. 더 많은 팁을 원한다면 &lt;a href="https://www.theinspiredeye.net/street-photography-tips/"&gt;이 기사&lt;/a&gt;도 확인해 보세요.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="28mm-화각-입문"&gt;28mm 화각: 입문&lt;/h2&gt;
&lt;p&gt;28mm 렌즈는 광각 렌즈로 분류됩니다. 기본적으로 50mm 같은 더 긴 렌즈보다 이미지에 더 많은 것을 담아낼 수 있다는 뜻이죠.&lt;/p&gt;</description></item><item><title>9x9, 13x13, 19x19 바둑의 차이점 상세 분석</title><link>https://philipjkim.cc/posts/20251013-three-sizes-of-go-board/</link><pubDate>Mon, 13 Oct 2025 13:05:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20251013-three-sizes-of-go-board/</guid><description>&lt;p&gt;&lt;em&gt;가이드 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;바둑은 바둑판의 크기에 따라 게임의 양상과 핵심 전략이 완전히 달라지는 독특한 특징을 가집니다. 핵심적인 차이를 한 문장으로 요약하자면 &lt;strong&gt;&amp;ldquo;바둑판이 커질수록 국지적인 전투(전술)의 중요성보다 전체적인 운영(전략)의 중요성이 기하급수적으로 커진다&amp;rdquo;&lt;/strong&gt; 고 할 수 있습니다.&lt;/p&gt;
&lt;h3 id="한눈에-보는-비교표"&gt;한눈에 보는 비교표&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th style="text-align: left"&gt;구분&lt;/th&gt;
 &lt;th style="text-align: left"&gt;9x9 바둑 (작은 전투)&lt;/th&gt;
 &lt;th style="text-align: left"&gt;13x13 바둑 (균형의 다리)&lt;/th&gt;
 &lt;th style="text-align: left"&gt;19x19 바둑 (대서사시)&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;게임의 본질&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;전술(수읽기)&lt;/strong&gt; 중심의 단기전&lt;/td&gt;
 &lt;td style="text-align: left"&gt;전술과 &lt;strong&gt;초보적 전략&lt;/strong&gt;의 조화&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;전략(운영)&lt;/strong&gt; 중심의 장기전&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;평균 소요 시간&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;5분 ~ 15분&lt;/td&gt;
 &lt;td style="text-align: left"&gt;15분 ~ 30분&lt;/td&gt;
 &lt;td style="text-align: left"&gt;30분 ~ 수 시간&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;핵심 역량&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;정확한 수읽기 능력, 사활 감각&lt;/td&gt;
 &lt;td style="text-align: left"&gt;기본적인 행마, 공수의 균형 감각&lt;/td&gt;
 &lt;td style="text-align: left"&gt;대국관, 형세판단, 포석, 끝내기 등&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;첫 수의 가치&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;매우 큼 (중앙 &amp;lsquo;천원&amp;rsquo;이 강력)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;큼 (주로 3-3, 4-4 등 귀 차지)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;중요하지만, 전체 판에 미치는 영향은 적음&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;포석(초반) 단계&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;거의 없음 (두자마자 전투 시작)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;간략하게 존재 (귀, 변 차지 후 바로 접전)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;매우 길고 중요 (전체 판의 구상을 결정)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;중반전의 양상&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;모든 수가 중앙 전투와 직결&lt;/td&gt;
 &lt;td style="text-align: left"&gt;귀와 변에서 시작된 전투가 중앙으로 확산&lt;/td&gt;
 &lt;td style="text-align: left"&gt;거대한 세력 다툼, 삭감, 침입 등 복잡함&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;끝내기 단계&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;매우 짧거나 거의 없음&lt;/td&gt;
 &lt;td style="text-align: left"&gt;어느 정도 중요하며, 승패에 영향&lt;/td&gt;
 &lt;td style="text-align: left"&gt;승패를 뒤집을 수 있을 만큼 매우 중요함&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;실수의 영향&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;치명적 (한 번의 실수로 즉시 패배 가능)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;비교적 큼 (불리해지기 쉬움)&lt;/td&gt;
 &lt;td style="text-align: left"&gt;만회할 기회가 많음 (전략적 유연성)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;추천 학습자&lt;/strong&gt;&lt;/td&gt;
 &lt;td style="text-align: left"&gt;&lt;strong&gt;입문자&lt;/strong&gt;, 수읽기 훈련이 필요한 중급자&lt;/td&gt;
 &lt;td style="text-align: left"&gt;입문자 졸업 후 &lt;strong&gt;초급자&lt;/strong&gt;, 빠른 대국 선호자&lt;/td&gt;
 &lt;td style="text-align: left"&gt;바둑의 깊이를 배우려는 &lt;strong&gt;모든 학습자&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="1-9x9-바둑-속도와-수읽기의-세계"&gt;1. 9x9 바둑 (속도와 수읽기의 세계)&lt;/h3&gt;
&lt;p&gt;9줄 바둑은 바둑의 핵심 규칙인 &amp;lsquo;돌의 사활&amp;rsquo;과 &amp;lsquo;따냄&amp;rsquo;을 배우기에 가장 이상적인 환경입니다. 바둑판이 좁아 모든 돌들이 서로의 영향권 안에 있기 때문에, 한 수 한 수가 즉각적인 전투로 이어집니다.&lt;/p&gt;</description></item><item><title>9x9 바둑 교재 '81 Little Lions' 리뷰: Chapters 3</title><link>https://philipjkim.cc/posts/20251013-81-lions-ch03/</link><pubDate>Mon, 13 Oct 2025 12:38:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20251013-81-lions-ch03/</guid><description>&lt;p&gt;&lt;em&gt;리뷰 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="3-learn-joseki-정석-학습"&gt;3. Learn Joseki (정석 학습)&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;81 Little Lions&amp;quot;의 3장은 9x9 바둑 학습에 있어 매우 논쟁적인 주제인 &amp;lsquo;정석(Joseki)&amp;lsquo;에 대해 다룹니다. 저자 Immanuel deVillers는 이 장을 통해 바둑계에 널리 퍼져 있는 &amp;ldquo;특정 단급에 도달하기 전까지는 정석을 배우지 말라&amp;quot;는 통념에 정면으로 반박하며, 9x9 바둑의 특수성에 입각한 자신만의 정석 학습법을 제안합니다. 그는 이러한 주장이 마치 만트라처럼 반복되지만, 정작 그 이유를 물으면 대부분 다른 사람에게서 들었다는 말만 되풀이하거나 &amp;ldquo;이해하지 못하는 수는 두고 싶지 않다&amp;quot;는 막연한 답변만 돌아온다고 지적합니다. 저자는 이러한 접근 방식이 오히려 학습자의 성장을 저해할 수 있다고 주장하며, 보다 실용적이고 적극적인 정석 활용법을 제시하는 데 이 장의 목적을 둡니다.&lt;/p&gt;</description></item><item><title>번역글: 섣부른 최적화, 아니면... 내가 한 말은 나부터 지켜야 했는데</title><link>https://philipjkim.cc/posts/20251010-premature-optimization/</link><pubDate>Fri, 10 Oct 2025 11:09:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20251010-premature-optimization/</guid><description>&lt;p&gt;원문: Pragmatic Programmers Newsletter (Translated by Google Gemini)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;저는 제 자신의 조언을 무시했고, 하루를 꼬박 날렸으며, 제가 저 자신의 최악의 고객임을 다시 한번 증명하고 말았습니다. (하지만 절망하지 마세요. 글 마지막에 쿠폰 코드가 있습니다.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;저희의 새로운 유통사는 요금을 청구할 항목들을 만들어내는 데 특별한 재능이 있습니다. 그런 항목이 수십 가지나 되죠. 저희는 순수익에 대해 로열티를 지급하기 때문에, 모든 청구 항목을 하나하나 맞춰봐야 합니다. 간단하죠, 안 그런가요?&lt;/p&gt;
&lt;p&gt;문제는 &amp;ldquo;권당&amp;rdquo; 발생하는 비용은 한 정산서에 나오고, &amp;ldquo;총액 공제&amp;rdquo; 항목은 다른 정산서에 나온다는 겁니다. 게다가 각 총액 항목 안에는 어떤 이름표도 없이 뒤죽박죽 섞인 비용들이 숨어있곤 합니다. 저희가 받는 것이라고는 날짜 두어 개와 무작위로 보이는 총액 하나가 전부입니다. 그러면 저희는 그 총액을 특정 비용들의 어떤 조합과 맞춰봐야 하는 것이죠.&lt;/p&gt;</description></item><item><title>바둑 가이드: Pt.1. 바둑의 규칙과 예절, 돌 잡는 기술</title><link>https://philipjkim.cc/posts/20250925-go-beginners-guide-pt-1/</link><pubDate>Thu, 25 Sep 2025 15:52:10 +0900</pubDate><guid>https://philipjkim.cc/posts/20250925-go-beginners-guide-pt-1/</guid><description>&lt;p&gt;&lt;em&gt;이 글의 초안은 gemini-2.5-pro 로 작성되었고, 이후 Claude Opus 5 를 이용해 도해를 바둑판 그림으로 교체하고 내용을 보강했습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;본 포스트는 바둑 입문의 첫 두 단계인 &amp;lsquo;바둑의 규칙과 예절&amp;rsquo; 및 &amp;lsquo;돌 잡는 기술: 단수와 축&amp;rsquo;을 다룹니다. 바둑에 처음 입문하는 학습자가 가장 기본적인 원리를 명확하게 이해하고, 이를 통해 견고한 기반을 다질 수 있도록 하는 것을 목표로 합니다. 각 단계의 중요성을 설명하고, 학습 내용을 상세히 기술하며, 좌표를 붙인 바둑판 도해로 추상적인 개념을 구체화하여 설명합니다.&lt;/p&gt;</description></item><item><title>음반 소개: 휘트니 휴스턴 - The Bodyguard: Original Soundtrack Album (1992): 시대를 초월한 목소리, 사랑의 불멸을 노래하다</title><link>https://philipjkim.cc/posts/20250925-album-review-the-bodyguard-ost/</link><pubDate>Thu, 25 Sep 2025 13:38:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20250925-album-review-the-bodyguard-ost/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/oQ1Kj0E_KDobOdBQZsFbqNmnm2Hcy6YZAusReqsECL-RYgfegHo0IIsUtZZfDjzG77nENYComCfxunvk7HvYsNimF_GrvDJ1iSscY0jqMgTCbR_whG2TOozAYhjO7PHo7cA_tfawcBQFPByZFCGrkw.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1992년 11월 17일에 발매된 영화 《보디가드》의 오리지널 사운드트랙 앨범은 단순한 영화 음악을 넘어, 휘트니 휴스턴이라는 전설적인 보컬리스트의 위상을 대중문화의 상징으로 격상시킨 기념비적인 작품입니다. 휘트니 휴스턴과 케빈 코스트너 주연의 영화가 전 세계적으로 흥행에 성공한 데에는 휘트니 휴스턴의 압도적인 가창력이 담긴 OST가 결정적인 역할을 했습니다. 대중음악 역사상 4번째로 많이 팔린 앨범이자, OST 음반 중에서는 가장 많이 팔린 앨범으로 기록된 이 작품은, 시대를 초월한 명곡들로 오늘날까지 많은 이들에게 깊은 감동을 선사하고 있습니다.&lt;/p&gt;</description></item><item><title>9x9 바둑 교재 '81 Little Lions' 리뷰: Chapters 1 &amp; 2</title><link>https://philipjkim.cc/posts/20250925-81-lions-ch01-02/</link><pubDate>Thu, 25 Sep 2025 07:29:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20250925-81-lions-ch01-02/</guid><description>&lt;p&gt;&lt;em&gt;리뷰 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도서-및-저자-소개"&gt;도서 및 저자 소개&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;81 Little Lions: An Introduction to the 9x9 Board for Advanced Beginners&amp;quot;는 Immanuel deVillers가 저술한 9x9 바둑 입문서입니다. 저자는 서문에서 자신을 3~5급 수준의 아마추어 기사이지만, 9x9 바둑에 대해서는 1단에 가까운 실력을 갖추고 있다고 소개합니다. 그는 19x19 바둑판에 대한 자료는 풍부하지만 9x9에 대한 정보는 거의 없다는 점에 착안하여 이 가이드북을 집필하게 되었다고 밝혔습니다. 이 책은 9x9 바둑의 세계로 안내하는 입문서 역할을 목표로 하며, 저자는 약 15급 이상의 기력을 가진 독자에게 추천하고 있습니다. 저자는 기본적인 바둑 용어(아타리, 팻감 등)와 개념(선수, 후수)에 익숙한 독자를 대상으로 글을 전개합니다.&lt;/p&gt;</description></item><item><title>스타크래프트 II: 공허의 유산 - 프로토스 플레이 가이드</title><link>https://philipjkim.cc/posts/20250924-starcraft2-protoss-guide/</link><pubDate>Wed, 24 Sep 2025 14:12:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20250924-starcraft2-protoss-guide/</guid><description>&lt;p&gt;&lt;em&gt;gemini-2.5-pro 에 연구 결과 요청한 결과물을 일부 수정했습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-아이어를-위하여"&gt;1. 서론: 아이어를 위하여&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://oyster.ignimgs.com/mediawiki/apis.ign.com/starcraft-2/5/51/Airtoss.jpg?width=1280" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;본 포스트는 블리자드 엔터테인먼트의 실시간 전략 게임 스타크래프트 II: 공허의 유산을 플레이하는 유저들을 위한 프로토스 종족 심층 가이드입니다. 이 가이드의 목표는 프로토스라는 종족의 철학과 메커니즘을 깊이 있게 이해하고, 초보자부터 숙련자에 이르기까지 모든 수준의 플레이어가 실력을 한 단계 끌어올리는 데 필요한 지식과 전략을 체계적으로 제공하는 것입니다.[1]&lt;/p&gt;
&lt;p&gt;프로토스는 고도로 발달한 기술력과 강력한 사이오닉 능력을 바탕으로 한 정예 종족입니다.[2, 3] 타 종족에 비해 소수의 유닛으로 구성되지만, 각 유닛의 강력한 능력치와 특수 기술을 활용하여 다수의 적을 압도하는 정교한 컨트롤의 묘미를 제공합니다. 강력한 후반 조합을 완성했을 때 전장을 지배하는 쾌감은 프로토스 플레이의 가장 큰 매력 중 하나입니다.[4, 5] 본 가이드를 통해 프로토스의 잠재력을 최대한 발휘하고 승리의 영광을 쟁취하는 길을 안내하고자 합니다.&lt;/p&gt;</description></item><item><title>음반 소개: 이소라 - 7집 (2008): 침묵으로 말하는, 고통의 순도를 담은 걸작</title><link>https://philipjkim.cc/posts/20250924-album-review-lee-sora-7/</link><pubDate>Wed, 24 Sep 2025 13:59:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20250924-album-review-lee-sora-7/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/Fd9cCdYnN7wEYT7yHKcbuWRM8YdBNqEA9iO9OtadWRsPGYeSUm9LtqBmrKftHXPTGbrx5d4vJjeRvq0l2F9IXED4wgQ808-lI5lPX7Pzttf7OLnu5BY4eUwuEP8sNXz6xNAS9V6W9qGRgYwhbeB06Q.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;2008년 12월 발매된 이소라의 7집은 제목도, 수록곡의 이름도 없이 오직 숫자로만 존재하는, 한국 대중음악사에서 가장 파격적이고 용감한 시도 중 하나로 기록된 앨범입니다. 아이돌 음악이 시장을 지배하던 시절, 모든 상업적 문법을 거부하고 오직 자신의 내면을 향한 침잠을 택한 이 앨범은, 청자에게 불편할 정도의 솔직함과 순도 높은 슬픔을 전달하며 시간이 지날수록 더욱 깊은 울림을 주는 기념비적인 작품입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다. (Tribute to 승국)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>스타크래프트 II: 공허의 유산 - 저그 플레이 가이드</title><link>https://philipjkim.cc/posts/20250924-starcraft2-zerg-guide/</link><pubDate>Wed, 24 Sep 2025 13:24:10 +0900</pubDate><guid>https://philipjkim.cc/posts/20250924-starcraft2-zerg-guide/</guid><description>&lt;p&gt;&lt;em&gt;gemini-2.5-pro 에 연구 결과 요청한 결과물을 일부 수정했습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-군단의-정수"&gt;1. 서론: 군단의 정수&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://www.gamespot.com/a/uploads/screen_kubrick/gamespot/images/2008/069/858595-939643_20080309_001.jpg" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;스타크래프트 II에서 저그는 단순한 종족이 아닌, 하나의 거대한 유기적 시스템입니다. 저그 플레이의 핵심 철학은 &lt;strong&gt;반응성(Reactivity), 확장(Expansion), 그리고 압도적인 생산력(Overwhelming Production)&lt;/strong&gt; 이라는 세 가지 기둥 위에 세워져 있습니다.[1, 2, 3] 플레이어는 개별 유닛을 지휘하는 사령관이라기보다, 군단의 성장을 유도하고 외부 위협에 적응하도록 이끄는 &amp;lsquo;초월체&amp;rsquo;와 같은 역할을 수행해야 합니다.&lt;/p&gt;
&lt;p&gt;저그 운영의 근본적인 난이도는 복잡한 유닛 컨트롤이 아닌, 불완전한 정보 속에서 내려야 하는 끊임없는 &lt;strong&gt;의사결정&lt;/strong&gt;에 있습니다. 모든 생산의 기반이 되는 애벌레(Larva) 메커니즘은 플레이어에게 상시적인 딜레마를 안겨줍니다. 즉, 경제력(일벌레)을 강화할 것인가, 아니면 군사력(전투 유닛)을 확보할 것인가의 갈림길에 서게 됩니다. 테란이나 프로토스는 생산 건물과 일꾼 생산 건물이 분리되어 동시에 두 가지를 수행할 수 있지만, 저그는 애벌레라는 단일 자원을 공유합니다. 이는 일벌레에 투자한 애벌레 하나가 곧 전투 유닛 하나의 기회비용이 됨을 의미합니다. 따라서 저그 플레이어는 최소한의 정찰 정보에 기반하여 상대의 의도를 정확히 예측하고, 그에 맞춰 자원을 배분하는 고도의 위험 관리 능력을 요구받습니다. 과도한 일벌레 생산은 예측하지 못한 공격에 허무하게 무너지는 결과를 낳고, 섣부른 병력 생산은 상대의 경제력에 압도당하는 패배로 이어집니다.[1, 4]&lt;/p&gt;</description></item><item><title>음반 소개: 동물원 - 세번째 노래모음 (1990): 일상과 상실의 풍경을 담은 담백한 서정</title><link>https://philipjkim.cc/posts/20250923-album-review-dongmoolwon-3/</link><pubDate>Tue, 23 Sep 2025 16:23:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20250923-album-review-dongmoolwon-3/</guid><description>&lt;p&gt;&lt;img src="https://i.maniadb.com/images/album/129/129260_f_1.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1990년 7월 발매된 동물원의 3집 &lt;em&gt;세번째 노래모음&lt;/em&gt;은 80년대 한국 포크 씬을 대표했던 그룹이 변화의 기로 위에서 남긴, 담백하고도 쓸쓸한 기록입니다. 김광석을 비롯한 주요 멤버들이 떠난 후 3인조로 재편되어 발표한 이 앨범은, 1, 2집의 풋풋했던 감성을 넘어 20대 후반에 접어든 청춘의 상실감과 도시인의 고독을 소박한 언어로 담아내며, 동물원 초기 스타일의 마지막을 장식한 작품으로 평가받습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다. (Tribute to 승국)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>스타크래프트 II: 공허의 유산 - 테란 플레이 가이드</title><link>https://philipjkim.cc/posts/20250923-starcraft2-terran-guide/</link><pubDate>Tue, 23 Sep 2025 15:36:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20250923-starcraft2-terran-guide/</guid><description>&lt;p&gt;&lt;em&gt;gemini-2.5-pro 에 연구 결과 요청한 결과물을 일부 수정했습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://preview.redd.it/terran-gameplay-v0-sna5gg33nw5f1.png?auto=webp&amp;amp;s=06fc6ef8df0ad5c0a29b8cc7adca52347fd70ab5" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;본 포스트는 스타크래프트 II: 공허의 유산의 테란 종족을 플레이하고자 하는 모든 수준의 플레이어를 위한 포괄적인 가이드를 제공하는 것을 목적으로 합니다. 초보자를 위한 기본 개념부터 고급 플레이어를 위한 심층 전략까지, 테란 운영의 모든 측면을 체계적으로 분석하고 설명할 것입니다.&lt;/p&gt;
&lt;p&gt;테란은 코프룰루 구역의 인간 세력으로, 뛰어난 적응력과 생존력을 바탕으로 한 유연한 전략 구사가 특징입니다.[1, 2] 프로토스의 발전된 기술이나 저그의 생물학적 강점 대신, 급조된 기술과 불굴의 정신력으로 척박한 우주 환경에 적응한 이 종족의 특성은 게임 내에서 다양한 유닛 조합과 전략적 유연성으로 나타납니다.[3] 본 포스트는 이러한 테란의 본질을 이해하고, 그 잠재력을 최대한 발휘할 수 있는 방법을 제시할 것입니다.&lt;/p&gt;</description></item><item><title>TotT: 당신이 소유하지 않은 타입은 목킹(Mock)하지 마세요</title><link>https://philipjkim.cc/posts/20250923-tott-dont-mock-types-you-dont-own/</link><pubDate>Tue, 23 Sep 2025 13:36:30 +0900</pubDate><guid>https://philipjkim.cc/posts/20250923-tott-dont-mock-types-you-dont-own/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2020/07/testing-on-toilet-dont-mock-types-you.html"&gt;https://testing.googleblog.com/2020/07/testing-on-toilet-dont-mock-types-you.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;단위 테스트를 작성할 때, 테스트 대상 코드가 의존하는 타입을 목(mock) 처리하는 것은 일반적인 관행입니다. 하지만, &lt;strong&gt;당신이 소유하지 않은 타입(types you don&amp;rsquo;t own)을 목 처리하는 것은 거의 항상 피해야 합니다.&lt;/strong&gt; 여기서 &amp;ldquo;소유하지 않은 타입&amp;quot;이란 당신의 팀이 작성하거나 관리하지 않는 모든 클래스나 인터페이스를 의미합니다. 여기에는 자바 표준 라이브러리의 &lt;code&gt;URL&lt;/code&gt;이나 서드파티 라이브러리의 &lt;code&gt;JSONObject&lt;/code&gt;와 같은 타입들이 포함됩니다.&lt;/p&gt;
&lt;p&gt;예를 들어, &lt;code&gt;java.net.HttpURLConnection&lt;/code&gt;을 직접 목 처리하는 테스트를 생각해 봅시다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testProcessUrl_connectionFailed&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;throws&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;HttpURLConnection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mockConnection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mock&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HttpURLConnection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockConnection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getResponseCode&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;thenThrow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;IOException&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Processor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Processor&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertFalse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;processUrl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockConnection&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 테스트에는 몇 가지 심각한 문제가 있습니다.&lt;/p&gt;</description></item><item><title>심오한 수읽기의 세계: 바둑(Go)에 대한 소개</title><link>https://philipjkim.cc/posts/20250923-introduction-to-go-game/</link><pubDate>Tue, 23 Sep 2025 09:50:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20250923-introduction-to-go-game/</guid><description>&lt;p&gt;&lt;em&gt;바둑에 대한 연구 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-흑과-백-무한을-담은-우주"&gt;서론: 흑과 백, 무한을 담은 우주&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://i.namu.wiki/i/cnqjsHRUl-CPSacgByZEL_ljv0IfP2nqKyI4cOGOe_enO-MfEQA0fRsfPCJFhnIZ9k9QB4_6gjeR7E9tdRjehg.webp" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;바둑은 흑과 백의 돌을 가로세로 19줄의 판 위에 번갈아 놓아 더 많은 공간, 즉 &amp;lsquo;집&amp;rsquo;을 차지하는 쪽이 이기는 단순한 규칙의 게임입니다.[1] 그러나 이 간결한 규칙의 이면에는 우주의 원자 수보다 많은 경우의 수가 잠재되어 있으며, 수천 년에 걸쳐 동아시아의 지성사를 관통해 온 깊이 있는 철학이 담겨 있습니다.[2, 3] 바둑판 위에서 펼쳐지는 국면의 추이는 풍운의 변화와 같고, 돌의 흥망성쇠는 인간사의 도리와 다르지 않다고 평가되기도 합니다.[2] 본 포스트는 바둑이라는 게임의 기원과 역사, 기본 규칙과 전략을 상세히 소개하고, 이 게임이 단순한 오락을 넘어 동아시아 문화권에서 사고의 도구이자 철학적 성찰의 매개체로 기능해 온 이유를 다각적으로 분석하고자 합니다. 이를 통해 바둑을 모르는 이들에게 이 게임이 왜 배울 만한 가치가 있는지를 종합적으로 제시하는 것을 목적으로 합니다.&lt;/p&gt;</description></item><item><title>게임 소개: 스타크래프트와 스타크래프트 II: RTS 신화의 계승과 변주</title><link>https://philipjkim.cc/posts/20250922-starcraft-1-vs-2/</link><pubDate>Mon, 22 Sep 2025 17:34:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-starcraft-1-vs-2/</guid><description>&lt;p&gt;&lt;em&gt;스타크래프트, 스타크래프트2 에 대한 연구 결과 요청에 대한 gemini-2.5-pro 의 결과물입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;본 포스트는 블리자드 엔터테인먼트(Blizzard Entertainment)의 실시간 전략(Real-Time Strategy, RTS) 게임, 스타크래프트(StarCraft)와 그 후속작 스타크래프트 II(StarCraft II)를 심층적으로 비교 분석하는 것을 목표로 합니다. 두 게임은 RTS 장르의 역사에 지대한 영향을 미쳤으나, 게임 디자인 철학, 핵심 메커니즘, 그리고 e스포츠 생태계에서 뚜렷하게 다른 궤적을 그려왔습니다. 본 포스트는 각 게임의 역사적 배경, 확장팩을 통한 진화 과정, 종족별 고유 특성, 그리고 핵심적인 게임 시스템을 상세히 기술합니다. 이를 바탕으로 두 게임의 공통점과 차이점을 명확히 하고, e스포츠 씬에서의 상이한 성공 요인과 한계를 다각적으로 분석하여 RTS 장르의 패러다임 변화를 소개합니다.&lt;/p&gt;</description></item><item><title>온라인 포커 승률 극대화를 위한 전략</title><link>https://philipjkim.cc/posts/20250922-online-poker-strategy/</link><pubDate>Mon, 22 Sep 2025 14:27:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-online-poker-strategy/</guid><description>&lt;p&gt;원문: &lt;a href="https://upswingpoker.com/pot-limit-omaha-starting-hands-plo-preflop-strategy/"&gt;https://upswingpoker.com/pot-limit-omaha-starting-hands-plo-preflop-strategy/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;온라인 포커 게임 전략에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-현대-온라인-포커의-패러다임"&gt;서론: 현대 온라인 포커의 패러다임&lt;/h2&gt;
&lt;p&gt;현대 온라인 포커는 단순한 카드 게임의 영역을 넘어섰습니다. 이는 정보, 데이터, 그리고 게임 이론이 복잡하게 얽힌 지적 스포츠로 진화했습니다. &amp;ldquo;Exploit(착취)이 사실상 불가능한 온라인 포커 게임&amp;quot;이라는 상황 설정은 게임 이론 최적화(Game Theory Optimal, GTO) 전략의 중요성을 시사합니다.[1, 2] GTO는 이론적으로 완벽한 방어 전략을 제공하지만, 실제 온라인 포커 환경에서의 지속적인 수익 창출은 대부분의 플레이어가 GTO를 완벽하게 구사하지 못한다는 사실, 즉 상대의 불완전함을 체계적으로 파고드는 익스플로잇(Exploitative) 플레이에서 비롯됩니다.&lt;/p&gt;</description></item><item><title>아키텍처 비교: VSA vs. Hexagonal Architecture</title><link>https://philipjkim.cc/posts/20250922-vsa-vs-hexagonal/</link><pubDate>Mon, 22 Sep 2025 14:14:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-vsa-vs-hexagonal/</guid><description>&lt;p&gt;이 포스트는 Vertical Slicing Architecture와 Hexagonal Architecture의 개념과 특징을 단순히 나열하는 것을 넘어, 두 아키텍처의 근본적인 설계 철학, 해결하고자 하는 핵심 문제, 그리고 실제 프로젝트에 적용했을 때 발생하는 트레이드오프를 심층적으로 분석하는 것을 목표로 합니다. 각 아키텍처의 태동 배경, 장단점, 이상적인 적용 시나리오를 비교 분석하고, 실제 적용 사례를 통해 이론이 현실에서 어떻게 구현되는지 살펴볼 것입니다. 최종적으로는 독자들이 자신의 프로젝트 맥락과 당면 과제에 가장 적합한 아키텍처를 정보에 입각하여 선택할 수 있도록 실질적인 통찰과 가이드를 제공하고자 합니다.&lt;/p&gt;</description></item><item><title>음반 소개: 이승환 - My Story (1993): 슬픔을 딛고 거장으로 발돋움한 음악적 서사</title><link>https://philipjkim.cc/posts/20250922-album-review-my-story/</link><pubDate>Mon, 22 Sep 2025 10:26:19 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-album-review-my-story/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/XQfIvSJNUbiY5r2QgBQBAmgT5l8GbLn7xI7_fPLbqraEDU7_Xfw03uQ9vyI21Go7tC4_xNDsV4MQ2vkV1vdLNOxpY_jxkMcYSS1iVnjvNA7DsFcyx6n2WP-UkWe7ix2L7oj9kpwHDzAJB0MmfNJ6eA.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1993년 9월 발매된 이승환의 3집 &lt;em&gt;My Story&lt;/em&gt;는 그가 아이돌 스타를 넘어 진정한 아티스트로 자리매김하는 결정적인 분기점이 된 앨범입니다. 어머니를 여읜 개인적인 아픔을 겪은 후 제작되어, 이전보다 한층 더 무겁고 진중한 감성을 담아냈으며, 015B의 정석원, 더 클래식의 김광진과 박용준 등 당대 최고의 뮤지션들과의 협업을 통해 음악적 스펙트럼을 비약적으로 확장시킨 작품입니다. 이 앨범은 100만 장 이상의 판매고를 올리며, 이승환의 음악적 변신과 상업적 성공을 모두 증명해 보였습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>인물 소개: 안드레아 피를로: 필드의 건축가, 레지스타의 재정의</title><link>https://philipjkim.cc/posts/20250922-introduction-to-pirlo/</link><pubDate>Mon, 22 Sep 2025 09:38:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-introduction-to-pirlo/</guid><description>&lt;p&gt;&lt;img src="https://i.guim.co.uk/img/static/sys-images/Football/Pix/pictures/2014/6/5/1402007385556/Andrea-Pirlo-Italy-012.jpg?width=700&amp;amp;quality=85&amp;amp;auto=format&amp;amp;fit=max&amp;amp;s=4b8f2ff89dd02b8592e41cc32182d4c4" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;안드레아 피를로의 선수 경력과 특징, 업적에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-마에스트로의-등장"&gt;1. 서론: 마에스트로의 등장&lt;/h2&gt;
&lt;p&gt;안드레아 피를로는 단순히 뛰어난 미드필더로만 평가되지 않습니다. 그는 축구 전술의 패러다임을 바꾼 혁신가이자, 한 세대의 축구에 영향을 미친 상징적인 인물입니다. 지네딘 지단, 사비 에르난데스, 안드레스 이니에스타 등과 함께 21세기 최고의 미드필더 중 한 명으로 거론되는 그는, 우아함, 비전, 그리고 경기 조율 능력을 겸비한 선수였습니다.[1]&lt;/p&gt;
&lt;p&gt;그의 이름은 &amp;lsquo;레지스타(Regista)&amp;rsquo;, 즉 후방 플레이메이커라는 포지션과 동의어가 되었습니다.[2, 3, 4] 이탈리아 대표팀 감독이었던 마르첼로 리피가 &amp;ldquo;발로 이야기하는 조용한 리더&amp;quot;라고 묘사했듯, 피를로는 화려한 언변이 아닌 경기장 위에서의 플레이로 자신의 가치를 증명했습니다.[5] 동료들로부터 &amp;lsquo;건축가(Il Architetto)&amp;lsquo;라는 별명으로 불린 그는, 팀 공격의 설계자이자 지휘자였습니다.[6] 이 글에서는 안드레아 피를로의 축구 경력을 심층적으로 분석하며, 그가 어떻게 전술적 필요에 의해 새로운 역할을 부여받고, 그 역할을 재정의하여 현대 축구에 지대한 영향을 미쳤는지 소개합니다.&lt;/p&gt;</description></item><item><title>TotT: 테스트 데이터를 깔끔하게 만드세요</title><link>https://philipjkim.cc/posts/20250922-tott-cleanly-create-test/</link><pubDate>Mon, 22 Sep 2025 09:29:50 +0900</pubDate><guid>https://philipjkim.cc/posts/20250922-tott-cleanly-create-test/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2018/02/testing-on-toilet-cleanly-create-test.html"&gt;https://testing.googleblog.com/2018/02/testing-on-toilet-cleanly-create-test.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;테스트를 작성할 때, 우리는 종종 테스트 대상 코드가 소비할 객체들을 만들어야 합니다. 이 객체들은 진짜 객체일 수도 있고, 페이크(fake)나 목(mock) 객체일 수도 있습니다. 이러한 객체들을 생성하는 코드는 빠르게 지저분해지고, 테스트의 가독성을 해치며, 유지보수를 어렵게 만들 수 있습니다.&lt;/p&gt;
&lt;p&gt;다음 예제를 살펴보겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testWriteSecureMessage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 테스트를 위한 설정&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Message&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;42&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Four score and seven years ago...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSignature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1a2b3c4d5e&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Abc.123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Abraham Lincoln&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 테스트 실행&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;writeSecureMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 상태 검증&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Sent secure message with signature 1a2b3c4d5e&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInfo&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 테스트에서 객체 생성은 꽤 장황합니다. 테스트의 핵심 로직을 이해하기 어렵게 만들고, 테스트가 실제로 무엇을 검증하려는지 불분명하게 만듭니다.&lt;/p&gt;</description></item><item><title>음반 소개: 이승환 - Always (1991): 소포모어 징크스를 넘어선 100만 장의 신화</title><link>https://philipjkim.cc/posts/20250919-album-review-always/</link><pubDate>Fri, 19 Sep 2025 16:28:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20250919-album-review-always/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/83dWaE8Vz0yCmBaNYQPNQW2O9MJ4RV-cWj0XysymV2Nwu_jXtrzlBZknZ-MG1vFUu3KhBokCHYGJ0WsmuI8eaqxOnglgX_uLKEAI_ZaCc7Ce-5S6lxM_nB-hbM2SfsFx_S68islyHB4LK34QfFyoNg.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1991년 7월 발매된 이승환의 2집 &lt;em&gt;Always&lt;/em&gt;는 성공적인 데뷔를 마친 신인 가수를 단숨에 밀리언셀러의 반열에 올려놓은, 90년대 초반을 대표하는 명반입니다. 1집의 성공 공식을 계승하면서도 김현철, 장기호 등 새로운 실력파 뮤지션들을 대거 기용하여 한층 더 성숙하고 다채로운 사운드를 담아냈으며, 이는 이승환이라는 아티스트가 롱런할 수 있는 단단한 기반이 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="앨범의-탄생과-주요-참여진"&gt;앨범의 탄생과 주요 참여진&lt;/h2&gt;
&lt;p&gt;1집 &lt;em&gt;B.C 603&lt;/em&gt;의 성공 이후, 이승환은 소포모어 징크스에 대한 우려를 비웃듯 더욱 완성도 높은 앨범으로 돌아왔습니다. 1집의 성공을 이끈 핵심 파트너 오태호와의 협업을 이어가는 동시에, 김현철, 장기호, 박성식 등 당대 최고의 실력파 뮤지션들을 영입하여 음악적 스펙트럼을 넓혔습니다. 이 앨범은 저작권 분쟁으로 인해 타이틀곡 &amp;ldquo;너를 향한 마음&amp;quot;과 &amp;ldquo;회상이 지나간 오후&amp;quot;가 제외된 9트랙 버전이 이후에 발매되기도 했으나, 100만 장 이상 판매되며 상업적으로 큰 성공을 거두었습니다.&lt;/p&gt;</description></item><item><title>TotT: 상태를 변경하는 메서드 호출만 검증하세요</title><link>https://philipjkim.cc/posts/20250919-tott-only-verify-state/</link><pubDate>Fri, 19 Sep 2025 15:26:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20250919-tott-only-verify-state/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2017/01/testing-on-toilet-keep-cause-and-effect.html"&gt;https://testing.googleblog.com/2017/01/testing-on-toilet-keep-cause-and-effect.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;이 테스트에서 어떤 라인을 안전하게 제거할 수 있을까요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;addPermissionToDatabase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UserAuthorizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockUserService&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;mockPermissionDb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;grantPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;READ_ACCESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 이 메서드 중 하나라도 호출되지 않으면 테스트는 실패합니다.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockUserService&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isUserActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockPermissionDb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockPermissionDb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;isValidPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;READ_ACCESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockPermissionDb&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;addPermission&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;USER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;READ_ACCESS&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;정답은 &lt;strong&gt;상태를 변경하지 않는 메서드&lt;/strong&gt;를 검증하는 호출들을 제거할 수 있다는 것입니다.&lt;/p&gt;
&lt;p&gt;다른 객체에 대한 메서드 호출은 다음 두 가지 범주 중 하나에 속합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;상태 변경(State-changing):&lt;/strong&gt; 부작용(side effects)이 있고 테스트 대상 코드 외부의 세상을 바꾸는 메서드. 예: &lt;code&gt;sendEmail()&lt;/code&gt;, &lt;code&gt;saveRecord()&lt;/code&gt;, &lt;code&gt;logAccess()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비-상태 변경(Non-state-changing):&lt;/strong&gt; 테스트 대상 코드 외부 세상에 대한 정보를 반환하고 아무것도 수정하지 않는 메서드. 예: &lt;code&gt;getUser()&lt;/code&gt;, &lt;code&gt;findResults()&lt;/code&gt;, &lt;code&gt;readFile()&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;일반적으로 &lt;strong&gt;상태를 변경하지 않는 메서드가 호출되었는지 검증하는 것은 피해야 합니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>음반 소개: 이승환 - B.C 603 (1989): 록과 신스팝의 조우, '어린 왕자'의 화려한 등장</title><link>https://philipjkim.cc/posts/20250918-album-review-bc603/</link><pubDate>Thu, 18 Sep 2025 13:33:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20250918-album-review-bc603/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/PWP4uO6b9HU3oMdEP2ZkrSMUIaStjbstOgEk5chbH1xsnSPidZLfOl-2x0sq5wMYaQZ7TQTVsliMPAOJ4zAkSlyJV1tRLYSGznNZslQHh0F-7vdc5GUYLszc2CEktvYwZwfLiCrHIgmK31luOLezXQ.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1989년 10월 15일 발매된 이승환의 정규 1집 &lt;em&gt;B.C 603&lt;/em&gt;은 80년대 한국 언더그라운드 록의 감수성과 당시 유행하던 신스팝(Synth-pop) 사운드를 결합하여 팝 발라드의 새로운 방향을 제시한, 한 천재 신인의 기념비적인 데뷔 앨범입니다. 당대 최고의 언더그라운드 뮤지션들이 대거 참여하여 만들어낸 이 앨범은, 이승환이라는 아티스트의 화려한 서막을 알렸을 뿐만 아니라, 90년대 한국 대중음악의 르네상스를 예고한 작품으로 평가받습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>AI 툴 소개: GitHub Spec Kit: AI 에이전트 개발을 위한 명세서</title><link>https://philipjkim.cc/posts/20250917-introduction-to-spec-kit/</link><pubDate>Wed, 17 Sep 2025 10:02:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20250917-introduction-to-spec-kit/</guid><description>&lt;p&gt;GitHub Spec Kit은 코드와 상호작용하는 AI 에이전트 및 모델 개발자를 위한 명세(spec) 모음입니다. 이 명세들은 AI 에이전트가 파일 시스템과 상호작용하고, 명령을 실행하며, 사용자와 소통하는 방식에 대한 &lt;strong&gt;모범 사례(best practice)를 정의&lt;/strong&gt;합니다.&lt;/p&gt;
&lt;p&gt;이러한 표준을 채택함으로써, 우리는 AI 에이전트 개발 생태계가 더욱 강력하고 상호 운용 가능하도록 만들 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://github.com/github/spec-kit"&gt;https://github.com/github/spec-kit&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt; (2025-09-17 기준)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-명세-기반-개발이란-무엇입니까"&gt;🤔 명세 기반 개발이란 무엇입니까?&lt;/h2&gt;
&lt;p&gt;명세 기반 개발은 전통적인 소프트웨어 개발의 &lt;strong&gt;판도를 뒤집습니다&lt;/strong&gt;. 수십 년 동안 코드가 왕이었습니다 — 명세는 코딩이라는 &amp;ldquo;진짜 작업&amp;quot;이 시작되면 만들어졌다가 버려지는 비계(scaffolding)에 불과했습니다. 명세 기반 개발은 이를 변화시킵니다: &lt;strong&gt;명세가 실행 가능해지며&lt;/strong&gt;, 단지 구현을 안내하는 것을 넘어 직접 작동하는 구현체를 생성합니다.&lt;/p&gt;</description></item><item><title>TotT: 중첩 줄이기, 복잡도 낮추기</title><link>https://philipjkim.cc/posts/20250917-tott-code-health-reduce-nesting/</link><pubDate>Wed, 17 Sep 2025 09:49:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20250917-tott-code-health-reduce-nesting/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2017/06/code-health-reduce-nesting-reduce.html"&gt;https://testing.googleblog.com/2017/06/code-health-reduce-nesting-reduce.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;과도하게 중첩된 코드는 가독성을 해치고 오류를 발생시키기 쉽습니다. 아래 두 버전의 코드에서 버그를 찾아보세요.&lt;/p&gt;
&lt;p&gt;과도하게 중첩된 코드:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetStatus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;RPC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAuthorizedUser&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEnc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRows&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;vals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ParseRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRows&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;avg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;EmptyError&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;AuthError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;unauthorized&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;wrong encoding&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;RpcError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetStatus&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;중첩이 적은 코드:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetStatus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;RPC&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;RpcError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetStatus&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAuthorizedUser&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;wrong encoding&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetEnc&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;AuthError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;unauthorized&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRows&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="n"&gt;EmptyError&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vals&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ParseRow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetRows&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;avg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vals&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;avg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vals&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;정답&lt;/strong&gt;: &amp;ldquo;wrong encoding&amp;quot;과 &amp;ldquo;unauthorized&amp;rdquo; 에러가 서로 바뀌었습니다. 이 버그는 리팩터링된 버전에서 더 쉽게 발견할 수 있는데, 그 이유는 검사가 에러를 처리하는 부분 바로 옆에서 일어나기 때문입니다.&lt;/p&gt;</description></item><item><title>애틀랜타 브레이브스 Big 3: 그렉 매덕스, 톰 글래빈, 존 스몰츠</title><link>https://philipjkim.cc/posts/20250916-atlanta-braves-big-3/</link><pubDate>Tue, 16 Sep 2025 10:40:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20250916-atlanta-braves-big-3/</guid><description>&lt;p&gt;&lt;img src="https://www.ajc.com/resizer/v2/WTDRRV46Z3OEGQWAC7VQUYY46I.jpg?auth=ec0fa5b9eba83cd51fdcf40463f78822b868f3447876ed4ac5d9217e5da27c28&amp;amp;width=790&amp;amp;height=440&amp;amp;smart=true" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;애틀랜타 브레이브스의 역대급 선발진 Big 3 에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="i-서론-애틀랜타-브레이브스-왕조의-서막"&gt;I. 서론: 애틀랜타 브레이브스, 왕조의 서막&lt;/h2&gt;
&lt;p&gt;1990년까지 7년 연속 패배 시즌을 기록하며 암흑기에 있던 애틀랜타 브레이브스는 1991년 &amp;lsquo;꼴찌에서 1위로(Worst-to-First)&amp;lsquo;라는 극적인 반전을 이루며 내셔널리그(NL) 페넌트를 차지했습니다.[1] 이는 메이저리그 역사상 전례 없는 14년 연속 지구 우승(1991-2005)이라는 위대한 왕조의 서막이었습니다.[1, 2, 3] 이 장기적인 성공의 중심에는 역사상 가장 위대한 투수진으로 평가받는 그렉 매덕스, 톰 글래빈, 존 스몰츠, 즉 &amp;lsquo;Big 3&amp;rsquo;가 있었습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 서태지와 아이들 - 2집 (1992): K-Pop의 빅뱅</title><link>https://philipjkim.cc/posts/20250916-album-review-seotaiji-2/</link><pubDate>Tue, 16 Sep 2025 09:42:07 +0900</pubDate><guid>https://philipjkim.cc/posts/20250916-album-review-seotaiji-2/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/L9sMbyGwSJi2H0psxgmeeTaUGzzqBUMWn9P4ouasYxeZegx8VTysmdT3sdbYZvNU79jeEXaa9LuXERM7DrEGQslqcYQkUpQWDl9NI4iQzQG8-gHvbsVChoicE61JsWBa9S6w5r-sA0hKVp4OPdXSDw.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1992년, 혜성처럼 나타나 대한민국 대중음악의 판도를 완전히 뒤바꾼 그룹, 서태지와 아이들. 그들이 1년 만에 발표한 2집 앨범은 1집의 충격을 뛰어넘는 또 다른 &lt;strong&gt;&amp;lsquo;사건&amp;rsquo;&lt;/strong&gt; 이었습니다. 당시의 기준으로는 설명 불가능했던 파격과 실험 정신으로 가득 찬 이 앨범은, 30년이 지난 지금 들어도 여전히 세련되고 독창적입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="아티스트-서태지와-아이들"&gt;아티스트: 서태지와 아이들&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;서태지&lt;/strong&gt; (본명 정현철, 1972년생)는 밴드 시나위의 베이시스트 출신으로, 록 음악에 깊은 뿌리를 두고 있습니다. 그는 그룹의 리더이자 거의 모든 곡의 작사, 작곡, 프로듀싱을 도맡아 음악적 방향성을 제시했습니다. &lt;strong&gt;양현석&lt;/strong&gt; (1970년생)과 &lt;strong&gt;이주노&lt;/strong&gt; (본명 이상우, 1967년생)는 당대 최고의 댄서들로, 서태지의 음악에 날개를 달아주는 화려하고 독창적인 안무를 선보였습니다. 이 세 명의 조합은 음악과 퍼포먼스가 완벽한 조화를 이루며 이전에는 볼 수 없었던 새로운 형태의 &amp;lsquo;아티스트 그룹&amp;rsquo;을 탄생시켰습니다.&lt;/p&gt;</description></item><item><title>작가 소개: 호러의 제왕, 스티븐 킹의 문학 세계</title><link>https://philipjkim.cc/posts/20250916-introduction-to-king/</link><pubDate>Tue, 16 Sep 2025 09:14:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20250916-introduction-to-king/</guid><description>&lt;p&gt;&lt;img src="https://www.usatoday.com/gcdn/authoring/authoring-images/2025/09/13/USAT/86142109007-usatsi-24487957.jpg?width=700&amp;amp;height=497&amp;amp;fit=crop&amp;amp;format=pjpg&amp;amp;auto=webp" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;스티븐 킹(Stephen King, 1947-)은 현대 공포(호러) 소설의 패러다임을 바꾼 살아있는 전설이자, 전 세계적으로 가장 많은 독자를 보유한 대중 작가입니다. 그는 평범한 일상에 깃든 공포를 탁월하게 포착하고, 인간 내면의 어두운 심리를 파고들어 단순한 장르 소설을 넘어선 문학적 성취를 이뤄냈습니다. 이 글은 &amp;lsquo;호러의 제왕&amp;rsquo; 스티븐 킹의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 뉴 저널리즘의 선구자, 톰 울프의 세계</title><link>https://philipjkim.cc/posts/20250916-introduction-to-wolfe/</link><pubDate>Tue, 16 Sep 2025 09:11:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20250916-introduction-to-wolfe/</guid><description>&lt;p&gt;&lt;img src="https://media.vanityfair.com/photos/56157786fee6babf300f46f4/4:3/w_1280,h_960,c_limit/t-tom-wolfe-radical-chic-me-decade-right-stuff-michael-lewis-the-white-stuff.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;톰 울프(Tom Wolfe, 1930-2018)는 20세기 후반 미국 저널리즘과 문학의 지형을 바꾼 혁신적인 작가입니다. 그는 &amp;lsquo;뉴 저널리즘(New Journalism)&amp;lsquo;의 기수로서, 소설적 기법을 저널리즘에 도입하여 당대 미국 사회의 문화와 인물 군상을 누구보다 생생하고 역동적으로 포착했습니다. 이 글은 톰 울프의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="울프의-생애와-작품-활동"&gt;울프의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;톰 울프의 삶은 그의 글처럼 미국 사회의 중심부를 관통하는 여정이었습니다. 그는 1930년 버지니아 주 리치먼드에서 태어나 워싱턴 앤 리 대학교를 졸업하고, 예일 대학교에서 미국학 박사 학위를 취득했습니다. 학자의 길 대신 그는 저널리스트가 되기로 결심하고, 《뉴욕 헤럴드 트리뷴》 등에서 기자로 활동하며 경력을 쌓았습니다.&lt;/p&gt;</description></item><item><title>벵골스의 지배: 신시내티 공격 '빅 4'와 챔피언십을 향한 여정</title><link>https://philipjkim.cc/posts/20250915-nfl-bengals-offense/</link><pubDate>Mon, 15 Sep 2025 14:53:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20250915-nfl-bengals-offense/</guid><description>&lt;p&gt;&lt;img src="https://i0.wp.com/clubfantasyffl.com/wp-content/uploads/2025/07/2025_A-Look-Inside_Bengals_IG.png?resize=1080%2C1080&amp;amp;ssl=1" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;신시내티 벵골스의 공격 코어들과 전술에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-현대-공격-전술의-설계자들"&gt;서론: 현대 공격 전술의 설계자들&lt;/h2&gt;
&lt;p&gt;신시내티 벵골스는 현대 NFL에서 가장 강력한 공격진의 핵을 구축했다. 이는 단순히 개별적인 재능의 집합이 아닌, 상호 보완적인 기술이 현대 공격 설계의 정수를 보여주는 4인조다. 쿼터백 조 버로우(Joe Burrow), 와이드 리시버 자마르 체이스(Ja&amp;rsquo;Marr Chase)와 티 히긴스(Tee Higgins), 그리고 러닝백 체이스 브라운(Chase Brown)은 단순한 스타 선수를 넘어, 시너지를 통해 리그를 지배하는 하나의 유기적인 유닛을 형성했다. 이 보고서는 벵골스의 역사적인 공격력이 팀의 고질적인 약점인 수비와 오펜시브 라인의 불안정성을 극복하고 궁극적으로 롬바르디 트로피를 차지할 수 있을지에 대한 핵심 질문에 답하고자 한다.&lt;/p&gt;</description></item><item><title>작가 소개: 현실의 해체자, 필립 K. 딕의 문학 세계</title><link>https://philipjkim.cc/posts/20250915-introduction-to-dick/</link><pubDate>Mon, 15 Sep 2025 13:49:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20250915-introduction-to-dick/</guid><description>&lt;p&gt;&lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSIDSAFCfjlf6r4VsR7d97FEO7l0bqqxqqDDg&amp;amp;s" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;필립 K. 딕(Philip K. Dick, 1928-1982)은 20세기 과학소설(SF) 장르에 가장 깊은 철학적 질문을 던진 작가입니다. 그는 편집증적 불안과 정교한 상상력을 바탕으로 &amp;lsquo;무엇이 현실이고 무엇이 가짜인가&amp;rsquo;라는 질문을 집요하게 탐구하며, 현대 포스트모던 문화에 지대한 영향을 미쳤습니다. 이 글은 필립 K. 딕의 혼란스러웠던 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="딕의-생애와-작품-활동"&gt;딕의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;필립 K. 딕의 삶은 그의 소설만큼이나 현실과 환상의 경계가 모호한 경험들로 채워져 있습니다. 그는 1928년 시카고에서 태어났습니다. 태어난 지 얼마 되지 않아 쌍둥이 여동생이 사망한 사건은 그의 삶과 작품에 평생에 걸친 상실감과 &amp;lsquo;유령 쌍둥이&amp;rsquo;라는 모티브를 남겼습니다.&lt;/p&gt;</description></item><item><title>TotT: 원인과 결과를 명확하게 유지하세요</title><link>https://philipjkim.cc/posts/20250912-tott-keep-cause-and-effect-clear/</link><pubDate>Fri, 12 Sep 2025 12:33:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20250912-tott-keep-cause-and-effect-clear/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2017/01/testing-on-toilet-keep-cause-and-effect.html"&gt;https://testing.googleblog.com/2017/01/testing-on-toilet-keep-cause-and-effect.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;이 테스트가 올바른지 판단할 수 있나요?&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testIncrement_existingKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;tally&lt;/code&gt; 객체가 어떻게 설정되었는지 보지 않고는 &lt;strong&gt;알아내는 것이 불가능합니다&lt;/strong&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tally&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Tally&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Before&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;setUp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;8&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key2&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 200줄 떨어져 있음&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testIncrement_existingKey&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tally&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;문제는 &lt;code&gt;key1&lt;/code&gt;의 값을 수정하는 부분이 &lt;em&gt;검증(assertion)으로부터 200줄 이상 떨어져 있다&lt;/em&gt;는 점입니다. 다시 말해, &lt;strong&gt;&amp;lsquo;원인&amp;rsquo;이 &amp;lsquo;결과&amp;rsquo;로부터 너무 멀리 숨겨져 있습니다&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>음반 소개: 이상은 - 공무도하가(公無渡河歌) (1995): 시대를 초월한 소리의 구도자, 경계를 허물다</title><link>https://philipjkim.cc/posts/20250912-album-review-gongmudohaga/</link><pubDate>Fri, 12 Sep 2025 10:55:10 +0900</pubDate><guid>https://philipjkim.cc/posts/20250912-album-review-gongmudohaga/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/JkhAL2DxPLkY638xwY9gvzHik26ctEY9dV-ErePRCQSuBcty0xfo-OQiFIFvpIf7kA6hlFJy7hZXug5dtZL32OIVL9gocnh7HC_olit9YfM3yh1DVexrrb_ReOZ7xfhaWhvjkzV3cioHLz-a-hOS9w.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1995년 11월 발매된 이상은의 6집 &lt;em&gt;공무도하가&lt;/em&gt;는 90년대 대한민국 대중음악사에서 가장 중요한 전환점이자, 가장 독창적인 예술적 성취로 평가받는 앨범입니다. 아이돌 스타에서 진정한 아티스트로 거듭나는 이상은의 치열한 자기 탐구와 음악적 실험이 담긴 이 앨범은, 동양적 정서와 서구의 모던 록 사운드를 완벽하게 결합하며 시대를 앞서간 걸작으로 기록되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="이상은-경계-없는-탐험가-아티스트-리채lee-tzsche"&gt;이상은: 경계 없는 탐험가, 아티스트 &amp;lsquo;리채(Lee-Tzsche)&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;이상은은 1988년 강변가요제에서 자작곡 &amp;ldquo;담다디&amp;quot;로 대상을 수상하며 혜성처럼 등장한 뮤지션입니다. &amp;lsquo;담다디&amp;rsquo; 신드롬을 일으키며 최고의 아이돌 스타로 떠올랐지만, 그는 상업적 성공에 안주하지 않고 끊임없이 자신의 음악 세계를 확장해 온 진정한 아티스트입니다.&lt;/p&gt;</description></item><item><title>작가 소개: 남부 고딕의 선구자, 플래너리 오코너의 세계</title><link>https://philipjkim.cc/posts/20250912-introduction-to-o-connor/</link><pubDate>Fri, 12 Sep 2025 10:42:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20250912-introduction-to-o-connor/</guid><description>&lt;p&gt;&lt;img src="https://contents.kyobobook.co.kr/bcast/2014/11/10/a5102375b2a44e238c1e859cd2475fb2.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;플래너리 오코너(Flannery O&amp;rsquo;Connor, 1925-1964)는 20세기 미국 남부 문학을 대표하는 가장 독창적이고 강렬한 목소리 중 한 명입니다. 그녀는 독실한 가톨릭 신앙을 바탕으로, 기괴하고 폭력적인 인물과 사건들을 통해 인간의 구원과 신의 은총이라는 심오한 종교적 주제를 탐구했습니다. 이 글은 플래너리 오코너의 짧지만 강렬했던 삶과 작품 세계, 그녀의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="오코너의-생애와-작품-활동"&gt;오코너의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;플래너리 오코너의 삶은 그녀의 문학처럼 신앙과 고통이라는 두 가지 축으로 이루어져 있습니다. 그녀는 1925년 미국 조지아 주 서배너의 독실한 가톨릭 집안에서 태어났습니다. 개신교가 주류인 미국 남부(&amp;lsquo;바이블 벨트&amp;rsquo;)에서 가톨릭 신자로 살아간 경험은 그녀에게 소수자의 정체성과 함께 깊은 신앙심을 심어주었습니다.&lt;/p&gt;</description></item><item><title>TotT: 무엇이 좋은 End-to-End 테스트를 만드는가?</title><link>https://philipjkim.cc/posts/20250911-tott-good-e2e-test/</link><pubDate>Thu, 11 Sep 2025 10:33:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20250911-tott-good-e2e-test/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2016/09/testing-on-toilet-what-makes-good-end.html"&gt;https://testing.googleblog.com/2016/09/testing-on-toilet-what-makes-good-end.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;End-to-end(E2E) 테스트는 시스템의 한쪽 끝에서 다른 쪽 끝까지, 그 사이의 모든 것을 블랙박스로 취급하며 전체 시스템을 테스트합니다. E2E 테스트는 시스템 전반에 걸쳐 나타나는 버그를 잡아낼 수 있습니다. 단위 테스트, 통합 테스트와 더불어 E2E 테스트는 균형 잡힌 테스트 식단의 핵심적인 부분이며, 운영 환경과 거의 유사한 상태에서 시스템의 건전성에 대한 확신을 줍니다.&lt;/p&gt;
&lt;p&gt;하지만 안타깝게도, E2E 테스트는 단위 테스트나 통합 테스트보다 느리고, 불안정하며(flaky), 유지보수 비용이 더 비쌉니다. E2E 테스트가 필요한지, 만약 그렇다면 어떻게 작성하는 것이 최선일지 신중하게 고려해야 합니다.&lt;/p&gt;</description></item><item><title>음반 소개: U2 - The Joshua Tree (1987): 미국의 신화와 현실을 관통한 록의 서사시</title><link>https://philipjkim.cc/posts/20250911-album-review-the-joshua-tree/</link><pubDate>Thu, 11 Sep 2025 10:20:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20250911-album-review-the-joshua-tree/</guid><description>&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/71nhNKvy&amp;#43;fL._UF1000,1000_QL80_.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1987년 3월 9일 발매된 U2의 다섯 번째 스튜디오 앨범 &lt;em&gt;The Joshua Tree&lt;/em&gt;는 아일랜드의 록 밴드를 세계적인 슈퍼스타의 반열에 올려놓은 기념비적인 작품입니다. 미국의 광활한 풍경과 그 안에 담긴 신화, 그리고 모순적인 현실에 대한 깊은 탐구를 담은 이 앨범은, 상업적으로 전 세계에서 2,500만 장 이상 판매되었으며, 그래미 어워드에서 &amp;lsquo;올해의 앨범&amp;rsquo;을 수상하며 80년대 록 음악의 상징으로 자리매김했습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: SF 시인, 레이 브래드버리의 문학 세계</title><link>https://philipjkim.cc/posts/20250911-introduction-to-bradbury/</link><pubDate>Thu, 11 Sep 2025 10:09:29 +0900</pubDate><guid>https://philipjkim.cc/posts/20250911-introduction-to-bradbury/</guid><description>&lt;p&gt;&lt;img src="https://media.newyorker.com/photos/590953ea6552fa0be682c8a9/master/w_2560%2Cc_limit/bradbury-diaz.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;레이 브래드버리(Ray Bradbury, 1920-2012)는 20세기 미국 문학계에서 가장 독창적이고 사랑받는 작가 중 한 명입니다. 그는 자신을 SF 작가가 아닌 &amp;lsquo;아이디어 작가&amp;rsquo;로 칭했으며, 장르의 경계를 넘어 인간의 꿈과 공포, 기술 문명에 대한 날카로운 통찰을 시적인 문체로 그려냈습니다. 이 글은 레이 브래드버리의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="브래드버리의-생애와-작품-활동"&gt;브래드버리의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;레이 브래드버리의 삶은 그의 작품만큼이나 경이로움과 상상력으로 가득 차 있습니다. 그는 1920년 미국 일리노이 주 워키건에서 태어났습니다. 그의 어린 시절은 마술과 서커스, 그리고 도서관에 대한 사랑으로 채워져 있었으며, 이는 평생 그의 작품 세계에 깊은 영감을 주었습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 전람회(Exhibition) - 2집 Exhibition 2 (1996): 대중음악의 품격을 높인 완벽주의의 산물</title><link>https://philipjkim.cc/posts/20250909-album-review-exhibition-2/</link><pubDate>Tue, 09 Sep 2025 15:57:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20250909-album-review-exhibition-2/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/3tIComi2uo0j5K7E-jFbNdJ2ZPAiH3soCVIrE9yCdAMfzH1KAEt_PZCH8ZmZ3XD0MKfSlEbFYc_mbwdq59SHpEYwWBRlWlOq7Cjel6iy0yltZBIkJqfFBR8Aq4juM5DCKT1q55qV8jmWEDAE21Psog.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1996년 4월 발매된 전람회의 2집 &lt;em&gt;Exhibition 2&lt;/em&gt;는 90년대 대한민국 대중음악이 도달한 가장 높은 수준의 음악적 성취를 보여주는 걸작입니다. 클래식과 재즈, 팝을 넘나드는 김동률의 압도적인 작곡 및 편곡 능력과 성숙해진 그의 보컬이 결합된 이 앨범은, 상업적 성공과 비평적 찬사를 동시에 획득하며 한국형 팝 발라드의 새로운 기준을 제시한 기념비적인 작품으로 평가받습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="전람회-90년대-고품격-팝의-대명사-김동률과-서동욱"&gt;전람회: 90년대 &amp;lsquo;고품격 팝&amp;rsquo;의 대명사, 김동률과 서동욱&lt;/h2&gt;
&lt;p&gt;전람회는 1993년 연세대학교 재학 중이던 김동률과 서동욱이 결성한 남성 듀오입니다. 이들은 같은 해 MBC 대학가요제에서 자작곡 &amp;ldquo;꿈속에서&amp;quot;로 대상을 수상하며 화려하게 데뷔했습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 케니 버렐(Kenny Burrell) - Midnight Blue (1963): 블루스의 정수를 담은 재즈 기타의 교과서</title><link>https://philipjkim.cc/posts/20250909-album-review-midnight-blue/</link><pubDate>Tue, 09 Sep 2025 09:21:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20250909-album-review-midnight-blue/</guid><description>&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/81GIA90MjCL._UF1000,1000_QL80_.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1963년 블루노트 레코드를 통해 발매된 케니 버렐의 &lt;em&gt;Midnight Blue&lt;/em&gt;는 재즈 역사상 가장 순수하고 깊이 있는 블루스 기타 앨범 중 하나로 평가받는 작품입니다. 화려한 기교나 복잡한 화성보다는, 늦은 밤의 클럽에서 펼쳐지는 진솔한 잼 세션의 분위기를 고스란히 담아낸 이 앨범은, 블루스가 재즈의 근원임을 증명하며 시대를 초월한 사운드로 오늘날까지 수많은 리스너와 뮤지션들에게 영감을 주고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="케니-버렐-블루스의-영혼을-지닌-재즈-기타의-거장"&gt;케니 버렐: 블루스의 영혼을 지닌 재즈 기타의 거장&lt;/h2&gt;
&lt;p&gt;케니 버렐(1931~)은 우아한 톤과 스윙감, 그리고 무엇보다 블루스에 깊이 뿌리내린 연주로 재즈 기타의 역사를 대표하는 거장입니다. 디트로이트의 풍부한 재즈 씬에서 성장한 그는 찰리 크리스천, 장고 라인하르트와 같은 재즈 기타리스트는 물론, 티본 워커, 머디 워터스와 같은 블루스 뮤지션들에게서도 깊은 영향을 받았습니다.&lt;/p&gt;</description></item><item><title>작가 소개: 은둔의 작가, J. D. 샐린저의 문학 세계</title><link>https://philipjkim.cc/posts/20250909-introduction-to-salinger/</link><pubDate>Tue, 09 Sep 2025 09:12:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20250909-introduction-to-salinger/</guid><description>&lt;p&gt;&lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ0rbhGhUvkFaAg96BAB6VWK65rSjKyqNHDcA&amp;amp;s" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;제롬 데이비드 샐린저(Jerome David Salinger, 1919-2010)는 단 한 편의 장편 소설 『호밀밭의 파수꾼』으로 20세기 미국 문학에 거대한 족적을 남긴 작가입니다. 그는 전후 세대의 청소년들이 겪는 불안과 소외를 독창적인 목소리로 그려내며 하나의 문화적 현상이 되었으나, 명성의 정점에서 스스로를 세상과 격리시킨 은둔의 작가로도 유명합니다. 이 글은 J. D. 샐린저의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>번역글: 언어 모델이 '환각'을 일으키는 이유와 그 해결 방안</title><link>https://philipjkim.cc/posts/20250909-why-language-models-hallucinate/</link><pubDate>Tue, 09 Sep 2025 09:03:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20250909-why-language-models-hallucinate/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://openai.com/index/why-language-models-hallucinate/"&gt;https://openai.com/index/why-language-models-hallucinate/&lt;/a&gt; (translated by Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;대규모 언어 모델(LLM)은 방대한 양의 텍스트 데이터로 학습하여 다음에 올 단어를 예측하도록 훈련됩니다. 하지만 이 과정은 모델이 사실과 다른 내용을 그럴듯하게 만들어내는, 이른바 &lt;strong&gt;&amp;lsquo;환각(hallucination)&amp;rsquo;&lt;/strong&gt; 현상을 일으키기도 합니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 환각이 왜 발생하는지 기술적으로 설명하고, 이 문제를 해결하기 위한 저희의 접근 방식을 공유하고자 합니다.&lt;/p&gt;
&lt;h2 id="환각은-왜-일어나는가"&gt;환각은 왜 일어나는가?&lt;/h2&gt;
&lt;p&gt;환각은 모델의 근본적인 작동 방식에서 비롯됩니다. 모델은 &amp;lsquo;진실&amp;rsquo;을 이해하는 것이 아니라, 훈련 데이터에 나타난 &lt;strong&gt;통계적 패턴&lt;/strong&gt;을 학습할 뿐입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. 훈련 데이터의 한계&lt;/strong&gt;
모델은 인터넷, 책 등에서 수집한 방대한 텍스트로 학습합니다. 이 데이터에는 잘못된 정보, 편견, 모순된 내용이 포함되어 있을 수밖에 없습니다. 모델은 이 모든 것을 사실 여부와 관계없이 패턴으로 학습하기 때문에, 부정확한 정보를 사실인 것처럼 생성할 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 솔직히 말해, 아이를 낳은 것을 후회하나요?</title><link>https://philipjkim.cc/posts/20250909-did-you-regret-having-children/</link><pubDate>Tue, 09 Sep 2025 08:52:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20250909-did-you-regret-having-children/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 &lt;a href="https://www.quora.com/No-lying-did-you-regret-having-children"&gt;Quora 에 있는 자녀 관련 질문과 답변&lt;/a&gt;을 Gemini 를 통해 번역한 것입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="question"&gt;Question&lt;/h3&gt;
&lt;p&gt;솔직히 말해, 아이를 낳은 것을 후회하나요?&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="answer-1-angie-martin"&gt;Answer 1 (Angie Martin)&lt;/h3&gt;
&lt;p&gt;저는 네 명의 아이를 낳은 것을 100%, 아주 깊이 후회합니다. 섣불리 비난하기 전에, 제 이야기를 먼저 들어주세요.&lt;/p&gt;
&lt;p&gt;저는 내향적이고 성실한 사람입니다. 어머니는 제가 태어났을 때 &amp;lsquo;엔젤(천사)&amp;lsquo;이라는 이름을 지어주셨고, 그 이름은 제가 평생 완벽한 아이가 되기 위해 애쓰게 만들었죠.&lt;/p&gt;
&lt;p&gt;슬프게도, 제가 스스로를 몰아붙인 것만큼이나 주변 사람들은 저를 더 힘들게 했습니다.&lt;/p&gt;</description></item><item><title>번역글: LLM과 소프트웨어 개발에 대한 몇 가지 생각</title><link>https://philipjkim.cc/posts/20250908-some-thoughts-on-llms-and-software-development/</link><pubDate>Mon, 08 Sep 2025 14:10:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20250908-some-thoughts-on-llms-and-software-development/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://martinfowler.com/articles/202508-ai-thoughts.html"&gt;https://martinfowler.com/articles/202508-ai-thoughts.html&lt;/a&gt; (translated by Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;저는 몇 주간 이 사이트 관리를 잠시 떠나려 합니다 (일부 휴가, 일부 업무). 일상적인 루틴에서 벗어나 몇 주를 보낼 생각을 하니, LLM과 AI의 현재 상태에 대한 산발적인 생각들을 나누고 싶은 충동을 느낍니다.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;AI가 소프트웨어 개발에 어떤 영향을 미치는지에 대한 초기 설문조사들을 몇 가지 봤습니다. 과연 개발 속도를 높여주고 있는지, 코드 품질을 향상시키는지 아니면 망치고 있는지에 대한 내용들이죠. 이런 설문조사들의 큰 문제점 중 하나는 사람들이 LLM을 &lt;strong&gt;어떻게&lt;/strong&gt; 사용하고 있는지 고려하지 않는다는 점입니다. 제가 아는 바로는 LLM 사용의 대다수가 코파일럿(Co-pilot)을 이용하는 것과 같은 단순한 자동 완성에 그치고 있습니다. 하지만 LLM으로부터 가장 큰 가치를 얻는다고 말하는 사람들은 자동 완성이 그다지 유용하지 않다고 생각하며, LLM이 소스 코드 파일을 직접 읽고 편집하여 작업을 수행하는 방식을 선호합니다. LLM을 사용하는 다양한 워크플로우를 무시하는 설문조사는 사람들을 잘못된 길로 이끌 수 있는 데이터를 만들어낼까 봐 걱정됩니다.
(또 다른 복잡한 문제는 모델마다 기능이 다르다는 점입니다.)&lt;/p&gt;</description></item><item><title>팁: 모두가 저지르는 14가지 바이크패킹 실수 (그리고 피하는 방법)</title><link>https://philipjkim.cc/posts/20250908-14-bikepacking-mistakes/</link><pubDate>Mon, 08 Sep 2025 13:08:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20250908-14-bikepacking-mistakes/</guid><description>&lt;p&gt;우리 모두는 실수를 합니다. 노련한 사이클리스트부터 처음 도전하는 사람까지, 누구에게나 일어나는 일이죠. 수많은 변수가 존재하는 이런 종류의 모험에서는 당연한 일입니다. 최신 영상에서는 우리 BIKEPACKING.com 팀원 다수가 한 번쯤 저질렀던 14가지 실수를 공유하여 여러분이 미래에 같은 실수를 피할 수 있도록 돕고자 합니다. 아래 영상을 시청하시고, 관련 링크와 자료가 포함된 글 버전을 확인해 보세요.&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/I9Mes04hrxY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;

&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://bikepacking.com/plan/14-bikepacking-mistakes/"&gt;https://bikepacking.com/plan/14-bikepacking-mistakes/&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>번역글: Rust 의 목적성에 대한 질문과 답변</title><link>https://philipjkim.cc/posts/20250908-quora-is-rust-new-ruby/</link><pubDate>Mon, 08 Sep 2025 11:28:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20250908-quora-is-rust-new-ruby/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 &lt;a href="https://www.quora.com/Rust-is-not-so-much-about-memory-safety-as-it-is-about-being-able-to-hire-cheap-juniors-in-hope-they-can-now-do-the-job-of-experienced-seniors-by-using-Rust-Am-I-wrong-Is-Rust-the-new-Ruby"&gt;Quora 에 Rust 관련 올라온 질문과 답변&lt;/a&gt;을 Gemini 를 통해 번역한 것입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="q-rust는-메모리-안전성보다는-rust를-사용해-경력-있는-시니어-개발자들의-일을-값싼-주니어들이-해낼-수-있을-거라는-희망을-품고-그들을-고용하는-것과-더-관련이-있는-것-아닌가요-제가-틀렸나요-rust가-새로운-ruby인가요"&gt;Q: Rust는 &amp;lsquo;메모리 안전성&amp;rsquo;보다는 Rust를 사용해 경력 있는 시니어 개발자들의 일을 값싼 주니어들이 해낼 수 있을 거라는 희망을 품고 그들을 고용하는 것과 더 관련이 있는 것 아닌가요? 제가 틀렸나요? Rust가 새로운 Ruby인가요?&lt;/h3&gt;
&lt;hr&gt;
&lt;h3 id="a1-matt-laine의-답변"&gt;A1 (Matt Laine의 답변):&lt;/h3&gt;
&lt;p&gt;어떤 프로그래밍 언어의 기능이든 홍보되는 데는 이유가 있습니다. 어떤 기능들은 언어 설계자가 멋지다고 생각해서 홍보되죠. 또 다른 기능들은 개발 속도를 높여준다거나, 특정 관리자들이 골치 아프다고 여기는 종류의 오류들을 제거해준다거나, 비즈니스에 도움이 되는 어떤 지표를 향상시켜 준다는 약속을 하는 것으로 해석될 수 있기 때문에 홍보됩니다. 또 어떤 기능들은 그저 과대광고를 철석같이 믿고 다른 사람들도 그렇게 해주기를 바라는 &amp;lsquo;언어 전도사들&amp;rsquo;에 의해 홍보되기도 합니다.&lt;/p&gt;</description></item><item><title>음반 소개: 이승환 - Human (1995): 90년대 대중음악의 정점을 찍은 블록버스터 앨범</title><link>https://philipjkim.cc/posts/20250908-album-review-human/</link><pubDate>Mon, 08 Sep 2025 11:11:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20250908-album-review-human/</guid><description>&lt;p&gt;&lt;img src="https://i.namu.wiki/i/wZtkbEOpD6dDP-Ck4ZGF-4AmOyxPYAig6iI7fHuJQg6caFXMbxTpZR89wlxB3lcOAQTsRkTpbYxgl2ToYyXtUuYhsdOVrp_rqTwBoFAUh_om9bdBMQRoVZRSVXaMssbMI24_dnH2OyM19ElBIiH5Qw.webp" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1995년 6월 발매된 이승환의 4집 정규 앨범 &lt;em&gt;Human&lt;/em&gt;은 90년대 대한민국 대중음악의 기술적, 예술적 성취가 정점에 달했음을 보여주는 기념비적인 작품입니다. 당대 최고의 작곡가, 연주자들과 함께 미국 로스앤젤레스에서 완성된 이 앨범은 압도적인 스케일의 사운드와 인간의 희로애락을 깊이 있게 탐구한 주제 의식을 통해, 상업적 성공과 비평적 찬사를 동시에 거머쥐며 한국 대중음악사에 길이 남을 명반으로 기록되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="이승환-끊임없이-진화하는-라이브의-황제"&gt;이승환: 끊임없이 진화하는 &amp;lsquo;라이브의 황제&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;이승환은 1989년 데뷔 이래 30년 넘게 최정상의 자리를 지키고 있는 대한민국 대중음악의 살아있는 전설입니다. 그는 단순히 노래를 잘하는 가수를 넘어, 자신만의 음악 세계를 구축한 완벽주의자 뮤지션이자, 공연 문화를 혁신한 선구적인 공연가입니다.&lt;/p&gt;</description></item><item><title>작가 소개: 제임스 본드의 창조자, 이언 플레밍의 세계</title><link>https://philipjkim.cc/posts/20250908-introduction-to-fleming/</link><pubDate>Mon, 08 Sep 2025 10:04:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20250908-introduction-to-fleming/</guid><description>&lt;p&gt;&lt;img src="https://i.guim.co.uk/img/media/cd00797a8739324ecb5a27d25cf95f2ea5bf31d5/0_397_3107_1864/master/3107.jpg?width=1200&amp;amp;height=900&amp;amp;quality=85&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;s=c43ff714ae7a6a0e51eb1aaaeec2c4ff" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;이언 플레밍(Ian Fleming, 1908-1964)은 20세기 대중문화의 가장 상징적인 아이콘 중 하나인 &amp;lsquo;제임스 본드(James Bond)&amp;lsquo;를 창조한 영국의 소설가입니다. 그는 자신의 경험과 상상력을 바탕으로 현대 스파이 스릴러의 원형을 제시했으며, 그의 작품은 오늘날까지 영화, 게임 등 다양한 매체로 끊임없이 재창조되고 있습니다. 이 글은 이언 플레밍의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="플레밍의-생애와-작품-활동"&gt;플레밍의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;이언 플레밍의 삶은 그가 창조한 제임스 본드 캐릭터에 많은 영감을 주었습니다. 그는 1908년 영국의 유복하고 영향력 있는 정치 가문에서 태어나 명문 이튼 칼리지를 졸업했습니다. 젊은 시절 그는 로이터 통신사의 기자로 활동하며 모스크바에 파견되기도 했고, 이후에는 주식 중개인으로 일하는 등 다양한 경력을 쌓았습니다.&lt;/p&gt;</description></item><item><title>포커(텍사스 홀덤) 초보자가 단계별로 Aggressive 유형으로 진화하기 위한 방법</title><link>https://philipjkim.cc/posts/20250905-from-lp-to-lag/</link><pubDate>Fri, 05 Sep 2025 15:46:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20250905-from-lp-to-lag/</guid><description>&lt;p&gt;&lt;em&gt;포커 플레이 유형 변화를 위한 훈련 방법 요청에 대한 Gemini 2.5 pro 의 응답입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;텍사스 홀덤에서 초보자들이 가장 흔하게 겪는 문제이자 가장 빠르게 칩을 잃는 원인은 &amp;lsquo;루즈-패시브(Loose-Passive)&amp;rsquo; 플레이 스타일입니다. 하지만 이 단계를 벗어나는 과정에서 많은 플레이어들은 또 다른 함정인 &amp;lsquo;타이트-패시브(Tight-Passive)&amp;rsquo; 스타일에 머무르게 됩니다. 이는 칩을 빠르게 잃지는 않지만, 결코 돈을 딸 수도 없는 정체된 상태를 의미합니다.&lt;/p&gt;
&lt;p&gt;이 글의 목적은 루즈-패시브 성향의 초보자가 장기적으로 승리하는 플레이어로 진화하기 위한 체계적인 4단계 훈련 방법론(&lt;strong&gt;LP → TP → TAG → LAG&lt;/strong&gt;)을 제시하는 것입니다. 각 단계의 특징과 문제점을 명확히 진단하고, 다음 단계로 넘어가기 위한 구체적인 훈련법과 실제 게임 예시를 통해 이론을 실전에 적용하는 방법을 상세히 다룰 것입니다.&lt;/p&gt;</description></item><item><title>텍사스 홀덤 학습 로드맵: 제로부터 영웅까지</title><link>https://philipjkim.cc/posts/20250905-poker-learning-roadmap/</link><pubDate>Fri, 05 Sep 2025 14:44:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20250905-poker-learning-roadmap/</guid><description>&lt;p&gt;&lt;img src="https://roarcdn.fitting-solutions.at/mgm/poker/en/blog/wp-content/uploads/2023/12/21115217/Body-2-ROAR-BetMGM-Dec116-Poker.jpg?strip=all&amp;amp;lossy=1&amp;amp;ssl=1&amp;amp;fit=1080%2C610" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;포커 학습 로드맵 요청에 대한 Gemini 2.5 pro 의 응답입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-초급-beginner-기본-규칙과-생존-전략"&gt;👑 초급 (Beginner): 기본 규칙과 생존 전략&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;목표:&lt;/strong&gt; 게임의 규칙을 완벽히 이해하고, 큰 실수 없이 돈을 잃지 않는 단단한 플레이의 기반을 다진다. &amp;lsquo;내 카드&amp;rsquo;가 얼마나 강한지에만 집중하는 단계.&lt;/p&gt;
&lt;h3 id="step-1-게임의-법칙과-용어-완벽-숙지"&gt;&lt;strong&gt;Step 1: 게임의 법칙과 용어 완벽 숙지&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;핸드 족보 (Hand Rankings):&lt;/strong&gt; 로열 플러시부터 하이 카드까지 순서를 즉각적으로 알 수 있도록 완벽하게 암기해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;게임 진행 순서:&lt;/strong&gt; 프리플랍(Pre-flop), 플랍(Flop), 턴(Turn), 리버(River) 각 베팅 라운드의 진행 방식을 이해합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;기본 용어:&lt;/strong&gt; 버튼(Button), 블라인드(Blinds), 팟(Pot), 벳(Bet), 콜(Call), 레이즈(Raise), 폴드(Fold), 첵(Check) 등의 용어에 익숙해져야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-2-포지션position의-절대적인-중요성-이해"&gt;&lt;strong&gt;Step 2: 포지션(Position)의 절대적인 중요성 이해&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;개념:&lt;/strong&gt; 테이블에서 나의 앉은 위치가 왜 가장 중요한 정보인지 배웁니다. 나중에 액션을 할수록(Late Position) 상대방의 정보를 더 많이 얻어 유리하다는 것을 이해하는 것이 초급 단계의 가장 큰 성과입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;학습 내용:&lt;/strong&gt; 얼리 포지션(EP), 미들 포지션(MP), 레이트 포지션(LP), 블라인드 포지션의 유불리를 배우고, 좋은 포지션에서 더 넓은 범위의 핸드로 플레이해야 하는 이유를 학습합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-3-프리플랍-핸드-선택-pre-flop-hand-selection"&gt;&lt;strong&gt;Step 3: 프리플랍 핸드 선택 (Pre-flop Hand Selection)&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;개념:&lt;/strong&gt; 모든 핸드로 게임에 참여하는 것이 왜 나쁜지를 깨닫고, 좋은 스타팅 핸드만 골라서 플레이하는 &amp;lsquo;타이트한(Tight)&amp;rsquo; 전략을 배웁니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;학습 내용:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;스타팅 핸드 차트:&lt;/strong&gt; 포지션별로 어떤 핸드로 플레이에 참여하고, 어떤 핸드로 폴드해야 하는지 정리된 차트를 보고 따라 하며 감을 익힙니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PFR (Pre-Flop Raise):&lt;/strong&gt; 내가 판에 처음 들어갈 때는 콜만으로 따라 들어가는 &amp;lsquo;림프(Limp)&amp;rsquo; 대신, 주도권을 잡기 위해 항상 레이즈하는 습관을 들입니다. 이것이 &lt;strong&gt;PFR&lt;/strong&gt;의 기본 개념입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="step-4-베팅의-기본-원리-왜-베팅하는가"&gt;&lt;strong&gt;Step 4: 베팅의 기본 원리: 왜 베팅하는가?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;개념:&lt;/strong&gt; 베팅에는 두 가지 목적밖에 없다는 것을 배웁니다.
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;밸류 벳 (Value Bet):&lt;/strong&gt; 나보다 약한 핸드에게 돈을 받아내기 위해.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;블러프 (Bluff):&lt;/strong&gt; 나보다 강한 핸드를 포기시키기 위해.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;학습 내용:&lt;/strong&gt; 초급 단계에서는 무리한 블러핑을 시도하기보다, 내가 강한 핸드를 가졌을 때 확실하게 밸류 벳을 해서 팟을 키우는 연습에 집중합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="-중급-intermediate-수학적-접근과-상대방-읽기"&gt;🏆 중급 (Intermediate): 수학적 접근과 상대방 읽기&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;목표:&lt;/strong&gt; &amp;lsquo;내 카드&amp;rsquo;만 보던 시야에서 벗어나 &amp;lsquo;상대방의 카드&amp;rsquo;와 &amp;lsquo;팟의 크기&amp;rsquo;를 함께 고려하는 수학적, 전략적 사고를 시작한다. 이제 포커는 운이 아닌 실력의 게임이라는 것을 깨닫는 단계.&lt;/p&gt;</description></item><item><title>개발 팁: 읽기 쉽고 확장 가능한 if 구문 리팩토링 가이드</title><link>https://philipjkim.cc/posts/20250905-how-to-replace-if-statements/</link><pubDate>Fri, 05 Sep 2025 13:02:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20250905-how-to-replace-if-statements/</guid><description>&lt;p&gt;&lt;img src="https://philipjkim.cc/img/20250905_refactoring_if.png" alt="img"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;프로그래밍에서 if 를 사용하는 조건부 로직을 대체할 수 있는 방법들에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;모든 예제 코드는 Go 로 작성되었으나, 다른 프로그래밍 언어에 공통적으로 적용할 수 있는 내용들입니다.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="서론-조건문의-확산과-기술-부채의-축적"&gt;서론: 조건문의 확산과 기술 부채의 축적&lt;/h2&gt;
&lt;p&gt;소프트웨어 개발에서 &lt;code&gt;if-else&lt;/code&gt; 문은 제어 흐름을 구성하는 가장 기본적인 도구 중 하나입니다. 그러나 이 근본적인 구조는 종종 오용되어, 시간이 지남에 따라 시스템의 건강을 심각하게 해치는 주범이 되기도 합니다. 복잡하게 중첩되거나 끝없이 이어지는 &lt;code&gt;if-else&lt;/code&gt; 체인은 가독성을 저해하고 유지보수를 악몽으로 만들며, 이는 소프트웨어 공학에서 &amp;ldquo;코드 스멜(code smell)&amp;ldquo;이라 불리는 명백한 위험 신호입니다. [1, 2, 3]&lt;/p&gt;</description></item><item><title>뮤지션 소개: 타워 오브 파워(Tower of Power): 펑크(Funk)의 교과서를 쓴 그루브의 건축가들</title><link>https://philipjkim.cc/posts/20250905-introduction-to-tower-of-power/</link><pubDate>Fri, 05 Sep 2025 10:25:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20250905-introduction-to-tower-of-power/</guid><description>&lt;p&gt;&lt;img src="https://www.thefactorystl.com/wp-content/uploads/TowerOfPower-750x450-1.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1960년대 후반 캘리포니아 오클랜드에서 결성된 타워 오브 파워(Tower of Power)는 단순한 펑크(Funk) 밴드를 넘어, 하나의 음악적 기관(Institution)으로 평가받는 전설적인 그룹입니다. 50년이 넘는 시간 동안 이들이 구축해 온 강력한 브라스 섹션과 독보적인 리듬 섹션의 조합은 수많은 뮤지션들에게 영감을 주었으며, 특히 베이시스트 프란시스 로코 프레스티아와 드러머 데이비드 가리발디가 만들어낸 그루브는 펑크 음악의 교과서로 남아있습니다. 본 포스트에서는 이 위대한 밴드의 음악 세계를 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 20세기의 양심, 조지 오웰의 문학 세계</title><link>https://philipjkim.cc/posts/20250905-introduction-to-orwell/</link><pubDate>Fri, 05 Sep 2025 10:10:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250905-introduction-to-orwell/</guid><description>&lt;p&gt;&lt;img src="https://insidestory.org.au/wp-content/uploads/orwell_tea.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;조지 오웰(George Orwell, 1903-1950)은 20세기 가장 중요한 작가 중 한 명이자, 전체주의의 위험성을 날카롭게 경고한 시대를 앞서간 예언자입니다. 그는 명료하고 정직한 문체로 당대의 정치적 위선을 고발하고, 인간의 자유와 존엄이라는 보편적 가치를 옹호했습니다. 이 글은 조지 오웰의 치열했던 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="오웰의-생애와-작품-활동"&gt;오웰의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;조지 오웰의 본명은 에릭 아서 블레어(Eric Arthur Blair)입니다. 그는 1903년 영국령 인도에서 태어나 영국의 명문 이튼 칼리지에서 교육받았으나, 계급 사회에 대한 반감으로 대학 진학을 포기하고 버마(현 미얀마)에서 제국 경찰로 근무했습니다. 이때의 경험은 그에게 제국주의의 폭력성과 모순을 절감하게 했고, 이는 훗날 그의 작품 세계에 깊은 영향을 미쳤습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 테드 그린(Ted Greene) - Solo Guitar (1977): 기타 한 대로 구현한 오케스트라</title><link>https://philipjkim.cc/posts/20250903-album-review-solo-guitar/</link><pubDate>Wed, 03 Sep 2025 09:35:06 +0900</pubDate><guid>https://philipjkim.cc/posts/20250903-album-review-solo-guitar/</guid><description>&lt;p&gt;&lt;img src="https://f4.bcbits.com/img/a0625898306_16.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1977년 발매된 테드 그린의 &lt;em&gt;Solo Guitar&lt;/em&gt;는 화려한 스포트라이트나 상업적 성공과는 거리가 먼, 조용하지만 지극히 심오한 울림을 남긴 앨범입니다. 연주자보다 교육자로 더 유명했던 은둔의 거장이 남긴 유일한 정규 솔로 앨범인 이 작품은, 단 한 대의 기타로 어디까지 풍성하고 아름다운 화성을 만들어낼 수 있는지 보여준 기념비적인 기록입니다. 본 포스트에서는 기타라는 악기의 가능성을 재정의한 이 앨범을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 단 한 권의 신화, 마거릿 미첼의 문학 세계</title><link>https://philipjkim.cc/posts/20250903-introduction-to-mitchell/</link><pubDate>Wed, 03 Sep 2025 09:28:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20250903-introduction-to-mitchell/</guid><description>&lt;p&gt;&lt;img src="https://cdn.britannica.com/13/153113-050-24BD3BAD/Margaret-Mitchell-1938.jpg?w=400&amp;amp;h=225&amp;amp;c=crop" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;마거릿 미첼(Margaret Mitchell, 1900-1949)은 단 한 편의 소설 『바람과 함께 사라지다』로 미국 문학사에 지워지지 않는 족적을 남긴 작가입니다. 그녀는 미국 남부의 격동적인 역사를 배경으로, 강인한 여성의 생존과 사랑을 그려내며 전 세계 독자들의 마음을 사로잡았습니다. 이 글은 마거릿 미첼의 생애와 그녀의 유일한 작품이 지닌 특징, 그리고 그 문학적 유산을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="미첼의-생애와-작품-활동"&gt;미첼의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;마거릿 미첼의 삶은 그녀의 소설처럼 미국 남부, 특히 조지아 주 애틀랜타와 깊이 연결되어 있습니다. 그녀는 1900년, 남북전쟁에 참전했던 외할아버지를 둔 유서 깊은 남부 가문에서 태어났습니다. 어린 시절부터 어머니와 친척들로부터 남북전쟁 당시의 생생한 이야기를 들으며 자란 경험은 훗날 그녀의 유일한 작품에 대한 풍부한 자양분이 되었습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 패닉(Panic) - 밑 (1996): 주류 음악계를 향한 가장 기괴하고 아름다운 반기</title><link>https://philipjkim.cc/posts/20250902-album-review-meet/</link><pubDate>Tue, 02 Sep 2025 13:58:19 +0900</pubDate><guid>https://philipjkim.cc/posts/20250902-album-review-meet/</guid><description>&lt;p&gt;&lt;img src="https://m.pinkmusic.co.kr/web/product/big/202103/c1cb61dcfaca5567b5ca88060a994340.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1996년 9월 발매된 패닉의 2집 &lt;em&gt;밑&lt;/em&gt;은 90년대 대한민국 대중음악사에 기록된 가장 충격적이고 전위적인 걸작 중 하나입니다. 1집의 대히트곡 &amp;ldquo;달팽이&amp;quot;가 만들어낸 서정적인 이미지에 대한 정면 반박이자, 당대 주류 음악계에 대한 통렬한 야유였던 이 앨범은, 사회의 어둡고 기괴한 이면을 파고드는 독창적인 콘셉트와 실험적인 사운드로 전무후무한 예술적 성취를 이루어냈습니다. 본 포스트에서는 이 문제적 앨범을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="패닉panic-90년대의-이단아-이적과-김진표"&gt;패닉(Panic): 90년대의 이단아, 이적과 김진표&lt;/h2&gt;
&lt;p&gt;패닉은 1995년 결성된 남성 듀오로, 작사, 작곡, 노래를 책임지는 이적과 랩을 맡은 김진표로 구성되었습니다. 이들은 데뷔와 동시에 주류 음악계의 문법을 뒤흔든 이단아였습니다.&lt;/p&gt;</description></item><item><title>작가 소개: 하드보일드 문체의 거장, 어니스트 헤밍웨이의 세계</title><link>https://philipjkim.cc/posts/20250902-introduction-to-hemingway/</link><pubDate>Tue, 02 Sep 2025 13:33:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20250902-introduction-to-hemingway/</guid><description>&lt;p&gt;&lt;img src="https://d3i6fh83elv35t.cloudfront.net/static/2018/08/ernest_hemingway-1024x820.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;어니스트 헤밍웨이(Ernest Hemingway, 1899-1961)는 20세기 미국 문학을 상징하는 가장 영향력 있는 작가 중 한 명이자, 간결하고 힘 있는 &amp;lsquo;하드보일드(Hard-boiled)&amp;rsquo; 문체의 대가입니다. 그는 전쟁과 허무주의 속에서 인간의 존엄을 지키려는 인물들을 통해 &amp;lsquo;상실의 시대(Lost Generation)&amp;lsquo;의 정신을 그려냈습니다. 이 글은 헤밍웨이의 역동적인 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="헤밍웨이의-생애와-작품-활동"&gt;헤밍웨이의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;헤밍웨이의 삶은 그의 작품만큼이나 모험과 열정, 그리고 비극으로 가득 차 있습니다. 그는 1899년 미국 일리노이 주 오크파크에서 태어나 어린 시절부터 낚시와 사냥 등 야외 활동을 즐겼습니다. 고등학교 졸업 후에는 기자가 되어 간결하고 객관적인 글쓰기 스타일의 기초를 닦았습니다.&lt;/p&gt;</description></item><item><title>깊은 모듈 대 작은 함수: 오스터하우트와 마틴의 소프트웨어 설계 철학 및 커뮤니티 수용에 대한 비교 분석</title><link>https://philipjkim.cc/posts/20250901-ousterhout-vs-martin/</link><pubDate>Mon, 01 Sep 2025 15:49:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20250901-ousterhout-vs-martin/</guid><description>&lt;p&gt;본 연구 보고서는 오스터하우트와 마틴이 제시하는 두 가지 상이한 소프트웨어 설계 철학을 심층적으로 비교 분석하는 것을 목표로 한다. 두 철학은 단순히 기법의 차이를 넘어, 문제의 정의 자체에서부터 근본적인 시각차를 드러낸다. 오스터하우트는 시스템적 &lt;strong&gt;복잡성&lt;/strong&gt;을 주된 적으로 간주하며, 이를 인지 부하(cognitive load)와 변경 증폭(change amplification)이라는 구체적인 지표로 측정한다.[1] 반면, 마틴은 코드의 지역적 &lt;strong&gt;불명확성&lt;/strong&gt;을 가장 경계해야 할 대상으로 보며, 이를 가독성(readability)과 이해 용이성(ease of comprehension)으로 평가한다.[2, 3]&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ousterhout 와 Martin 의 소프트웨어 설계 철학의 공통점, 차이점 및 충돌 부분에 대한 여러 의견과 관점들에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: Herbie Hancock - Head Hunters (1973): 재즈-펑크의 시대를 연 혁명적 그루브</title><link>https://philipjkim.cc/posts/20250901-album-review-head-hunters/</link><pubDate>Mon, 01 Sep 2025 13:12:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20250901-album-review-head-hunters/</guid><description>&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/en/5/54/Herbie-Hancock-Head-Hunters.png" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1973년 10월 발매된 허비 행콕의 12번째 스튜디오 앨범 &lt;em&gt;Head Hunters&lt;/em&gt; 는 재즈의 역사에서 가장 중요한 변곡점 중 하나로 평가받는 작품입니다. 이전의 아방가르드하고 난해했던 &amp;lsquo;므완디시(Mwandishi)&amp;rsquo; 밴드 시기를 뒤로하고, 슬라이 앤 더 패밀리 스톤(Sly and the Family Stone), 제임스 브라운(James Brown) 등 당대의 펑크(Funk)와 R&amp;amp;B 사운드를 전면적으로 수용한 이 앨범은, 재즈에 대한 대중의 인식을 완전히 바꾸어 놓았습니다. 본 포스트에서는 재즈-펑크라는 새로운 장르의 탄생을 알린 이 기념비적인 앨범을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: 윤종신 - 5집 愚 (1996): '어리석음'을 예술로 승화시킨 명반</title><link>https://philipjkim.cc/posts/20250901-album-review-woo/</link><pubDate>Mon, 01 Sep 2025 10:46:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20250901-album-review-woo/</guid><description>&lt;p&gt;&lt;img src="https://www.kpop2gether.com/shopimages/912enter/0050030009012.jpg?1742870439" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1996년 4월 발매된 윤종신의 5집 &lt;em&gt;愚(우)&lt;/em&gt; 는 90년대 한국 대중음악사에서 중요한 전환점을 마련한 명반입니다. 한 편의 영화처럼 사랑의 시작부터 끝까지 완전한 감정적 여정을 경험하게 만드는 이 앨범은 당시의 전형적인 발라드 문법에서 벗어나 새로운 감수성의 시대를 열었습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="윤종신-일상을-노래하는-음유시인"&gt;윤종신: 일상을 노래하는 음유시인&lt;/h2&gt;
&lt;p&gt;윤종신은 1990년 그룹 015B의 객원 보컬로 데뷔한 이래, 싱어송라이터, 프로듀서, 방송인으로 30년 넘게 한국 대중문화의 중심에서 활동해 온 아티스트입니다.&lt;/p&gt;</description></item><item><title>작가 소개: 미국 남부 문학의 거장, 윌리엄 포크너의 세계</title><link>https://philipjkim.cc/posts/20250901-introduction-to-faulkner/</link><pubDate>Mon, 01 Sep 2025 10:40:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20250901-introduction-to-faulkner/</guid><description>&lt;p&gt;&lt;img src="https://extendedstudies.ucsd.edu/getmedia/46358e9b-3401-40c1-bb4e-95c1563e0439/faulkner.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;윌리엄 포크너(William Faulkner, 1897-1962)는 20세기 미국 문학을 대표하는 가장 혁신적이고 위대한 작가 중 한 명이자, 미국 남부의 역사와 신화를 자신만의 독창적인 문학 세계로 창조한 거장입니다. 그는 의식의 흐름, 다중 시점, 비선형적 서사 등 과감한 실험을 통해 인간 내면의 복잡성과 미국 남부가 짊어진 역사의 무게를 탐구했습니다. 이 글은 포크너의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: G3: Live in Concert (1996): 세 락 기타 거장들의 교감</title><link>https://philipjkim.cc/posts/20250829-album-review-g3-live-in-concert/</link><pubDate>Fri, 29 Aug 2025 13:19:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20250829-album-review-g3-live-in-concert/</guid><description>&lt;p&gt;&lt;img src="https://i.scdn.co/image/ab67616d0000b273d4eddbf090d33cba3c2433a8" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1996년, 기타 연주계에 하나의 사건과 같은 프로젝트가 시작되었습니다. 조 새트리아니(Joe Satriani), 스티브 바이(Steve Vai), 에릭 존슨(Eric Johnson)이라는, 당대 가장 독창적이고 뛰어난 세 명의 기타리스트가 &amp;lsquo;G3&amp;rsquo;라는 이름으로 함께 무대에 올랐습니다. &amp;lsquo;G3: Live in Concert&amp;rsquo; 앨범은 이 역사적인 첫 투어의 열기와 각 아티스트의 정제된 연주, 그리고 세 거장의 교감을 생생하게 담아낸 라이브 실황 음반입니다. 이 앨범은 단순한 공연 기록을 넘어, 1990년대 인스트루멘탈 록(Instrumental Rock)의 정점을 기록한 기념비적인 작품으로 평가받습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 본능의 탐험가, D. H. 로런스의 문학 세계</title><link>https://philipjkim.cc/posts/20250829-introduction-to-d-h-lawrence/</link><pubDate>Fri, 29 Aug 2025 13:08:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20250829-introduction-to-d-h-lawrence/</guid><description>&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/M/MV5BZWQ0YmMxMjctMDViYy00MzBmLTk3MDMtOTY5ZWZhZGZmZDYyXkEyXkFqcGc@._V1_.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;데이비드 허버트 로런스(David Herbert Lawrence, 1885-1930)는 20세기 영국 모더니즘 문학의 가장 독창적이고 논쟁적인 작가 중 한 명입니다. 그는 산업화된 근대 문명이 억압하는 인간의 원초적인 생명력과 본능, 특히 성(性)의 문제를 정면으로 다루며 당대 사회에 큰 충격을 안겼습니다. 이 글은 로런스의 치열했던 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="로런스의-생애와-작품-활동"&gt;로런스의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;로런스의 삶과 문학은 그의 출신 배경인 계급 갈등과 깊이 연관되어 있습니다. 그는 1885년 영국 노팅엄셔의 광산촌에서 광부인 아버지와 교사 출신의 어머니 사이에서 태어났습니다. 거칠고 육체적인 아버지는 산업 노동 계급을, 교양 있고 정신적인 가치를 중시하는 어머니는 중산층을 상징했으며, 이 두 세계 사이의 긴장감은 그의 작품 전반에 걸쳐 나타나는 핵심적인 주제가 되었습니다.&lt;/p&gt;</description></item><item><title>음반 소개: The Allman Brothers Band - At Fillmore East (1971): 라이브 앨범의 역사를 바꾼 즉흥 연주의 정수</title><link>https://philipjkim.cc/posts/20250828-album-review-at-fillmore-east/</link><pubDate>Fri, 29 Aug 2025 10:17:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20250828-album-review-at-fillmore-east/</guid><description>&lt;p&gt;&lt;img src="https://sfae.blob.core.windows.net/media/ecommercesite/media/sfae/sfae.artwork/800-allmanbroslivefillmoreeast-ot-1_1.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1971년 7월에 발매된 올맨 브라더스 밴드의 라이브 앨범 &lt;em&gt;At Fillmore East&lt;/em&gt;는 단순한 공연 실황 음반을 넘어, 록 음악 역사상 가장 위대한 라이브 앨범으로 꼽히는 작품입니다. 스튜디오 앨범에서는 미처 다 담아내지 못했던 밴드의 폭발적인 에너지와 신기에 가까운 즉흥 연주를 생생하게 포착한 이 앨범은, 밴드를 슈퍼스타의 반열에 올려놓았을 뿐만 아니라 &amp;lsquo;라이브 앨범&amp;rsquo;이라는 장르 자체의 위상을 바꿔놓았습니다. 본 포스트에서는 이 전설적인 기록물을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: Fourplay - Fourplay (1991): 스무드 재즈의 시대를 연 슈퍼그룹의 출사표</title><link>https://philipjkim.cc/posts/20250828-album-review-fourplay/</link><pubDate>Thu, 28 Aug 2025 15:14:01 +0900</pubDate><guid>https://philipjkim.cc/posts/20250828-album-review-fourplay/</guid><description>&lt;p&gt;&lt;img src="https://cdn11.bigcommerce.com/s-rdecee92oy/products/37419/images/6366769/12evocd671__67368.1746915566.500.750.jpg?c=2" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1991년 발매된 포플레이의 셀프 타이틀 데뷔 앨범 &lt;em&gt;Fourplay&lt;/em&gt;는 컨템포러리 재즈와 스무드 재즈의 역사를 논할 때 빼놓을 수 없는 기념비적인 작품입니다. 밥 제임스, 리 릿나워, 네이던 이스트, 하비 메이슨이라는, 각자의 분야에서 이미 전설이 된 네 명의 거장이 모여 만든 이 앨범은 발매와 동시에 장르의 새로운 표준을 제시하며 상업적, 비평적으로 엄청난 성공을 거두었습니다. 본 포스트에서는 스무드 재즈의 교과서로 불리는 이 앨범을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 현대 문학의 예언자, 프란츠 카프카의 세계</title><link>https://philipjkim.cc/posts/20250828-introduction-to-kafka/</link><pubDate>Thu, 28 Aug 2025 07:58:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20250828-introduction-to-kafka/</guid><description>&lt;p&gt;&lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTV9HnftLamn9JYevSf2CHWuHEGUXWpaaOEGg&amp;amp;s" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;프란츠 카프카(Franz Kafka, 1883-1924)는 20세기 모더니즘 문학의 가장 중요한 작가 중 한 명이자, 현대 사회의 부조리와 그 속에서 소외된 개인의 불안을 누구보다 날카롭게 그려낸 예언자입니다. 그의 작품은 현실과 환상의 경계를 넘나드는 독특한 설정과 상징을 통해, 인간 실존의 근원적인 문제를 탐구합니다. 이 글은 카프카의 고독했던 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: N.EX.T - The Return of N.EX.T Part 1: The Being (1994): '나'를 향한 치열한 철학적 탐구</title><link>https://philipjkim.cc/posts/20250828-album-review-the-being/</link><pubDate>Thu, 28 Aug 2025 07:50:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20250828-album-review-the-being/</guid><description>&lt;p&gt;&lt;img src="https://image.bugsm.co.kr/album/images/500/32/3202.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1994년 발매된 N.EX.T(넥스트)의 정규 2집 &lt;em&gt;The Return of N.EX.T Part 1: The Being&lt;/em&gt; 은 90년대 한국 대중음악사에 기록된 가장 지적이고 심오한 콘셉트 앨범 중 하나입니다. 1집 &lt;em&gt;Home&lt;/em&gt; 에서 보여준 가능성을 넘어, &amp;lsquo;밴드&amp;rsquo; N.EX.T의 정체성을 확립하고 &amp;lsquo;개인&amp;rsquo;과 &amp;lsquo;자아&amp;rsquo;라는 철학적 주제를 정면으로 다룬 이 앨범은, 후속작인 &lt;em&gt;World&lt;/em&gt; 와 함께 한국 록의 서사적 깊이와 음악적 스케일을 한 차원 끌어올린 작품으로 평가받습니다. 본 포스트에서는 이 치열한 자기 성찰의 기록을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: Pink Floyd - The Dark Side of the Moon (1973): 광기를 탐험한 컨셉트 앨범의 정점</title><link>https://philipjkim.cc/posts/20250827-album-review-dark-side-of-the-moon/</link><pubDate>Wed, 27 Aug 2025 20:05:32 +0900</pubDate><guid>https://philipjkim.cc/posts/20250827-album-review-dark-side-of-the-moon/</guid><description>&lt;p&gt;&lt;img src="https://e.snmc.io/i/600/s/b87ea178beaaaf0e0e4a39aaf9d1b834/12206378/pink-floyd-the-dark-side-of-the-moon-Cover-Art.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1973년 3월에 발매된 핑크 플로이드의 8번째 스튜디오 앨범 &lt;em&gt;The Dark Side of the Moon&lt;/em&gt;은 록 음악 역사상 가장 위대한 앨범 중 하나로 꼽히는 기념비적인 작품입니다. 시간, 탐욕, 갈등, 죽음, 그리고 광기라는 인간의 보편적인 주제를 하나의 유기적인 콘셉트로 엮어낸 이 앨범은 사운드 엔지니어링의 혁신과 철학적인 가사를 통해 단순한 노래의 모음을 넘어선 하나의 완결된 예술 작품으로 평가받습니다. 본 포스트에서는 록 음악의 패러다임을 바꾼 이 앨범을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 펄프 픽션의 제왕, 에드거 라이스 버로스의 세계</title><link>https://philipjkim.cc/posts/20250827-introduction-to-burroughs/</link><pubDate>Wed, 27 Aug 2025 19:46:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250827-introduction-to-burroughs/</guid><description>&lt;p&gt;&lt;img src="https://www.saturdayeveningpost.com/wp-content/uploads/satevepost/Burroughs860.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;에드거 라이스 버로스(Edgar Rice Burroughs, 1875-1950)는 20세기 초 미국 대중문학의 지형을 바꾼 작가이자, &amp;lsquo;타잔&amp;rsquo;과 &amp;lsquo;존 카터&amp;rsquo;라는 불멸의 캐릭터를 창조한 &amp;lsquo;펄프 픽션(Pulp Fiction)&amp;lsquo;의 제왕입니다. 그의 작품은 순수 문학과는 거리가 있었지만, 경이로운 상상력과 박진감 넘치는 모험 서사로 수많은 독자를 사로잡았으며, 후대의 SF와 판타지 장르에 지대한 영향을 미쳤습니다. 이 글은 에드거 라이스 버로스의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>음반 소개: Michael Jackson - Dangerous (1991): 팝의 경계를 허문 혁명적 선언</title><link>https://philipjkim.cc/posts/20250827-album-review-dangerous/</link><pubDate>Wed, 27 Aug 2025 15:22:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20250827-album-review-dangerous/</guid><description>&lt;p&gt;&lt;img src="https://cdn-p.smehost.net/sites/28d35d54a3c64e2b851790a18a1c4c18/wp-content/uploads/2018/12/181214_dangerous_feat.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;1991년 발매된 마이클 잭슨의 8번째 스튜디오 앨범 &lt;em&gt;Dangerous&lt;/em&gt;는 팝의 황제가 스스로의 성공 신화를 넘어서기 위해 선택한 과감하고 혁명적인 결과물입니다. 퀸시 존스(Quincy Jones)와의 성공적인 파트너십을 뒤로하고, 테디 라일리(Teddy Riley)를 필두로 한 새로운 프로듀서들과 함께 만든 이 앨범은 팝, 록, R&amp;amp;B를 넘어 뉴 잭 스윙(New Jack Swing)과 인더스트리얼 사운드까지 흡수하며 90년대 대중음악의 새로운 방향을 제시했습니다. 본 포스트에서는 &lt;em&gt;Dangerous&lt;/em&gt; 앨범이 지닌 음악사적 가치와 그 내용을 분석합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;나의 친구 승국이에게 이 글을 바칩니다.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="michael-jackson-시대를-정의한-팝의-황제"&gt;Michael Jackson: 시대를 정의한 &amp;lsquo;팝의 황제&amp;rsquo;&lt;/h2&gt;
&lt;p&gt;마이클 잭슨(1958-2009)은 20세기 대중음악과 문화를 상징하는 가장 위대한 아이콘입니다. 그의 영향력은 단순히 음악에 국한되지 않으며, 그의 삶과 예술은 하나의 거대한 서사시와 같습니다.&lt;/p&gt;</description></item><item><title>음반 소개: Pat Metheny Group - Offramp (1982): 재즈의 새로운 길을 제시한 이정표</title><link>https://philipjkim.cc/posts/20250827-album-review-offramp/</link><pubDate>Wed, 27 Aug 2025 08:43:07 +0900</pubDate><guid>https://philipjkim.cc/posts/20250827-album-review-offramp/</guid><description>&lt;p&gt;&lt;img src="https://m.media-amazon.com/images/I/81Z3KD2oerL._UF1000,1000_QL80_.jpg" alt="artwork"&gt;&lt;/p&gt;
&lt;p&gt;Offramp 는 Pat Metheny Group(PMG)의 1982년 작은 재즈 퓨전 신(Scene)의 흐름을 바꾼 결정적인 앨범입니다. ECM 레코드를 통해 발매된 이 앨범은 그룹의 사운드가 한 단계 진화했음을 알리는 선언과도 같았으며, 특히 기타 신디사이저의 혁신적인 사용을 통해 동시대 뮤지션들에게 깊은 영감을 주었습니다. 이 앨범으로 PMG는 그래미 어워드 &amp;lsquo;최우수 재즈 퓨전 퍼포먼스&amp;rsquo; 부문을 수상하며 상업적, 비평적 성공을 모두 거머쥐었습니다. 본 포스트에서는 &lt;em&gt;Offramp&lt;/em&gt; 앨범을 심도 있게 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 세속의 관찰자, 서머싯 몸의 문학 세계</title><link>https://philipjkim.cc/posts/20250827-introduction-to-maugham/</link><pubDate>Wed, 27 Aug 2025 08:32:37 +0900</pubDate><guid>https://philipjkim.cc/posts/20250827-introduction-to-maugham/</guid><description>&lt;p&gt;&lt;img src="https://cdn.shopify.com/s/files/1/2458/8207/files/vintage-somerset-maugham-country-house-library.jpg?v=1660829004" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;윌리엄 서머싯 몸(W. Somerset Maugham, 1874-1965)은 20세기 영국을 대표하는 소설가이자 극작가로, 당대 가장 높은 대중적 인기를 누렸던 작가 중 한 명입니다. 그는 인간 본성에 대한 냉소적인 통찰과 명료하고 직설적인 문체로, 문명과 사회적 관습 이면에 숨겨진 인간의 위선과 열정을 파헤쳤습니다. 이 글은 서머싯 몸의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Go 패키지 구조 컨벤션: Standard Go Project Layout</title><link>https://philipjkim.cc/posts/20250826-go-package-conventions/</link><pubDate>Tue, 26 Aug 2025 19:34:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20250826-go-package-conventions/</guid><description>&lt;p&gt;Go 언어 프로젝트의 패키지 구조는 일반적으로 몇 가지 컨벤션을 따르며, &lt;code&gt;pkg&lt;/code&gt;와 &lt;code&gt;internal&lt;/code&gt; 디렉토리는 그중 핵심적인 역할을 합니다. 단순히 코드를 기능별로 묶는 것을 넘어, 패키지의 &lt;strong&gt;가시성(visibility)과 의존성 방향을 명확히&lt;/strong&gt; 하여 프로젝트의 유지보수성을 높이는 것이 목적입니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 Gemini 2.5 Pro 모델이 제 Go package convention 에 대한 질문에 답변한 내용입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Go 커뮤니티에서 널리 통용되는 표준 프로젝트 레이아웃(&lt;a href="https://github.com/golang-standards/project-layout"&gt;golang-standards/project-layout&lt;/a&gt;)을 기반으로 각 디렉토리의 역할과 베스트 프랙티스를 자세히 설명해 드리겠습니다.&lt;/p&gt;
&lt;h2 id="-pkg-디렉토리-공개-라이브러리-public-library"&gt;📦 &lt;code&gt;pkg&lt;/code&gt; 디렉토리: 공개 라이브러리 (Public Library)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;pkg&lt;/code&gt; 디렉토리&lt;/strong&gt;에는 &lt;strong&gt;외부 프로젝트에서 가져다 쓸 수 있는(importable) 공개 라이브러리 성격의 코드&lt;/strong&gt;를 위치시킵니다.&lt;/p&gt;</description></item><item><title>과학: 현재의 지구 온난화: '자연적 기후 주기' 가설에 대한 평가</title><link>https://philipjkim.cc/posts/20250826-cause-of-global-warming/</link><pubDate>Tue, 26 Aug 2025 18:41:38 +0900</pubDate><guid>https://philipjkim.cc/posts/20250826-cause-of-global-warming/</guid><description>&lt;p&gt;&lt;em&gt;지구 온난화 원인에 대한 &amp;lsquo;자연적 기후 주기&amp;rsquo; 가설이 신빙성이 있는지에 대해 gemini 2.5 pro 에게 요청한 연구 결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;지구의 기후는 인류 문명이 존재하기 훨씬 이전부터 끊임없이 변화해 왔다는 것은 과학적으로 명백한 사실이다.[1, 2, 3] 과거 지구는 빙하기와 간빙기를 오가며 극적인 기온 변화를 겪었다. 이러한 역사적 사실에 근거하여, 일부에서는 현재 관측되는 급격한 지구 온도 상승이 인간의 산업 활동에 따른 온실가스 배출 때문이 아니라, 지구 본연의 장기적인 자연 순환 주기의 일부일 뿐이라는 주장을 제기한다.[4, 5] 이 주장은 현재의 온난화가 인간이 통제할 수 없는 거대한 자연의 흐름이며, 따라서 인간의 노력이 무의미할 수 있다는 함의를 담고 있다.&lt;/p&gt;</description></item><item><title>작가 소개: 미국 상류사회의 해부학자, 이디스 워튼의 문학 세계</title><link>https://philipjkim.cc/posts/20250826-introduction-to-wharton/</link><pubDate>Tue, 26 Aug 2025 10:26:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20250826-introduction-to-wharton/</guid><description>&lt;p&gt;&lt;img src="https://mainstreetmag.com/wp-content/uploads/2025/03/edith.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;이디스 워튼(Edith Wharton, 1862-1937)은 20세기 초 미국 문학을 대표하는 소설가이자, 자신이 태어난 뉴욕 상류사회의 허위와 관습을 누구보다 예리하게 포착한 작가입니다. 그녀는 섬세한 심리 묘사와 날카로운 사회 비판을 통해, 화려한 시대의 이면에 갇힌 개인, 특히 여성의 비극을 그려냈습니다. 이 글은 이디스 워튼의 생애와 작품 세계, 그녀의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="워튼의-생애와-작품-활동"&gt;워튼의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;이디스 워튼의 삶은 그녀의 소설 속 배경과 밀접하게 연결되어 있습니다. 그녀는 1862년 남북전쟁 이전 뉴욕의 가장 부유하고 유서 깊은 가문 중 하나인 존스 가문에서 태어났습니다. 어린 시절부터 유럽을 오가며 가정교사에게 교육받았고, 아버지의 서재에서 수많은 고전을 탐독하며 문학적 소양을 키웠습니다.&lt;/p&gt;</description></item><item><title>작가 소개: 모더니즘의 선구자, 크누트 함순의 문학 세계</title><link>https://philipjkim.cc/posts/20250825-introduction-to-hamsun/</link><pubDate>Fri, 22 Aug 2025 15:21:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20250825-introduction-to-hamsun/</guid><description>&lt;p&gt;&lt;img src="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSV2PCDbiehPHt_z0vFMcO5M4YvFbEOMlaubQ&amp;amp;s" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;크누트 함순(Knut Hamsun, 1859-1952)은 20세기 초반 노르웨이 문학을 넘어 세계 문학에 모더니즘의 도래를 알린 혁신적인 작가입니다. 그는 인간 내면의 비합리적이고 파편적인 의식의 흐름을 포착하여, 기존의 사실주의 문학과는 완전히 다른 새로운 길을 열었습니다. 그러나 그의 문학적 성취는 제2차 세계대전 당시 나치에 협력한 오점으로 인해 깊은 논쟁의 대상이 되기도 합니다. 이 글은 함순의 복잡한 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 영혼의 탐험가, 표도르 도스토옙스키의 문학 세계</title><link>https://philipjkim.cc/posts/20250822-introduction-to-dostoevsky/</link><pubDate>Fri, 22 Aug 2025 15:21:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20250822-introduction-to-dostoevsky/</guid><description>&lt;p&gt;&lt;img src="https://imageio.forbes.com/specials-images/imageserve/66ec412983c576047f2b8911/Black-and-white-photo-of-Fyodor-Dostoyevsky-/0x0.jpg?format=jpg&amp;amp;crop=1575,1050,x2,y156,safe&amp;amp;width=960" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;표도르 도스토옙스키(Fyodor Dostoevsky, 1821-1881)는 톨스토이와 함께 19세기 러시아 문학을 대표하는 거장이자, 인간 내면의 가장 깊고 어두운 심연을 탐구한 작가입니다. 그는 인간 영혼의 문제를 집요하게 파고들며 신과 인간, 죄와 벌, 자유와 구원이라는 철학적 주제를 위대한 소설로 승화시켰습니다. 이 글은 도스토옙스키의 격동적인 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="도스토옙스키의-생애와-작품-활동"&gt;도스토옙스키의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;도스토옙스키의 삶은 그의 소설만큼이나 고통과 격변으로 점철되었습니다. 그는 1821년 모스크바의 가난한 의사 집안에서 태어났습니다. 젊은 시절 공병 장교로 복무했으나 문학에 대한 열정으로 군을 떠나, 1846년 첫 소설 『가난한 사람들』을 발표하며 &amp;lsquo;제2의 고골&amp;rsquo;이라는 찬사를 받으며 화려하게 데뷔했습니다.&lt;/p&gt;</description></item><item><title>작가 소개: 미국의 셰익스피어, 허먼 멜빌의 문학 세계</title><link>https://philipjkim.cc/posts/20250822-introduction-to-melville/</link><pubDate>Fri, 22 Aug 2025 10:48:49 +0900</pubDate><guid>https://philipjkim.cc/posts/20250822-introduction-to-melville/</guid><description>&lt;p&gt;&lt;img src="https://hips.hearstapps.com/hmg-prod/images/gettyimages-89865323.jpg?crop=1xw:0.75xh;center,top&amp;amp;resize=1200:*" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;허먼 멜빌(Herman Melville, 1819-1891)은 19세기 미국 문학을 넘어 세계 문학사에서 가장 위대한 작가 중 한 명으로 꼽힙니다. 그는 광활한 바다를 무대로 인간의 실존적 고뇌와 우주적 질서에 대한 깊은 철학적 질문을 던졌습니다. 생전에는 대중에게 외면받았으나, 사후에 그의 작품은 재평가받으며 미국 낭만주의 문학의 정점으로 자리매김했습니다. 이 글은 멜빌의 파란만장했던 삶과 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>작가 소개: 빅토리아 시대의 거장, 찰스 디킨스의 문학 세계</title><link>https://philipjkim.cc/posts/20250821-introduction-to-dickens/</link><pubDate>Thu, 21 Aug 2025 17:48:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20250821-introduction-to-dickens/</guid><description>&lt;p&gt;&lt;img src="https://www.msnocookie.com/image/ms/msimages/blog_gallery/charles-dickens-copyright-c-mary-evans-picture_3fa544e141.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;찰스 디킨스(Charles Dickens, 1812-1870)는 19세기 영국을 대표하는 소설가이자, 산업혁명기 런던의 명암을 누구보다 생생하게 그려낸 사회 비평가입니다. 그는 생생한 캐릭터와 흡입력 있는 스토리텔링을 통해 당대 대중의 폭발적인 사랑을 받았으며, 그의 작품은 오늘날까지 시대를 초월하는 고전으로 널리 읽히고 있습니다. 이 글은 디킨스의 생애와 작품 세계, 그의 문학이 지닌 독창성과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="디킨스의-생애와-작품-활동"&gt;디킨스의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;디킨스의 삶은 그의 소설만큼이나 극적인 고난과 성공으로 가득 차 있습니다. 그는 1812년 영국 포츠머스에서 태어났으나, 해군 경리였던 아버지의 낭비벽으로 인해 어린 시절부터 힘겨운 삶을 살았습니다. 아버지가 빚 때문에 감옥에 수감되자, 불과 열두 살의 디킨스는 학교를 그만두고 구두약 공장에서 하루 10시간씩 노동을 해야 했습니다.&lt;/p&gt;</description></item><item><title>TotT: 변경 감지 테스트는 악몽입니다</title><link>https://philipjkim.cc/posts/20250821-tott-change-detector-tests-are-nightmare/</link><pubDate>Thu, 21 Aug 2025 15:09:05 +0900</pubDate><guid>https://philipjkim.cc/posts/20250821-tott-change-detector-tests-are-nightmare/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html"&gt;https://testing.googleblog.com/2015/01/testing-on-toilet-change-detector-tests.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;당신은 방금 코드의 동작을 수정하지 않고 리팩토링을 마쳤습니다. 그리고 커밋하기 전에 테스트를 실행했는데&amp;hellip; 수많은 단위 테스트가 실패합니다. 실패한 테스트들을 고치면서, 당신은 여러 테스트에 동일한 변환 작업을 기계적으로 적용하며 시간을 낭비하고 있다는 느낌을 받습니다. 아마도 당신은 어떤 메서드에 파라미터를 하나 추가했고, 이제 테스트 코드에 있는 100개의 해당 메서드 호출부에 빈 문자열을 전달하도록 업데이트해야 하는 상황일 겁니다.&lt;/p&gt;
&lt;p&gt;테스트를 기계적으로 작성한다는 것은 어떤 모습일까요? 여기 터무니없지만 명확한 예시가 있습니다:&lt;/p&gt;</description></item><item><title>작가 소개: 사실주의의 거장, 오노레 드 발자크의 문학 세계</title><link>https://philipjkim.cc/posts/20250821-introduction-to-balzac/</link><pubDate>Thu, 21 Aug 2025 12:23:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20250821-introduction-to-balzac/</guid><description>&lt;p&gt;&lt;img src="https://www.thoughtco.com/thmb/b6neF6wzUa3YCnOyk4AtLHXGxLc=/1500x0/filters:no_upscale%28%29:max_bytes%28150000%29:strip_icc%28%29/GettyImages-526580970-5b93ff9c46e0fb0050f670bd.jpg" alt="portrait"&gt;&lt;/p&gt;
&lt;p&gt;오노레 드 발자크(Honoré de Balzac, 1799-1850)는 19세기 프랑스 문학을 대표하는 소설가이자, 사실주의(Realism) 문학의 문을 연 선구자입니다. 그는 인간 사회를 하나의 거대한 유기체로 보고, 그 안에서 움직이는 개인의 욕망과 사회 구조의 관계를 집요하게 파고들었습니다. 이 글은 발자크의 생애와 작품 세계, 그의 문학이 지닌 독창적인 특징과 대표작들을 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="발자크의-생애와-작품-활동"&gt;발자크의 생애와 작품 활동&lt;/h2&gt;
&lt;p&gt;발자크의 삶은 그의 작품만큼이나 극적이었습니다. 그는 1799년 프랑스 투르(Tours)에서 태어나 법률가의 길을 걸으라는 가문의 기대를 저버리고 문학에 투신했습니다. 초기에는 상업적인 성공을 위해 여러 필명으로 통속 소설을 쓰며 생계를 유지했지만, 큰 성공을 거두지는 못했습니다.&lt;/p&gt;</description></item><item><title>개발자를 위한 게임 이론: 전략적 의사결정의 수학적 접근</title><link>https://philipjkim.cc/posts/20250821-game-theory-for-developers/</link><pubDate>Thu, 21 Aug 2025 10:18:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20250821-game-theory-for-developers/</guid><description>&lt;p&gt;&lt;em&gt;개발자를 주 독자층으로 한 gemini pro 2.5 의 게임이론 연구결과입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-서론-게임-이론의-창시자-존-내쉬-john-nash"&gt;1. 서론: 게임 이론의 창시자, 존 내쉬 (John Nash)&lt;/h2&gt;
&lt;p&gt;비협력 게임 이론 분야를 개척하고 전략적 상호작용에 대한 이해를 근본적으로 바꾼 인물인 존 포브스 내쉬 주니어(John Forbes Nash Jr.)를 소개하지 않고는 게임 이론을 논할 수 없다. 그의 지적 기여는 단순히 하나의 이론을 제시한 것을 넘어, 경제학, 컴퓨터 과학, 정치학 등 다양한 분야에서 합리적 행위자 간의 상호작용을 분석하는 패러다임을 전환시켰다.&lt;/p&gt;
&lt;h3 id="11-천재-수학자의-생애와-학문적-여정"&gt;1.1. 천재 수학자의 생애와 학문적 여정&lt;/h3&gt;
&lt;p&gt;1928년 6월 13일 웨스트버지니아주 블루필드에서 태어난 존 내쉬는 어린 시절부터 비범한 재능을 보였다.[1, 2] 그의 아버지는 전기 기술자였고 어머니는 교사였다. 학창 시절 그는 뛰어난 학생은 아니었지만, 독서를 통해 스스로 페르마 소정리를 증명하는 등 수학적 재능을 일찍부터 드러냈다. 아버지처럼 엔지니어가 되기 위해 카네기 멜런 대학교(당시 카네기 공과대학)에 입학했으나, 정형화된 교육 과정에 염증을 느끼고 그의 천재성을 알아본 교수들의 격려로 수학으로 전공을 바꾸었다.[1, 3]&lt;/p&gt;</description></item><item><title>포커 수학의 첫걸음: 팟 오즈와 임플라이드 오즈</title><link>https://philipjkim.cc/posts/20250821-pot-odds-and-implied-odds/</link><pubDate>Thu, 21 Aug 2025 09:33:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20250821-pot-odds-and-implied-odds/</guid><description>&lt;p&gt;포커는 심리 게임인 동시에 정교한 확률과 수학에 기반한 의사결정의 연속입니다. 감에 의존하는 플레이를 넘어 장기적으로 승리하는 플레이어가 되기 위해 반드시 알아야 할 두 가지 핵심 개념이 바로 &lt;strong&gt;팟 오즈(Pot Odds)&lt;/strong&gt; 와 &lt;strong&gt;임플라이드 오즈(Implied Odds)&lt;/strong&gt; 입니다. 이 두 개념은 현재의 베팅을 콜(Call)하는 것이 수학적으로 유리한지 불리한지를 판단하는 강력한 근거를 제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글의 주제에 대한 Gemini 2.5 pro 의 연구 결과를 일부 수정한 글입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="시작하기-전-필수-포커-용어"&gt;시작하기 전: 필수 포커 용어&lt;/h2&gt;
&lt;p&gt;팟 오즈와 임플라이드 오즈를 이해하기 위해 다음 용어들을 먼저 알아야 합니다.&lt;/p&gt;</description></item><item><title>포커 전략: C-Bet (지속 베팅) 가이드</title><link>https://philipjkim.cc/posts/20250820-what-is-c-bet-and-why-it-is-important/</link><pubDate>Wed, 20 Aug 2025 19:50:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20250820-what-is-c-bet-and-why-it-is-important/</guid><description>&lt;p&gt;텍사스 홀덤에서 상대를 압박하고 팟(Pot)을 가져오는 가장 기본적인 기술 중 하나는 C-Bet(Continuation Bet, 지속 베팅)입니다. 프리플랍에서의 주도권을 플랍 이후까지 이어가는 이 전략은, 초보 플레이어에서 벗어나기 위해 반드시 이해해야 할 필수 개념입니다. 이 글은 C-Bet의 정의와 중요성, 그리고 기초적인 실행 전략에 대해 상세히 다룹니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;C-Bet 에 대한 Gemini 2.5 pro 의 연구 결과를 일부 수정한 글입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="c-bet-이전에-알아야-할-개념들"&gt;C-Bet 이전에 알아야 할 개념들&lt;/h2&gt;
&lt;p&gt;C-Bet을 이해하기 위해서는 몇 가지 기본적인 용어에 대한 이해가 필요합니다.&lt;/p&gt;</description></item><item><title>TotT: 구현 세부사항보다 Public API를 테스트하세요</title><link>https://philipjkim.cc/posts/20250820-tott-prefer-testing-public-apis/</link><pubDate>Wed, 20 Aug 2025 16:29:38 +0900</pubDate><guid>https://philipjkim.cc/posts/20250820-tott-prefer-testing-public-apis/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2015/01/testing-on-toilet-prefer-testing-public.html"&gt;https://testing.googleblog.com/2015/01/testing-on-toilet-prefer-testing-public.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;아래 클래스는 테스트가 필요할까요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserInfoValidator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UserInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDateOfBirth&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;isInFuture&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;throw&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ValidationException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 클래스의 메서드에는 로직이 포함되어 있으니 테스트하는 것이 좋을 수 있습니다. 하지만 이 클래스를 사용하는 유일한 코드가 아래와 같다면 어떨까요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserInfoService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;UserInfoValidator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;UserInfo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;validator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 값이 유효하지 않으면 예외를 던짐&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;writeToDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;info&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;답은 다음과 같습니다: 아마도 &lt;code&gt;UserInfoValidator&lt;/code&gt;는 테스트가 필요 없을 것입니다. 왜냐하면 모든 경로를 &lt;code&gt;UserInfoService&lt;/code&gt;를 통해 테스트할 수 있기 때문입니다. 여기서 핵심적인 구분은 **이 클래스가 Public API가 아니라 구현 세부사항(implementation detail)**이라는 점입니다.&lt;/p&gt;</description></item><item><title>음반 소개: 커트 로젠윙클, 브람스를 사색하다: 'The Brahms Project' 리뷰</title><link>https://philipjkim.cc/posts/20250820-kurt-rosenwinkel-the-brahms-project/</link><pubDate>Wed, 20 Aug 2025 10:45:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250820-kurt-rosenwinkel-the-brahms-project/</guid><description>&lt;p&gt;현대 재즈 기타리스트 커트 로젠윙클이 쇼팽의 세계를 탐구했던 &amp;lsquo;The Chopin Project&amp;rsquo;에 이어, 이번에는 낭만주의 시대의 또 다른 거장 요하네스 브람스(Johannes Brahms)의 음악에 대한 깊은 존경과 재해석을 담은 앨범 &amp;lsquo;The Brahms Project&amp;rsquo;를 선보입니다. 이 앨범은 브람스 특유의 복잡한 화성과 깊은 서정성을 재즈의 언어로 풀어낸 또 하나의 기념비적인 결과물입니다. 이 글은 작곡가 브람스의 음악 세계를 소개하고, &amp;lsquo;The Brahms Project&amp;rsquo; 앨범의 탄생 배경과 모든 수록곡을 상세히 분석합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Go 언어의 풍부한 표준 라이브러리 (Batteries Included)</title><link>https://philipjkim.cc/posts/20250819-go-batteries-included/</link><pubDate>Tue, 19 Aug 2025 12:55:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20250819-go-batteries-included/</guid><description>&lt;p&gt;Go 언어의 특징을 소개하는 시리즈의 세 번째 글입니다. 이전 글에서는 Go의 &lt;strong&gt;단순성&lt;/strong&gt;과 &lt;strong&gt;동시성&lt;/strong&gt;에 대해 다루었습니다. 이번에는 Go가 &amp;lsquo;건전지 포함(Batteries Included)&amp;rsquo; 철학을 어떻게 구현하고 있는지, 즉 강력하고 풍부한 표준 라이브러리에 대해 이야기하고자 합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(이 글은 Gemini 2.5 Pro 모델에 의해 작성되었으며, 커버하고 있는 세부 항목들과 글의 톤/매너에 대한 요구사항들은 제가 정리해서 Gemini 에 요청했습니다. 내용에 잘못된 부분이 있을 수 있는데, 그런 경우 잘못된 정보에 대한 댓글을 남겨주시면 감사하겠습니다.)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="go-창시자들의-철학-실용성과-안정성"&gt;Go 창시자들의 철학: 실용성과 안정성&lt;/h2&gt;
&lt;p&gt;Go 언어의 설계 철학은 구글의 대규모 프로덕션 환경에서 마주친 문제들을 해결하는 데서 출발했습니다. 언어의 창시자들인 &lt;strong&gt;로버트 그리즈머(Robert Griesemer)&lt;/strong&gt;, &lt;strong&gt;롭 파이크(Rob Pike)&lt;/strong&gt;, &lt;strong&gt;켄 톰슨(Ken Thompson)&lt;/strong&gt; 은 복잡한 외부 의존성 없이도 당장 현장에서 필요한 대부분의 기능을 수행할 수 있는 언어를 원했습니다.&lt;/p&gt;</description></item><item><title>음반 소개: 커트 로젠윙클, 쇼팽을 만나다: 'The Chopin Project' 리뷰</title><link>https://philipjkim.cc/posts/20250819-kurt-rosenwinkel-the-chopin-project/</link><pubDate>Tue, 19 Aug 2025 10:01:24 +0900</pubDate><guid>https://philipjkim.cc/posts/20250819-kurt-rosenwinkel-the-chopin-project/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;현대 재즈 기타의 지형을 논할 때 커트 로젠윙클(Kurt Rosenwinkel)의 이름을 빼놓을 수 없습니다. 그는 독창적인 화성 감각과 유려한 프레이징, 그리고 기타 사운드에 대한 혁신적인 접근으로 자신만의 독보적인 영역을 구축한 아티스트입니다. 2023년 발매된 앨범 &amp;lsquo;The Chopin Project&amp;rsquo;는 그가 클래식 음악의 거장 프레데리크 쇼팽(Frédéric Chopin)의 세계를 재즈의 언어로 탐구한 야심 찬 결과물입니다. 이 글은 커트 로젠윙클과 그의 음악 세계를 소개하고, &amp;lsquo;The Chopin Project&amp;rsquo; 앨범의 탄생 배경과 모든 수록곡을 상세히 분석합니다.&lt;/p&gt;</description></item><item><title>회사 소개: G&amp;L: 레오 펜더의 마지막 유산, 그 혁신의 역사와 특징</title><link>https://philipjkim.cc/posts/20250818-introduction-to-g-and-l/</link><pubDate>Mon, 18 Aug 2025 10:26:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20250818-introduction-to-g-and-l/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 G&amp;amp;L 에 대한 Gemini 2.5 pro 의 연구결과에 기반했습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;G&amp;amp;L은 일렉트릭 기타의 아버지, 레오 펜더가 그의 오랜 동료 조지 풀러턴(George Fullerton)과 함께 설립한 마지막 악기 제조사입니다. &amp;lsquo;G&amp;amp;L&amp;rsquo;이라는 이름 역시 George &amp;amp; Leo의 이니셜에서 비롯되었습니다. G&amp;amp;L은 펜더의 전통적인 디자인을 계승하면서도, 그가 평생에 걸쳐 완성하고자 했던 기술적 혁신을 집약한 브랜드로 평가받습니다.&lt;/p&gt;
&lt;h2 id="gl의-탄생-레오-펜더의-마지막-여정"&gt;G&amp;amp;L의 탄생: 레오 펜더의 마지막 여정&lt;/h2&gt;
&lt;p&gt;레오 펜더는 자신이 설립한 두 개의 회사, 펜더(Fender)와 뮤직맨(Music Man)을 떠나 G&amp;amp;L을 설립했습니다. 그 과정은 그의 &amp;lsquo;완벽한 악기&amp;rsquo;를 향한 끊임없는 열망을 보여줍니다.&lt;/p&gt;</description></item><item><title>음반 소개: 유재하, 단 한 장의 유산: '사랑하기 때문에' 앨범 전체 리뷰</title><link>https://philipjkim.cc/posts/20250812-album-yoo-jae-ha-1st/</link><pubDate>Tue, 12 Aug 2025 08:48:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20250812-album-yoo-jae-ha-1st/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 저의 여러 요구사항에 대한 Gemini 2.5 pro 의 대답에 의해 초고가 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://i.namu.wiki/i/mqfiF1FrF_TU_5lJPkB4tY7FmaDUV0GF-hp3k_wX3Ydf-Xi5-v1SFGGtwDJj1YSIWn5wqUlSsuEqL5MfHePSLPaRnIiY_dtPr1dSCJWB0xxKG7UZXF4m72pVYfCjyQf8w8rRAxyJAJYQOYl8YwkXbw.webp" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;1987년 11월 1일, 스물다섯의 나이로 요절한 천재 뮤지션 유재하. 그가 세상을 떠나기 불과 3개월 전에 남긴 단 한 장의 앨범 &amp;lt;사랑하기 때문에&amp;gt;는 한국 대중음악사의 흐름을 완전히 바꿔놓은 기념비적인 작품으로 기록됩니다. 이 글은 그의 짧았던 삶을 돌아보고, 유일한 유작이 된 앨범의 모든 트랙을 상세히 분석하며, 그의 음악이 남긴 깊은 유산을 조망합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="불꽃처럼-살다-간-천재-유재하"&gt;불꽃처럼 살다 간 천재, 유재하&lt;/h2&gt;
&lt;p&gt;유재하(1962-1987)는 한양대학교 작곡과에서 클래식 음악을 전공한 인재였습니다. 그의 음악적 깊이는 클래식 화성학과 대중음악 팝/재즈의 감성을 결합하는 독창적인 능력에서 비롯되었습니다. 대학 시절 &amp;lsquo;조용필과 위대한 탄생&amp;rsquo;의 키보디스트로 발탁되었고, 이후 김현식의 3집 앨범에 참여해 명곡 &amp;lsquo;그대 내 품에&amp;rsquo;를 먼저 선보이며 실력을 입증했습니다.&lt;/p&gt;</description></item><item><title>책 소개: 마침내 특이점이 시작된다: 레이 커즈와일의 예언, 20년 후의 현실</title><link>https://philipjkim.cc/posts/20250812-book-the-singularity-is-nearer/</link><pubDate>Tue, 12 Aug 2025 08:21:10 +0900</pubDate><guid>https://philipjkim.cc/posts/20250812-book-the-singularity-is-nearer/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 &amp;ldquo;마침내 특이점이 시작된다&amp;rdquo; 책에 관련한 여러 가지 질문들에 대한 Gemini 2.5 pro 의 대답에 기반했으며 일부 내용은 수정되었습니다.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;레이 커즈와일(Ray Kurzweil)은 단순한 발명가나 컴퓨터 과학자를 넘어, 기술의 기하급수적 발전을 통해 인류 문명의 근본적 변화를 예고한 &amp;lsquo;현대의 노스트라다무스&amp;rsquo;로 불립니다. 2005년, 그는 저서 &amp;lt;특이점이 온다 (The Singularity Is Near)&amp;gt;를 통해 인공지능이 인간의 지능을 초월하는 &amp;lsquo;특이점&amp;rsquo;이 임박했음을 선언했습니다. 그리고 약 20년이 지난 지금, 그의 새로운 책 &amp;lt;마침내 특이점이 시작된다 (The Singularity Is Nearer)&amp;gt;는 그 예언이 현실로 다가오고 있음을 구체적인 증거와 함께 제시합니다.&lt;/p&gt;</description></item><item><title>번역글: 존 2 사이클링 훈련: 유산소 지구력 향상 방법</title><link>https://philipjkim.cc/posts/20250811-zone-2-training-for-cycling/</link><pubDate>Mon, 11 Aug 2025 15:15:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-zone-2-training-for-cycling/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.bikeradar.com/advice/fitness-and-training/cycling-endurance"&gt;https://www.bikeradar.com/advice/fitness-and-training/cycling-endurance&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;적은 노력으로 더 멀리, 더 빠르게 라이딩하고 싶다면 속도를 늦춰야 할 수도 있습니다. 저강도 훈련은 주간 주행 기록의 필수 요소가 되어야 합니다. 유산소 발달과 유산소 지구력 구축을 위해 저-중강도로 훈련하십시오.&lt;/p&gt;
&lt;p&gt;일반적으로 존 2 훈련은 &amp;ldquo;기반&amp;quot;을 구축하는 데 사용됩니다. 이러한 유형의 훈련은 1시간에서 3시간, 심지어 4시간 이상 지속되는 길고 꾸준한 라이딩으로 구성됩니다. 이는 또한 길고 꾸준한 지구력 라이딩(보통 주말에 하지만 주중 아무 날이나 할 수 있습니다)을 할 때 유지해야 하는 강도와 동일합니다. 기반 훈련은 부상 예방에 좋을 뿐만 아니라, 유산소 발달을 촉진하기 위한 견고한 주행 기반을 구축할 수 있게 해줍니다.&lt;/p&gt;</description></item><item><title>Go 의 동시성 (concurrency) 더 들여다보기</title><link>https://philipjkim.cc/posts/20250811-concurrency-of-go/</link><pubDate>Mon, 11 Aug 2025 13:39:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-concurrency-of-go/</guid><description>&lt;p&gt;현대의 컴퓨터는 멀티코어 프로세서를 기반으로 작동하며, 동시성(Concurrency)은 더 이상 선택이 아닌 필수적인 프로그래밍 패러다임이 되었습니다. Go 언어는 설계 초기부터 동시성을 핵심 기능으로 채택했으며, 전통적인 스레드-락(Thread-Lock) 모델의 복잡성을 해결하기 위한 명확한 철학을 제시합니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 Go의 동시성 모델이 어떠한 철학 위에서 탄생했는지 살펴보고, 다른 주류 언어들과의 접근 방식을 비교 분석합니다. 이를 통해 Go의 동시성이 갖는 장점과 현실적인 트레이드오프를 가감 없이 설명하고자 합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(이 글은 Gemini 2.5 Pro 모델에 의해 작성되었으며, 커버하고 있는 세부 항목들과 글의 톤/매너에 대한 요구사항들은 제가 정리해서 Gemini 에 요청했습니다. 내용에 잘못된 부분이 있을 수 있는데, 그런 경우 잘못된 정보에 대한 댓글을 남겨주시면 감사하겠습니다.)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>번역글: 3-벳(3-Bet) 완벽 해부</title><link>https://philipjkim.cc/posts/20250811-breaking-down-the-3-bet/</link><pubDate>Mon, 11 Aug 2025 12:14:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-breaking-down-the-3-bet/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.pokerlistings.com/poker-strategies/breaking-down-the-threebet"&gt;https://www.pokerlistings.com/poker-strategies/breaking-down-the-threebet&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;3-벳은 오늘날 포커 게임에서 가장 중요하고 자주 사용되는 전략 중 하나입니다. 3-벳을 올바르게 사용하는 방법을 마스터하는 것은 수익을 내는 플레이어가 되기 위한 핵심 단계입니다.&lt;/p&gt;
&lt;p&gt;이 가이드에서는 3-벳의 기본부터 시작하여, 언제, 왜, 그리고 어떻게 3-벳을 해야 하는지에 대한 모든 것을 다룰 것입니다.&lt;/p&gt;
&lt;h2 id="3-벳이란-무엇인가"&gt;3-벳이란 무엇인가?&lt;/h2&gt;
&lt;p&gt;포커에서 &amp;lsquo;벳(bet)&amp;lsquo;의 순서를 이해하는 것이 중요합니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;첫 번째 벳 (1-bet):&lt;/strong&gt; 빅 블라인드가 의무적으로 내는 것입니다. 이것이 판의 첫 번째 &amp;lsquo;베팅&amp;rsquo;입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;두 번째 벳 (2-bet):&lt;/strong&gt; 프리플랍(pre-flop)에서 처음으로 레이즈하는 것을 말합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;세 번째 벳 (3-bet):&lt;/strong&gt; 두 번째 벳(첫 레이즈)에 대해 다시 레이즈(리레이즈)하는 것을 &lt;strong&gt;3-벳&lt;/strong&gt;이라고 합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;간단히 말해, &lt;strong&gt;3-벳은 프리플랍에서 나온 첫 번째 리레이즈&lt;/strong&gt;입니다.&lt;/p&gt;</description></item><item><title>TotT: 서술적인 테스트 이름 작성하기</title><link>https://philipjkim.cc/posts/20250811-tott-writing-descriptive-test-names/</link><pubDate>Mon, 11 Aug 2025 12:05:33 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-tott-writing-descriptive-test-names/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://testing.googleblog.com/2014/10/testing-on-toilet-writing-descriptive.html"&gt;https://testing.googleblog.com/2014/10/testing-on-toilet-writing-descriptive.html&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;여러분은 테스트 이름을 어떻게 짓나요? 아래 코드 샘플을 한번 보세요. 이 테스트가 무엇을 하는지, 어떤 동작을 검증하는지 즉시 파악할 수 있나요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testLogin&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// ...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 테스트는 사용자가 성공적으로 로그인하는 시나리오를 테스트할 수도 있고, 잘못된 비밀번호를 입력했을 때의 시나리오를 테스트할 수도 있습니다. 테스트가 무엇을 하는지 이해하려면 테스트의 본문을 읽어야만 합니다. 이제 아래의 다른 테스트 이름을 보세요.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;isUserLockedOut_lockOutUserAfterThreeInvalidLoginAttempts&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;이제 여러분은 테스트 본문을 읽지 않고도, 단지 테스트 이름만 읽는 것만으로 어떤 동작이 테스트되고 있는지 이해할 수 있어야 합니다.&lt;/p&gt;</description></item><item><title>Garmin Connect 의 주요 훈련 효과 (Primary Benefit)</title><link>https://philipjkim.cc/posts/20250811-garmin-primary-benefit/</link><pubDate>Mon, 11 Aug 2025 11:56:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20250811-garmin-primary-benefit/</guid><description>&lt;p&gt;Garmin Connect에서 제공하는 &amp;lsquo;주요 훈련 효과(Primary Benefit)&amp;lsquo;는 운동이 신체에 미치는 주된 영향을 분석하여 보여주는 지표입니다. 이 지표는 심박수 데이터를 기반으로 운동 강도와 지속 시간을 평가하며, 사용자가 자신의 훈련 목표에 맞춰 운동 계획을 세우는 데 도움을 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://philipjkim.cc/img/20250811_primary_benefit_01.jpg" alt="primary_benefit"&gt;&lt;/p&gt;
&lt;p&gt;심박수 구간은 일반적으로 최대 심박수(MHR)의 백분율로 계산됩니다. 최대 심박수 193을 기준으로 한 각 구간별 심박수는 다음과 같습니다. (최대 심박수는 사람마다 다르며 이 글에서 사용하는 193 은 philipjkim 개인의 최대 심박수)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Zone 1 (회복):&lt;/strong&gt; 97-115 bpm (50-60%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zone 2 (기초):&lt;/strong&gt; 116-135 bpm (60-70%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zone 3 (템포):&lt;/strong&gt; 136-154 bpm (70-80%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zone 4 (역치):&lt;/strong&gt; 155-173 bpm (80-90%)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Zone 5 (최대):&lt;/strong&gt; 174-193 bpm (90-100%)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-무산소-anaerobic"&gt;1. 무산소 (Anaerobic)&lt;/h2&gt;
&lt;p&gt;무산소 운동은 짧은 시간 동안 폭발적인 힘을 사용하는 고강도 활동을 의미합니다. 이 훈련은 산소 공급이 수요를 따라가지 못하는 상태에서 이루어지며, 젖산 역치를 넘어선 강도로 진행됩니다.&lt;/p&gt;</description></item><item><title>러닝: 심박수를 주목해야 하는 이유</title><link>https://philipjkim.cc/posts/20250808-why-your-heart-rate-matters-when-you-run/</link><pubDate>Fri, 08 Aug 2025 12:13:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20250808-why-your-heart-rate-matters-when-you-run/</guid><description>&lt;p&gt;&lt;em&gt;심박수 (heart rate) 에 대한 궁금한 점들을 모아 Gemini 2.5 pro 에 질문했고, 이 글은 그에 대한 대답입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;많은 러너들이 심박수 측정이 가능한 스마트워치나 가슴 스트랩을 착용하면서도, 정작 그 숫자가 무엇을 의미하는지, 어떻게 활용해야 하는지 잘 모르는 경우가 많습니다. &lt;strong&gt;심박수&lt;/strong&gt;는 단순히 심장이 얼마나 빨리 뛰는지를 보여주는 숫자를 넘어, 우리 몸이 현재 어떤 상태인지, 훈련이 제대로 되고 있는지를 알려주는 가장 정직한 지표입니다.&lt;/p&gt;
&lt;h2 id="왜-러너는-심박수를-알아야-할까요"&gt;왜 러너는 심박수를 알아야 할까요?&lt;/h2&gt;
&lt;p&gt;운전할 때 속도계를 보며 현재 속도를 파악하듯, 러닝 시 심박수를 확인하는 것은 &lt;strong&gt;운동 강도를 객관적으로 파악&lt;/strong&gt;하는 가장 좋은 방법입니다. 같은 페이스로 달려도 그날의 컨디션, 피로도, 날씨에 따라 우리 몸이 느끼는 부담은 천차만별입니다. 어제는 가볍게 느껴졌던 5분 페이스가 오늘은 유독 힘들게 느껴진다면, 아마 심박수가 평소보다 높게 나타날 것입니다.&lt;/p&gt;</description></item><item><title>용어 소개: AGI 란 무엇인가?</title><link>https://philipjkim.cc/posts/20250808-what-is-agi/</link><pubDate>Fri, 08 Aug 2025 11:59:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20250808-what-is-agi/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 AGI 에 대한 정의와 개념, 현재 LLM 에서 사용되는 AI 와의 차이점 질문에 대한 Gemini 2.5 pro 의 대답입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;AGI(범용 인공지능)는 인간이 할 수 있는 모든 지적인 작업을 기계가 해낼 수 있는, 특정 작업에 국한되지 않은 포괄적인 인공지능을 의미합니다. 이는 주어진 데이터로 학습된 패턴에 따라 반응하는 현재의 AI를 넘어, 스스로 추론하고, 배우고, 새로운 상황에 적응하는 능력을 갖춘 지능을 말합니다.&lt;/p&gt;
&lt;h2 id="agi범용-인공지능란-무엇인가요-"&gt;AGI(범용 인공지능)란 무엇인가요? 🧠&lt;/h2&gt;
&lt;p&gt;AGI(Artificial General Intelligence)는 종종 &amp;lsquo;강한 AI(Strong AI)&amp;lsquo;라고도 불립니다. 현재 우리가 사용하는 대부분의 AI는 &amp;lsquo;약한 AI(Weak AI)&amp;rsquo; 또는 &amp;lsquo;좁은 AI(Narrow AI)&amp;lsquo;로 분류되는데, 이는 언어 번역, 이미지 인식, 코드 생성 등 특정 작업에만 뛰어나도록 설계되었기 때문입니다.&lt;/p&gt;</description></item><item><title>Go 의 단순함(simplicity) 더 들여다보기</title><link>https://philipjkim.cc/posts/20250807-simplicity-of-go/</link><pubDate>Thu, 07 Aug 2025 08:08:20 +0900</pubDate><guid>https://philipjkim.cc/posts/20250807-simplicity-of-go/</guid><description>&lt;p&gt;Go 언어의 철학을 관통하는 가장 중요한 단어는 바로 &lt;strong&gt;&amp;lsquo;단순함(Simplicity)&amp;rsquo;&lt;/strong&gt; 입니다. 이는 단순히 기능이 적다는 의미가 아니라, 복잡한 문제를 명료하고 예측 가능하게 해결하기 위한 의도적인 설계 철학입니다. Go의 창시자 중 한 명인 롭 파이크(Rob Pike)는 &amp;ldquo;단순함은 복잡하다(Simplicity is Complicated)&amp;ldquo;고 말했습니다. 최고의 단순함을 성취하기 위해 수많은 고민과 트레이드오프가 있었음을 암시하는 말이죠.&lt;/p&gt;
&lt;p&gt;이 글에서는 Go의 핵심 철학인 &amp;lsquo;단순함&amp;rsquo;이 코드 수준에서 어떻게 드러나는지, 그리고 이 철학이 왜 어떤 개발자에게는 최고의 장점이 되고 다른 개발자에게는 답답한 단점으로 여겨지는지 가감 없이 살펴보겠습니다.&lt;/p&gt;</description></item><item><title>책 소개: VIBE CODING by Gene Kim and Steve Yegge</title><link>https://philipjkim.cc/posts/20250807-book-vibe-coding-preface/</link><pubDate>Thu, 07 Aug 2025 07:44:08 +0900</pubDate><guid>https://philipjkim.cc/posts/20250807-book-vibe-coding-preface/</guid><description>&lt;p&gt;&lt;em&gt;이 책의 존재를 알려준 &lt;a href="mailto:r@rsl.kr"&gt;r@rsl.kr&lt;/a&gt; 에게 감사를 표합니다.&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이 책의 공개된 일부 내용은 &lt;a href="https://go.itrevolution.net/e/Xys/U3oak/7Qm/R2mkNon98"&gt;https://go.itrevolution.net/e/Xys/U3oak/7Qm/R2mkNon98&lt;/a&gt; 에서 다운로드할 수 있습니다.&lt;/li&gt;
&lt;li&gt;이 글은 제가 pdf 원문을 읽기 전 맥락을 먼저 갖기 위해 Gemini 에 번역/요약을 요청한 결과입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="책-소개-vibe-coding---무엇을-다루는가"&gt;책 소개: &amp;ldquo;VIBE CODING&amp;rdquo; - 무엇을 다루는가?&lt;/h2&gt;
&lt;p&gt;이 책은 &lt;strong&gt;&amp;ldquo;바이브 코딩(Vibe Coding)&amp;rdquo;&lt;/strong&gt; 이라는 새로운 소프트웨어 개발 패러다임을 중심으로, 생성형 AI(GenAI), 챗(Chat), 에이전트(Agent)를 활용하여 실제 상용 수준의 소프트웨어를 구축하는 방법을 다룹니다. 저자들은 바이브 코딩이 단순히 코드를 빨리 짜는 기술을 넘어, 소프트웨어를 &lt;strong&gt;누가, 어떤 속도로, 얼마나 큰 야망을 가지고 만들 수 있는지&lt;/strong&gt;에 대한 근본적인 정의를 바꾸고 있다고 주장합니다.&lt;/p&gt;</description></item><item><title>번역글: 형편없는 바이브 코더의 9가지 습관</title><link>https://philipjkim.cc/posts/20250806-9-habits-of-the-highly-ineffective-vibe-coder/</link><pubDate>Wed, 06 Aug 2025 15:28:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20250806-9-habits-of-the-highly-ineffective-vibe-coder/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.infoworld.com/article/4029093/9-habits-of-the-highly-ineffective-vibe-coder.html"&gt;https://www.infoworld.com/article/4029093/9-habits-of-the-highly-ineffective-vibe-coder.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;바이브 코딩이 정말 그렇게 쉽다고요? AI의 현실 세계적 등가물인 집사를 생각해 보세요. 새로운 집사에게 아침 식사를 제공하거나 완벽한 마티니를 만드는 방법과 같은 기술을 가르치는 전문 학교가 있습니다. 하지만 이 학교들이 부자들에게 집사와 잘 지내는 방법을 가르치는 병행 과정도 있다는 것을 알고 계셨나요? 맞습니다. 부자들은 찻잔을 올바르게 잡는 방법을 배워서 집사가 우아하게 차를 채울 수 있도록 합니다. 심지어 어떤 종류의 요청이 적절하고 어떤 것이 그렇지 않은지도 배웁니다. 이것은 2분짜리 틱톡 비디오에서는 가르칠 수 없는 종류의 일입니다.&lt;/p&gt;</description></item><item><title>번역글: 증강 코딩: 바이브를 넘어</title><link>https://philipjkim.cc/posts/20250806-augmented-coding-beyond-the-vibes/</link><pubDate>Wed, 06 Aug 2025 09:22:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20250806-augmented-coding-beyond-the-vibes/</guid><description>&lt;p&gt;원문: &lt;a href="https://tidyfirst.substack.com/p/augmented-coding-beyond-the-vibes"&gt;https://tidyfirst.substack.com/p/augmented-coding-beyond-the-vibes&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;이 글의 존재를 알려준 &lt;a href="mailto:r@rsl.kr"&gt;r@rsl.kr&lt;/a&gt; 에게 감사를 표합니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;최근 증강 코딩을 사용하여 B+ 트리 라이브러리를 구축하려는 야심 찬 프로젝트에서 좋은 마무리를 지었습니다. 그 결과물은 &lt;a href="https://github.com/KentBeck/BPlusTree3"&gt;&lt;em&gt;BPlusTree3&lt;/em&gt;&lt;/a&gt; - Rust 및 Python으로 구현된 성능 경쟁력이 있고, 어쩌면 프로덕션에 즉시 사용 가능한 구현입니다. 저는 친구와 앉아 저의 이야기를 나누고 GenAI 시대의 프로그래밍 미래에 대해 무엇을 시사하는지 생각해 보았습니다.&lt;/p&gt;
&lt;h2 id="무엇이-당신을-b-트리를-먼저-구현하게-만들었나요"&gt;무엇이 당신을 B+ 트리를 먼저 구현하게 만들었나요?&lt;/h2&gt;
&lt;p&gt;증강 코딩의 놀라운 힘을 깨닫기 시작했을 때, 저는 과거에 기술적으로 접근하기 어려웠던 프로젝트들을 떠올리기 시작했습니다. 그중 하나는 특수 목적 데이터베이스였습니다. 지금 그 데이터베이스 프로젝트를 구현하면서 B+ 트리 데이터 구조를 충분히 이해하지 못했다는 것을 깨달았고 그래서 목표를 바꿨습니다.&lt;/p&gt;</description></item><item><title>AI 코딩 시대의 그림자: LLM 의존이 개발자에게 미치는 잠재적 위험 5가지</title><link>https://philipjkim.cc/posts/20250805-shadows-of-ai-coding-era/</link><pubDate>Tue, 05 Aug 2025 16:12:15 +0900</pubDate><guid>https://philipjkim.cc/posts/20250805-shadows-of-ai-coding-era/</guid><description>&lt;p&gt;&lt;code&gt;vibe-coding&lt;/code&gt;, &lt;code&gt;agent-coding&lt;/code&gt; 이라는 말이 어색하지 않은 시대입니다. Claude, Gemini, GitHub Copilot과 같은 LLM(거대 언어 모델) 기반 코딩 도구들은 이제 단순히 코드 스니펫을 자동 완성해주는 수준을 넘어, 우리의 생각을 논리적으로 설명하면 프로젝트 전체의 구조를 짜고 방대한 양의 코드를 순식간에 만들어냅니다. 생산성의 혁신이라 부를 만한 이 변화는 분명 경이롭습니다.&lt;/p&gt;
&lt;p&gt;하지만 이 강력한 도구에 과도하게 의존하기 시작하면서, 우리는 이전에 겪어보지 못한 새로운 종류의 문제들에 직면하고 있습니다. 밝은 빛이 강할수록 그림자도 짙어지는 법입니다. 지난 주말 바이브코딩을 직접 경험해 보며 그런 그림자의 영역을 빠르게 체감할 수 있었습니다. 이 글에서는 LLM 기반 코딩에 대한 의존이 개발자 개인과 팀에 미칠 수 있는 5가지 잠재적 위험을 심도 있게 다뤄보고자 합니다.&lt;/p&gt;</description></item><item><title>기업 소개: Thinking Machines Lab</title><link>https://philipjkim.cc/posts/20250805-introduction-to-thinking-machines-lab/</link><pubDate>Tue, 05 Aug 2025 14:22:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250805-introduction-to-thinking-machines-lab/</guid><description>&lt;h2 id="창립-배경"&gt;창립 배경&lt;/h2&gt;
&lt;p&gt;2025년 2월, &lt;a href="https://thinkingmachines.ai/"&gt;Thinking Machines Lab&lt;/a&gt; 는 인공지능 업계의 &amp;lsquo;드림팀&amp;rsquo;으로 불리는 전 OpenAI 핵심 인력들이 주축이 되어 설립되었습니다. CEO인 미라 무라티(Mira Murati)를 비롯해 존 슐먼(John Schulman), 바렛 조프(Barret Zoph), 릴리안 웽(Lilian Weng), 앤드류 툴로치(Andrew Tulloch) 등 OpenAI에서 ChatGPT와 GPT-4 개발을 이끌었던 최고 전문가들이 대거 합류하며 큰 주목을 받았습니다.&lt;/p&gt;
&lt;p&gt;이들은 기존 AI 기술의 한계를 넘어 인간과 더 안전하고 효과적으로 협력할 수 있는 차세대 인공지능을 구축하겠다는 공동의 목표를 가지고 OpenAI를 떠나 새로운 회사를 설립했습니다. 이는 단순히 더 강력한 AI 모델을 만드는 것을 넘어, 인공지능의 안전성, 투명성, 그리고 인간과의 상호작용 방식에 대한 근본적인 질문에 답하고자 하는 이들의 깊은 고민에서 비롯된 것입니다.&lt;/p&gt;</description></item><item><title>책 소개: 소프트웨어 설계의 철학</title><link>https://philipjkim.cc/posts/20250804-a-philosophy-of-software-design/</link><pubDate>Mon, 04 Aug 2025 18:13:51 +0900</pubDate><guid>https://philipjkim.cc/posts/20250804-a-philosophy-of-software-design/</guid><description>&lt;p&gt;존 오스터하우트 (John Ousterhout) 의 &lt;a href="https://www.amazon.com/Philosophy-Software-Design-John-Ousterhout/dp/1732102201"&gt;소프트웨어 설계의 철학 - A Philosophy of Software Design&lt;/a&gt; 은 소프트웨어 복잡성을 줄이고 유지 관리가 용이한 코드를 작성하는 방법에 대한 심도 있는 통찰력을 제공합니다. 21개 챕터에 걸쳐 저자는 복잡성의 본질을 분석하고, 효과적인 모듈 설계를 위한 원칙을 제시하며, 코드의 가독성과 명확성을 높이는 구체적인 기법들을 소개합니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;아래 내용은 Gemini 의 연구 결과에 약간의 퇴고를 거친 것입니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론-복잡성과의-전쟁"&gt;서론: 복잡성과의 전쟁&lt;/h2&gt;
&lt;p&gt;존 오스터하우트의 저서 &amp;ldquo;소프트웨어 설계의 철학(A Philosophy of Software Design)&amp;ldquo;은 소프트웨어 개발의 가장 근본적인 한계가 성능이나 기능이 아니라, 우리가 만든 시스템을 우리 스스로 이해하는 능력에 있다는 주장으로 시작합니다.[1, 2] 이 책의 전체 철학은 단 하나의 적, 즉 &lt;strong&gt;복잡성(complexity)&lt;/strong&gt; 에 맞서기 위한 일련의 전략들로 구성되어 있습니다.[3, 4, 5, 6]&lt;/p&gt;</description></item><item><title>TotT: 테스트에 로직을 넣지 마세요</title><link>https://philipjkim.cc/posts/20250804-tott-dont-put-logic-in-tests/</link><pubDate>Mon, 04 Aug 2025 09:20:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20250804-tott-dont-put-logic-in-tests/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2014/07/testing-on-toilet-dont-put-logic-in.html"&gt;https://testing.googleblog.com/2014/07/testing-on-toilet-dont-put-logic-in.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;프로그래밍 언어는 우리에게 많은 표현력을 제공합니다. 연산자와 조건문 같은 개념들은 광범위한 입력을 처리하는 프로그램을 작성할 수 있게 해주는 중요한 도구입니다. 하지만 이러한 유연성은 복잡성 증가라는 대가를 치르게 하여, 우리 프로그램을 이해하기 어렵게 만듭니다.&lt;/p&gt;
&lt;p&gt;프로덕션 코드와 달리, 테스트에서는 유연성보다 &lt;strong&gt;단순성&lt;/strong&gt;이 더 중요합니다. 대부분의 단위 테스트는 단일의, 알려진 입력이 단일의, 알려진 출력을 생성하는지 검증합니다. 테스트는 입력과 출력을 계산하는 대신 직접 명시함으로써 복잡성을 피할 수 있습니다. 그렇지 않으면 테스트 자체에 버그가 생기기 쉽습니다.&lt;/p&gt;</description></item><item><title>인물 소개: 안드레이 카르파티(Andrej Karpathy)</title><link>https://philipjkim.cc/posts/20250803-introduction-to-andrej-karpathy/</link><pubDate>Sun, 03 Aug 2025 21:04:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20250803-introduction-to-andrej-karpathy/</guid><description>&lt;h2 id="안드레이-카르파티는-누구인가"&gt;안드레이 카르파티는 누구인가?&lt;/h2&gt;
&lt;p&gt;안드레이 카르파티는 10년 이상 딥러닝 혁명의 중심에 있었던 컴퓨터 과학자입니다. 그의 경력은 현대 AI 역사상 가장 중요한 세 기관인 스탠포드 대학교, 테슬라, 그리고 OpenAI에 걸쳐 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;교육 및 초기 연구 (스탠포드 대학교):&lt;/strong&gt; 카르파티는 스탠포드 대학교에서 박사 학위를 받았으며, ImageNet 데이터셋의 창시자 중 한 명인 페이페이 리(Fei-Fei Li) 교수의 지도를 받았습니다. 그의 연구는 자연어 처리(NLP)와 컴퓨터 비전의 교차점에 초점을 맞췄습니다. 박사 과정 동안 그는 이미지의 내용을 자연어 문장으로 설명할 수 있는 획기적인 모델을 개발했습니다. 이미지 캡셔닝에 대한 이 연구는 기초가 되었으며, 복잡한 다중 모드 작업을 해결하기 위해 다양한 신경망 아키텍처(비전을 위한 합성곱 신경망과 언어를 위한 순환 신경망 등)를 결합하는 힘을 보여주었습니다. 그는 또한 스탠포드 최초의 딥러닝 강좌인 CS231n: &amp;ldquo;시각적 인식을 위한 합성곱 신경망&amp;quot;의 주 강사였으며, 이 강좌는 전 세계 학생들에게 중요한 자료가 되었습니다.&lt;/p&gt;</description></item><item><title>번역글: 유해한 직장 환경을 나타내는 9가지 신호 - 그리고 대처법</title><link>https://philipjkim.cc/posts/20250731-sings-of-toxic-environment/</link><pubDate>Thu, 31 Jul 2025 14:02:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20250731-sings-of-toxic-environment/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.themuse.com/advice/toxic-work-environment"&gt;https://www.themuse.com/advice/toxic-work-environment&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;대부분의 경력 기간 동안 저는 유해한 직장 환경을 피해 운이 좋다고 생각했습니다. 물론, 유해한 조직이 존재한다는 것을 알고 있었고, 이론적으로는 어떤 대가를 치르더라도 피해야 한다는 것을 알고 있었습니다. 하지만 유해한 직장이 실제로 어떤 모습인지 깨닫는 데는 수년이 걸렸습니다. 일단 깨닫고 나니, 저 역시 그런 직장에서 일했었다는 것을 알게 되었습니다.&lt;/p&gt;
&lt;p&gt;당시에는 제가 문제라고 생각했기 때문에 깨닫지 못했습니다. 제 업무는 충분히 전략적이지 않았고, 관리자로서의 잠재력이 없었거나, 승진할 준비가 되지 않았다고 생각했지, 제가 일했던 조직이 문제라고는 생각하지 않았습니다.&lt;/p&gt;</description></item><item><title>Go 는 왜 LLM 기반 Vibe-Coding에 적합한 언어인가?</title><link>https://philipjkim.cc/posts/20250731-golang-for-vibe-coding/</link><pubDate>Thu, 31 Jul 2025 11:55:18 +0900</pubDate><guid>https://philipjkim.cc/posts/20250731-golang-for-vibe-coding/</guid><description>&lt;p&gt;이 글에서는 LLM을 활용한 Vibe-Coding 시대에 Go 언어가 가지는 장점들을 알아봅니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(영문 글을 번역했던 블로그 대부분의 포스트와는 달리 이 글은 제가 초안을 작성하고, Gemini 의 도움을 받아 개선된 originality 가 있는 글입니다.)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-강력한-정적-타입-시스템과-컴파일-단계"&gt;1. 강력한 정적 타입 시스템과 컴파일 단계&lt;/h2&gt;
&lt;p&gt;Go는 정적 타입 언어이며 컴파일을 통해 실행 파일을 만듭니다. 이는 코드가 실행되기 전, 즉 컴파일 시점에 타입 불일치, 함수 인자 오류, 존재하지 않는 변수 참조 등 수많은 오류를 미리 잡아낼 수 있음을 의미합니다.&lt;/p&gt;</description></item><item><title>번역글: Gemini CLI: 소개 및 그 진정한 가치</title><link>https://philipjkim.cc/posts/20250730-gemini-cli-an-introduction-and-its-real-value/</link><pubDate>Wed, 30 Jul 2025 09:08:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20250730-gemini-cli-an-introduction-and-its-real-value/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://medium.com/@terrycho/gemini-cli-an-introduction-and-its-real-value-15bd070fb011"&gt;https://medium.com/@terrycho/gemini-cli-an-introduction-and-its-real-value-15bd070fb011&lt;/a&gt; (translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;얼마 전, Gemini CLI 발표 직후 구글의 Gemini 서버가 과부하되었다는 소식이 들려왔습니다. 사람들은 왜 Gemini CLI에 그렇게 열광하는 걸까요? 우리는 이미 웹과 데스크톱에서 사용할 수 있는 ChatGPT와 Claude, 그리고 Cursor와 Windsurf 같은 코딩 AI 도구, 심지어 Lovable과 V0 같은 바이브 코딩 도구까지 가지고 있습니다. 터미널 기반의 새로운 CLI 기반 AI가 이 시장에 어떤 영향을 미칠 수 있을까요?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://miro.medium.com/v2/resize:fit:1400/format:webp/1*mnQoAMyjje5FOHG5TT85qA.png" alt="img1"&gt;&lt;/p&gt;
&lt;p&gt;무료 서비스 발표가 상당한 인기를 얻었지만, Gemini CLI는 전체 소프트웨어 개발 수명 주기(SDLC)를 아우르는 오케스트레이터로서 새로운 입지를 확립했습니다. 이는 소프트웨어 개발 전체를 포괄하려는 야심 찬 계획을 엿볼 수 있게 합니다. 이 글에서는 Gemini CLI가 왜 그렇게 인기 있는지, 그 특징과 차별점, 숨겨진 가치, 그리고 미래 개발 가능성에 대해 논의할 것입니다.&lt;/p&gt;</description></item><item><title>Game Guide for Sampyong Hi-Lo (a.k.a. PLS7: Pot Limit Sampyong - 7 or better)</title><link>https://philipjkim.cc/posts/20250729-pls7-english-guide/</link><pubDate>Tue, 29 Jul 2025 13:46:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20250729-pls7-english-guide/</guid><description>&lt;p&gt;Sampyong Hi-Lo (a.k.a. PLS7: Pot Limit Sampyong - 7 or better) is a new poker variant based on Pot-Limit Omaha Hi-Lo (PLO8), with modified rules to allow for a wider variety and more powerful hands to occur frequently.&lt;/p&gt;
&lt;h2 id="1-core-rules"&gt;1. Core Rules&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Base Game&lt;/strong&gt;: Pot-Limit Omaha Hi-Lo. Betting is limited to the pot size, and the pot is split between the highest (High) and lowest (Low) hands.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hand Formation (Most Important Change)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Each player receives &lt;strong&gt;3 cards&lt;/strong&gt; instead of 4. Five community cards are dealt on the board. (Total 8-card pool)&lt;/li&gt;
&lt;li&gt;Unlike Omaha&amp;rsquo;s &amp;lsquo;2 hole cards + 3 board cards&amp;rsquo; rule, in Sampyong Hi-Lo, players can &lt;strong&gt;freely use any number (0-3) of their hole cards&lt;/strong&gt; from the total 8-card pool to make the best 5-card High hand and Low hand.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Low Hand Rule&lt;/strong&gt;: Adheres to the strengthened &lt;strong&gt;&amp;lsquo;7-or-better&amp;rsquo;&lt;/strong&gt; rule, which is stricter than standard Hi-Lo games. This means a Low hand must consist of five different cards ranked 7 or below to qualify. (The best possible Low hand is &lt;code&gt;A, 2, 3, 4, 5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recommendation for 4 players or fewer&lt;/strong&gt;: For 4 or fewer players, it is recommended to play Sampyong (PLS) focusing only on High hands, excluding the Low rule. In 2-3 player games, frequent Hi/Lo pot splits can make the game slow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-additional-special-hands"&gt;2. Additional Special Hands&lt;/h2&gt;
&lt;p&gt;These new special hands add more excitement to Sampyong Hi-Lo.&lt;/p&gt;</description></item><item><title>삼평 하이로우 (PLS7 - Pot Limit Sampyong 7 or better) 게임 가이드</title><link>https://philipjkim.cc/posts/20250724-sampyeong-holdem-guide-v1-4/</link><pubDate>Tue, 29 Jul 2025 13:46:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20250724-sampyeong-holdem-guide-v1-4/</guid><description>&lt;p&gt;삼평 하이로우(a.k.a. PLS7 : Pot Limit Sampyong - 7 or better)은 팟 리밋 오마하 하이-로우(PLO8)를 기반으로, 더 다양하고 강력한 핸드가 자주 나올 수 있도록 규칙을 변형한 새로운 방식의 포커 게임입니다.&lt;/p&gt;
&lt;h2 id="1-핵심-규칙"&gt;1. 핵심 규칙&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;기본 게임: 팟 리밋 오마하 하이-로우 (Pot-Limit Omaha Hi-Lo). 베팅은 팟 크기만큼만 가능하며, 가장 높은 패(High)와 가장 낮은 패(Low)가 팟을 나누어 가집니다.&lt;/li&gt;
&lt;li&gt;핸드 구성 방식 (가장 중요한 변경점):
&lt;ul&gt;
&lt;li&gt;각 플레이어는 4장이 아닌 &lt;strong&gt;3장&lt;/strong&gt;의 카드를 받습니다. 보드에는 5장의 공통 카드가 깔립니다. (총 8장의 카드 풀)&lt;/li&gt;
&lt;li&gt;오마하의 &amp;lsquo;핸드 2장 + 보드 3장&amp;rsquo; 규칙과 달리, 삼평 하이로우에서는 총 8장의 카드 중 &lt;strong&gt;원하는 개수(0~3장)의 핸드 카드를 자유롭게 사용&lt;/strong&gt;하여 최고의 5장짜리 하이(High) 핸드와 로우(Low) 핸드를 만듭니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;로우 핸드 규칙: 하이-로우 게임의 표준 규칙보다 강화된 &lt;strong&gt;&amp;lsquo;7-or-better&amp;rsquo;&lt;/strong&gt; 를 따릅니다. 즉, 로우 핸드는 서로 다른 7 이하의 숫자 5장으로 구성되어야 성립됩니다. (가장 좋은 로우 핸드는 &lt;code&gt;A, 2, 3, 4, 5&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;플레이어가 4명 이하일 경우는 로우 룰을 제외하고 하이로만 겨루는 삼평(PLS)을 추천합니다. 2~3인 플레이에서 하이/로우 스플릿이 되는 경우가 자주 발생하면 게임이 루즈해질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-추가-특수-족보"&gt;2. 추가 특수 족보&lt;/h2&gt;
&lt;p&gt;삼평 하이로우의 재미를 더하는 새로운 특수 족보입니다.&lt;/p&gt;</description></item><item><title>TotT: 위험 중심 테스트 (Risk-Driven Test)</title><link>https://philipjkim.cc/posts/20250729-tott-risk-driven-testing/</link><pubDate>Tue, 29 Jul 2025 10:35:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20250729-tott-risk-driven-testing/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2014/05/testing-on-toilet-risk-driven-testing.html"&gt;https://testing.googleblog.com/2014/05/testing-on-toilet-risk-driven-testing.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;우리는 모두 코드를 작성할 때 &lt;strong&gt;테스트를 작성하도록 길들여져 있습니다&lt;/strong&gt; : 단위, 기능, UI 등 모든 것을 말이죠. 우리는 결국 전문가입니다. 우리 중 많은 사람들은 작은 테스트가 작업을 빠르게 진행하게 하고, 더 큰 테스트가 안전과 마무리에 영감을 주는 것을 좋아합니다. 아니면 단순히 검토 중에 비난을 예상할 수도 있습니다. 우리는 이러한 테스트에 너무 익숙해져서 &lt;strong&gt;왜 테스트를 작성하는지 더 이상 질문하지 않는 경우&lt;/strong&gt;가 많습니다. 이것은 낭비적이고 위험할 수 있습니다.&lt;/p&gt;</description></item><item><title>TotT: 효과적인 테스트</title><link>https://philipjkim.cc/posts/20250728-tott-effective-testing/</link><pubDate>Mon, 28 Jul 2025 10:24:47 +0900</pubDate><guid>https://philipjkim.cc/posts/20250728-tott-effective-testing/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2014/05/testing-on-toilet-effective-testing.html"&gt;https://testing.googleblog.com/2014/05/testing-on-toilet-effective-testing.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;개별 단위 테스트를 작성하든 제품의 전체 테스트 프로세스를 설계하든, &lt;strong&gt;테스트가 코드의 버그를 얼마나 효과적으로 감지하고 보고하는지&lt;/strong&gt; 다시 한번 생각해보는 것이 중요합니다. 효과적이려면 모든 테스트가 극대화하려고 노력해야 하는 &lt;strong&gt;세 가지 중요한 품질&lt;/strong&gt;이 있습니다.&lt;/p&gt;
&lt;h2 id="충실도-fidelity"&gt;충실도 (Fidelity)&lt;/h2&gt;
&lt;p&gt;테스트 대상 코드가 손상되면 테스트는 실패합니다. &lt;strong&gt;고충실도 테스트는 테스트 대상 코드의 결함에 매우 민감하여 버그가 코드에 침투하는 것을 방지하는 데 도움이 됩니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;테스트가 코드의 모든 경로를 다루고 예상 상태에 대한 모든 관련 assertions 을 포함하는지 확인하여 충실도를 극대화하십시오.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>TotT: 메서드가 아닌 동작을 테스트하라</title><link>https://philipjkim.cc/posts/20250725-tott-test-behaviors-not-methods/</link><pubDate>Fri, 25 Jul 2025 09:17:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20250725-tott-test-behaviors-not-methods/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2014/04/testing-on-toilet-test-behaviors-not.html"&gt;https://testing.googleblog.com/2014/04/testing-on-toilet-test-behaviors-not.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;메서드를 작성한 후 메서드가 수행하는 모든 작업을 확인하는 테스트를 하나만 작성하기 쉽습니다. &lt;strong&gt;그러나 테스트와 public 메서드가 1:1 관계를 가져야 한다고 생각하는 것은 해로울 수 있습니다.&lt;/strong&gt; 우리가 정말로 테스트하고 싶은 것은 동작이며, 단일 메서드가 여러 동작을 나타낼 수 있고, 단일 동작이 때로는 여러 메서드에 걸쳐 있을 수도 있습니다.&lt;/p&gt;
&lt;p&gt;전체 메서드를 확인하는 나쁜 테스트를 살펴보겠습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Test&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testProcessTransaction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;newUserWithBalance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LOW_BALANCE_THRESHOLD&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;plus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dollars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transactionProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;processTransaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Pile of Beanie Babies&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dollars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertContains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;You bought a Pile of Beanie Babies&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getText&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEmails&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Your balance is low&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getEmails&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;getSubject&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;구매한 품목의 이름을 표시하고 잔액이 부족하다는 이메일을 보내는 것은 두 가지 별개의 동작이지만, 이 테스트는 동일한 메서드에 의해 트리거된다는 이유만으로 이 두 동작을 함께 살펴봅니다. &lt;strong&gt;이러한 테스트는 추가 동작이 계속 추가됨에 따라 시간이 지남에 따라 매우 커지고 유지 관리가 어려워지는 경우가 많습니다.&lt;/strong&gt; 결국에는 어떤 입력 부분이 어떤 단정(assertion)에 대한 책임이 있는지 파악하기가 매우 어려워질 것입니다. 테스트 이름이 메서드 이름을 직접적으로 반영한다는 사실 자체가 나쁜 징조입니다.&lt;/p&gt;</description></item><item><title>번역글: 프로처럼 거짓말하는 법: 블러핑의 기술</title><link>https://philipjkim.cc/posts/20250724-how-to-lie-like-a-pro-the-art-of-bluffing/</link><pubDate>Thu, 24 Jul 2025 10:24:27 +0900</pubDate><guid>https://philipjkim.cc/posts/20250724-how-to-lie-like-a-pro-the-art-of-bluffing/</guid><description>&lt;p&gt;원문: &lt;a href="https://upswingpoker.com/bet-size-strategy-tips-rules/"&gt;https://upswingpoker.com/bet-size-strategy-tips-rules/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;블러핑은 많은 포커 플레이어들에게 인기 있는 기술입니다. 하지만 블러핑을 너무 자주 사용하는 초보자들은 그 때문에 많은 돈을 잃습니다.&lt;/p&gt;
&lt;p&gt;프로페셔널 텍사스 홀덤 플레이어가 되고 싶다면, 블러핑을 너무 많이 하는 것을 자제해야 합니다.&lt;/p&gt;
&lt;p&gt;이 튜토리얼에서는 블러핑을 해야 하는 이유, 완벽한 블러핑을 성공시키는 방법, 블러핑을 얼마나 자주, 언제 사용해야 하는지 배울 것입니다.&lt;/p&gt;
&lt;h2 id="텍사스-홀덤-nlh-에서-왜-블러핑을-해야-할까요"&gt;텍사스 홀덤 (NLH) 에서 왜 블러핑을 해야 할까요?&lt;/h2&gt;
&lt;p&gt;블러핑은 두 가지 이점을 제공합니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;첫째, 실제 가지고 있는 패보다 훨씬 강한 패를 가지고 있는 것처럼 보여줌으로써 원래는 이길 수 없었던 팟을 가져갈 수 있습니다.&lt;/li&gt;
&lt;li&gt;둘째, 포커 플레이에 예측 불가능한 분위기를 부여합니다. 텍사스 홀덤에서 상대방은 당신이 어떤 순간에 강한 패를 플레이하는지 약한 패를 플레이하는지 판단하기 어려울 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="텍사스-홀덤에서-완벽한-블러핑을-성공시키는-방법은-무엇일까요"&gt;텍사스 홀덤에서 완벽한 블러핑을 성공시키는 방법은 무엇일까요?&lt;/h2&gt;
&lt;p&gt;예측 불가능성을 섞은 타이트하고 공격적인 플레이어의 이미지를 갖는 것도 중요합니다. 타이트하고 공격적인 이미지는 당신의 행동을 더 믿을 수 있게 만들 것입니다.&lt;/p&gt;</description></item><item><title>TotT: 좋은 테스트란 무엇인가?</title><link>https://philipjkim.cc/posts/20250724-testing-on-the-toilet-what-makes-a-good-test/</link><pubDate>Thu, 24 Jul 2025 10:02:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250724-testing-on-the-toilet-what-makes-a-good-test/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2014/03/testing-on-toilet-what-makes-good-test.html"&gt;https://testing.googleblog.com/2014/03/testing-on-toilet-what-makes-good-test.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;단위 테스트는 코드의 정확성을 확인하는 중요한 도구입니다. 그러나 &lt;strong&gt;좋은 테스트를 작성하는 것은 단순히 정확성을 확인하는 것 이상입니다.&lt;/strong&gt; 좋은 단위 테스트는 읽기 쉽고 유지 보수 가능하도록 여러 다른 속성을 보여야 합니다.&lt;/p&gt;
&lt;p&gt;좋은 테스트의 한 가지 속성은 명확성입니다. &lt;strong&gt;명확성이란 테스트가 사람들에게 읽기 쉬운 문서 역할을 해야 하며, 테스트 중인 코드를 해당 public API 측면에서 설명해야 함을 의미합니다.&lt;/strong&gt; 테스트는 구현 세부 사항을 직접 참조해서는 안 됩니다. 클래스의 테스트 이름은 클래스가 하는 모든 것을 말해야 하며, 테스트 자체는 클래스 사용 방법에 대한 예시가 되어야 합니다.&lt;/p&gt;</description></item><item><title>번역글: 원하는 기술을 갖춘 사람을 고용하라</title><link>https://philipjkim.cc/posts/20250723-hire-for-the-skills-you-want/</link><pubDate>Wed, 23 Jul 2025 07:42:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20250723-hire-for-the-skills-you-want/</guid><description>&lt;p&gt;원문: Pragmatic Programmers Newsletter (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;제인은 12번째 면접에 나타난다. 면접관은 그녀에게 마커를 건네고 화이트보드를 가리킨다. &amp;ldquo;연결되고 가중치가 있으며 무방향 그래프의 최소 신장 트리의 가중치를 계산하는 코드를 작성해 보세요.&amp;rdquo; 제인은 한숨을 쉬었다. 이달 들어 벌써 세 번째였다. 그녀는 작업을 시작했다.&lt;/p&gt;
&lt;p&gt;내 생각에, 그녀는 아무리 답변 연습을 했더라도 그 직업을 가져서는 안 된다.&lt;/p&gt;
&lt;p&gt;나에게 좋은 지원자라면 펜을 내려놓고 이렇게 물었을 것이다. &amp;ldquo;이것에 대한 맥락을 알려주시겠어요? 왜냐하면 프로그래머가 이런 종류의 문제를 처리하기 위해 AI(또는 라이브러리)를 사용하기를 원하실 테니까요. 저는 귀사의 AI가 할 수 없는 일을 할 수 있게 해주는 직업을 찾고 있었습니다.&amp;rdquo;&lt;/p&gt;</description></item><item><title>번역글: 40대에는 다음을 깨달을 만큼 현명해져야 합니다</title><link>https://philipjkim.cc/posts/20250723-by-age-40-you-should-be-smart-enough-to-realize-these/</link><pubDate>Wed, 23 Jul 2025 07:29:58 +0900</pubDate><guid>https://philipjkim.cc/posts/20250723-by-age-40-you-should-be-smart-enough-to-realize-these/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.quora.com/profile/Waleed-666/BY-AGE-40-YOU-SHOULD-BE-SMART-ENOUGH-TO-REALIZE-THIS-1-Someone-makes-10x-more-than-you-do-in-a-9-5-job-because-they-h"&gt;https://www.quora.com/profile/Waleed-666/BY-AGE-40-YOU-SHOULD-BE-SMART-ENOUGH-TO-REALIZE-THIS-1-Someone-makes-10x-more-than-you-do-in-a-9-5-job-because-they-h&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li&gt;어떤 사람은 9-5시 직업에서 당신보다 10배 더 많이 버는데, 이는 그들의 업무에 더 많은 &amp;ldquo;레버리지&amp;quot;가 있기 때문입니다.&lt;/li&gt;
&lt;li&gt;산만함은 성공의 가장 큰 적입니다. 그것은 당신의 두뇌를 위축시키고 파괴합니다.&lt;/li&gt;
&lt;li&gt;당신이 되고 싶은 위치에 있지 않은 사람에게서 조언을 구해서는 안 됩니다.&lt;/li&gt;
&lt;li&gt;아무도 당신의 문제를 해결해주러 오지 않습니다. 당신의 삶은 100% 당신의 책임입니다.&lt;/li&gt;
&lt;li&gt;100권의 자기계발서가 필요한 것이 아니라, 필요한 것은 오직 행동과 자기 훈련입니다.&lt;/li&gt;
&lt;li&gt;특정 기술(예: 의사, 엔지니어, 변호사)을 배우기 위해 대학에 가지 않았다면, 다음 90일 안에 영업을 배우는 것만으로도 더 많은 돈을 벌 수 있습니다.&lt;/li&gt;
&lt;li&gt;아무도 당신에게 신경 쓰지 않습니다. 그러니 부끄러워하지 말고 나가서 당신의 기회를 만드세요.&lt;/li&gt;
&lt;li&gt;당신보다 똑똑한 사람을 찾으면 경쟁하지 말고 그들과 함께 일하세요.&lt;/li&gt;
&lt;li&gt;흡연은 당신의 삶에 아무런 이점이 없습니다. 이 습관은 당신의 사고를 느리게 하고 집중력을 저하시킬 뿐입니다.&lt;/li&gt;
&lt;li&gt;편안함은 최악의 중독이자 우울증으로 가는 값싼 티켓입니다.&lt;/li&gt;
&lt;li&gt;사람들이 알아야 할 것 이상을 말하지 말고, 당신의 사생활을 존중하십시오.&lt;/li&gt;
&lt;li&gt;술은 어떤 대가를 치르더라도 피하십시오. 이성을 잃고 바보처럼 행동하는 것보다 더 나쁜 것은 없습니다.&lt;/li&gt;
&lt;li&gt;당신의 기준을 높게 유지하고 단지 가능하다고 해서 어떤 것에 만족하지 마십시오.&lt;/li&gt;
&lt;li&gt;당신이 만드는 가족이 당신이 태어난 가족보다 더 중요합니다.&lt;/li&gt;
&lt;li&gt;99.99%의 정신적 문제로부터 자신을 구하기 위해 어떤 것도 개인적으로 받아들이지 않도록 훈련하십시오.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>TotT: 구현이 아닌 동작을 테스트하세요</title><link>https://philipjkim.cc/posts/20250722-tott-test-behavior-not-implementation/</link><pubDate>Tue, 22 Jul 2025 16:50:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20250722-tott-test-behavior-not-implementation/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2013/08/testing-on-toilet-test-behavior-not.html"&gt;https://testing.googleblog.com/2013/08/testing-on-toilet-test-behavior-not.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;여러분의 신뢰할 수 있는 Calculator 클래스는 많은 행복한 사용자를 보유한 가장 인기 있는 오픈소스 프로젝트 중 하나입니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Calculator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;또한 제대로 작동하는지 확인하는 &lt;strong&gt;테스트&lt;/strong&gt;도 있습니다:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testAdd&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;그러나 새로운 멋진 라이브러리는 덧셈 연산자 대신 사용하면 코드에서 몇 배의 속도 향상을 약속합니다. 여러분은 이 라이브러리를 사용하기 위해 들뜬 마음으로 &lt;strong&gt;코드를 변경합니다&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>TotT: 상태 테스트 vs. 상호작용 테스트</title><link>https://philipjkim.cc/posts/20250722-tott-testing-state-vs-testing-interactions/</link><pubDate>Tue, 22 Jul 2025 13:11:07 +0900</pubDate><guid>https://philipjkim.cc/posts/20250722-tott-testing-state-vs-testing-interactions/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2013/03/testing-on-toilet-testing-state-vs.html"&gt;https://testing.googleblog.com/2013/03/testing-on-toilet-testing-state-vs.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;단위 테스트가 테스트 중인 코드가 제대로 작동하는지 확인하는 방법은 일반적으로 두 가지가 있습니다: 상태 테스트 또는 상호작용 테스트. 이들의 차이점은 무엇일까요?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;상태 테스트는 테스트 중인 코드가 올바른 결과를 반환하는지 확인하는 것을 의미합니다.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testSortNumbers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberSorter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numberSorter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NumberSorter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;quicksort&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bubbleSort&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 반환된 목록이 정렬되었는지 확인합니다. 어떤 정렬 알고리즘이 사용되었는지는 중요하지 않으며,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 올바른 결과가 반환되기만 하면 됩니다.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;numberSorter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sortNumbers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ArrayList&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;상호작용 테스트는 테스트 중인 코드가 특정 메서드를 올바르게 호출하는지 확인하는 것을 의미합니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>TotT: GUI 테스팅의 MVP 되기</title><link>https://philipjkim.cc/posts/20250722-tott-be-an-mvp-of-gui-testing/</link><pubDate>Tue, 22 Jul 2025 10:49:31 +0900</pubDate><guid>https://philipjkim.cc/posts/20250722-tott-be-an-mvp-of-gui-testing/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2009/02/with-all-sport-drug-scandals-of-late.html"&gt;https://testing.googleblog.com/2009/02/with-all-sport-drug-scandals-of-late.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;최근의 모든 스포츠 약물 스캔들로 인해 요즘 좋은 롤 모델을 찾기가 어렵습니다. 하지만 롤 모델이 도메인 모델(비즈니스 엔티티의 객체 모델)이라면 MVP가 되기 위해 속임수를 쓸 필요가 없습니다. Model-View-Presenter를 사용하세요!&lt;/p&gt;
&lt;p&gt;MVP는 MVC(Model-View-Controller)와 매우 유사합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MVC에서는 아래 다이어그램과 같이 프레젠테이션 로직이 Controller와 View에 의해 공유됩니다.&lt;/strong&gt; View는 일반적으로 가시적인 GUI 프레임워크 구성 요소에서 직접 파생되며, 모델을 관찰하고 사용자에게 시각적으로 보여줍니다. Controller는 사용자 이벤트를 모델 변경으로 변환하는 방법을 결정하는 역할을 합니다. &lt;strong&gt;MVP에서는 프레젠테이션 로직이 Presenter라고도 알려진 Supervising Controller에 의해 전적으로 처리됩니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>번역글: 벳 사이즈 전략: 완벽한 벳 사이즈를 선택하는 데 도움이 되는 8가지 규칙</title><link>https://philipjkim.cc/posts/20250721-bet-size-strategy-tips-rules/</link><pubDate>Mon, 21 Jul 2025 18:39:00 +0900</pubDate><guid>https://philipjkim.cc/posts/20250721-bet-size-strategy-tips-rules/</guid><description>&lt;p&gt;원문: &lt;a href="https://upswingpoker.com/bet-size-strategy-tips-rules/"&gt;https://upswingpoker.com/bet-size-strategy-tips-rules/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;노 리밋 홀덤에서 최고의 베팅 크기를 선택하는 것은 까다로운 작업입니다.&lt;/p&gt;
&lt;p&gt;모든 상황에서 사용할 수 있는 하나의 &amp;lsquo;완벽한&amp;rsquo; 베팅 크기는 없습니다. 최적의 베팅 크기는 다음과 같은 여러 요인에 따라 달라집니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;프리플랍 액션&lt;/li&gt;
&lt;li&gt;보드 텍스처&lt;/li&gt;
&lt;li&gt;스택 깊이&lt;/li&gt;
&lt;li&gt;누가 레인지 이점(range advantage)을 가지고 있는지&lt;/li&gt;
&lt;li&gt;…그리고 더 많은 것들!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이 기사에서는 33% 팟 크기 베팅이든 엄청난 오버벳이든 어떤 상황에서도 승리하는 크기를 선택하는 데 도움이 되는 8가지 일반적인 규칙을 배우게 됩니다.&lt;/p&gt;</description></item><item><title>번역글: 오마하 최고의 시작 핸드: 빠른 가이드</title><link>https://philipjkim.cc/posts/20250721-omaha-best-starting-hands-a-quick-guide/</link><pubDate>Mon, 21 Jul 2025 15:48:42 +0900</pubDate><guid>https://philipjkim.cc/posts/20250721-omaha-best-starting-hands-a-quick-guide/</guid><description>&lt;p&gt;원문: &lt;a href="https://deepsolver.com/blog/omaha-best-starting-hands-a-quick-guide"&gt;https://deepsolver.com/blog/omaha-best-starting-hands-a-quick-guide&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;노 리밋 홀덤의 경우, 가능한 최고의 시작 핸드를 정확히 찾아내는 것은 매우 쉽습니다: AA, KK, QQ, JJ, TT, 99 그리고 AK-AJ. 핸드 매트릭스에서 모든 가능한 조합을 시각화하는 것도 매우 쉽습니다. 하지만 &lt;a href="https://deepsolver.com/blog/meet-pot-limit-omaha-the-coolest-game-out-there"&gt;팟 리밋 오마하&lt;/a&gt;에 대해 이야기할 때는 상황이 조금 달라집니다.&lt;/p&gt;
&lt;p&gt;결국, 홀 카드 수가 두 배로 늘어나 프리플랍에서 270,000가지 이상의 고유한 핸드 조합이 생성됩니다 (텍사스 홀덤에서는 1326가지에 불과합니다)!&lt;/p&gt;
&lt;p&gt;오마하 포커 경험이 있더라도 이렇게 엄청난 숫자를 이해하기는 쉽지 않습니다. 걱정 마세요. 저희가 최고의 오마하 시작 핸드와 특정 조합이 돋보이는 이유를 알려드리겠습니다.&lt;/p&gt;</description></item><item><title>번역글: GTO 위자드: 로우 스테이크 플레이어들이 저지르는 3가지 실수</title><link>https://philipjkim.cc/posts/20250721-gto-wizard-3-mistakes-low-stakes-players-make/</link><pubDate>Mon, 21 Jul 2025 13:19:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250721-gto-wizard-3-mistakes-low-stakes-players-make/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.pokernews.com/strategy/gto-wizard-low-stakes-mistakes-47867.htm"&gt;https://www.pokernews.com/strategy/gto-wizard-low-stakes-mistakes-47867.htm&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;많은 초보 플레이어들은 물론, 때로는 숙련된 포커 플레이어들도 본전치기 이상의 결과를 내거나 소액만 따는 데 어려움을 겪을 것입니다.&lt;/p&gt;
&lt;p&gt;이런 일이 발생하는 이유나 원인은 항상 있습니다. 단기적으로는 단순히 운이 나빠서 최근 카드 분배가 잘 안 되고 있을 수도 있습니다. 하지만 실망스러운 결과가 오랫동안 지속되었다면, 이 글에 나열된 세 가지 실수 중 하나를 저지르고 있을 가능성이 높으며, 저희는 오류를 수정하는 방법에 대한 조언을 드릴 것입니다.&lt;/p&gt;
&lt;h2 id="실수-1-드라이-보드에서-슬로우-플레이하기"&gt;실수 #1: 드라이 보드&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;에서 슬로우 플레이&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;하기&lt;/h2&gt;
&lt;p&gt;&lt;img src="https://s.pnimg.net/sJk7K0OfF4s2t_3WkP8coAMCfLXfqUKG3IEadctIO8I/pr:article-body-2x/aHR0cHM6Ly9wbmlt/Zy5uZXQvdy9hcnRp/Y2xlcy1hdHRhY2ht/ZW50cy8wLzY3Yy83/NGJjM2MyM2M2LnBu/Zw.webp" alt="mistake_1"&gt;&lt;/p&gt;</description></item><item><title>번역글: 자전거를 탈 때의 손목 통증</title><link>https://philipjkim.cc/posts/20250721-hand-and-wrist-pain-on-the-bike/</link><pubDate>Mon, 21 Jul 2025 10:21:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250721-hand-and-wrist-pain-on-the-bike/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.britishcycling.org.uk/knowledge/training/health-recovery/article/izn20140820-Physiotherapy-Ask-the-Experts--Hand-and-wrist-pain-on-the-bike-0"&gt;https://www.britishcycling.org.uk/knowledge/training/health-recovery/article/izn20140820-Physiotherapy-Ask-the-Experts--Hand-and-wrist-pain-on-the-bike-0&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;자전거를 탈 때의 &lt;a href="https://www.britishcycling.org.uk/knowledge/article/izn20140123-All-Cycling-Are-you-sitting-comfortably--0"&gt;안장 통증&lt;/a&gt; 및 &lt;a href="https://www.britishcycling.org.uk/knowledge/article/izn20141104-Physiotherapy-Foot-Pain-on-the-Bike-0"&gt;발 통증&lt;/a&gt;과 같은 미묘한 문제를 다루었으므로 이제 손과 손목으로 주의를 돌리겠습니다. 많은 자전거 타는 사람들이 손이나 손목에 통증이나 무감각을 겪으며, 이는 라이딩의 즐거움과 잠재적으로는 성능에도 영향을 미칩니다. 이 글에서는 잠재적인 원인과 불편함을 예방하고 완화하기 위해 할 수 있는 일에 대해 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;손과 손목에 불편함, 통증, 따끔거림 또는 무감각을 유발할 수 있는 두 가지 주요 질환이 있습니다.&lt;/p&gt;
&lt;h3 id="핸들바-마비"&gt;핸들바 마비&lt;/h3&gt;
&lt;p&gt;의학적으로 척골 신경 병증이라고도 불리지만 핸들바 마비로도 알려진 자전거 타는 사람들에게 비교적 흔한 증상입니다. 이는 약지와 새끼손가락에 신경을 공급하는 척골 신경의 압박으로 인해 발생하며, 손가락에 따끔거림, 무감각 또는 통증, 또는 손에 약화로 나타납니다. 압박 외에도 신경의 과신전도 유사한 증상을 유발할 수 있으며, 이는 드롭을 잡고 장시간 라이딩할 때 발생할 수 있습니다. 이러한 증상이 나타나면 즉시 조치를 취해야 합니다. 해결하기가 매우 어렵기 때문입니다. 전문적인 의학적 조언을 구하고 아래에 설명된 예방 조치를 적용하십시오.&lt;/p&gt;</description></item><item><title>TotT: 인터페이스 테스트하기</title><link>https://philipjkim.cc/posts/20250721-tott-testing-against-interfaces/</link><pubDate>Mon, 21 Jul 2025 10:01:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20250721-tott-testing-against-interfaces/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/07/tott-testing-against-interfaces.html"&gt;https://testing.googleblog.com/2008/07/tott-testing-against-interfaces.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;부족함에 대한 지속적인 느낌을 억누르기 위해, 당신은 공학 분야의 진정한 통과 의례인 자신만의 행성 파괴 광선총을 만드는 데 시간을 들였습니다. 축하합니다. 그리고 당신은 매우 자랑스러워했지만, 그 다음 주말에 이워크&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; 해설이 포함된 한정판 스타워즈 3부작을 구매하여 데스스타&lt;sup id="fnref:2"&gt;&lt;a href="#fn:2" class="footnote-ref" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;가 알데라안&lt;sup id="fnref:3"&gt;&lt;a href="#fn:3" class="footnote-ref" role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt;을 파괴하는 것을 보고 잘못된 결정을 내렸다는 것을 깨달았습니다. 당신의 행성 파괴 광선총은 파란색 레이저를 가지고 있지만, 녹색 레이저가 훨씬 더 멋있어 보입니다. 하지만 라디오셱&lt;sup id="fnref:4"&gt;&lt;a href="#fn:4" class="footnote-ref" role="doc-noteref"&gt;4&lt;/a&gt;&lt;/sup&gt;에 가서 기존의 파괴 광선총에 끼울 수 있는 녹색 레이저를 사는 것은 간단한 문제가 아닙니다. 녹색 레이저를 가지려면 처음부터 다른 행성 파괴 광선총을 만들어야 할 것입니다. 두 개의 파괴 광선총을 소유하는 것이 하나보다 이웃들의 질투심을 더 자극할 것이므로 당신에게는 괜찮습니다.&lt;/p&gt;</description></item><item><title>인물 소개: 필 아이비(Phil Ivey), 살아있는 전설</title><link>https://philipjkim.cc/posts/20250718-about-phil-ivey/</link><pubDate>Fri, 18 Jul 2025 09:23:52 +0900</pubDate><guid>https://philipjkim.cc/posts/20250718-about-phil-ivey/</guid><description>&lt;p&gt;&lt;img src="https://www.tightpoker.com/app/uploads/2023/05/Screenshot-2023-04-13-at-17.37.02-874x492-1.jpg" alt="phil_ivey_1"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;당신은 당신의 방식대로 칩을 따세요, 나는 내 방식대로 딸 테니까요.&amp;rdquo; (You get your chips your way, I’ll get my chips mine.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="통계로-증명되는-그의-위대함"&gt;통계로 증명되는 그의 위대함&lt;/h2&gt;
&lt;p&gt;필 아이비가 &amp;lsquo;포커계의 타이거 우즈&amp;rsquo;로 불리며 역사상 가장 위대한 포커 플레이어(GOAT, Greatest Of All Time) 중 한 명으로 꼽히는 이유는 그의 통산 기록, 즉 숫자가 가장 강력하게 증명합니다. 그의 커리어는 단순한 상금 액수를 넘어, 꾸준함, 다재다능함, 그리고 라이브와 온라인을 가리지 않는 압도적인 지배력으로 요약됩니다.&lt;/p&gt;</description></item><item><title>TotT: "Static Cling" 퇴치하기</title><link>https://philipjkim.cc/posts/20250717-tott-defeat-static-cling/</link><pubDate>Thu, 17 Jul 2025 17:03:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20250717-tott-defeat-static-cling/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/06/defeat-static-cling.html"&gt;https://testing.googleblog.com/2008/06/defeat-static-cling.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;당신은 페어 프로그래밍을 하고 있고, 많은 뛰어난 사람들이 그렇듯이 소리 내어 말하고 있습니다. &amp;ldquo;목을 만들고, 주입하고, 테스트를 다시 실행할 거야. 통과해야 하는데&amp;hellip; 젠장!&amp;rdquo; 당신의 파트너는 예외 &lt;code&gt;&amp;quot;ConnectionFactory not initialized&amp;quot;&lt;/code&gt;를 발견합니다. &amp;ldquo;뭐?&amp;rdquo; 그녀는 말합니다. &amp;ldquo;뭔가가 데이터베이스를 사용하고 있어? 젠장, 이건 작은 테스트여야 했는데.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;검사해보니 당신의 클래스가 다른 클래스의 정적 메서드를 호출하고 있다는 것을 발견했습니다. Static Cling&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;이 발생한 것입니다! 만약 정적 메서드에 의존하는 코드를 생성하는 데이터 지속성 레이어를 (잘못) 사용하고, &lt;em&gt;주의를 기울이지 않았다면&lt;/em&gt;, 당신의 코드는 다음과 같을 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 당신이 꼭 알아야 할 필수 포커 통계지표</title><link>https://philipjkim.cc/posts/20250718-essential-poker-statistics-you-need-to-know/</link><pubDate>Thu, 17 Jul 2025 13:13:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20250718-essential-poker-statistics-you-need-to-know/</guid><description>&lt;p&gt;원문: &lt;a href="https://pokercopilot.com/essential-poker-statistics"&gt;https://pokercopilot.com/essential-poker-statistics&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="가장-중요한-포커-통계지표는-무엇인가요"&gt;가장 중요한 포커 통계지표는 무엇인가요?&lt;/h2&gt;
&lt;p&gt;저희 (pokercopilot.com) 포커 HUD 소프트웨어는 많은 통계를 제공합니다. 어떤 통계가 관련성이 있고 중요한지 아는 것은 당신에게 큰 힘이 됩니다. 포커 소프트웨어를 처음 사용하는 경우 필수적인 세 가지 포커 통계를 제외한 모든 통계를 처음에는 무시할 수 있습니다. 기본 통계를 사용하는 방법을 이해하면 플레이 스타일과 선택한 테이블 크기에 따라 더 많은 통계를 추가할 수 있습니다.&lt;/p&gt;
&lt;p&gt;세 가지 주요 포커 통계(및 한 가지 보너스 통계):&lt;/p&gt;</description></item><item><title>번역글: King's Bounty 전략</title><link>https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/</link><pubDate>Thu, 17 Jul 2025 10:49:03 +0900</pubDate><guid>https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/</guid><description>&lt;p&gt;원문: &lt;a href="https://gamefaqs.gamespot.com/pc/577442-kings-bounty/faqs/7416"&gt;https://gamefaqs.gamespot.com/pc/577442-kings-bounty/faqs/7416&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;이미지 출처: &lt;a href="https://shot97retro.blogspot.com/2018/06/kings-bounty-in-depth-written-amiga.html"&gt;https://shot97retro.blogspot.com/2018/06/kings-bounty-in-depth-written-amiga.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;King&amp;rsquo;s Bounty 전략, (C) Chris Jones 2000&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;이름&lt;/th&gt;
 &lt;th&gt;KINGS BOUNTY&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;제작사&lt;/td&gt;
 &lt;td&gt;ELECTRONIC ARTS/NEW WORLD COMPUTING&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;장르&lt;/td&gt;
 &lt;td&gt;STRATEGY/RPG&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;연도&lt;/td&gt;
 &lt;td&gt;1990&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;난이도&lt;/td&gt;
 &lt;td&gt;EASY / NORMAL / HARD/ IMPOSSIBLE&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;플랫폼&lt;/td&gt;
 &lt;td&gt;SEGA MEGADRIVE(GENESIS) / PC DOS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;1&lt;/th&gt;
 &lt;th&gt;&lt;a href="https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/#1-%ea%b8%b0%ec%b4%88"&gt;기초&lt;/a&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/#2-%ec%a2%85%ec%a1%b1"&gt;종족&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/#3-%ec%9c%a0%eb%ac%bc"&gt;유물&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/#4-%ec%95%85%eb%8b%b9"&gt;악당&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20250717-kings-bounty-strategy-guide/#5-%ec%9d%bc%eb%b0%98-%ec%a0%84%ec%88%a0"&gt;일반 전술&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://i.imgur.com/98GHma4.jpg" alt="title"&gt;&lt;/p&gt;
&lt;h3 id="1-기초"&gt;1: 기초&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;시작:&lt;/strong&gt;
게임을 시작할 때, 성 안의 모든 유닛은 잊고 캐릭터가 보호를 위해 얻을 수 있는 최대량의 파이크맨(Pikemen)만 생각하세요. 가장 가까운 마을로 가서 보트를 빌리세요. 이 보트를 타고 현재 대륙의 가장자리를 따라 이동하며 발견하는 모든 금을 농민들에게 주어 리더십으로 전환하세요. 가능한 한 빨리 다음 대륙으로 이동하려고 노력하세요.&lt;/p&gt;</description></item><item><title>번역글: 직원들을 아기 다루듯 (babysitting) 대하지 마세요: 효과적인 리더십을 위한 가이드</title><link>https://philipjkim.cc/posts/20250717-stop-babysitting-your-employees-a-guide-to-effective-leadership/</link><pubDate>Thu, 17 Jul 2025 10:21:58 +0900</pubDate><guid>https://philipjkim.cc/posts/20250717-stop-babysitting-your-employees-a-guide-to-effective-leadership/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.linkedin.com/pulse/stop-babysitting-your-employees-guide-effective-leadership-hakes-1ddpc/"&gt;https://www.linkedin.com/pulse/stop-babysitting-your-employees-guide-effective-leadership-hakes-1ddpc/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;직원들을 실제로 이끄는 것보다 보모처럼 돌보는 데 더 많은 시간을 보낸다고 느껴본 적이 있나요? 마치 하루에 세 번씩 모든 작업 현장에 끊임없이 나타나지 않고, 모든 작은 세부 사항에 대한 프로세스를 만들지 않고, 직접 문제 해결에 뛰어들지 않으면 모든 것이 무너질 것 같은 느낌이 드나요? 네, 저도 그런 경험이 있습니다. 그것은 지치고, 좌절감을 주며, 솔직히 성공적인 사업을 구축하는 방식이 아닙니다.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://youtu.be/SucD5ko9AxI?si=cnPjs37gfPnizdj-"&gt;새로운 쇼인 토랜도 온 비즈니스의 첫 번째 에피소드&lt;/a&gt;에서 저는 리더십 코치 &lt;a href="https://www.linkedin.com/in/brittanydrozd/"&gt;브리트니 드로즈&lt;/a&gt;와 함께 이 너무나 흔한 문제를 분석하기 위해 앉았습니다. 그리고 솔직히 말씀드리자면, 우리는 정말 귀중한 것을 발견했습니다. 요점은 다음과 같습니다.&lt;/p&gt;</description></item><item><title>번역글: 판타지 농구 작동 방식: 최고의 전략 가이드 및 팁 2025</title><link>https://philipjkim.cc/posts/20250716-how-does-fantasy-basketball-work/</link><pubDate>Wed, 16 Jul 2025 13:41:01 +0900</pubDate><guid>https://philipjkim.cc/posts/20250716-how-does-fantasy-basketball-work/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.rotowire.com/basketball/advice/"&gt;https://www.rotowire.com/basketball/advice/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="판타지-농구-플레이-방법"&gt;판타지 농구 플레이 방법&lt;/h2&gt;
&lt;p&gt;판타지 스포츠를 처음 접하는 분이든, 새로운 도전을 찾는 노련한 판타지 풋볼 선수이든, 이 가이드는 판타지 농구에 접근하는 방법에 대해 알려드리는 것을 목표로 합니다. 성공을 위한 전략과 RotoWire가 판타지 리그 및 콘테스트에서 승리하는 데 어떻게 도움이 되는지 알아보려면 계속 읽으십시오.&lt;/p&gt;
&lt;p&gt;판타지 농구는 다른 판타지 스포츠와 동일한 기본 원리로 작동합니다. 게임은 각 리그의 선수로 팀을 구성하고 실제 경기력을 기반으로 포인트를 획득하는 것을 기반으로 합니다. 획득한 포인트는 당일, 주, 또는 시즌의 승패를 결정합니다. 판타지 농구는 일반적으로 다른 판타지 게임보다 정규 형식에서 드래프트되는 선수가 적기 때문에 다른 판타지 스포츠보다 쉽게 시작할 수 있습니다.&lt;/p&gt;</description></item><item><title>게임 소개: 추억의 명작, 제3차 슈퍼로봇대전</title><link>https://philipjkim.cc/posts/20250716-game-review-the-3rd-super-robot-wars/</link><pubDate>Wed, 16 Jul 2025 11:08:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20250716-game-review-the-3rd-super-robot-wars/</guid><description>&lt;p&gt;&lt;img src="https://philipjkim.cc/img/srw3.jpg" alt="srw3_poster"&gt;&lt;/p&gt;
&lt;h3 id="서문-우리들의-청춘을-불태웠던-강철의-거인들"&gt;서문: 우리들의 청춘을 불태웠던 강철의 거인들&lt;/h3&gt;
&lt;p&gt;1993년, 슈퍼 패미컴(SFC)의 황금기. 수많은 게임들 속에서도 유독 소년들의 가슴을 뜨겁게 달구었던 이름이 있습니다. 바로 &lt;strong&gt;&amp;lsquo;제3차 슈퍼로봇대전&amp;rsquo;&lt;/strong&gt; (alias: 슈로대3, SRW3) 입니다.&lt;/p&gt;
&lt;p&gt;단순한 크로스오버를 넘어, &amp;lsquo;DC전쟁&amp;rsquo; 이후의 독자적인 오리지널 스토리를 본격적으로 펼쳐 보이며 &amp;lsquo;슈퍼로봇대전&amp;rsquo; 시리즈의 정체성을 확립한 기념비적인 작품. 건담과 마징가, 겟타로보가 나란히 서서 미지의 적과 싸운다는 꿈같은 상상을 현실로 만들어준 게임. 누군가에게는 밤새워 공략집을 뒤적이며 숨겨진 유닛을 얻었던 추억으로, 또 다른 누군가에게는 친구와 분기점에 대해 열띤 토론을 벌였던 기억으로 남아있을 것입니다.&lt;/p&gt;</description></item><item><title>TotT: 의지할 수 있는 친구들</title><link>https://philipjkim.cc/posts/20250716-tott-friends-you-can-depend-on/</link><pubDate>Wed, 16 Jul 2025 10:47:04 +0900</pubDate><guid>https://philipjkim.cc/posts/20250716-tott-friends-you-can-depend-on/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/06/tott-friends-you-can-depend-on.html"&gt;https://testing.googleblog.com/2008/06/tott-friends-you-can-depend-on.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;테스트 환경에서 사용하기 너무 어렵거나 느린 것에 의존하는 코드를 테스트하고 싶을 때는, 의존성 대신 테스트 더블을 사용하세요.
더미(Dummy)는 API를 만족시키기 위해 가짜 입력 값을 전달합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ITEM_NAME&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ShoppingCart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ShoppingCart&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QUANTITY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QUANTITY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ITEM_NAME&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;스텁(Stub)&lt;/strong&gt; 은 실제 객체를 오버라이드하고 하드코딩된 값을 반환합니다. 스텁만을 사용한 테스트는 상태 기반 테스트입니다. 시스템을 실행한 다음 시스템이 예상된 상태인지 확인합니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ItemPricer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pricer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ItemPricer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BigDecimal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;getPrice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PRICE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ShoppingCart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ShoppingCart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pricer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dummyItem&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;QUANTITY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;QUANTITY&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;PRICE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getCost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ITEM_NAME&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;목(Mock)&lt;/strong&gt; 은 값을 반환할 수 있지만, 메서드가 호출되는 방식에도 신경을 씁니다. (&amp;ldquo;엄격한 목(strict mocks)&amp;rdquo; 은 메서드 호출 순서에 신경을 쓰는 반면, &amp;ldquo;유연한 목(lenient mocks)&amp;rdquo; 은 그렇지 않습니다.) 목을 사용한 테스트는 상호작용 기반 테스트입니다. 목에 기대값을 설정하고, 목은 실행될 때 기대값을 검증합니다. 이 예시는 JMock을 사용하여 목을 생성합니다(EasyMock, Mockito 도 유사합니다):&lt;/p&gt;</description></item><item><title>은하영웅전설, 두 영웅의 리더십 비교: 라인하르트 vs 양 웬리</title><link>https://philipjkim.cc/posts/20250716-legend-of-the-galactic-heroes-reinhard-vs-yang/</link><pubDate>Wed, 16 Jul 2025 10:26:02 +0900</pubDate><guid>https://philipjkim.cc/posts/20250716-legend-of-the-galactic-heroes-reinhard-vs-yang/</guid><description>&lt;p&gt;&lt;img src="https://philipjkim.cc/img/lotgh.png" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;소설 &amp;lsquo;은하영웅전설&amp;rsquo;의 두 주인공, 은하제국의 &lt;strong&gt;&amp;lsquo;상승의 천재&amp;rsquo;&lt;/strong&gt; 라인하르트 폰 로엔그람과 자유행성동맹의 &lt;strong&gt;&amp;lsquo;불패의 마술사&amp;rsquo;&lt;/strong&gt; 양 웬리는 시대를 대표하는 위대한 전략가이자 리더이지만, 그들의 리더십 스타일은 극명한 대조를 이룹니다. 두 영웅의 리더십을 장점과 단점으로 나누어 비교하면 다음과 같습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="라인하르트-폰-로엔그람-reinhard-von-lohengramm---카리스마적-전제군주형-리더"&gt;&lt;strong&gt;라인하르트 폰 로엔그람 (Reinhard von Lohengramm) - 카리스마적 전제군주형 리더&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;우주를 손에 넣겠다&amp;quot;는 개인의 야망을 원동력으로 삼아, 압도적인 카리스마와 천재적인 능력으로 부하들을 이끌고 낡은 체제를 무너뜨리는 혁명가입니다.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;구분&lt;/th&gt;
 &lt;th&gt;상세 설명&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;장점&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;1. 압도적인 카리스마와 비전 제시&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;명확하고 거대한 목표(우주 통일, 골덴바움 왕조 타도)를 제시하고, 스스로가 그 선두에 서서 불가능을 가능으로 만드는 모습을 통해 부하들에게 절대적인 충성심과 열광적인 지지를 이끌어 냅니다. 그의 존재 자체가 조직의 구심점이자 원동력입니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2. 신속하고 과감한 의사결정&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;모든 권한이 자신에게 집중되어 있어, 복잡한 보고나 합의 과정 없이 위기 상황에서 빠르고 대담한 결정을 내릴 수 있습니다. 이는 급변하는 전장에서 결정적인 승기를 잡는 데 유리하게 작용합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3. 능력 위주의 파격적인 인재 등용&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;낡은 문벌 귀족 사회를 혐오하여 신분이나 배경에 상관없이 오직 &amp;lsquo;능력&amp;rsquo;만으로 인재를 발탁하고 적재적소에 배치합니다. 이는 조직에 새로운 활력을 불어넣고 건강한 경쟁을 유도하여 최상의 효율을 이끌어냅니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;4. 청렴하고 공명정대한 신상필벌&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;스스로 사치를 멀리하고, 부패와 무능을 가장 큰 죄악으로 여겨 엄격하게 처벌합니다. 공을 세운 자에게는 그에 합당한 파격적인 보상을 내림으로써 부하들의 동기를 극대화합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;단점&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;1. 시스템보다 개인에 의존하는 한계&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;조직의 모든 것이 &amp;lsquo;라인하르트&amp;rsquo;라는 개인의 역량과 카리스마에 의존합니다. 그의 부재는 곧 시스템 전체의 붕괴로 이어질 수 있다는 치명적인 구조적 약점을 가집니다. 후계자나 시스템 구축에 대한 고민이 부족했습니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2. 독단적 결정과 소통 부재&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;자신과 대등한 위치에서 의견을 나눌 상대를 인정하지 않으며, 중요한 결정을 소수의 측근과 독단적으로 내리는 경향이 있습니다. 이는 유능한 부하들의 의견이 묵살되거나, 잘못된 판단을 내렸을 때 견제할 장치가 없다는 위험을 내포합니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3. 감정적인 취약성과 인간관계의 미숙함&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;유일한 안식처였던 누나 안네로제나 친구 키르히아이스와 관련된 일에는 이성적인 판단력이 흔들리는 모습을 보입니다. 이는 리더로서의 안정성을 저해하는 요소이며, 그의 가장 큰 약점이었습니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;4. 비판과 반대를 용납하지 않는 경직성&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;자신에 대한 반대 의견이나 비판을 &amp;lsquo;반역&amp;rsquo;이나 &amp;lsquo;도전&amp;rsquo;으로 받아들이는 경향이 있습니다. 이는 조직 내 건전한 비판 문화를 위축시키고, 리더가 잘못된 길로 들어섰을 때 누구도 제지할 수 없게 만듭니다.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h3 id="양-웬리-yang-wen-li---민주적-합리주의자형-리더"&gt;&lt;strong&gt;양 웬리 (Yang Wen-li) - 민주적 합리주의자형 리더&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;최선의 독재보다 최악의 민주주의가 낫다&amp;quot;는 신념을 바탕으로, 개인의 자유와 인권을 존중하며, 토론과 합의를 통해 합리적인 결론을 도출해내는 지휘관입니다.&lt;/p&gt;</description></item><item><title>번역글: 포커 불리(bully)를 물리치려면 이 한 가지 비밀만 알면 됩니다</title><link>https://philipjkim.cc/posts/20250715-to-defeat-a-poker-bully-you-only-need-to-know-this-one-secret/</link><pubDate>Tue, 15 Jul 2025 20:28:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-to-defeat-a-poker-bully-you-only-need-to-know-this-one-secret/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.pokernews.com/strategy/to-defeat-a-poker-bully-you-only-need-to-know-this-one-secre-19523.htm"&gt;https://www.pokernews.com/strategy/to-defeat-a-poker-bully-you-only-need-to-know-this-one-secre-19523.htm&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;불리는 포커 플레이어 중 흔한 유형입니다. 테이블에 너무 오래 앉아있으면 반드시 한 명쯤은 마주치게 됩니다. 그들은 무모하게 베팅하고 레이즈합니다. 그들과 맞서 플레이하는 것은 마치 날뛰는 야생마를 타는 것처럼 무서울 수 있습니다.&lt;/p&gt;
&lt;p&gt;포커 불리와 맞서 싸우는 세 가지 일반적인 전략에 대해 이야기해 봅시다. 두 가지는 틀렸고, 한 가지는 옳습니다.&lt;/p&gt;
&lt;p&gt;한 가지 유혹은 불리에게 더 심한 불리짓을 하려고 노력하는 것입니다. 그가 때리는 것보다 훨씬 더 세게 되받아치는 것입니다. 문제는 당신이 난폭하게 휘두르는 것에 불과하다는 것입니다. 마치 &amp;ldquo;크리스마스 이야기(A Christmas Story)&amp;ldquo;에서 랄피가 결국 이성을 잃고 불리 스컷 파커스&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;에게 미쳐 날뛰는 것과 같습니다. 효과가 있을 수도 있지만, 위험하고 비용이 많이 듭니다. 포커 상황에서는, 당신이 미지근한 패로 서로 불리가 되려고 할 때, 괴물같은 패로 당신 둘 다를 덫에 걸리게 하려고 기다리는 똑똑한 다른 플레이어들에게 쉽게 이용당할 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 포커 배리언스 이해는 하향세에 대처하는 데 도움이 될 것입니다</title><link>https://philipjkim.cc/posts/20250715-understanding-poker-variance-will-help-you-cope-with-downswings/</link><pubDate>Tue, 15 Jul 2025 19:57:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-understanding-poker-variance-will-help-you-cope-with-downswings/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.888poker.com/magazine/strategy/understanding-poker-variance-will-help-you-cope-downswings"&gt;https://www.888poker.com/magazine/strategy/understanding-poker-variance-will-help-you-cope-downswings&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;질문을 하나 드리겠습니다.&lt;/p&gt;
&lt;p&gt;7,000명이 참가하는 온라인 일요 토너먼트를 플레이한다고 가정해 봅시다. 참가자의 16%에게 상금이 지급됩니다. 이 메이저 대회에서 당신의 ROI는 50%입니다.&lt;/p&gt;
&lt;p&gt;이 토너먼트를 10년 동안 매주 일요일 플레이한다고 가정해 봅시다.&lt;/p&gt;
&lt;p&gt;10년 동안, 당신은 일요일을 한 번도 빠뜨리지 않습니다.&lt;/p&gt;
&lt;p&gt;결혼식에 가지 않고,&lt;/p&gt;
&lt;p&gt;라이브 토너먼트에 가지 않고,&lt;/p&gt;
&lt;p&gt;아무것도 하지 않습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;이 10년 동안 당신이 돈을 잃을 확률은 몇 퍼센트라고 생각하십니까?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;많은 사람들이 이 질문에 혼란스러워하는 것 같습니다. “ROI가 50%이고, 10년 동안 매주 일요일 플레이한다고요? 그렇다면 거의 항상 수익을 내야 하는 거 아닌가요?”&lt;/p&gt;</description></item><item><title>번역글: 포커에서 넛(Nuts)이란 무엇인가? 의미 + 전략 가이드</title><link>https://philipjkim.cc/posts/20250715-what-are-the-nuts-in-poker/</link><pubDate>Tue, 15 Jul 2025 17:49:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-what-are-the-nuts-in-poker/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.888poker.com/magazine/poker-terms/nuts"&gt;https://www.888poker.com/magazine/poker-terms/nuts&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;포커에서 넛이란 무엇일까요? 포커에서 &lt;em&gt;넛&lt;/em&gt;이란 핸드의 어떤 단계에서든 가능한 최고의 카드를 의미합니다. 리버에서 넛을 가진 플레이어는 핸드를 폴드하거나 잠들지 않는 한 핸드를 잃을 수 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;포켓 에이스&lt;/em&gt;는 플롭 전에 가장 강한 핸드이므로 종종 &amp;lsquo;&lt;em&gt;프리플롭 넛&lt;/em&gt;&amp;lsquo;라고 불립니다. 하지만 이 명칭은 넛이 5장의 카드를 필요로 하는 텍사스 홀덤 핸드의 자격을 갖추기 때문에 플롭 이후의 개념이므로 약간 오해의 소지가 있습니다.&lt;/p&gt;
&lt;h2 id="포커에서-넛이란-무엇이며-어떤-핸드가-자격을-갖출까"&gt;포커에서 넛이란 무엇이며 어떤 핸드가 자격을 갖출까?&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;로열 플러시&lt;/em&gt;를 가지고 있다면 항상 포커 넛이 될 것입니다. 항상 로열 플러시를 만들 수 있는 것은 아니므로, 넛는 트리플처럼 약할 수도 있습니다. 예를 들어, 2♥️3♠️7♦️J♣️K♠️ 보드에서 당신이 KK를 가지고 있다면 넛이 될 것입니다.&lt;/p&gt;</description></item><item><title>TotT: 싱글턴을 피하기 위한 의존성 주입 사용하기</title><link>https://philipjkim.cc/posts/20250715-tott-using-dependency-injection-to-avoid-singletons/</link><pubDate>Tue, 15 Jul 2025 14:06:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-tott-using-dependency-injection-to-avoid-singletons/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/05/tott-using-dependancy-injection-to.html"&gt;https://testing.googleblog.com/2008/05/tott-using-dependancy-injection-to.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;싱글턴을 사용하는 코드를 테스트하기는 어렵습니다. 일반적으로 테스트하려는 코드는 싱글턴 인스턴스와 강력하게 결합되어 있습니다. 싱글턴 객체가 종종 정적 생성자나 정적 메서드에서 생성되기 때문에 싱글턴 객체의 생성을 제어할 수 없습니다. 결과적으로 싱글턴 인스턴스의 동작을 시뮬레이션할 수도 없습니다.&lt;/p&gt;
&lt;p&gt;싱글턴 클래스의 구현 변경이 불가능하지만, 싱글턴 클라이언트는 변경이 가능하다면 간단한 리팩터링으로 테스트를 더 쉽게 만들 수 있습니다. 싱글턴 인스턴스로 &lt;code&gt;Server&lt;/code&gt;를 사용하는 메서드가 있다고 가정해 봅시다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;process&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Params&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInstance&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;retrieveData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Client&lt;/code&gt;를 리팩터링하여 의존성 주입을 사용하고 싱글턴 패턴의 사용을 완전히 피할 수 있습니다. 어떤 기능도 잃지 않았고, &lt;code&gt;Server&lt;/code&gt;의 싱글턴 인스턴스만 존재해야 한다는 요구 사항도 잃지 않았습니다. 유일한 차이점은 &lt;code&gt;Server&lt;/code&gt; 인스턴스를 정적 &lt;code&gt;getInstance&lt;/code&gt; 메서드에서 가져오는 대신, &lt;code&gt;Client&lt;/code&gt;가 생성자에서 받는다는 것입니다. 클래스를 테스트하기 더 쉽게 만들었습니다!&lt;/p&gt;</description></item><item><title>번역글: 판타지 야구 포인트 리그 전략: 야후의 기본 설정에 대해 알아야 할 모든 것</title><link>https://philipjkim.cc/posts/20250715-fantasy-baseball-points-league-strategy/</link><pubDate>Tue, 15 Jul 2025 00:44:21 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-fantasy-baseball-points-league-strategy/</guid><description>&lt;p&gt;원문: &lt;a href="https://sports.yahoo.com/fantasy/article/fantasy-baseball-points-league-strategy-everything-you-need-to-know-about-playing-yahoos-default-format-153238465.html"&gt;https://sports.yahoo.com/fantasy/article/fantasy-baseball-points-league-strategy-everything-you-need-to-know-about-playing-yahoos-default-format-153238465.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;많은 판타지 야구 작가들이 기사를 쓸 때 주로 로티서리 (rotisserie) 형식을 생각하지만, 포인트 리그 (H2H points) 는 야후를 포함한 많은 인기 사이트에서 기본 설정이 되었습니다. 그리고 로토 형식과 달리 포인트 리그 채점 시스템은 사이트마다 크게 다릅니다.&lt;/p&gt;
&lt;p&gt;다행히 &lt;a href="https://help.yahoo.com/kb/default-league-settings-fantasy-baseball-sln6785.html"&gt;야후의 기본 설정&lt;/a&gt;은 어떤 플랫폼에서든 가장 합리적인 설정입니다. 실제로 2024년 최종 선수 순위를 보면, 대부분의 선수들이 로토와 야후 포인트 점수에서 각자의 포지션에서 비슷한 위치에 랭크되었습니다. 상위 7명의 타자(Shohei Ohtani, Aaron Judge, Bobby Witt Jr., Juan Soto, José Ramírez, Gunnar Henderson)는 두 형식 모두에서 동일했으며, 상위 3명의 선발 투수(Tarik Skubal, Zack Wheeler, Chris Sale)도 마찬가지였습니다.&lt;/p&gt;</description></item><item><title>번역글: PLO8 (오마하 하이로우) 초보자를 위한 규칙</title><link>https://philipjkim.cc/posts/20250715-plo8-rules-for-beginners/</link><pubDate>Tue, 15 Jul 2025 00:23:54 +0900</pubDate><guid>https://philipjkim.cc/posts/20250715-plo8-rules-for-beginners/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.getcoach.poker/articles/omaha-hi-lo-rules-for-beginners/"&gt;https://www.getcoach.poker/articles/omaha-hi-lo-rules-for-beginners/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="하이와-로우는-무엇인가요"&gt;하이와 로우는 무엇인가요?&lt;/h2&gt;
&lt;p&gt;하이는 가능한 가장 강한 조합입니다. 인기 있는 포커 게임 (텍사스 홀덤과 오마하)에서 이 조합은 로얄 플러시입니다.&lt;/p&gt;
&lt;p&gt;로우는 정반대, 즉 게임에서 가능한 가장 약한 조합입니다.&lt;/p&gt;
&lt;p&gt;그리고 그 조합에는 몇 가지 요구 사항이 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;로우는 8보다 높은 카드를 가질 수 없습니다.&lt;/li&gt;
&lt;li&gt;에이스는 가장 낮은 카드로 간주됩니다.&lt;/li&gt;
&lt;li&gt;스트레이트와 플러시는 로우에 고려되지 않습니다. 예를 들어, A-2-3-4-5 다이아몬드 패는 최고의 로우 핸드로 간주됩니다.&lt;/li&gt;
&lt;li&gt;하나의 핸드가 로우와 하이 조합 모두가 될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plo8-은-일반-plo-팟-리밋-오마하-와-어떻게-다른가요"&gt;PLO8 은 일반 PLO (팟 리밋 오마하) 와 어떻게 다른가요?&lt;/h2&gt;
&lt;p&gt;오마하 하이로우 (PLO8)는 가장 인기 있는 하이로우 포커 게임입니다. 클래식 또는 5카드 오마하와의 주요 차이점은 참가자들 사이의 포커 뱅크 분할입니다. 절반은 최고의 하이 조합을 가진 플레이어에게 가고, 나머지 절반은 최고의 로우 조합을 가진 플레이어에게 갑니다.&lt;/p&gt;</description></item><item><title>TotT: 시간은 무작위</title><link>https://philipjkim.cc/posts/20250714-tott-time-is-random/</link><pubDate>Mon, 14 Jul 2025 10:30:17 +0900</pubDate><guid>https://philipjkim.cc/posts/20250714-tott-time-is-random/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/04/tott-time-is-random.html"&gt;https://testing.googleblog.com/2008/04/tott-time-is-random.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;메서드의 입력값을 명확하게 식별할 수 없을 때 어떻게 제대로 테스트할 수 있을까요? 다음 Java 메서드를 살펴보세요.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/** 현재 시간으로부터 다음 분의 시작을 나타내는 Date 객체를 반환합니다. */&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;nextMinuteFromNow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;nowAsMillis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nowAsMillis&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;60000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setMilliseconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;이 메서드를 효과적으로 테스트하는 데에는 두 가지 장벽이 있습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;코너 케이스&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;를 테스트하기 쉽지 않습니다. 시스템 클럭이 입력 조건을 제공하는 데에 좌우됩니다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nextMinuteFromNow()&lt;/code&gt; 가 반환될 때, 시간이 변경됩니다. 이는 테스트가 단언이 아니라 추측이 될 것이며, 재현하기 어려운 저빈도 실패를 생성할 수 있습니다&amp;hellip; 불안정성입니다! 예를 들어 클래스 로딩 및 가비지 컬렉션 일시 중지가 이에 영향을 미칠 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code&gt;System.currentTimeMillis()&lt;/code&gt; 가 무작위 숫자 제공자처럼 보이기 시작하나요? 맞습니다! 현재 시간은 *비결정성 (non-determinism)*의 또 다른 원천입니다. &lt;code&gt;nextMinuteFromNow()&lt;/code&gt; 의 결과는 입력으로부터 쉽게 결정될 수 없습니다. 다행히도 이것은 쉽게 해결할 수 있습니다. 현재 시간을 제어할 수 있는 입력 매개변수로 만드세요.&lt;/p&gt;</description></item><item><title>TotT: 너무 많은 테스트</title><link>https://philipjkim.cc/posts/20250714-tott-too-many-tests/</link><pubDate>Mon, 14 Jul 2025 10:20:26 +0900</pubDate><guid>https://philipjkim.cc/posts/20250714-tott-too-many-tests/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/02/in-movie-amadeus-austrian-emperor.html"&gt;https://testing.googleblog.com/2008/02/in-movie-amadeus-austrian-emperor.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;영화 &lt;em&gt;아마데우스&lt;/em&gt;에서 오스트리아 황제는 모차르트의 음악에 “음표가 너무 많다”고 비판합니다. 하나의 기능을 테스트하는 데 “너무 많은” 테스트는 몇 개일까요?&lt;/p&gt;
&lt;p&gt;메서드 &lt;code&gt;decide&lt;/code&gt;를 고려해 봅시다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;decide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;||&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DoOneThing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DoAnother&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 공간 제약 때문에 한 글자 변수 이름을 사용했습니다.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 더 나은 이름을 사용해야 합니다. 제가 하는 대로 하지 말고, 제가 시키는 대로 하세요. :-)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;얼마나 많은 테스트를 작성할 수 있을까요? 각 변수에 대해 &lt;code&gt;int&lt;/code&gt; 값의 전체 범위를 실행하려면 2^192개의 테스트가 필요할 것입니다. 이렇게 계속한다면 구골 개수의 테스트를 하게 될 것입니다! 너무 많은 테스트입니다.&lt;/p&gt;</description></item><item><title>번역글: 모든 것을 공격으로 해석하는 사람과 대화하기</title><link>https://philipjkim.cc/posts/20250711-talking-to-someone-who-interprets-everything-as-an-attack/</link><pubDate>Fri, 11 Jul 2025 14:05:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20250711-talking-to-someone-who-interprets-everything-as-an-attack/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.uwgb.edu/sbdc/articles/avoiding-conflict/"&gt;https://www.uwgb.edu/sbdc/articles/avoiding-conflict/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;어떤 말이나 제안이라도 상대방을 화나게 할까 봐 조심스러웠던 적이 있나요? 우리는 때때로 우리가 하는 모든 말을 비난으로 해석하는 사람을 불쾌하게 하거나, 우리가 의도한 대화의 요점을 놓치게 하는 특정 단어를 사용할 수도 있습니다. 대화가 언제 터질지 모르는 지뢰밭처럼 느껴질 때 믿을 수 없을 정도로 어렵고 심지어 좌절감을 느끼기도 합니다. 그렇다면 모든 것을 공격으로 해석하는 방어적인 사람과 긴장을 고조시키지 않고 어떻게 대화할 수 있을까요?&lt;/p&gt;
&lt;p&gt;모든 언급을 개인적인 공격으로 생각하는 방어적인 사람과 대화하는 것은 지칠 수 있습니다. 이것은 대화를 어렵게 만들고 관계에 큰 부담을 줄 수 있습니다. 가족, 친구, 동료와 관계없이 상황을 처리하는 방법을 아는 것이 존중과 평화를 유지하는 데 중요합니다.&lt;/p&gt;</description></item><item><title>변역글: 갈등 회피가 종종 갈등을 유발할 수 있다</title><link>https://philipjkim.cc/posts/20250711-avoiding-conflict-can-often-cause-conflict/</link><pubDate>Fri, 11 Jul 2025 13:55:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250711-avoiding-conflict-can-often-cause-conflict/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.uwgb.edu/sbdc/articles/avoiding-conflict/"&gt;https://www.uwgb.edu/sbdc/articles/avoiding-conflict/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;젊은 관리자들을 멘토링할 때, 일반적으로 가장 개발하기 어려운 기술은 갈등을 다루고 갈등이 긍정적인 결과로 이어지도록 하는 것입니다. 침묵하는 승인이나 갈등 회피는 직원 갈등에 기여할 뿐만 아니라 상황을 악화시키는 경향이 있습니다. 이러한 관리자/리더들은 갈등을 무시하거나 상황에 관여하기를 거부합니다. 관리자가 모호하고, 회피적이며, 사람이나 문제를 무시하거나 회피하는 행동은 갈등 회피를 실행할 수 있습니다. 문제를 회피하거나 대결을 지연시키는 대신, 이는 양 당사자에게 손실을 초래하는 상황이 됩니다.&lt;/p&gt;
&lt;p&gt;갈등 관리는 개발하기 어려운 기술이지만, 관리자와 리더가 감정적으로나 직업적으로 이 기술을 습득하는 것이 필수적입니다. 갈등은 나쁜 것이 아닙니다! 권위에 대한 두려움, 성별 고정관념, 다른 관점, 위협, 자신감 부족은 모두 개인이 갈등을 피하는 데 기여하는 요인입니다. 갈등을 다루는 데 대한 결과에 대한 두려움이나 다른 사람의 반응에 대한 불안감은 너무 압도적이어서 관리자가 상황을 피하게 될 수 있습니다. 예상되는 반응을 다루는 고통스러운 생각은 너무 고통스러워서 다루고 해결할 수 없습니다.&lt;/p&gt;</description></item><item><title>TotT: 스트룹 효과</title><link>https://philipjkim.cc/posts/20250711-tott-the-stroop-effect/</link><pubDate>Fri, 11 Jul 2025 10:49:44 +0900</pubDate><guid>https://philipjkim.cc/posts/20250711-tott-the-stroop-effect/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2008/02/tott-stroop-effect.html"&gt;https://testing.googleblog.com/2008/02/tott-stroop-effect.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://philipjkim.cc/img/The_Stoop_Effect.gif" alt="img"&gt;&lt;/p&gt;
&lt;p&gt;아래 두 행동을 얼마나 빨리 할 수 있나요?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;hellip;25개 단어를 모두 소리 내어 읽기: 빨강, 초록, 파랑, &amp;hellip; (지금 시도해 보세요!)&lt;/li&gt;
&lt;li&gt;&amp;hellip;25가지 색깔을 모두 소리 내어 말하기: 초록, 노랑, 하양&amp;hellip; (지금 시도해 보세요!)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;두 번째 작업이 더 많은 시간과 노력을 필요로 했나요? 그렇다면, 여러분은 스트룹 효과를 경험하고 있는 것입니다. 스트룹 효과는 대략적으로 &lt;em&gt;레이블&lt;/em&gt;(이 경우 단어)이 &lt;em&gt;내용&lt;/em&gt;(색깔)과 같은 영역에 있고 의미가 충돌할 때, 레이블이 내용을 이해하는 능력에 방해가 된다는 것을 의미합니다.&lt;/p&gt;</description></item><item><title>TotT: 스텁이 단위 테스트 속도를 높여줍니다</title><link>https://philipjkim.cc/posts/20250710-tott-stubs-speed-up-your-unit-tests/</link><pubDate>Thu, 10 Jul 2025 16:01:59 +0900</pubDate><guid>https://philipjkim.cc/posts/20250710-tott-stubs-speed-up-your-unit-tests/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2007/04/tott-stubs-speed-up-your-unit-tests.html"&gt;https://testing.googleblog.com/2007/04/tott-stubs-speed-up-your-unit-tests.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Michael Feathers는 좋은 단위 테스트의 특징을 &amp;ldquo;빠르게 실행되고 문제 위치를 파악하는 데 도움이 된다&amp;quot;고 정의합니다. 코드에 데이터베이스 액세스, 다른 서버와의 통신, 시간 의존성 등이 있을 때는 이를 달성하기 어렵습니다.&lt;/p&gt;
&lt;p&gt;모듈의 일부 종속성에 커스텀 객체를 대체하여 코드를 철저히 테스트하고, 커버리지를 높이며, 1초 이내에 실행할 수 있습니다. 데이터베이스 오류와 같은 드문 시나리오도 시뮬레이션하여 오류 처리 코드를 테스트할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;이러한 &amp;ldquo;커스텀 객체&amp;quot;를 지칭하는 다양한 용어가 사용됩니다. 용어를 명확히 하기 위해 Gerard Meszaros는 다음 정의를 제공합니다.&lt;/p&gt;</description></item><item><title>번역글: ExecutorService invokeAll 과 가상 스레드 사용하기</title><link>https://philipjkim.cc/posts/20250710-using-executor-service-invoke-all-with-virtual-threads/</link><pubDate>Thu, 10 Jul 2025 09:41:55 +0900</pubDate><guid>https://philipjkim.cc/posts/20250710-using-executor-service-invoke-all-with-virtual-threads/</guid><description>&lt;p&gt;원문: &lt;a href="https://davidvlijmincx.com/posts/loom/invoke-all-with-virtual-threads/"&gt;https://davidvlijmincx.com/posts/loom/invoke-all-with-virtual-threads/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;invokeAll&lt;/code&gt; 은 &lt;code&gt;ExecutorService&lt;/code&gt; 의 메서드로, 여러 제출된 작업을 동시에 시작합니다. &lt;code&gt;ExecutorService&lt;/code&gt; 는 스레드 풀에서 플랫폼 스레드를 사용하여 제출된 작업을 실행합니다. 이 비싸고 리소스 집약적인 플랫폼 스레드를 사용하는 대신, 가상 스레드를 사용하여 &lt;code&gt;ExecutorService&lt;/code&gt; 에 제출된 작업을 실행할 수도 있습니다. 이 글에서는 &lt;code&gt;invokeAll&lt;/code&gt; 메서드를 가상 스레드 (virtual threads), 구조화된 동시성 (structured concurrency) 및 플랫폼 스레드 (platform threads) 와 함께 구현하는 모든 방법을 다룰 것입니다.&lt;/p&gt;
&lt;h2 id="가상-스레드를-사용한-invokeall"&gt;가상 스레드를 사용한 &lt;code&gt;invokeAll&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;우리가 살펴볼 첫 번째 예제는 가상 스레드 (virtual threads) 를 사용합니다. 각 작업에 대해 가상 스레드를 생성하는 Executor 를 생성하는 try-with-resources 문이 있습니다. 7행에서 &lt;code&gt;invokeAll&lt;/code&gt; 메서드가 작업 목록과 함께 호출됩니다.&lt;/p&gt;</description></item><item><title>번역글: PLO (팟 리밋 오마하) 에서 효과적인 블러핑</title><link>https://philipjkim.cc/posts/20250709-effective-bluffing-in-pot-limit-omaha/</link><pubDate>Wed, 09 Jul 2025 10:20:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250709-effective-bluffing-in-pot-limit-omaha/</guid><description>&lt;p&gt;원문: &lt;a href="https://ggpoker.com/blog/beginner-strategy/effective-bluffing-in-pot-limit-omaha/"&gt;https://ggpoker.com/blog/beginner-strategy/effective-bluffing-in-pot-limit-omaha/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="속임수의-기본-원리"&gt;속임수의 기본 원리&lt;/h2&gt;
&lt;p&gt;“포커는 펠트 테이블에서 하는 게임이지만, 플레이어들의 마음속에서 승리하는 게임이다”와 같은 말을 들어보셨을 것입니다. 이 말이 얼마나 정확하다고 생각하십니까? PLO에서 블러핑의 복잡한 부분에 더 깊이 들어가기 전에, 몇 가지 기본을 다져봅시다.&lt;/p&gt;
&lt;p&gt;포커 세계에 막 발을 들여놓은 분들을 위한 블러핑은 상대방에게 실제보다 더 좋은 패를 가지고 있다고 믿게 만드는 전술입니다. 베팅이나 레이즈를 하여 상대방이 두려움 때문에 폴드하도록 유도하는 것입니다. 하지만 여기에 함정이 있습니다 – 이것은 무모한 도박이 아니라 예술 형식입니다.&lt;/p&gt;</description></item><item><title>번역글: 더 현명한 질문을 하는 기술</title><link>https://philipjkim.cc/posts/20250708-the-art-of-asking-smarter-questions/</link><pubDate>Tue, 08 Jul 2025 14:21:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250708-the-art-of-asking-smarter-questions/</guid><description>&lt;p&gt;원문: &lt;a href="https://hbr.org/2024/05/the-art-of-asking-smarter-questions"&gt;https://hbr.org/2024/05/the-art-of-asking-smarter-questions&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;미국 칩 제조업체 엔비디아의 공동 설립자이자 CEO인 젠슨 황은 민첩하고 혁신적인 사고가 필요한 고속 산업에서 일합니다. 그의 리더십 스타일이 어떻게 발전했는지 회상하며 그는 &lt;em&gt;뉴욕 타임스&lt;/em&gt;에 “나는 아마도 답변을 덜 하고 질문을 훨씬 더 많이 한다….이제는 하루 종일 질문만 하고 지내는 것이 거의 가능할 것 같다”고 말했습니다. 그는 계속해서 “탐색을 통해 나는 [나의 경영진]이…탐색할 필요가 있다고 생각하지 못했던 아이디어를 탐색하도록 돕는다”고 덧붙였습니다.&lt;/p&gt;
&lt;p&gt;기술 기업들이 오랫동안 직면해 온 긴급성과 예측 불가능성은 더욱 성숙한 부문으로 확산되어 질문을 필수적인 기술로 끌어올렸습니다. AI의 발전은 답변이 중요했던 세상에서 질문이 중요해지는 세상으로의 엄청난 변화를 야기했습니다. 큰 차이점은 더 이상 정보에 대한 접근성이 아니라 스마트 프롬프트를 만드는 능력입니다. 씨티은행의 CEO인 제인 프레이저는 &lt;em&gt;포춘&lt;/em&gt;지에 “리더로서 당신은 답을 가지고 있지 않다. 당신의 직원들이 [가지고 있다], 당신의 사람들이 [가지고 있다]”고 말했습니다. “그것은 조직을 이끌어가는 방식을 완전히 바꿔놓았다. 창의성을 발휘해야 한다….혁신은 회사 정상에 있는 천재가 모든 답을 내놓기 때문에 일어나는 것이 아니다.”&lt;/p&gt;</description></item><item><title>밈 소개: 홀덤에서 오마하로 종목전환</title><link>https://philipjkim.cc/posts/20250708-holdem-to-omaha-meme/</link><pubDate>Tue, 08 Jul 2025 13:34:39 +0900</pubDate><guid>https://philipjkim.cc/posts/20250708-holdem-to-omaha-meme/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.reddit.com/r/poker/comments/109llkw/switching_from_hold_em_to_omaha/"&gt;https://www.reddit.com/r/poker/comments/109llkw/switching_from_hold_em_to_omaha/&lt;/a&gt; (Explanation by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://preview.redd.it/switching-from-hold-em-to-omaha-v0-j6awvkn0yjba1.jpg?width=320&amp;amp;crop=smart&amp;amp;auto=webp&amp;amp;s=1bef6890bafa047cb8d9b219758ad609292d6aa3" alt="holdem_to_omaha_meme"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="밈meme의-흐름-해설"&gt;밈(Meme)의 흐름 해설&lt;/h2&gt;
&lt;p&gt;이 밈은 4컷 만화 형식으로 되어 있습니다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;1~3컷&lt;/strong&gt;: 한 남자가 &amp;ldquo;와, 돈이 너무 많아!&amp;rdquo;, &amp;ldquo;젠장, 이 돈을 다 어떡하지?&amp;rdquo;, &amp;ldquo;주머니에서 돈이 막 떨어지네! 누가 제발 이 돈 좀 가져가 줘!&amp;ldquo;라고 외칩니다. 즉, &lt;strong&gt;주체할 수 없을 정도로 돈이 많아서 제발 누가 이 돈을 좀 가져가 줬으면 하는 비현실적인 상황&lt;/strong&gt;을 보여줍니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;4컷&lt;/strong&gt;: 갑자기 이 남자가 정장을 입고 전문가처럼 등장합니다. 이미지 위에는 &lt;strong&gt;&amp;ldquo;PLO&amp;rdquo;&lt;/strong&gt; (팟 리밋 오마하)라는 글자가 쓰여 있습니다. 그리고 그는 이렇게 말합니다. &amp;ldquo;아무튼, 저는 우리의 타겟 고객을 이렇게 생각합니다.&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;핵심은 1~3컷의 &amp;lsquo;돈을 잃고 싶어 안달 난 사람&amp;rsquo;이 바로 4컷의 &amp;lsquo;PLO라는 게임이 노리는 이상적인 고객&amp;rsquo;이라는 점입니다.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>TotT: 화장실에서 테스팅 (Testing on the Toilet) 소개</title><link>https://philipjkim.cc/posts/20250708-introducing-testing-on-the-toilet/</link><pubDate>Tue, 08 Jul 2025 10:31:22 +0900</pubDate><guid>https://philipjkim.cc/posts/20250708-introducing-testing-on-the-toilet/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html"&gt;https://testing.googleblog.com/2007/01/introducing-testing-on-toilet.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;업데이트 - 2024년 12월&lt;/strong&gt;: TotT 의 의미는 &lt;em&gt;화장실에서 테스팅 (Testing on the Toilet)&lt;/em&gt; 에서 이제 *화장실에서 기술 (Tech on the Toilet)*로 변경되었습니다. 자세한 내용은 다음 게시물을 읽어보세요: &lt;a href="https://testing.googleblog.com/2024/12/tech-on-toilet-driving-software.html"&gt;&lt;strong&gt;화장실에서 기술: 한 번의 화장실 휴식으로 소프트웨어 우수성 향상&lt;/strong&gt;&lt;/a&gt;. 아래는 2007년의 원본 게시물입니다.&lt;/p&gt;
&lt;p&gt;블로거 커멘트: 앞으로 TotT 시리즈를 시간이 날 때마다 하나씩 번역해서 포스팅할 예정입니다. (이미 먼저 포스팅된 글들도 있습니다.)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;저희는 여러분이 더 많은 테스트를 작성하기를 바랍니다. 네, 바로 여러분입니다. 테스트는 코드를 리팩토링해야 할 때나 다른 개발자가 기능을 추가할 때 여러분을 보호하는 안전망이라는 말을 이미 들었을 것입니다. 심지어 테스트가 코드 디자인에 도움이 될 수 있다는 것도 알고 있을 것입니다.&lt;/p&gt;</description></item><item><title>번역글: PLO (팟 리밋 오마하) 스타팅 핸드: 반드시 고려해야 할 3가지</title><link>https://philipjkim.cc/posts/20250707-pot-limit-omaha-starting-hands/</link><pubDate>Mon, 07 Jul 2025 20:22:29 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-pot-limit-omaha-starting-hands/</guid><description>&lt;p&gt;원문: &lt;a href="https://upswingpoker.com/pot-limit-omaha-starting-hands-plo-preflop-strategy/"&gt;https://upswingpoker.com/pot-limit-omaha-starting-hands-plo-preflop-strategy/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;NLH 플레이어는 다음과 같은 보기 쉬운 레인지 매트릭스를 사용할 수 있습니다:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upswingpoker.com/wp-content/uploads/2017/07/https-i-gyazo-com-b38ff2ed5ea81eb5909d086d23581b.png" alt="nlh_range_matrix"&gt;&lt;/p&gt;
&lt;p&gt;PLO 플레이어에게는 이러한 편리한 레인지 매트릭스가 없습니다. 모든 것을 포함하는 것은 실질적으로 비실용적이기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2018년 수정:&lt;/strong&gt; 위 내용은 이 기사가 게시되었을 때 사실이었지만, 저희는 실제로 실용적이고 사용하기 쉬운 새로운 &lt;a href="https://upswingpoker.com/plo-solver-preflop/"&gt;프리플랍 PLO 도구&lt;/a&gt; 를 출시했습니다.&lt;/p&gt;
&lt;p&gt;이것이 이 게임이 매우 역동적인 이유 중 하나입니다. 다양한 가능한 핸드가 있기 때문에 PLO는 플레이어에게 끊임없이 독특한 상황을 제공합니다. PLO에서 프리플랍 핸드 선택 전략을 세우는 것은 어려울 수 있지만, 여전히 승리할 스타팅 핸드를 선택하기 위해 고려할 수 있는 여러 요소가 있습니다. 이 기사에서는 그중 3가지를 설명하겠습니다.&lt;/p&gt;</description></item><item><title>번역글: Go의 동시성: 심층 분석</title><link>https://philipjkim.cc/posts/20250707-concurrency-in-go-a-deep-dive/</link><pubDate>Mon, 07 Jul 2025 13:43:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-concurrency-in-go-a-deep-dive/</guid><description>&lt;p&gt;원문: &lt;a href="https://medium.com/hprog99/concurrency-in-go-a-deep-dive-2abbb4838984"&gt;https://medium.com/hprog99/concurrency-in-go-a-deep-dive-2abbb4838984&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="서론"&gt;서론&lt;/h2&gt;
&lt;h3 id="동시성이란-무엇인가"&gt;동시성이란 무엇인가?&lt;/h3&gt;
&lt;p&gt;동시성은 독립적인 활동들의 구성으로 느슨하게 정의될 수 있습니다. 반드시 병렬 실행을 필요로 하지는 않지만, 여러 태스크가 겹치는 시간 동안 진행되도록 허용합니다. 컴퓨팅의 맥락에서 동시 프로그래밍은 여러 태스크가 실행에서 &lt;strong&gt;인터리브(interleave - 여러 대상을 번갈아 가며 실행하거나 배치)&lt;/strong&gt; 될 수 있도록 보장하며, 이는 특히 I/O 바운드 태스크나 수많은 이벤트를 동시에 처리해야 하는 애플리케이션(예: 웹 서버에서 여러 클라이언트 연결 처리)에서 중요합니다.&lt;/p&gt;
&lt;h3 id="동시성-vs-병렬성"&gt;동시성 vs. 병렬성&lt;/h3&gt;
&lt;p&gt;비공식적인 대화에서 종종 혼용되지만, 동시성과 병렬성은 다른 개념입니다.&lt;/p&gt;</description></item><item><title>TotT: 더 나은 테스트를 위한 가짜(Fake) 사용하기</title><link>https://philipjkim.cc/posts/20250707-testing-on-toilet-fake-your-way-to/</link><pubDate>Mon, 07 Jul 2025 13:23:12 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-testing-on-toilet-fake-your-way-to/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2013/06/testing-on-toilet-fake-your-way-to.html"&gt;https://testing.googleblog.com/2013/06/testing-on-toilet-fake-your-way-to.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;수년간 블로그를 운영한 후, 블로그 플랫폼의 API를 사용해보기로 결정했습니다. 이리저리 사용해보다가 문득 깨닫습니다: 원격 블로그 서버와 통신하지 않고도 코드가 작동하는지 어떻게 알 수 있을까요?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;deletePostsWithTag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Tag&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;blogService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAllPosts&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getTags&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;blogService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;deletePost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;가짜(Fakes)가 해결책입니다! 가짜는 실제 구현체처럼 작동하지만, 프로덕션 환경에 적합하지 않은 API의 가벼운 구현체입니다. 블로그 서비스의 경우, 중요한 것은 게시물을 가져오고 삭제하는 기능뿐입니다. 실제 블로그 서비스는 데이터베이스와 여러 프런트엔드 서버가 필요하겠지만, 코드를 테스트하는 데는 그런 것이 필요 없습니다. 필요한 것은 블로그 서비스 API의 어떤 구현체든 상관없습니다. 간단한 인메모리 구현체로 이를 달성할 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 헤르메틱 서버 (Hermetic Servers)</title><link>https://philipjkim.cc/posts/20250707-hermetic-servers/</link><pubDate>Mon, 07 Jul 2025 13:08:09 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-hermetic-servers/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2012/10/hermetic-servers.html"&gt;https://testing.googleblog.com/2012/10/hermetic-servers.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="종단-간-테스트"&gt;&amp;ldquo;종단 간&amp;rdquo; 테스트&lt;/h2&gt;
&lt;p&gt;Google 테스트 세계에서 종단 간 테스트는 사용자 요청부터 응답까지 전체 서버 스택을 실행하는 테스트입니다. 다음은 종단 간 테스트가 검증할 시스템 테스트 대상(SUT)의 간략한 모습입니다. SUT의 프런트엔드 서버가 특정 사용자 요청에 필요하지 않은 세 번째 백엔드에 연결된다는 점에 유의하십시오.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://1.bp.blogspot.com/-lwP4J6FcN34/UGx-bU41ImI/AAAAAAAAAP8/l5M0J3A0Xgk/s640/1-SUT.jpg" alt="system_under_test"&gt;&lt;/p&gt;
&lt;p&gt;이러한 시스템에 대한 빠르고 신뢰할 수 있는 종단 간 테스트를 작성하는 데 있어 한 가지 과제는 네트워크 액세스를 피하는 것입니다. 네트워크 액세스가 포함된 테스트는 로컬 리소스만 액세스하는 테스트보다 느리며, 외부 서버에 액세스하면 비결정성 또는 외부 서버의 가용성 부족으로 인해 &lt;a href="http://googletesting.blogspot.com/2008/04/tott-avoiding-flakey-tests.html"&gt;불확실성&lt;/a&gt;이 발생할 수 있습니다.&lt;/p&gt;</description></item><item><title>TotT: 목(Mock)을 과도하게 사용하지 마세요</title><link>https://philipjkim.cc/posts/20250707-testing-on-the-toilet-dont-overuse-mocks/</link><pubDate>Mon, 07 Jul 2025 10:53:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-testing-on-the-toilet-dont-overuse-mocks/</guid><description>&lt;p&gt;원문: &lt;a href="https://testing.googleblog.com/2013/05/testing-on-toilet-dont-overuse-mocks.html"&gt;https://testing.googleblog.com/2013/05/testing-on-toilet-dont-overuse-mocks.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;코드를 테스트할 때, 코드의 의존성을 목으로 처리하여 무시하는 것이 쉬워 보일 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testCreditCardIsCharged&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paymentProcessor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaymentProcessor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockCreditCardServer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockCreditCardServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isServerAvailable&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;thenReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockCreditCardServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;beginTransaction&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;thenReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockTransactionManager&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockTransactionManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getTransaction&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;thenReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockCreditCardServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;creditCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;500&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="na"&gt;thenReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockPayment&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;when&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockPayment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isOverMaxBalance&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="na"&gt;thenReturn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paymentProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;processPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creditCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Money&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dollars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;500&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mockCreditCardServer&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="na"&gt;pay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;creditCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;하지만 목을 사용하지 않으면 때로는 더 간단하고 유용한 테스트를 만들 수 있습니다.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;testCreditCardIsCharged&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paymentProcessor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PaymentProcessor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creditCardServer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paymentProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;processPayment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creditCard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Money&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;dollars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;500&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;assertEquals&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;creditCardServer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMostRecentCharge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creditCard&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;목을 과도하게 사용하면 몇 가지 문제가 발생할 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 더위 속에서 자전거를 타면서 살아남기 위한 9가지 팁: 얼마나 마셔야 하는지부터 뜨거운 물에 목욕해야 하는 이유까지</title><link>https://philipjkim.cc/posts/20250707-9-tips-to-survive-cycling-in-the-heat/</link><pubDate>Mon, 07 Jul 2025 10:22:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20250707-9-tips-to-survive-cycling-in-the-heat/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.bikeradar.com/advice/fitness-and-training/cycling-in-hot-weather"&gt;https://www.bikeradar.com/advice/fitness-and-training/cycling-in-hot-weather&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;달리기 또는 비수상 팀 스포츠와 비교할 때, 사이클링은 분명 폭염 속에서 가장 즐거운 활동입니다. 속도 증가와 자전거로 생성되는 공기의 움직임은 라이더에게 일종의 시원한 담요를 제공합니다.&lt;/p&gt;
&lt;p&gt;하지만 그 바람 냉각은 기만적일 수 있으며 우리가 얼마나 열심히 운동하고 있는지, 얼마나 더운지, 얼마나 땀을 흘리고 있는지를 숨길 수 있습니다. 이것이 이번 여름에 자전거를 타면서 수분을 유지하는 것이 라이딩 성능과 즐거움에 가장 중요한 이유입니다.&lt;/p&gt;
&lt;p&gt;성능 측면에서, &lt;a href="https://research.monash.edu/en/publications/effects-of-heat-stress-on-physiological-responses-and-exercise-pe"&gt;호주 연구&lt;/a&gt;에 따르면 사이클리스트가 32°C 더위에서 운동할 때 파워 출력이 6.5% 감소하며, 자전거에서 불충분한 연료 공급의 위험으로는 탈수, 경련 및 저나트륨혈증(혈액 내 나트륨 농도가 비정상적으로 낮을 때)이 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 푸싱 &amp; 풀링: PLO에서 중요한 프리플랍 전술을 활용하는 방법</title><link>https://philipjkim.cc/posts/20250704-how-to-utilize-a-crucial-preflop-tactics-in-plo/</link><pubDate>Fri, 04 Jul 2025 14:11:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250704-how-to-utilize-a-crucial-preflop-tactics-in-plo/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://upswingpoker.com/pushing-pulling-plo-preflop-tactic/"&gt;https://upswingpoker.com/pushing-pulling-plo-preflop-tactic/&lt;/a&gt; (translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A♠️A♦️K♠️K♦️는 PLO에서 가장 좋은 스타팅 핸드라고 할 수 있습니다. T♠️8♣️4♣️2♥️에 대한 지분을 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://upswingpoker.com/wp-content/uploads/2017/08/equity.png" alt="https://upswingpoker.com/wp-content/uploads/2017/08/equity.png"&gt;&lt;/p&gt;
&lt;p&gt;이런 형편없는 핸드도 절대적인 몬스터 핸드에 대해 34% 이상의 지분을 가지고 있습니다. &lt;strong&gt;지분 차이가 작을수록 엣지가 작아지기 때문에 PLO(팟-리밋 오마하)가 NLH(노-리밋 홀덤)보다 도박처럼 느껴지는 이유입니다.&lt;/strong&gt; 하지만 프리플랍에서 엣지를 극대화하고 포스트플랍 성공을 위한 준비를 할 수 있는 전술들이 있습니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 &amp;lsquo;&lt;strong&gt;푸싱&lt;/strong&gt;&amp;lsquo;과 &amp;lsquo;&lt;strong&gt;풀링&lt;/strong&gt;&amp;lsquo;이라는 두 가지 프리플랍 전술에 대해 이야기할 것입니다. 이 전술들은 종종 혼란스러운 프리플랍 PLO의 세계에 구조를 부여하는 데 도움이 될 수 있습니다. 바로 본론으로 들어가겠습니다.&lt;/p&gt;</description></item><item><title>번역글: 브롬톤: 한 오너의 인상</title><link>https://philipjkim.cc/posts/20250704-the-brompton-the-owners-impression/</link><pubDate>Fri, 04 Jul 2025 10:31:46 +0900</pubDate><guid>https://philipjkim.cc/posts/20250704-the-brompton-the-owners-impression/</guid><description>&lt;p&gt;원문: &lt;a href="https://lovelybike.blogspot.com/2012/06/brompton-owners-impression.html"&gt;https://lovelybike.blogspot.com/2012/06/brompton-owners-impression.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://live.staticflickr.com/8157/7323945542_49ba921f60_z.jpg" alt="https://live.staticflickr.com/8157/7323945542_49ba921f60_z.jpg"&gt;&lt;/p&gt;
&lt;p&gt;몇 달 전 우리는 브롬톤 접이식 자전거의 주인이 되었습니다. 제가 이 자전거를 얼마나 좋아하는지에 대해 여전히 놀랍고 조금은 부끄럽습니다. 왜 이런 복합적인 감정이 드는 걸까요? 글쎄요, 이 구매나 사양에 대해 제가 공을 세울 수 없기 때문입니다. 대부분 남편의 아이디어였거든요! 오해하지 마세요. 저는 몇 년 동안 브롬톤을 동경해왔고, 여기 블로그에 동경하는 마음으로 글을 쓰기도 했습니다. 작년 여름에는 긴 시간 동안 시승도 해보았죠. 결국 저는 브롬톤을 소유할 필요가 있거나 원한다는 확신이 서지 않았습니다. 하지만 남편은 확신했고, 우리가 동시에 두 대를 사는 것이 합리적이라고 주장했습니다. 그가 강하게 원했기 때문에 저도 결국 동의했지만, 제 사용량이 이 구매를 정당화하지 못할까 봐 계속 불안했습니다.&lt;/p&gt;</description></item><item><title>번역글: 전문적인 환경에서 사용할 수 있는 11가지 토론 기술</title><link>https://philipjkim.cc/posts/20250703-11-debate-techniques-to-use-in-a-professional-setting/</link><pubDate>Thu, 03 Jul 2025 10:48:11 +0900</pubDate><guid>https://philipjkim.cc/posts/20250703-11-debate-techniques-to-use-in-a-professional-setting/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.indeed.com/career-advice/career-development/debate-techniques"&gt;https://www.indeed.com/career-advice/career-development/debate-techniques&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="직장에서-사용할-수-있는-11가지-토론-기술"&gt;직장에서 사용할 수 있는 11가지 토론 기술&lt;/h2&gt;
&lt;p&gt;다음은 전문적인 맥락에서 사용할 수 있는 11가지 토론 기술입니다.&lt;/p&gt;
&lt;h3 id="1-청중-정의하기"&gt;1. 청중 정의하기&lt;/h3&gt;
&lt;p&gt;직장에서 토론을 할 때 주요 청중 중 한 명은 당신이 토론하는 상대방입니다. 상대방의 입장과 신념을 고려하여 당신의 주장에 공감하도록 만드는 방법을 결정하십시오. 예를 들어, 상사와 토론하는 경우 &lt;a href="https://www.indeed.com/career-advice/career-development/what-is-productivity"&gt;생산성&lt;/a&gt; 향상에 대한 상사의 욕구에 호소하도록 주장을 구성할 수 있습니다.&lt;/p&gt;
&lt;p&gt;직장 토론에는 당신이 토론하는 상대방 외에 추가 청중이 있을 수 있다는 점을 인지하십시오. 당신의 주장을 듣는 사람들을 설득하고 싶다면 그들의 욕구에도 호소하는 것을 고려하십시오. 청중의 원하는 바를 충족시키면 당신의 주장이 더욱 설득력 있어지고 당신의 주장에 대한 지지를 얻을 수 있습니다. 당신이 토론하는 상대방이 당신의 주장이 다른 사람들에게도 호소력이 있다는 것을 알게 되면 당신의 입장을 더 잘 이해할 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: 최대 산소 섭취량(VO2 Max): 무엇이며 어떻게 향상하는가</title><link>https://philipjkim.cc/posts/20250703-vo2-max-what-is-it-and-how-to-improve-it/</link><pubDate>Thu, 03 Jul 2025 10:19:34 +0900</pubDate><guid>https://philipjkim.cc/posts/20250703-vo2-max-what-is-it-and-how-to-improve-it/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.hss.edu/health-library/move-better/vo2-max"&gt;https://www.hss.edu/health-library/move-better/vo2-max&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;사람을 좋은 주자로 만드는 데는 여러 가지 요인이 있습니다. 그중 가장 중요한 것 중 하나는 최대 산소 섭취량입니다. HSS 스포츠 재활 및 퍼포먼스 팀의 운동 생리학자인 Kate Baird, MA, ACSM-CEP, CSCS는 “최대 산소 섭취량, 즉 유산소 능력을 이해하면 자신의 체력 수준을 측정하는 기준점을 갖게 됩니다.”라고 말합니다. “최대 산소 섭취량을 개선하는 것은 장수와 건강뿐만 아니라 달리기 능력에도 도움이 됩니다.”&lt;/p&gt;
&lt;h2 id="최대-산소-섭취량vo2-max이란-무엇인가요"&gt;최대 산소 섭취량(VO2 Max)이란 무엇인가요?&lt;/h2&gt;
&lt;p&gt;생물학 수업으로 돌아가 보겠습니다. 우리가 숨을 들이쉴 때 폐는 산소를 받아들입니다. 심장과 혈액은 그 산소를 근육으로 운반하고, 이는 근육이 움직이도록 하는 화학 반응을 일으키는 연료가 됩니다.&lt;/p&gt;</description></item><item><title>번역글: 난치병을 겪고 있는 사람으로서, 살아있는 사람들에게 어떤 조언을 해주고 싶으신가요?</title><link>https://philipjkim.cc/posts/20250703-advice-to-the-living-as-a-dying-person/</link><pubDate>Thu, 03 Jul 2025 09:58:45 +0900</pubDate><guid>https://philipjkim.cc/posts/20250703-advice-to-the-living-as-a-dying-person/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.quora.com/As-a-dying-person-what-is-your-advice-to-the-living"&gt;https://www.quora.com/As-a-dying-person-what-is-your-advice-to-the-living&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;2009년 저는 &lt;strong&gt;교모세포종&lt;/strong&gt;이라는 4등급 뇌종양 진단을 받았습니다. 수술 후 종양 전문의는 통계가 매우 좋지 않다는 슬픈 소식을 전하며 9개월간의 치료와 6개월에서 1년 정도의 수명을 예상했습니다.&lt;/p&gt;
&lt;p&gt;저는 몇 달 후 결혼할 예정으로 약혼한 상태였습니다. 하지만 우리는 헤어졌는데, 제가 그녀를 과부로 만들고 마음을 아프게 할 이유가 없다고 생각했습니다. 그 이후로 삶에서 어떤 것도 더 이상 추구하고 싶은 마음이 없었습니다. 완전히 모든 것을 중단했던 시기였습니다.&lt;/p&gt;
&lt;p&gt;직장을 그만두고 싶었지만, 제 상사들이 편안한 스케줄로 저를 설득해서 계속 일하게 했습니다. 그들은 저에게 통계를 다시 가르쳐주기 시작했습니다. 평균 수명 1년이라는 것은 어떤 사람은 3년 후에 죽고, 어떤 사람은 6개월 후에 죽는다는 의미이며, 저는 &lt;strong&gt;장기 생존 쪽에 속할 것이라는 긍정적인 마음&lt;/strong&gt;을 가져야 한다고 했습니다.&lt;/p&gt;</description></item><item><title>번역글: 엔듀런스 vs 그래블 바이크 - 어떤 것을 선택해야 할까요?</title><link>https://philipjkim.cc/posts/20250702-endurance-vs-gravel-bike/</link><pubDate>Wed, 02 Jul 2025 13:42:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20250702-endurance-vs-gravel-bike/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.canyon.com/en-kr/blog-content/gravel-bike-news/endurance-vs-gravel-bike/b16042024.html"&gt;https://www.canyon.com/en-kr/blog-content/gravel-bike-news/endurance-vs-gravel-bike/b16042024.html&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="엔듀런스-vs-그래블-바이크-모든-도로-영역을-깊이-탐험하기"&gt;엔듀런스 vs 그래블 바이크: 모든 도로 영역을 깊이 탐험하기&lt;/h2&gt;
&lt;p&gt;엔듀런스 바이크는 전통적인 로드 레이싱 바이크와 비슷해 보일 수 있지만, 더 수직이고 편안한 라이딩 포지션을 특징으로 합니다. 안장에서 더 긴 하루를 보낼 수 있도록 설계되었으며, 디자인에 편안함뿐만 아니라 성능과 효율성을 갖추고 있다는 사실 때문에 &amp;lsquo;엔듀런스&amp;rsquo;라는 이름을 얻었습니다. Canyon 의 엔듀런스 로드 바이크 제품군은 편안함과 속도의 경계를 허물고 안장에서 더 많은 지지를 제공하도록 설계되었습니다.&lt;/p&gt;
&lt;p&gt;그래블 바이크는 로드, 산악, 사이클로크로스 바이크의 요소를 차용합니다. 더 넓은 타이어, 견고한 프레임, 디스크 브레이크, 장비를 위한 추가 마운트를 갖추고 있어 아스팔트에서 트레일까지 다양한 지형을 다룰 수 있습니다.&lt;/p&gt;</description></item><item><title>번역글: Golang 공동 창시자 Rob Pike: Go가 잘한 것과 잘못한 것</title><link>https://philipjkim.cc/posts/20250702-what-go-got-right-and-wrong/</link><pubDate>Wed, 02 Jul 2025 10:28:40 +0900</pubDate><guid>https://philipjkim.cc/posts/20250702-what-go-got-right-and-wrong/</guid><description>&lt;p&gt;원문: &lt;a href="https://thenewstack.io/golang-co-creator-rob-pike-what-go-got-right-and-wrong/"&gt;https://thenewstack.io/golang-co-creator-rob-pike-what-go-got-right-and-wrong/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://gophercon.com.au/"&gt;GopherCon AU&lt;/a&gt; 참석자들은 Go의 사양이 처음 작성된 도시인 호주 시드니에서 특별한 대접을 받았습니다. Go의 공동 설계자 중 한 명인 &lt;a href="https://github.com/robpike"&gt;Rob Pike&lt;/a&gt;는 Go 프로그래밍 언어가 출시된 지 14주년이 되는 날을 기념하며 “무엇을 제대로 했고, 무엇을 잘못했는지” 돌아보는 강연을 했습니다.&lt;/p&gt;
&lt;p&gt;Pike는 2009년 11월 10일 웹사이트가 처음 공개되던 순간을 기억하며 “세상이 우리가 무엇을 해왔는지 알게 되었다”고 말했습니다.&lt;/p&gt;
&lt;p&gt;“14년이 지난 지금, 돌아볼 것이 많습니다.”라고 Pike는 청중에게 말하며 “더 큰 교훈들”을 탐구하겠다고 약속했습니다.&lt;/p&gt;</description></item><item><title>번역글: 분산 시스템 개발자를 위한 기도</title><link>https://philipjkim.cc/posts/20250701-a-prayer-for-distrubuted-systems-developers/</link><pubDate>Tue, 01 Jul 2025 13:55:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20250701-a-prayer-for-distrubuted-systems-developers/</guid><description>&lt;p&gt;원문: &lt;a href="https://philipotoole.com/a-prayer-for-distributed-systems-developers/"&gt;https://philipotoole.com/a-prayer-for-distributed-systems-developers/&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;16년이 넘는 시간 동안 저는 전체 스택을 오르내리며 소프트웨어를 작성했습니다. 제 경력 초기에 저는 특수 임베디드 장치를 위한 &lt;a href="http://en.wikipedia.org/wiki/Booting"&gt;부트 ROM&lt;/a&gt; 소프트웨어를 작성했습니다. 이런 종류의 프로그래밍은 컴퓨터가 &lt;strong&gt;정말로&lt;/strong&gt; 어떻게 작동하는지에 대해 많은 것을 가르쳐주었습니다.&lt;/p&gt;
&lt;p&gt;대부분의 프로그래머는 컴퓨터가 어떻게 작동하는지 안다고 생각하지만, &lt;strong&gt;그들은 단지 소프트웨어가 어떻게 작동하는지 알 뿐입니다.&lt;/strong&gt; 이 프로그래머들은 &lt;a href="http://en.wikipedia.org/wiki/Interrupt_handler"&gt;인터럽트 서비스 루틴&lt;/a&gt;이 어떻게 호출되는지, 컴퓨터가 두 숫자를 어떻게 더하는지, 마이크로프로세서가 다음 명령어를 RAM에 어떻게 로드하는지 정말로 알지 못합니다. 하지만 괜찮습니다. 그럴 필요도 없고, 관심도 없습니다.&lt;/p&gt;</description></item><item><title>번역글: Java 스레드 성능 vs. 가상 스레드 vs. Kotlin 코루틴</title><link>https://philipjkim.cc/posts/20250630-java-thread-vs-virtual-thread-vs-kotlin-coroutine/</link><pubDate>Mon, 30 Jun 2025 14:40:25 +0900</pubDate><guid>https://philipjkim.cc/posts/20250630-java-thread-vs-virtual-thread-vs-kotlin-coroutine/</guid><description>&lt;p&gt;원문 (아래 리스트 순으로 번역되어 있음. Translated by Google Gemini) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-03/Java-Thread-Performance-vs.-Virtual-Threads"&gt;https://blog.behzadian.info/2024-05-03/Java-Thread-Performance-vs.-Virtual-Threads&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-06/Java-Virtual-Threads-Performance-vs.-Kotlin-Coroutines"&gt;https://blog.behzadian.info/2024-05-06/Java-Virtual-Threads-Performance-vs.-Kotlin-Coroutines&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.behzadian.info/2024-05-26/Java-Thread-Performance-vs.-Virtual-Threads-Part-2"&gt;https://blog.behzadian.info/2024-05-26/Java-Thread-Performance-vs.-Virtual-Threads-Part-2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="java-스레드-vs-가상-스레드-pt1"&gt;Java 스레드 vs. 가상 스레드 Pt.1&lt;/h2&gt;
&lt;p&gt;면접 중에 한 면접관이 저에게 Java 스레드와 가상 스레드의 성능 차이에 대해 물었습니다. 저는 가상 스레드가 실제로는 JVM이 처리하는 경량 스레드이기 때문에 더 빠를 것이라고 답했지만, 둘 사이의 정확한 성능 차이가 궁금했습니다. 그래서 가상 스레드의 성능 향상을 확인하기 위해 간단한 벤치마크를 수행했습니다.&lt;/p&gt;
&lt;p&gt;이것은 매우 간단한 테스트입니다. 저는 매우 많은 수의 스레드와 가상 스레드를 생성하며, 각각이 완료되는 데 5초가 걸리도록 했습니다. 그런 다음 앱 실행 시간을 계산합니다. 이 벤치마크에 사용한 Java 코드는 다음과 같습니다:&lt;/p&gt;</description></item><item><title>번역글: 오마하 하이-로우 규칙 - 오마하 하이-로우 (PLO8) 플레이 방법</title><link>https://philipjkim.cc/posts/20250630-omaha-hi-lo-rules/</link><pubDate>Mon, 30 Jun 2025 10:09:24 +0900</pubDate><guid>https://philipjkim.cc/posts/20250630-omaha-hi-lo-rules/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.pokernews.com/poker-rules/omaha-hi-lo.htm"&gt;https://www.pokernews.com/poker-rules/omaha-hi-lo.htm&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="오마하-하이-로우-포커란-무엇인가요"&gt;오마하 하이 로우 포커란 무엇인가요?&lt;/h2&gt;
&lt;p&gt;팟-리밋 오마하 (또는 &amp;ldquo;오마하 하이&amp;rdquo;) 플레이 방법을 알고 있다면, 오마하 하이-로우 플레이 방법을 배우는 데 거의 다 왔습니다.&lt;/p&gt;
&lt;p&gt;이름에서 알 수 있듯이 오마하 하이-로우는 오마하 포커의 &amp;ldquo;스플릿-팟&amp;rdquo; 버전으로, 플레이어는 팟의 &amp;ldquo;하이&amp;quot;와 &amp;ldquo;로우&amp;rdquo; 두 절반을 놓고 경쟁합니다. 오마하 하이-로우는 일반적으로 고정 리밋 베팅으로 플레이되며, 종종 &lt;a href="https://www.pokernews.com/poker-rules/horse.htm"&gt;H.O.R.S.E.&lt;/a&gt; (오마하 하이-로우가 &amp;ldquo;O&amp;quot;인 경우) 또는 인기 있는 8-게임 믹스와 같은 &amp;ldquo;믹스 게임&amp;rdquo; 형식으로 나타납니다.&lt;/p&gt;
&lt;p&gt;팟-리밋 및 노-리밋 버전의 오마하 하이-로우도 인기가 많으며, 특히 온라인 현금 게임이나 토너먼트로 인기가 많습니다.&lt;/p&gt;</description></item><item><title>번역글: 오마하 소개 - 가장 운이 좋은 사람이 항상 이길까?</title><link>https://philipjkim.cc/posts/20250626-introduction-to-omaha/</link><pubDate>Thu, 26 Jun 2025 09:02:35 +0900</pubDate><guid>https://philipjkim.cc/posts/20250626-introduction-to-omaha/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.pokernews.com/strategy/omaha-luckiest-always-win-2086.htm"&gt;https://www.pokernews.com/strategy/omaha-luckiest-always-win-2086.htm&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="소개"&gt;소개&lt;/h2&gt;
&lt;p&gt;저는 최근에 $2/$4 리밋 오마하 하이 게임을 플레이했고, 나중에 그 게임의 다른 플레이어와 그것에 대해 이야기했습니다. 우리의 토론 주제는 낮은 레벨의 리밋 오마하가 온라인에서 이기기 가장 어려운 게임 중 하나인지 여부였습니다. 우리는 그 세션에서 각 핸드의 승자가 거의 예외 없이 플랍에서 또는 그 이전에 한참 뒤처져 있었다는 것을 알게 되었기 때문에 이 질문을 했습니다. 플랍, 턴, 리버의 카드는 프리미엄 핸드로 강하게 베팅하는 플레이어를 &amp;ldquo;뽑아내는&amp;rdquo; 것처럼 보였습니다.&lt;/p&gt;</description></item><item><title>번역글: 2025년 AI 프롬프트 엔지니어링: 무엇이 효과적이고 무엇이 그렇지 않은가</title><link>https://philipjkim.cc/posts/20250625-ai-prompt-engineering-in-2025/</link><pubDate>Wed, 25 Jun 2025 20:03:14 +0900</pubDate><guid>https://philipjkim.cc/posts/20250625-ai-prompt-engineering-in-2025/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.lennysnewsletter.com/p/ai-prompt-engineering-in-2025-sander-schulhoff"&gt;https://www.lennysnewsletter.com/p/ai-prompt-engineering-in-2025-sander-schulhoff&lt;/a&gt; (translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
 &lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eKuFqQKYRrA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
 &lt;/div&gt;

&lt;h2 id="이-에피소드에서-배우게-될-내용"&gt;이 에피소드에서 배우게 될 내용&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;가장 효과적인 5가지 프롬프트 엔지니어링 기법&lt;/li&gt;
&lt;li&gt;&amp;ldquo;역할 프롬프트(role prompting)&amp;rdquo; 및 AI 위협이 더 이상 작동하지 않는 이유 및 대신해야 할 일&lt;/li&gt;
&lt;li&gt;두 가지 유형의 프롬프트 엔지니어링: 대화형 및 제품/시스템 프롬프트&lt;/li&gt;
&lt;li&gt;프롬프트 인젝션 및 AI 레드 팀에 대한 입문서 - 여전히 최고 모델을 속이는 실제 탈옥(jailbreak) 전술 포함&lt;/li&gt;
&lt;li&gt;AI 에이전트와 로봇이 다음 주요 보안 위협이 될 이유&lt;/li&gt;
&lt;li&gt;AI 레드 팀 및 프롬프트 엔지니어링을 시작하는 방법&lt;/li&gt;
&lt;li&gt;AI 제품에 적용할 수 있는 실용적인 방어책&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="몇-가지-핵심-내용"&gt;몇 가지 핵심 내용&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;프롬프트 엔지니어링은 여전히 매우 활발하며 그 어느 때보다 중요합니다.&lt;/strong&gt; 오히려 기업들이 사용자 대면 기능 및 핵심 기능을 구동하기 위해 LLM에 의존함에 따라 더욱 중요해졌습니다. Sander는 프롬프트 품질이 AI 성능을 좌우할 수 있는 방법, 특히 제품 전반에 걸쳐 확장될 때의 중요성을 설명합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프롬프트 엔지니어링에는 &amp;ldquo;대화형&amp;quot;과 &amp;ldquo;제품 중심형&amp;quot;이라는 두 가지 명확한 유형이 있습니다.&lt;/strong&gt; 대부분의 사람들은 프롬프팅을 ChatGPT와 채팅하는 것으로 생각하지만, Sander는 진정한 영향력은 제품 내에서 고성능 프롬프트를 만드는 것에서 온다고 설명합니다. 이러한 프롬프트는 대규모로 사용되고, 수백만 번 실행되며, 프로덕션 코드처럼 강화되고 최적화되어야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;Few-shot 프롬프팅&amp;quot;은 정확도를 0%에서 90%로 향상시킬 수 있습니다.&lt;/strong&gt; 가장 강력한 기술 중 하나는 모델에 정확히 원하는 것의 예시를 보여주는 것입니다. 이를 few-shot 프롬프팅이라고 합니다. Sander는 이 단일 기술이 몇 가지 예시-레이블 쌍을 추가하는 것만으로 의료 코딩 사용 사례를 완전한 실패에서 거의 완벽한 결과로 바꾸어 놓았음을 공유합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;역할 프롬프트(예: &amp;ldquo;당신은 수학 교수입니다&amp;hellip;&amp;quot;)는 대부분의 사람들이 생각하는 것과 달리 대체로 비효율적입니다.&lt;/strong&gt; Sander는 역할 프롬프트가 어조나 글쓰기 스타일에는 도움이 될 수 있지만, 정확도를 높이는 데는 거의 효과가 없음을 보여주는 연구를 분석합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;분해(decomposition) 및 자기 비판(self-criticism)과 같은 고급 기술은 더 나은 성능을 끌어냅니다.&lt;/strong&gt; Sander는 모델에 먼저 문제를 하위 문제로 분해하거나(분해) 자신의 답변을 비판하도록 요청하는 것이 어떻게 더 똑똑하고 정확한 결과로 이어질 수 있는지 설명합니다. 이는 다단계 추론이 필요한 에이전트와 같은 설정에서 특히 가치가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;컨텍스트(&amp;ldquo;추가 정보&amp;rdquo;)는 과소평가되어 있지만 엄청난 영향을 미칩니다.&lt;/strong&gt; 모델에 더 관련성 있는 배경 정보를 제공하는 것만으로도 성능을 크게 향상시킬 수 있습니다. Sander는 특히 올바른 형식과 순서로 포함되었을 때 추가 데이터(예: 이력, 연구 논문 또는 과거 상호 작용)를 포함하는 것이 프롬프트의 성공 여부를 결정했던 사례를 공유합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;프롬프트 인젝션은 실제적이고 위험하며 전통적인 의미에서는 해결 불가능합니다.&lt;/strong&gt; 우리는 공격자들이 어떻게 LLM을 &amp;ldquo;탈옥&amp;quot;시켜 유해하거나 제한되거나 의도치 않은 응답을 출력하도록 속이는지 살펴봅니다. 이러한 공격은 종종 &amp;ldquo;X를 하지 마시오&amp;quot;와 같은 전통적인 방어 수단을 우회합니다. 그리고 Sander (심지어 Sam Altman)에 따르면 만능 해결책은 없습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sander는 세계 최대 규모의 AI 레드 팀 대회인 HackAPrompt를 운영합니다.&lt;/strong&gt; 60만 개 이상의 프롬프트가 수집되었고 OpenAI 및 Anthropic와의 지속적인 협력을 통해 Sander의 플랫폼은 실제 LLM 스트레스 테스트의 중심에 있습니다. 이는 크라우드소싱 보안과 게임 메커니즘의 독특한 조합이며, 연구소들이 AI 안전에 대해 생각하는 방식을 형성하고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;에이전트 기반 AI 시스템은 챗봇보다 공격에 훨씬 더 취약합니다.&lt;/strong&gt; 오늘날의 프롬프트 인젝션에 대한 우려는 시작에 불과합니다. AI 에이전트가 항공편을 예약하고, 이메일을 보내고, 심지어 인간형으로 돌아다니기 시작하면 위험은 배가됩니다. Sander는 에이전트 보안이 다음 개척지인 이유와 대부분의 팀이 준비되지 않은 이유를 공유합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;할머니&amp;rdquo; 트릭, 오타, 난독화는 여전히 최첨단 모델을 무너뜨립니다.&lt;/strong&gt; 가장 발전된 LLM조차도 놀랍도록 간단한 해킹에 속을 수 있습니다. Sander는 감정 조작(예: &amp;ldquo;할머니가 해주던 것처럼 말해줘&amp;rdquo;), 인코딩된 입력, 창의적인 문구를 포함하여 여전히 작동하는 탈옥 기술을 설명합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;대부분의 회사는 손상된 방어책을 사용하고 있습니다.&lt;/strong&gt; Sander는 &amp;ldquo;프롬프트 분리&amp;quot;나 &amp;ldquo;악의적인 입력 무시&amp;quot;와 같은 문구를 추가하는 것이 왜 작동하지 않는지 분석합니다. 가드레일은 쉽게 우회되며, 현재 분류기는 인코딩된 공격을 잡아낼 지능이 부족한 경우가 많습니다. 보안의 미래는 모델 수준이어야 하며, 덧붙이는 방식이 아니어야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;위험에도 불구하고 AI의 잠재력은 엄청나며 추구할 가치가 있습니다.&lt;/strong&gt; Sander는 보안을 중요하게 생각하지만, 종말론자는 아닙니다. 그는 우리가 책임감 있게 구축한다면 AI가 생명을 구하고(특히 의료 분야에서), 생산성을 높이며, 실제 문제를 해결할 것이라고 믿습니다. 발전을 멈추는 것이 답이 아니라, 더 스마트하고 안전한 개발이 답입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Sander Schulhoff&lt;/strong&gt;는 원조 프롬프트 엔지니어입니다. 그는 인터넷 최초의 프롬프트 엔지니어링 가이드를 만들었고(ChatGPT 출시 두 달 전), 최근에는 OpenAI, Microsoft, Google, Princeton, Stanford와 공동 저술하여 1,500개 이상의 학술 논문을 분석하고 200개 이상의 프롬프트 기법을 다룬 프롬프트 엔지니어링에 대한 가장 포괄적인 연구를 수행했습니다. 또한 그는 OpenAI와 협력하여 최초이자 최대 규모의 AI 레드 팀 대회인 HackAPrompt를 운영하고 있으며, 이는 가장 최첨단 프롬프트 인젝션 기법(즉, LLM이 하지 말아야 할 일을 하도록 만드는 방법)을 발견하는 데 도움을 줍니다. Sander는 Maven에서 AI 레드 팀을 가르치고, AI 회사에 보안 자문을 제공하며, 수백만 명에게 가장 최첨단 프롬프트 엔지니어링 기법을 교육했습니다.&lt;/p&gt;</description></item><item><title>번역글: Java 23: 성능 및 생산성 향상 (2024년 9월)</title><link>https://philipjkim.cc/posts/20250625-java-23-new-features/</link><pubDate>Wed, 25 Jun 2025 15:27:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250625-java-23-new-features/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.hungrycoders.com/blog/java-9-23-unleashed-the-developers-cheat-sheet-to-modern-java"&gt;https://www.hungrycoders.com/blog/java-9-23-unleashed-the-developers-cheat-sheet-to-modern-java&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="주요-기능"&gt;주요 기능&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;패턴, instanceof, switch에서의 Primitive Types (미리보기): 패턴 매칭을 기본 타입으로 확장하여 상용구 코드(boilerplate code)를 줄입니다.&lt;/li&gt;
&lt;li&gt;Scoped Values (세 번째 미리보기): 제한된 수명을 가진 변수를 도입하여 메모리 관리를 개선합니다.&lt;/li&gt;
&lt;li&gt;Structured Concurrency (세 번째 미리보기): 구조화된 API를 통해 스레드 관리를 강화하여 동시성 처리를 단순화합니다.&lt;/li&gt;
&lt;li&gt;Markdown Documentation Comments: Javadoc에 Markdown 지원을 추가하여 문서의 가독성을 향상시킵니다.&lt;/li&gt;
&lt;li&gt;ZGC를 기본 가비지 컬렉터로: 세대별 Z Garbage Collector (ZGC)가 기본값으로 설정되어 성능과 응답성을 향상시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="개요-요약"&gt;개요 요약&lt;/h2&gt;
&lt;p&gt;Java 23은 성능 및 개발자 생산성 향상 추세를 이어갑니다. 기본 타입을 지원하는 패턴 매칭을 개선하고, 더 안전한 메모리 관리를 위해 Scoped Values를 도입하며, 구조화된 API를 통해 동시성을 단순화합니다. Markdown 문서화는 개발자 경험을 개선하고, ZGC가 기본 컬렉터가 되어 더 나은 성능과 낮은 지연 시간을 보장합니다.&lt;/p&gt;</description></item><item><title>번역글: 사이클링에서 이상적인 케이던스 설명: 페달링이 너무 빠르거나 느린가요?</title><link>https://philipjkim.cc/posts/20250625-the-ideal-cadence-for-cycling-explained/</link><pubDate>Wed, 25 Jun 2025 14:55:36 +0900</pubDate><guid>https://philipjkim.cc/posts/20250625-the-ideal-cadence-for-cycling-explained/</guid><description>&lt;p&gt;원문: &lt;a href="https://www.cyclingweekly.com/fitness/why-amateurs-shouldnt-try-to-pedal-like-chris-froome-191779"&gt;https://www.cyclingweekly.com/fitness/why-amateurs-shouldnt-try-to-pedal-like-chris-froome-191779&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;자전거를 처음 배우고 나서 균형 잡기나 핸들 조작과 함께 크게 생각해 본 적이 없을 수도 있지만, 라이딩 시 &lt;strong&gt;사이클링 케이던스&lt;/strong&gt;는 사이클링 &lt;strong&gt;성능에 상당한 영향&lt;/strong&gt;을 미칠 수 있습니다.&lt;/p&gt;
&lt;p&gt;최대 파워 생산부터 장거리 지구력 노력, 심지어 부상 예방에 이르기까지 페달을 돌리는 속도에 주의를 기울여야 할 많은 이유가 있습니다. 게다가 세션에서 RPM을 다양하게 섞는 훈련 이점은 당신을 놀라게 할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;이 지표에는 처음 생각했던 것보다 훨씬 더 많은 것이 있으며, 잠재적으로 오해의 소지가 있는 연구도 많습니다. 따라서 이상적인 사이클링 케이던스와 개선 방법에 대해 알아야 할 모든 세부 사항을 자세히 살펴보겠습니다.&lt;/p&gt;</description></item><item><title>번역글: AI를 이용한 게임 디컴파일 개발 여정</title><link>https://philipjkim.cc/posts/20250625-development-journey-on-game-decompilation-using-ai/</link><pubDate>Wed, 25 Jun 2025 14:35:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250625-development-journey-on-game-decompilation-using-ai/</guid><description>&lt;p&gt;원문: &lt;a href="https://macabeus.medium.com/game-decompilation-using-ai-4d47b65f8852"&gt;https://macabeus.medium.com/game-decompilation-using-ai-4d47b65f8852&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;안녕하세요, 저는 &lt;a href="https://github.com/macabeus"&gt;Macabeus&lt;/a&gt;입니다. 이 글에서는 제가 오래된 게임을 디컴파일하기 위해 AI를 사용한 개발 여정을 공유하고, 이 재미있는 분야에서의 개인적인 연구를 탐색해 보려고 합니다!&lt;/p&gt;
&lt;h2 id="게임-디컴파일이란"&gt;게임 디컴파일이란?&lt;/h2&gt;
&lt;p&gt;간단히 말해, &lt;em&gt;디컴파일&lt;/em&gt;은 저수준 코드를 고수준 코드로 변환하는 과정입니다. 예를 들어, 어셈블리에서 C로 변환하는 것입니다.&lt;/p&gt;
&lt;p&gt;IDA Pro나 Ghidra와 같은 유명한 리버스 엔지니어링 도구들을 통해 이를 알고 계실 수도 있습니다. 하지만 이 글에서 제가 &lt;em&gt;디컴파일&lt;/em&gt;이라고 언급할 때는, &lt;em&gt;일치하는 디컴파일(matching decompilation)&lt;/em&gt; 에 대해 이야기하는 것입니다. 이 더 구체적인 용어는 컴파일했을 때 대상 어셈블리와 &lt;strong&gt;정확히&lt;/strong&gt; 일치하면서도, 인간이 읽을 수 있는(human-readable) 고수준 코드를 작성하고자 함을 의미합니다.&lt;/p&gt;</description></item><item><title>번역글: 지금 바로 사용할 수 있는 최고의 AI 코딩 도구</title><link>https://philipjkim.cc/posts/20250624-the-best-ai-coding-tools-you-can-use-right-now/</link><pubDate>Tue, 24 Jun 2025 19:52:16 +0900</pubDate><guid>https://philipjkim.cc/posts/20250624-the-best-ai-coding-tools-you-can-use-right-now/</guid><description>&lt;p&gt;원문: &lt;a href="https://spectrum.ieee.org/best-ai-coding-tools"&gt;https://spectrum.ieee.org/best-ai-coding-tools&lt;/a&gt; (Translated by Google Gemini)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;AI 기반 &lt;a href="https://spectrum.ieee.org/tag/software-development"&gt;소프트웨어 개발&lt;/a&gt; 도구는 빠르게 발전하고 있습니다. 향상된 &lt;a href="https://spectrum.ieee.org/tag/autocomplete"&gt;자동 완성&lt;/a&gt;으로 시작했던 것이 애플리케이션을 작성하고, 문제를 디버깅하고, 전체 코드베이스를 관리할 수 있는(또는 적어도 시도할 수 있는) &lt;a href="https://spectrum.ieee.org/tag/ai-agents"&gt;AI 에이전트&lt;/a&gt;로 확장되었습니다.&lt;/p&gt;
&lt;p&gt;소프트웨어 개발 회사 Frescher Southern LTD의 설립자이자 수석 엔지니어인 &lt;a href="https://www.linkedin.com/in/chasing/"&gt;Josh Knowles&lt;/a&gt;는 “이것은 놀라울 정도로 빨랐습니다. 우리는 지금 위상 변화와 같은 것을 겪고 있습니다.”라고 말합니다.&lt;/p&gt;
&lt;p&gt;이러한 변화는 이 새로운 분야의 왕이 되기 위해 경쟁하는 AI 기반 코딩 도구들을 낳았습니다. 선도적인 도구 중 일부는 불과 몇 년 전에는 존재하지도 않던 &lt;a href="https://spectrum.ieee.org/tag/startups"&gt;스타트업&lt;/a&gt;에서 나왔습니다. 그러나 거대 기술 기업들도 가만히 있지 않습니다. 다른 최고의 옵션들은 &lt;a href="https://spectrum.ieee.org/tag/microsoft"&gt;Microsoft&lt;/a&gt;와 같은 기존 플레이어와 &lt;a href="https://spectrum.ieee.org/tag/anthropic"&gt;Anthropic&lt;/a&gt;과 같은 자금력 있는 AI 연구소에서 제공됩니다.&lt;/p&gt;</description></item><item><title>번역글: 사이클링 지구력을 키우는 방법: 더 멀리, 더 빨리 달리기 위한 7가지 팁</title><link>https://philipjkim.cc/posts/20250624-how-to-improve-your-cycling-endurance-in-limited-time/</link><pubDate>Tue, 24 Jun 2025 10:16:23 +0900</pubDate><guid>https://philipjkim.cc/posts/20250624-how-to-improve-your-cycling-endurance-in-limited-time/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.bikeradar.com/advice/fitness-and-training/cycling-endurance"&gt;https://www.bikeradar.com/advice/fitness-and-training/cycling-endurance&lt;/a&gt; (Translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;지구력 사이클링은 단순히 안장에 오래 앉아 있는 것 이상입니다. 제대로 훈련하면 더 먼 거리를 더 빨리 달릴 수 있고, 이는 모든 종류의 라이딩에 도움이 됩니다. 여기 지구력 사이클링 훈련을 최대한 활용하고 사이클링 지구력을 키우기 위한 최고의 팁들이 있습니다.&lt;/p&gt;
&lt;h3 id="1-꾸준히-타세요"&gt;1. 꾸준히 타세요&lt;/h3&gt;
&lt;p&gt;지구력 향상은 하룻밤 사이에 이루어지지 않습니다. 사이클링 코치인 릭 스턴(Ric Stern)은 &amp;ldquo;일관성은 왕&amp;quot;이라고 말합니다. &amp;ldquo;일주일에 한 번 장거리 라이딩을 하는 것보다, 일주일에 3~4번 짧은 라이딩을 하는 것이 훨씬 더 효과적일 것&amp;rdquo; 이라고 그는 덧붙입니다. 신체가 훈련에 적응하려면 규칙적인 훈련 자극이 필요합니다. 일주일에 여러 번 타면 심혈관계, 에너지 시스템 및 근육이 더 효율적으로 작동하도록 자극합니다.&lt;/p&gt;</description></item><item><title>번역글: 현재 나의 LLM 코드 생성 워크플로우</title><link>https://philipjkim.cc/posts/20250623-my-llm-codegen-workflow-atm/</link><pubDate>Mon, 23 Jun 2025 17:33:07 +0900</pubDate><guid>https://philipjkim.cc/posts/20250623-my-llm-codegen-workflow-atm/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/"&gt;https://harper.blog/2025/02/16/my-llm-codegen-workflow-atm/&lt;/a&gt; (translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;요약:&lt;/strong&gt; 스펙을 브레인스토밍하고, 계획을 계획한 다음, LLM 코드 생성을 사용하여 실행합니다. 개별적인 루프. 그리고 마법&lt;/p&gt;
&lt;p&gt;저는 LLM을 사용하여 아주 많은 소규모 제품을 만들어 왔습니다. 재미있고 유용했지만, 엄청난 시간을 낭비할 수 있는 함정들이 있습니다.&lt;/p&gt;
&lt;p&gt;얼마 전 한 친구가 제가 LLM을 어떻게 사용하여 소프트웨어를 작성하는지 물었습니다. 저는 &amp;ldquo;이런. 시간이 얼마나 있으신데요!&amp;ldquo;라고 생각했고, 그래서 이 글을 쓰게 되었습니다.&lt;/p&gt;
&lt;p&gt;(추신: AI를 싫어하는 분이라면 맨 끝으로 스크롤하세요)&lt;/p&gt;
&lt;p&gt;저는 많은 개발자 친구들과 이 주제에 대해 이야기하는데, 우리 모두는 어느 방향으로든 약간의 변형을 가미한 비슷한 접근 방식을 가지고 있습니다. 여기 저의 워크플로우가 있습니다. 이것은 저 자신의 작업, 친구들과의 대화(Nikete, Kanno, Obra, Kris, Erik 고마워요), 그리고 여러 끔찍한 인터넷 나쁜 곳들에서 공유된 많은 모범 사례들을 바탕으로 만들어졌습니다.&lt;/p&gt;</description></item><item><title>번역글: 에단 몰릭이 말하는 AI와의 "공동 지능"을 위한 4가지 규칙</title><link>https://philipjkim.cc/posts/20250623-the-four-rules-of-co-intelligence-with-ai/</link><pubDate>Mon, 23 Jun 2025 13:09:41 +0900</pubDate><guid>https://philipjkim.cc/posts/20250623-the-four-rules-of-co-intelligence-with-ai/</guid><description>&lt;p&gt;&lt;em&gt;원문: &lt;a href="https://www.forbes.com/sites/peterhigh/2024/05/07/ethan-mollick-on-the-four-rules-of-co-intelligence-with-ai/"&gt;https://www.forbes.com/sites/peterhigh/2024/05/07/ethan-mollick-on-the-four-rules-of-co-intelligence-with-ai/&lt;/a&gt; (translated by Google Gemini)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;에단 몰릭은 펜실베이니아 대학교 와튼 스쿨의 부교수로, 기업가 정신에서의 혁신을 연구하고 가르치며 인공지능이 업무와 교육에 미치는 영향을 분석합니다. 연구와 강의 외에도, 에단은 게임, 시뮬레이션, AI를 사용하여 교육을 민주화하려는 와튼 인터랙티브(Wharton Interactive)를 이끌고 있습니다. 학계에 몸담기 전에는 스타트업을 공동 창업했으며, 현재는 기업가와 다른 경영진들의 자문 역할을 하고 있습니다. 에단의 최신 저서로는 &amp;lsquo;공동 지능: AI와 함께 생활하고 일하기(Co-Intelligence: Living and Working with AI)&amp;lsquo;가 있습니다. 또한 그는 13만 4천 명 이상의 팔로워를 보유한 인기 블로그 &amp;lsquo;OneUsefulThing&amp;rsquo;의 저자이기도 합니다.&lt;/p&gt;</description></item></channel></rss>