Development KO - k-p2p-lab/kpl-v3 GitHub Wiki

๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

Wiki home โ€บ ํ•œ๊ตญ์–ด ๋ฌธ์„œ ยท ์˜์–ด ์›๋ฌธ

๋ฌธ์„œ ์•ˆ๋‚ด ยท ์†Œ์Šค ์ €์žฅ์†Œ

์ •์‹ Go ๋ชจ๋“ˆ ๊ฒฝ๋กœ๋Š” github.com/k-p2p-lab/kpl-v3์ด๋ฉฐ go.mod๋Š” Go 1.25 ์ด์ƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” v3 ๊ฐœ๋ฐœ ์ ˆ์ฐจ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์™€ ๊ฐœ๋… ์„ค๊ณ„๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ์š”์™€ ๊ณตํ†ต ๊ฐœ๋…์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

Linux ๋นŒ๋“œ์™€ ๊ฒ€์ฆ

Linux ํ™˜๊ฒฝ์˜ ์ €์žฅ์†Œ ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

go build -o bin/kpl ./cmd/kpl
go test -buildvcs=false ./... -timeout 120s
go vet ./...
sh scripts/test-swarm-agent.sh
sh scripts/test-check-swarm.sh
sh scripts/test-swarm-config.sh
sh scripts/test-swarm.sh

๋™์‹œ์„ฑ ๊ฒ€์‚ฌ๋Š” ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

GORACE=atexit_sleep_ms=0 go test -race -buildvcs=false ./... -count=1 -timeout 120s

Agent ํ…Œ์ŠคํŠธ๋Š” Docker ๋ช…๋ น์„ ๋ชจ์˜ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ค์ •์€ ๊ฐ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•  ๋•Œ race ๋Ÿฐํƒ€์ž„์ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์—†์• ๋ฉฐ, race ๊ฒ€์ถœ์€ ๊ณ„์† ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

./bin/kpl validate --scenario examples/smoke.yaml

Swarm์—์„œ ๊ฐœ๋ฐœ ์‹คํ—˜ ์‹คํ–‰

๋ณ€๊ฒฝํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๊ฒŒ์‹œํ•œ ๋’ค Swarm ์ ˆ์ฐจ๋กœ ๋ฐฐํฌํ•˜์‹ญ์‹œ์˜ค. Linux ๋…ธ๋“œ ํ•˜๋‚˜๋กœ ๊ฐœ๋ฐœ์šฉ Swarm์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ KPL_MIN_AGENTS=1๊ณผ deploy --all์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Agent๋Š” ํ™œ์„ฑ Swarm ๋…ธ๋“œ์™€ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•œ ์ด๋ฏธ์ง€ ๋ฐ attachable Peer overlay๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ๊ฐ„ ๋ฐฐ์น˜์™€ ์—ฐ๊ฒฐ์„ ๊ฒ€์ฆํ•  ๋•Œ์—๋Š” ์ตœ์†Œ ๋‘ Agent ๋…ธ๋“œ์—์„œ ๋ถ„์‚ฐ smoke ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

์ปจํ…Œ์ด๋„ˆ์™€ ๋ธŒ๋ผ์šฐ์ € ํšŒ๊ท€ ๊ฒ€์‚ฌ

์ด๋ฏธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Linux Docker daemon์ด ์žˆ๋‹ค๋ฉด ํ˜ธ์ŠคํŠธ์— Go๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  Docker ํ…Œ์ŠคํŠธ target์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

make test-linux
# Equivalent when make is unavailable:
docker build --target test -t kpl-v3:test .

Dockerfile์˜ test target์€ Swarm ์…ธ ํšŒ๊ท€ ์Šคํฌ๋ฆฝํŠธ ๋„ค ๊ฐœ์™€ Go ํŒจํ‚ค์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์…ธ ํ…Œ์ŠคํŠธ๋Š” Docker ์‘๋‹ต์„ ๋ชจ์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„ ์ปจํ…Œ์ด๋„ˆ ๋‘ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด ํ…Œ์ŠคํŠธ๋Š” ๋ช…์‹œ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉฐ ์ผ๋ฐ˜ test ๋นŒ๋“œ์—์„œ๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด target๋งŒ์œผ๋กœ ์‹ค์ œ Swarm ๋ฐฐ์น˜, ํ˜ธ์ŠคํŠธ ๊ฐ„ ์—ฐ๊ฒฐ, ์ปค๋„ ๋„คํŠธ์›Œํฌ ์กฐ๊ฑด ๋™์ž‘์„ ๊ฒ€์ฆํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ € ๋กœ์ง์—๋Š” Docker test target๊ณผ ๋ณ„๊ฐœ์ธ Node.js ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

