<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rapfi on philipjkim</title><link>https://philipjkim.cc/tags/rapfi/</link><description>Recent content in Rapfi on philipjkim</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 24 Sep 2026 19:21:56 +0900</lastBuildDate><atom:link href="https://philipjkim.cc/tags/rapfi/index.xml" rel="self" type="application/rss+xml"/><item><title>오목 엔진 Rapfi 해부 Part 5: Rapfi 로 오목·렌쥬 서비스를 만들 때</title><link>https://philipjkim.cc/posts/20260924-rapfi-engine-05/</link><pubDate>Thu, 24 Sep 2026 19:21:56 +0900</pubDate><guid>https://philipjkim.cc/posts/20260924-rapfi-engine-05/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;시리즈의 마지막 편입니다. &lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-04/"&gt;Part 4&lt;/a&gt; 에서 Rapfi 를 명령 단위로 돌려 봤으니, 이번에는 이것을 &lt;strong&gt;서비스의 엔진&lt;/strong&gt; 으로 쓸 때 부딪히는 문제들을 정리합니다. 온라인 대국 사이트의 AI 상대, 기보 분석 기능, 퍼즐(필승 수순 찾기) 앱 같은 것을 염두에 둡니다.&lt;/p&gt;
&lt;p&gt;이 글의 코드 인용은 master 커밋 &lt;code&gt;3c94c2a&lt;/code&gt; (2026-07-23) 기준이고, 실측은 Apple M1 Max 에서 했습니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-어디서-돌릴-것인가"&gt;1. 어디서 돌릴 것인가&lt;/h2&gt;
&lt;p&gt;가장 먼저 정할 것은 엔진의 위치입니다. 이 결정이 라이선스 의무, 비용, 공정성을 한꺼번에 정합니다.&lt;/p&gt;</description></item><item><title>오목 엔진 Rapfi 해부 Part 4: 직접 빌드해서 돌려 보기</title><link>https://philipjkim.cc/posts/20260924-rapfi-engine-04/</link><pubDate>Thu, 24 Sep 2026 19:18:43 +0900</pubDate><guid>https://philipjkim.cc/posts/20260924-rapfi-engine-04/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-03/"&gt;Part 3&lt;/a&gt; 에서 Rapfi 의 내부를 소스 코드로 봤습니다. 이번 편은 직접 돌려 봅니다. 아래의 모든 출력은 2026-09-24 에 Apple M1 Max (macOS, Apple clang 17) 에서 master 커밋 &lt;code&gt;3c94c2a&lt;/code&gt; 를 빌드해 &lt;strong&gt;실제로 실행한 결과&lt;/strong&gt; 입니다. 긴 출력은 줄였고, 줄인 곳은 &lt;code&gt;...&lt;/code&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;Windows 라면 &lt;a href="https://github.com/dhbloo/rapfi/releases/latest"&gt;공식 릴리스&lt;/a&gt; 에 CPU 별 실행 파일과 GUI 가 함께 들어 있어 빌드할 필요가 없습니다. macOS·Linux 이거나 최신 master 를 쓰려면 직접 빌드합니다. 필요한 것은 C++17 컴파일러(README 는 Clang 을 권합니다)와 CMake 입니다.&lt;/p&gt;</description></item><item><title>오목 엔진 Rapfi 해부 Part 3: Rapfi 는 어떻게 수를 고르는가</title><link>https://philipjkim.cc/posts/20260924-rapfi-engine-03/</link><pubDate>Thu, 24 Sep 2026 19:14:57 +0900</pubDate><guid>https://philipjkim.cc/posts/20260924-rapfi-engine-03/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-02/"&gt;Part 2&lt;/a&gt; 에서 Rapfi 는 &amp;ldquo;평가를 싸게 만들고 깊게 읽는&amp;rdquo; 엔진이라고 했습니다. 이번 편은 그 말을 소스 코드로 풀어 봅니다. 인용하는 코드와 줄 번호는 모두 &lt;a href="https://github.com/dhbloo/rapfi"&gt;dhbloo/rapfi&lt;/a&gt; master 커밋 &lt;code&gt;3c94c2a&lt;/code&gt; (2026-07-23, 버전 0.43.02) 기준이고, 경로는 저장소 안의 &lt;code&gt;Rapfi/&lt;/code&gt; 디렉터리 기준입니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="0-전체-흐름"&gt;0. 전체 흐름&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;TURN 7,8&lt;/code&gt; 같은 명령을 받은 뒤 좌표를 답하기까지의 흐름입니다.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TD
 A[&amp;#34;명령 수신&amp;lt;br/&amp;gt;TURN / BOARD / BEGIN&amp;#34;] --&amp;gt; B{&amp;#34;탐색 없이&amp;lt;br/&amp;gt;답할 수 있나?&amp;#34;}
 B --&amp;gt;|&amp;#34;빈 판, 즉시 오목,&amp;lt;br/&amp;gt;DB 에 기록된 필승수&amp;#34;| Z[&amp;#34;좌표 출력&amp;#34;]
 B --&amp;gt;|&amp;#34;아니오&amp;#34;| C{&amp;#34;탐색기 선택&amp;#34;}
 C --&amp;gt;|&amp;#34;기본값&amp;#34;| D[&amp;#34;알파-베타 (PVS)&amp;lt;br/&amp;gt;반복 심화&amp;#34;]
 C --&amp;gt;|&amp;#34;INFO SEARCH_TYPE mcts&amp;#34;| M[&amp;#34;MCTS (PUCT)&amp;#34;]
 D --&amp;gt; E[&amp;#34;노드마다: 즉승 판정 → TT →&amp;lt;br/&amp;gt;평가 → 가지치기 → 수 정렬&amp;#34;]
 E --&amp;gt;|&amp;#34;깊이 0 도달&amp;#34;| F[&amp;#34;VCF 잎 탐색&amp;lt;br/&amp;gt;(사만 이어 두기)&amp;#34;]
 F -.-&amp;gt;|&amp;#34;값 반환&amp;#34;| E
 E --&amp;gt; G[&amp;#34;스레드 투표로&amp;lt;br/&amp;gt;최선 결과 선택&amp;#34;]
 M --&amp;gt; N[&amp;#34;방문 수 + LCB 로&amp;lt;br/&amp;gt;최종 수 선택&amp;#34;]
 N --&amp;gt; Z
 G --&amp;gt; H{&amp;#34;STRENGTH &amp;lt; 100?&amp;#34;}
 H --&amp;gt;|&amp;#34;예&amp;#34;| I[&amp;#34;상위 후보 중&amp;lt;br/&amp;gt;무작위 선택&amp;#34;]
 H --&amp;gt;|&amp;#34;아니오&amp;#34;| Z
 I --&amp;gt; Z
 style D fill:#FFD700,color:#000000
 style F fill:#FF9999,color:#000000
 style M fill:#87CEEB,color:#000000
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;아래에서 판을 읽는 법(1~2절), 평가(3절), 탐색(4~5절), 그 밖의 장치(6~7절) 순으로 봅니다.&lt;/p&gt;</description></item><item><title>오목 엔진 Rapfi 해부 Part 2: Rapfi 와 KataGo, 같은 문제를 반대로 푸는 두 엔진</title><link>https://philipjkim.cc/posts/20260924-rapfi-engine-02/</link><pubDate>Thu, 24 Sep 2026 19:13:28 +0900</pubDate><guid>https://philipjkim.cc/posts/20260924-rapfi-engine-02/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-01/"&gt;Part 1&lt;/a&gt; 에서 오목·렌쥬 오픈소스 생태계의 최상위권이 Rapfi 와 KataGomo 두 갈래라고 했습니다. KataGomo 는 바둑 엔진 &lt;strong&gt;KataGo&lt;/strong&gt; 를 오목용으로 고친 것입니다. 이번 편은 두 엔진을 나란히 놓습니다.&lt;/p&gt;
&lt;p&gt;결론부터 말하면 두 엔진은 &lt;strong&gt;같은 목표를 정반대의 트레이드오프로 풉니다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rapfi&lt;/strong&gt;: 평가를 극단적으로 싸게 만들고, 그만큼 &lt;strong&gt;깊고 빠르게&lt;/strong&gt; 읽습니다. CPU 한 코어에서 초당 수십만 노드입니다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;KataGo / KataGomo&lt;/strong&gt;: 평가를 비싸고 정확하게 만들고, 그 평가가 가리키는 곳만 &lt;strong&gt;골라서&lt;/strong&gt; 읽습니다. GPU 에서 초당 수천 번입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="1-katago-는-무엇인가"&gt;1. KataGo 는 무엇인가&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/lightvector/KataGo"&gt;KataGo&lt;/a&gt; 는 David J. Wu(lightvector)가 만든 바둑 엔진이고, 가장 널리 쓰이는 AlphaZero 계열 공개 바둑 엔진 중 하나입니다. 2026-08-30 에 v1.18.2 가 나왔습니다.&lt;/p&gt;</description></item><item><title>오목 엔진 Rapfi 해부 Part 1: 오목·렌쥬 오픈소스 생태계와 Rapfi 의 역사</title><link>https://philipjkim.cc/posts/20260924-rapfi-engine-01/</link><pubDate>Thu, 24 Sep 2026 19:11:13 +0900</pubDate><guid>https://philipjkim.cc/posts/20260924-rapfi-engine-01/</guid><description>&lt;p&gt;&lt;em&gt;이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;바둑에 KataGo 가 있다면 오목·렌쥬에는 &lt;strong&gt;Rapfi&lt;/strong&gt; 가 있습니다. &lt;a href="https://github.com/dhbloo/rapfi"&gt;dhbloo/rapfi&lt;/a&gt; 는 GPLv3 로 공개된 C++ 오목·렌쥬 엔진이고, 오목 AI 들의 연례 대회인 Gomocup 에서 2022년부터 2026년까지 참가한 리그를 거의 모두 우승했습니다.&lt;/p&gt;
&lt;p&gt;이 시리즈는 Rapfi 를 다섯 편에 걸쳐 뜯어봅니다.&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;Part 1&lt;/strong&gt; (이 글)&lt;/td&gt;
 &lt;td&gt;오목·렌쥬 오픈소스 생태계, Rapfi 의 역사&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-02/"&gt;Part 2&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Rapfi 와 KataGo 비교&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-03/"&gt;Part 3&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Rapfi 는 어떻게 수를 고르는가: 패턴, NNUE, 알파-베타, MCTS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-04/"&gt;Part 4&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;직접 빌드해서 돌려 보기: 실측 예제&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://philipjkim.cc/posts/20260924-rapfi-engine-05/"&gt;Part 5&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Rapfi 로 오목·렌쥬 서비스를 만들 때&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;규칙 자체(금수, 26주형, 스왑 오프닝)는 &lt;a href="https://philipjkim.cc/posts/20260923-renju-guide-01/"&gt;렌쥬 입문 시리즈&lt;/a&gt; 에서 다뤘으므로 여기서는 필요한 만큼만 다시 적습니다. 이 시리즈의 소스 코드 인용은 모두 2026-07-23 자 master 커밋 &lt;code&gt;3c94c2a&lt;/code&gt; (내부 버전 0.43.02) 기준입니다.&lt;/p&gt;</description></item></channel></rss>