오목 엔진 Rapfi 해부 Part 1: 오목·렌쥬 오픈소스 생태계와 Rapfi 의 역사
이 글은 Claude Opus 5.5 을 이용해 초안이 작성되었으며, 이후 퇴고를 거쳤습니다.
바둑에 KataGo 가 있다면 오목·렌쥬에는 Rapfi 가 있습니다. dhbloo/rapfi 는 GPLv3 로 공개된 C++ 오목·렌쥬 엔진이고, 오목 AI 들의 연례 대회인 Gomocup 에서 2022년부터 2026년까지 참가한 리그를 거의 모두 우승했습니다.
이 시리즈는 Rapfi 를 다섯 편에 걸쳐 뜯어봅니다.
| 편 | 주제 |
|---|---|
| Part 1 (이 글) | 오목·렌쥬 오픈소스 생태계, Rapfi 의 역사 |
| Part 2 | Rapfi 와 KataGo 비교 |
| Part 3 | Rapfi 는 어떻게 수를 고르는가: 패턴, NNUE, 알파-베타, MCTS |
| Part 4 | 직접 빌드해서 돌려 보기: 실측 예제 |
| Part 5 | Rapfi 로 오목·렌쥬 서비스를 만들 때 |
규칙 자체(금수, 26주형, 스왑 오프닝)는 렌쥬 입문 시리즈 에서 다뤘으므로 여기서는 필요한 만큼만 다시 적습니다. 이 시리즈의 소스 코드 인용은 모두 2026-07-23 자 master 커밋 3c94c2a (내부 버전 0.43.02) 기준입니다.
1. 이미 풀린 게임에 엔진이 왜 필요한가#
오목은 수학적으로 풀린 게임 입니다.
- 오목(15x15): Allis, van den Herik, Huntjens 가 프로그램 Victoria 로 흑(선공) 필승을 증명했습니다. 장목을 승리로 치는 자유룰과 정확히 다섯만 인정하는 변형 모두 흑 필승입니다. 1993년 AAAI 심포지엄 발표, 1996년 Computational Intelligence 12(1) 게재, Allis 의 1994년 박사 논문이 출처입니다.
- 렌쥬: 흑에게 금수를 걸어도 오프닝 규정이 없으면 여전히 흑 필승입니다. Wágner 와 Virág 가 2001년 ICGA Journal 24(1) 의 “Solving Renju” 에서 증명했습니다.
“풀렸다” 는 말은 흑이 완벽하게 두면 이긴다 는 뜻이지, 사람이나 프로그램이 그 수순을 실전에서 찾아낸다는 뜻이 아닙니다. 그래서 대회는 색을 바꾸는 스왑 규정이나 미리 정한 균형 오프닝으로 시작하고, 그 뒤부터는 여전히 실력 싸움입니다. 렌쥬 입문 Part 2 에서 본 오프닝 규정의 변천이 바로 이 문제에 대한 사람의 대응이었습니다.
엔진은 여기서 두 가지 역할을 합니다.
- 분석 도구: 오프닝이 흑에 얼마나 기울었는지, 이 국면에 필승 수순이 있는지를 계산합니다. 스왑 규정을 설계하거나 오프닝을 연구하는 사람에게 필수입니다.
- 대국 상대: 온라인 오목 서비스의 AI 상대, 초보자 연습 상대가 됩니다.
2. 2026년 오목·렌쥬 오픈소스 생태계#
생태계는 네 층으로 나눠 보면 이해가 쉽습니다.
flowchart LR
E["엔진<br/><br/>Rapfi<br/>KataGomo<br/>AlphaGomoku<br/>기타"]
P["프로토콜<br/><br/>Piskvork<br/>stdin/stdout 텍스트"]
B["GUI·매니저<br/><br/>Piskvork<br/>qpiskvork<br/>Yixin-Board<br/>Gomocalc (웹)"]
C["대회<br/><br/>Gomocup<br/>2000년부터 매년"]
E --> P
P --> B
P --> C
style E fill:#FFD700,color:#000000
style P fill:#87CEEB,color:#000000
style B fill:#D3D3D3,color:#000000
style C fill:#D3D3D3,color:#000000
핵심은 가운데의 Piskvork 프로토콜 입니다. 엔진과 GUI 가 이 텍스트 프로토콜 하나로 연결되므로, 어떤 엔진이든 어떤 GUI 에도 꽂을 수 있습니다. Gomocup 도 이 프로토콜로 엔진을 돌립니다.
2.1 엔진#
현역으로 활동하는 주요 엔진입니다. 별 개수는 2026-09-24 기준입니다.
| 엔진 | 방식 | 라이선스 | 비고 |
|---|---|---|---|
| Rapfi | 알파-베타 + NNUE (MCTS 선택 가능) | GPLv3 | ★274. Gomocup 2022~2026 거의 전 리그 우승 |
| KataGomo | KataGo 기반 MCTS + 신경망 + VCF 솔버 | MIT 계열 (KataGo 라이선스) | ★194. 오목 외 헥스·육목 등 여러 게임을 브랜치별로 지원 |
| AlphaGomoku | AlphaZero 계열 탐색 + 신경망 + VCF 솔버 | GPLv3 | 폴란드 Kozarzewski. Caro 룰 2023~2026 우승 |
| Embryo | 고전적 알파-베타 | 비공개 (실행 파일만 배포) | 체코 Fontán. 2019~2020년 Gomocup 최강 |
| Yixin (弈心) | 비공개 | 비공개 (GUI 만 BSD 공개) | 중국 Sun Kai. 2012~2018 Gomocup 7연패 |
몇 가지 짚어 둘 점이 있습니다.
- KataGomo 의 저자 Zhiyang Hang(hzyhhzy)은 Rapfi 의 공동 저자 목록에도 “HZY (sigmoid)” 로 올라 있습니다. 두 엔진은 경쟁자이면서 협력 관계입니다. Rapfi 의 신경망은 KataGomo 가 둔 자가대국 기보로 학습했습니다. 이 관계는 Part 2 에서 자세히 봅니다.
- Yixin 은 “사람 챔피언 수준에 오른 첫 오목·렌쥬 AI” 로 소개됩니다. 2017년 스왑2 규정으로 세계 오목 챔피언 Rudolf Dupszki 를 이겼고 2018년에는 세계 렌쥬 챔피언 Qi Guan 과 1승 3무 1패로 비겼습니다. 하지만 엔진 소스는 공개되지 않았습니다. 마지막 버전은 Yixin2018 입니다. 대신 Yixin 이 정한 Yixin-Board 프로토콜 확장 과 기보 데이터베이스 형식은 지금도 생태계의 사실상 표준으로 남아 Rapfi 도 그대로 지원합니다.
- Embryo 는 강했지만 저장소에 실행 파일만 있고 라이선스가 없어 오픈소스로 볼 수 없습니다.
Gomocup 2026 에는 “역대 최다” 신규 참가가 있었습니다. 한국의 JeongHyeon Choi 가 Rust 로 쓴 PVS 기반 렌쥬 엔진 Mintaka, 개발 과정 자체를 LLM 에이전트 루프(GPT-5.5, Claude Opus 4.7, GLM-5.1)로 진행했다고 밝힌 VibeFive, 트랜스포머 평가와 증명수 탐색(PNS)을 섞은 Starpoint 등이 눈에 띕니다. 다만 이들 대부분은 공개 저장소와 대회 출전작이 같은 것인지 1차 출처로 확인되지 않아 링크는 달지 않습니다.
그 밖에 SlowRenju(GPLv3), Carbon, Chis, Pela, XL engine 같은 엔진이 Gomocup 의 “소스 공개 엔진” 목록에 있지만 대부분 2010년대 중후반 이후 갱신이 멈췄습니다.
2.2 GUI 와 매니저#
| 이름 | 성격 | 상태 |
|---|---|---|
| Piskvork | Windows 용 오목 매니저. Gomocup 공식 도구의 원조 | GPLv3, 마지막 버전 9.0 (2023-05, Caro 룰 추가) |
| qpiskvork | Qt 기반 크로스플랫폼 매니저 (Windows·Linux) | GPLv2, 2026-09-18 에도 릴리스. 가장 활발 |
| Yixin-Board (dhbloo 포크) | Yixin 의 GUI 를 Rapfi 용으로 고친 것. 분석·DB 기능 완비 | BSD-2, GTK3 로 이식되어 macOS 지원 |
Rapfi 는 자체 GUI 가 없고, README 는 분석·데이터베이스 기능을 전부 쓸 수 있는 Yixin-Board 를 가장 권합니다. Rapfi 공식 릴리스에는 이 GUI 가 함께 들어 있습니다.
2.3 프로토콜: Piskvork#
Piskvork 프로토콜 은 매니저가 엔진 프로세스(pbrain-* 라는 이름을 씁니다)를 띄우고 stdin/stdout 으로 한 줄짜리 텍스트 명령 을 주고받는 방식입니다. START 15 로 판을 열고, TURN 7,8 로 상대 수를 알려 주면 엔진이 6,9 처럼 자기 수를 답합니다. 체스의 UCI, 바둑의 GTP 에 해당합니다.
명세의 마지막 갱신은 2023-03-20(Caro 룰 추가)이고, 스왑2 오프닝용 SWAP2BOARD 는 2022년 말에 추가되었습니다. 구체적인 주고받기는 Part 4 에서 직접 해 봅니다.
2.4 웹과 교육용 저장소#
- Gomocalc: Rapfi 저자가 만든 웹 분석판입니다. Rapfi 를 WebAssembly 로 컴파일해 브라우저 안에서 돌리므로 서버에 계산을 요청하지 않습니다. 서비스를 만들 때의 참고 구조로 Part 5 에서 다시 다룹니다.
- junxiaosong/AlphaZero_Gomoku: 별 3,600개가 넘는, 오목 분야에서 가장 유명한 저장소입니다. 다만 6x6·8x8 판에서 AlphaZero 를 이해하기 위한 교육용이고 대회용 엔진이 아닙니다. “오목 AI 오픈소스” 로 검색하면 이 저장소가 먼저 나오지만 실전 강도의 기준점은 Rapfi 와 KataGomo 입니다.
2.5 대회: Gomocup#
Gomocup 은 2000년부터 열린 오목 AI 대회이고 2026년(6월 5~7일)이 27회째였습니다. 리그는 다음과 같습니다.
| 리그 | 판 | 비고 |
|---|---|---|
| Freestyle (Freestyle-20) | 20x20 | 장목도 승리 |
| Freestyle-15 | 15x15 | 2024년 신설 |
| Fastgame | 20x20 | 수당 5초, 대국당 120초 |
| Standard | 15x15 | 정확히 다섯만 승리 |
| Renju | 15x15 | 흑 금수 |
| Caro | 15x15 | 양끝이 모두 막히지 않은 정확히 다섯만 승리. 2023년 신설 |
중요한 조건이 하나 있습니다. 엔진 하나당 CPU 코어 1개로 제한 하고 GPU 는 쓰지 않습니다. 2026년 하드웨어는 AMD EPYC 서버, 메모리 제한 1GB 였습니다. GPU 를 허용하던 무제한 리그는 2025년과 2026년에 열리지 않았습니다. 이 조건은 Part 2 의 Rapfi–KataGo 비교에서 결정적인 변수가 됩니다.
3. Rapfi 의 역사#
3.1 저자#
Rapfi 는 중국의 Haobin Duan (段浩彬, GitHub dhbloo) 이 만들었습니다. 논문에는 베이징항공항천대학(Beihang University) 소속으로 나옵니다. 저장소의 AUTHORS 파일에는 그 외에 KataGomo 저자 HZY 를 포함한 5명이 올라 있지만, GitHub 기준 커밋 234개가 dhbloo 한 사람의 것일 정도로 사실상 1인 주도 프로젝트입니다.
AUTHORS 파일은 두 곳에 감사를 표합니다.
- Stockfish: “Rapfi 는 Stockfish 코드 일부를 채택했다” 고 밝힙니다. 탐색 구조가 Stockfish 를 많이 닮은 이유입니다 (Part 3).
- Pikafish 팀: 중국 장기(샹치) 엔진 Pikafish 팀이 엔진 테스트 플랫폼과 계산 자원을 제공했습니다. 2022년 11월 커밋부터 “fishtest 서버에 자동 업로드” 라는 메시지가 보이는데, Stockfish 식 분산 테스트로 수정 하나하나의 Elo 이득을 검증해 온 것입니다.
3.2 연대기#
flowchart TB
A["2018 · Gomocup 데뷔 (자유룰만), 4위"] --> B["2019 · 전면 재작성, 2위"]
B --> C["2021 · 표준·렌쥬 룰 추가"]
C --> D["2022 · 첫 NNUE, 전 리그 우승"]
D --> E["2022-09 · 현 저장소 첫 커밋 (0.38.02)"]
E --> F["2023–2024 · mix8 → mix9"]
F --> G["2024 · ARM64, WASM, MCTS"]
G --> H["2025 · 논문, mix9svq"]
H --> I["2026 · 2025년 빌드로 5개 리그 우승"]
style D fill:#FFD700,color:#000000
style I fill:#FFD700,color:#000000
2018년: Gomocup 에 처음 나와 자유룰 4위, 속기 4위를 했습니다. 이때는 자유룰만 지원했습니다. 이 2018년판은 dhbloo/Rapfi-gomocup 에 MIT 라이선스로 남아 있는데, README 에 “코드 구조가 이후 개발에 맞지 않아 더 이상 갱신하지 않는다” 고 적혀 있습니다.
2019년: Gomocup 소개문에 따르면 “알고리즘을 완전히 새로 썼고 속도가 개선” 되었습니다. 자유룰·속기 모두 2위였고 우승은 Embryo 였습니다.
2021년: 표준 룰과 렌쥬 룰을 지원하기 시작했고 Yixin-Board 용 기본 확장도 이때 들어갔습니다.
2022년: 전환점입니다. Gomocup 2022 소개문은 “Rapfi 는 이제 KataGomo 가 둔 대국으로 학습한 NNUE 를 갖췄고, 고전적 평가와 NNUE 를 혼합해 쓴다” 고 적습니다. 그해 Rapfi 는 무제한 리그까지 전 리그를 우승 했습니다.
2022년 9월 30일: 지금의 dhbloo/rapfi 저장소 첫 커밋이 “init from rapfi 0.38.02” 입니다. 즉 공개 저장소의 git 기록은 버전 0.38.02 에서 시작하고 그 이전 개발 이력은 들어 있지 않습니다. 첫 이슈가 10월 25일이므로 공개 시점은 2022년 10월 무렵으로 보이지만, 정확한 공개일은 1차 출처로 확인되지 않습니다.
2023~2024년: 신경망 구조가 mix8 (2023) 에서 mix9 (2024) 로 바뀌었습니다. 릴리스 노트에 적힌 Elo 이득은 뒤의 표에 있습니다.
2024년: 6월에 ARM64(NEON) 빌드, 7월에 WebAssembly 빌드가 들어갔습니다. 9월 2일 “initial implementation for MCTS” 커밋으로 몬테카를로 트리 탐색이 추가되어 10월에 병합되었습니다.
2025년: 3월 17일 arXiv 에 논문이 올라왔고, 5월에 현재 기본 신경망인 mix9svq 로 바뀌었습니다. 6월 15일 릴리스가 지금까지의 마지막 공식 릴리스입니다.
2026년: 새 릴리스는 없습니다. 대신 대규모 리팩터링(2026-07-23, 탐색·DB·튜닝 파이프라인 모듈화)과 신경망 추론 가속(0.43.02, 2026-05-30)이 master 에 들어갔습니다. Gomocup 2026 에는 2025년 빌드(“RAPFI25”) 그대로 출전해 5개 리그를 모두 우승했습니다.
3.3 공식 릴리스#
GitHub Releases 에는 네 개뿐입니다.
| 태그 | 공개일 | 내용 |
|---|---|---|
gomocup2023 | 2023-06-12 | Rapfi23. Yixin-Board GUI 동봉 Windows 빌드 |
230903 | 2023-09-02 | mix8 NNUE. 이전 대비 75~100 Elo 향상 (자유룰-20 +88, 표준-15 +76, 렌쥬-15 +104) |
240609 | 2024-06-08 | mix9 NNUE. mix8 대비 20~55 Elo 향상. AVX-VNNI·ARM64 NEON 빌드 추가 |
250615 | 2025-06-15 | mix9svq. 가중치 크기를 크게 줄이면서 10~50 Elo 향상. GUI 를 GTK3 로 옮겨 macOS 지원 |
릴리스 사이 간격이 1년 가까이 되고, 그 사이 master 에 들어간 개선은 릴리스되지 않은 채 쌓입니다. 서비스에 쓸 때 어느 쪽을 기준으로 삼을지는 Part 5 에서 다룹니다.
3.4 Gomocup 성적#
연도별 순위입니다(각 연도 Gomocup 공식 결과 페이지 기준). “—” 는 미참가 또는 리그 미개설입니다.
| 연도 | 자유룰(20) | 자유룰-15 | 속기 | 표준 | 렌쥬 | 그해 Rapfi 가 못 딴 리그의 우승자 |
|---|---|---|---|---|---|---|
| 2018 | 4위 | — | 4위 | — | — | 자유룰 Yixin, 속기 Embryo |
| 2019 | 2위 | — | 2위 | — | — | Embryo 전 리그 |
| 2020 | 2위 | — | 2위 | — | — | Embryo |
| 2021 | 공동 3위 | — | 3위 | 2위 | 3위 | 자유룰·속기 Embryo, 표준·렌쥬 KataGomo |
| 2022 | 1위 | — | 1위 | 1위 | 1위 | 없음 (무제한 리그 포함 전관왕) |
| 2023 | 1위 | — | 1위 | 순위 없음 | 1위 | 표준 AlphaGomoku |
| 2024 | 1위 | 1위 | 1위 | 1위 | 1위 | 없음 |
| 2025 | 1위 | 1위 | 1위 | 1위 | 1위 | 없음 |
| 2026 | 1위 | 1위 | 1위 | 1위 | 1위 | 없음 |
- 2021년 자유룰은 Rapfi 와 KataGomo 가 Elo 까지 같아 나란히 3~4위였습니다.
- 2023년 표준 리그는 대국 중 27번 크래시가 나 “크래시 10% 초과” 규정에 걸려 Elo 가 매겨지지 않았습니다. 결과 페이지는 “이 리그에서 가장 잘 둔 AI 였다고 할 만하다” 고 덧붙였습니다.
- Rapfi 는 Caro 룰을 지원하지 않아 Caro 리그에는 나오지 않습니다.
- 2026년에는 한 해를 쉰 KataGomo 가 “2021년판보다 약 200 Elo 강해진” 버전으로 돌아와 5개 리그 모두 2위 를 했습니다. 자유룰-15 에서는 차이가 9 Elo 에 불과했습니다.
Gomocup 의 역대 Elo 목록(자유룰-20 기준)에서도 1위는 RAPFI 2025 (3073), 2위는 KATAGOMO 2026 (2879) 입니다.
3.5 논문#
2025년 3월 17일 arXiv 에 “Rapfi: Distilling Efficient Neural Network for the Game of Gomoku” (2503.13178) 가 올라왔습니다. 저자 순서는 Zhanggen Jin(동북대), Haobin Duan(베이항), Zhiyang Hang(칭화대, KataGomo 저자) 입니다. 제1저자가 Duan 이 아니라는 점 에 주의하십시오. 2026-09-24 현재 v1 만 있고 학술지 게재 정보는 없습니다.
논문의 핵심 주장은 셋입니다.
- 판을 선 모양의 작은 패턴들로 쪼개 미리 계산한 표(codebook)로 바꾸는 신경망 Mixnet 은, 같은 정확도의 ResNet 보다 계산량이 수천 배 적습니다. 알파-베타 탐색 기준으로 Mixnet small 이 초당 42만 8천 노드를 탐색할 때 ResNet-6b96f 는 484 노드입니다.
- 같은 시간을 주면 MCTS 에서 Mixnet 이 ResNet 기준선보다 300~400 Elo 강합니다.
- 알파-베타 탐색과 결합한 Rapfi 는 GPU 가 없는 CPU 전용 환경에서 KataGomo 보다 약 400 Elo 강합니다.
3번의 “CPU 전용” 이라는 단서는 반드시 붙여 읽어야 합니다. 이 단서가 Part 2 의 주제입니다. Mixnet 의 구조 자체는 Part 3 에서 소스 코드와 함께 봅니다.
논문 초록에는 “Botzone 의 오목 에이전트 520개 중 1위” 라는 주장도 있지만 논문 밖에서 확인할 수 없어 인용만 해 둡니다.
3.6 주변 프로젝트#
Rapfi 본체 저장소는 서브모듈로 다른 저장소 셋을 묶고 있습니다.
| 저장소 | 역할 | 라이선스 |
|---|---|---|
| rapfi-networks | 신경망 가중치와 예제 설정 파일 | CC0 (퍼블릭 도메인) |
| pytorch-nnue-trainer | 신경망 학습 코드. KataGo 자가대국 데이터도 읽음 | 라이선스 파일 없음 |
| gomoku-calculator | Gomocalc 웹앱 소스 | 라이선스 파일 없음 |
엔진 코드(GPLv3), 가중치(CC0), 웹앱(라이선스 미표기)의 라이선스가 셋 다 다르다는 점 은 서비스를 만들 때 중요합니다. Part 5 에서 다시 짚습니다.
4. 정리#
- 오목·렌쥬는 이미 풀린 게임이지만, 스왑 규정과 균형 오프닝 아래에서는 여전히 계산 싸움이고 엔진은 분석 도구이자 대국 상대로 쓰입니다.
- 생태계는 Piskvork 텍스트 프로토콜 을 중심으로 엔진·GUI·대회가 느슨하게 연결되어 있습니다.
- 현역 오픈소스 최상위권은 Rapfi(알파-베타 + NNUE)와 KataGomo(KataGo 기반 MCTS) 두 갈래이고, 두 프로젝트는 저자와 학습 데이터를 공유하는 사이입니다.
- Rapfi 는 2018년 4위에서 출발해 2022년 NNUE 도입과 함께 정상에 올랐고, 2024~2026년에는 참가한 5개 리그를 모두 우승했습니다.
다음 편에서는 같은 문제를 전혀 다른 방식으로 푸는 KataGo(KataGomo)와 Rapfi 를 나란히 놓고 비교합니다.
References#
1차 출처 (2025~2026)#
- Rapfi 저장소 (master
3c94c2a, 2026-07-23): https://github.com/dhbloo/rapfi - Rapfi Releases: https://github.com/dhbloo/rapfi/releases
- Jin, Duan, Hang, “Rapfi: Distilling Efficient Neural Network for the Game of Gomoku”, arXiv:2503.13178 (2025-03-17): https://arxiv.org/abs/2503.13178
- Gomocup 2026 결과: https://gomocup.org/results/gomocup-result-2026
- Gomocup 2025 결과: https://gomocup.org/results/gomocup-result-2025
- Gomocup 2024 결과: https://gomocup.org/results/gomocup-result-2024
- Gomocup 역대 Elo: https://gomocup.org/elo-ratings/
- KataGomo: https://github.com/hzyhhzy/KataGomo
- AlphaGomoku: https://github.com/MaciejKozarzewski/AlphaGomoku
- qpiskvork: https://github.com/Joker2770/qpiskvork
- rapfi-networks: https://github.com/dhbloo/rapfi-networks
배경 자료 (구자료, 연도 명시)#
- Gomocup 2018~2023 결과: https://gomocup.org/results/
- Rapfi 2018년판 (2018): https://github.com/dhbloo/Rapfi-gomocup
- Piskvork 프로토콜 명세 (최종 갱신 2023-03-20): https://plastovicka.github.io/protocl2en.htm
- Piskvork (9.0, 2023): https://github.com/plastovicka/Piskvork
- Yixin 소개 페이지: http://www.aiexp.info/pages/yixin.html
- L.V. Allis, H.J. van den Herik, M.P.H. Huntjens, “Go-Moku Solved by New Search Techniques”, AAAI Fall Symposium FS-93-02 (1993): https://cdn.aaai.org/Symposia/Fall/1993/FS-93-02/FS93-02-001.pdf
- 같은 논문 학술지판, Computational Intelligence 12(1) (1996): https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1467-8640.1996.tb00250.x
- J. Wágner, I. Virág, “Solving Renju”, ICGA Journal 24(1) (2001): https://journals.sagepub.com/doi/abs/10.3233/ICG-2001-24104