node --test internal/webui/*_test.cjs

Windows ์ž‘์—… ๊ณต๊ฐ„ ๊ทœ์น™

Windows์—์„œ๋Š” ํŽธ์ง‘๊ณผ ์ •์  ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Windows ๋„ค์ดํ‹ฐ๋ธŒ go test, go test -c, ์ƒ์„ฑ๋œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ํŒŒ์ผ ๋˜๋Š” ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” make test ๋“ฑ์˜ helper๋ฅผ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋Œ€ํ™”ํ˜• ๋ฐฉํ™”๋ฒฝยท๋ณด์•ˆยท๊ถŒํ•œ ์ƒ์Šน ์ฐฝ์ด ํ•„์š”ํ•œ ๋ช…๋ น๋„ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฒ€์ฆ์—๋Š” ์œ„์˜ Linux Docker test target์ด๋‚˜ ๊ธฐ์กด์˜ ๋น„๋Œ€ํ™”ํ˜• Linux ํ˜ธ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ •์  ๊ฒ€์‚ฌ์™€ ์‹คํ–‰ ๊ฒ€์ฆ ์—ฌ๋ถ€๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€๋Š” CGO_ENABLED=0์œผ๋กœ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ์…ธ ์Šคํฌ๋ฆฝํŠธ, Dockerfile๊ณผ Makefile์€ .gitattributes๋ฅผ ํ†ตํ•ด LF ์ค„๋ฐ”๊ฟˆ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€๋Š” ๋นŒ๋“œํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์‹คํ–‰ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํฌํ•จํ•˜๋ฉฐ Go๋‚˜ Node.js ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ ๊ด€๋ฆฌ

ํ”„๋กœ์ ํŠธยท๊ตฌํ˜„ ๋ฌธ์„œ๋Š” ์œ„ํ‚ค์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. kpl-v3 ์†Œ์Šค ์ €์žฅ์†Œ์—๋Š” ์‹คํ–‰ ์ฝ”๋“œยท์˜ˆ์ œยท๊ฒ€์ฆ ์ž…๋ ฅ์„ ๋‘ก๋‹ˆ๋‹ค. ์˜์–ด๊ฐ€ ๊ธฐ๋ณธ์ด๋ฉฐ ๋ณ€๊ฒฝํ•œ ์•ˆ๋‚ด๋Š” ๋Œ€์‘ํ•˜๋Š” -KO ํŽ˜์ด์ง€์—๋„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ ์ œ๋ชฉ๊ณผ UI ์กฐ์ž‘ ์ด๋ฆ„์„ ๊ตฌ๋ถ„ํ•˜๊ณ  ์‹ค์ œ ์˜์–ด UI ํ‘œ์‹œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ณตํ†ต ๋ฌธ์„œ ๊ด€๋ฆฌ ๊ธฐ์ค€์˜ ์œ„ํ‚ค ๋ฒ”์œ„ยท๋ถ„ํ• ยท์–ธ์–ด ์Œ ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ๋ฌธ์„œ ์•ˆ๋‚ด๋ฅผ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. v3์—์„œ experiments๋Š” ์‹คํ–‰ยท๋ณต๊ตฌ, results๋Š” ์ €์žฅ ํŒŒ์ผ, monitoring์€ ์šด์˜ ์ง€ํ‘œยท๋กœ๊ทธ, api๋Š” HTTPยทSSE ๊ณ„์•ฝ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. experiment-metrics์™€ bandwidth๋Š” ์ˆ˜์‹, visualization์€ ๊ทธ๋ฆผ ์กฐ์ž‘์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์ •์˜๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์ค€ ๋ฌธ์„œ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

v2 ์ž๋ฃŒ๊ฐ€ ๋‚˜๋ž€ํžˆ ์žˆ์„ ๋•Œ ๋ถ„์„ ์†Œ์Šค ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

python3 scripts/audit-v2-analysis.py --v2 ../v2

์ด ๊ฒ€์‚ฌ๋Š” v2 ๋ถ„์„ ํ•„๋“œยท์†Œ์Šค hash์˜ ๋ณ€๊ฒฝ์„ ์ฐพ์œผ๋ฉฐ ์ˆ˜์น˜ ๋™๋“ฑ์„ฑ์ด๋‚˜ ํ˜„์žฌ runtime ๊ฒ€์ฆ์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ–‰ํ•œ ๊ฒ€์ฆ๊ณผ ๋ณด์กด๋œ ๊ณผ๊ฑฐ ๊ธฐ๋ก์„ ๊ตฌ๋ถ„ํ•˜๊ณ , ๋ฌธ์„œ ์ˆ˜์ • ๋•Œ ์˜ค๋ฅ˜ ์ˆ˜์ • ์ผ์ง€๋ฅผ ๋ณ„๋„๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.