Native Input Joins - kimjooyoon/meta-ontology-go GitHub Wiki

์—ฌ๋Ÿฌ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์‹ค์ œ ๋ณธ๋ฌธ์— ์—ฐ๊ฒฐํ•˜๊ธฐ

์—…๋ฐ์ดํŠธ: 2026-10-04. ๊ฐœ๋ฐœ #1221ยท main #1222๋กœ ๋ณ‘ํ•ฉยท์„ค์น˜ํ•œ ์ž…๋ ฅ ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ๊ณผ ์‹ค์ œ ๊ด€์ธก์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์˜ ์†Œ์Šค๋Š” 1bef47fc1e7a4aca8ffb1cbd5a5aa7ded2353ce5์ž…๋‹ˆ๋‹ค. ์„ค์น˜๋œ ๋ฒ„์ „์€ ํ˜„์žฌ ์ƒํƒœ์—์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ์€ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ ์†Œ์ผ“์ž…๋‹ˆ๋‹ค

ํ™œ๋™์„ ์ž‘์€ ์ž‘์—…๋Œ€์— ๋น„์œ ํ•˜๋ฉด, ์ž…๋ ฅ์€ ๋ถ€ํ’ˆ์„ ๋ฐ›๋Š” ์†Œ์ผ“์ด๊ณ  bind๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ์—ฐ๊ฒฐ์„ ์ž…๋‹ˆ๋‹ค. ์†Œ์ผ“ ๋‘ ๊ฐœ๊ฐ€ ๊ฐ™์€ Integer ํƒ€์ž…์ด์–ด๋„ ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค์— ์ ์€ ์ˆœ์„œ๊ฐ€ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜์˜ ์ธ์ž ์ˆœ์„œ๊นŒ์ง€ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

activity Add(Integer, Integer) -> Integer computes "return input0 + input1"
activity Difference(Integer, Integer) -> Integer computes "return input0 - input1"
bind Left.result -> Add.input0
bind Right.result -> Add.input1
bind Right.result -> Difference.input0
bind Left.result -> Difference.input1

์ด ๊ฒฝ์šฐ Difference๋Š” Right์—์„œ Left๋ฅผ ๋บ๋‹ˆ๋‹ค. ๋‘ ์—ฐ๊ฒฐ์„ ๋ฐ”๊พธ๋ฉด ์˜๋ฏธ๋„ ๋ฐ”๋€๋‹ˆ๋‹ค. ๋™์ผ ํƒ€์ž…์„ ํ•˜๋‚˜์˜ PROV used ์‚ฌ์‹ค๋กœ ์ •๋ฆฌํ•˜๋”๋ผ๋„, ์„ ์–ธ์˜ ์ž…๋ ฅ ์œ„์น˜๋Š” ๋ณ„๋„๋กœ ๋ณด์กดํ•˜์—ฌ ๊ฐ™์€ ํƒ€์ž… ๋‘ ๊ฐœ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์„ ์–ธ ๋ณธ๋ฌธ์—์„œ ์ฝ๋Š” ์ด๋ฆ„ ์™ธ๋ถ€ ์ž…๋ ฅ ํ‚ค
Root(Integer) input Root
Compare(Text, Text) input0, input1 Compare.input0, Compare.input1
Label(Integer, Boolean, Text) input0, input1, input2 ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์€ ์œ„์น˜์˜ Label.inputN

ํ˜„์žฌ ์ˆœ์ˆ˜ ๊ณ„์‚ฐ ๋ณธ๋ฌธ์€ IntegerยทBooleanยทText ์ž…๋ ฅ 1~16๊ฐœ์™€ ์ถœ๋ ฅ 1๊ฐœ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž…๋ ฅ์€ ์ฝ๊ธฐ ์ „์šฉ์ด๋ฉฐ let์œผ๋กœ ๋งŒ๋“  ์ง€์—ญ ๋ณ€์ˆ˜์—๋Š” ๋‹ค์‹œ ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ํ•˜๋‚˜๋Š” input, ์—ฌ๋Ÿฌ ์ž…๋ ฅ์€ input0๋ถ€ํ„ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. input01๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ‘œ๊ธฐ๋‚˜ ์„ ์–ธ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฅ˜๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ์œ„์น˜๋งŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

activity Label(Integer, Boolean, Text) -> Text computes "if input1 && input0 > 0 { return input2 + \"!\" }; return input2"
bind Add.result -> Label.input0

Label.input0์€ Add์˜ ์‹ค์ œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ˜ธ์ถœ์ž๋Š” Label.input1๊ณผ Label.input2๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ•œ ์œ„์น˜๋ฅผ ์™ธ๋ถ€ ๊ฐ’์œผ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ ์ž…๋ ฅ ์œ„์น˜์—๋Š” ์ƒ์‚ฐ์ž ํ•˜๋‚˜๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "schema": "gooo/body-composition-cases/v1",
  "cases": [{"inputs": {
    "Left": -8,
    "Right": 6,
    "Label.input1": true,
    "Label.input2": "gooo",
    "Compare.input0": "๊ฐ™์Œ",
    "Compare.input1": "๊ฐ™์Œ"
  },
  "expected": {"Add": 27, "Difference": -3, "Label": "gooo!"}}]
}

์ „์ฒด ํŒŒ์ผ ํ˜•์‹๊ณผ ์ •ํ™•ํ•œ ์ผ๊ณฑ ํ™œ๋™์˜ ๊ธฐ๋Œ€๊ฐ’์€ ์‹คํ–‰ ์‚ฌ๋ก€๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›์•„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ JSON์€ ๊ธฐ๋Œ€๊ฐ’ ์„ธ ๊ฐœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ•œ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

ํ•œ ๋ช…๋ น์œผ๋กœ ์กฐ๋ฆฝํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ

์‹œ์ž‘ํ•˜๊ธฐ์—์„œ ์†Œ์Šค๋ฅผ ๋ฐ›์€ ์ƒˆ ์˜ˆ์ œ ์ฒดํฌ์•„์›ƒ์˜ ๋ฃจํŠธ์—์„œ ์•„๋ž˜ ๋ฆฌ๋น„์ „์„ ์„ ํƒํ•˜๊ณ  ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ž‘์—… ํŒŒ์ผ์ด ์žˆ๋Š” ์ฒดํฌ์•„์›ƒ์—์„œ๋Š” ๊ทธ ๋ณ€๊ฒฝ์„ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.

git fetch origin
git switch --detach 1bef47fc1e7a4aca8ffb1cbd5a5aa7ded2353ce5
gooo_go_bin="$(GOTOOLCHAIN=go1.27.1 go env GOROOT)/bin/go"
"$gooo_go_bin" build -trimpath -o gooo ./cmd/gooo

์ด์–ด์„œ ๊ฐ™์€ ๋ฃจํŠธ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

./gooo body-compose \
  --source examples/body-codegen/native-input-joins.gooo.fixture \
  --cases examples/body-codegen/native-input-joins-cases.json \
  --out input-joins-results

๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” ๊ฒฐ์ •๋ก ์ ์œผ๋กœ ํ›„๋ณด๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ถœ๋ ฅ ํด๋”์— ์„ ํƒํ•œ Gooo, Go ํ•จ์ˆ˜, ์—ฐ๊ฒฐ ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ , ํ•œ ๋ฒˆ ๋นŒ๋“œํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋‘ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅํ•œ ์กฐ๋ฆฝ ๊ธฐ๋ก์€ ์ถ”๊ฐ€ ์ถ”๋ก  ์—†์ด ์ƒˆ ์ž…๋ ฅ์— ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. body-compose๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ์ˆœ์ˆ˜ ๋ณธ๋ฌธ ์—ฐ๊ฒฐ์€ ๋“ฑ๋ก๋œ ํ™œ๋™ ๊ตฌํ˜„์„ ์‹คํ–‰ํ•˜๋Š” ์ผ๋ฐ˜ run ๋ช…๋ น๊ณผ ๋ณ„๋„์˜ ์‹คํ–‰ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ ํด๋”์—์„œ ๋‹ค์Œ ํŒŒ์ผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ฝ์„ ๋‚ด์šฉ
original.gooo, cases.json ์‹คํ–‰์— ์‚ฌ์šฉํ•œ ์›๋ณธ๊ณผ ๊ธฐ๋Œ€๊ฐ’
realized.gooo ์„ ํƒํ•œ ๋ณธ๋ฌธ์„ ๋ฐ˜์˜ํ•œ ๋‹ค์Œ ๊ฐœ๋ฐœ์šฉ Gooo
generated.go, main.go ์ƒ์„ฑํ•œ ํ•จ์ˆ˜์™€ ์ž…๋ ฅ ์ „๋‹ฌ ์ฝ”๋“œ
composition.json ๋ณธ๋ฌธ ์„ ํƒ๊ณผ ์—ฐ๊ฒฐ์˜ ์ €์žฅ ๊ธฐ๋ก
runtime.json ์‹ค์ œ ๊ฒฐ๊ณผ, ๊ธฐ๋Œ€๊ฐ’ ์ถฉ์กฑ ์ˆ˜, ์ž…๋ ฅ๋ณ„ ์ „๋‹ฌ ๊ฐ’

runtime.json์˜ traces์—๋Š” ์‚ฌ๋ก€๋ณ„ deliveries๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์ „๋‹ฌ์˜ inputs๋Š” ์ž…๋ ฅ ์œ„์น˜(port), ํƒ€์ž…์˜ ์‹๋ณ„์ž(entity_id), ๊ฐ’์„ ๋งŒ๋“  ํ™œ๋™ (producer_id), ์‹ค์ œ ๊ฐ’(value)์„ ํ•จ๊ป˜ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์—์„œ ๊ฐ’์ด ๋’ค๋ฐ”๋€Œ์—ˆ๋‹ค๋ฉด ๊ทธ ์œ„์น˜๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ณ , ๊ณ„์‚ฐ์ด ๋‹ฌ๋ž๋‹ค๋ฉด actual๊ณผ expected๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๊ณต๊ฐœ๋œ ์ž์ฒด ๋ชจ๋ธ์˜ ๋‘ ํŒŒ์ผ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

hf download asketeddy/gooo-three-choice-feedback-tiny-v1 \
  models/set-feedback/fp32/model.json models/set-feedback/fp32/weights.bin \
  --revision 24238ca67048b36bc305731799985271bb752dd1 \
  --local-dir gooo-models
./gooo body-compose \
  --source examples/body-codegen/native-input-joins.gooo.fixture \
  --cases examples/body-codegen/native-input-joins-cases.json \
  --model gooo-models/models/set-feedback/fp32/model.json \
  --out input-joins-model-results

์‚ฌ์šฉํ•œ ๋ชจ๋ธ์€ ์ž์ฒด three-choice FP32 ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๊ฐ€์ค‘์น˜ ํฌ๊ธฐ๋Š” 74,624๋ฐ”์ดํŠธ์ด๋ฉฐ ์ด๋ฒˆ ์ž…๋ ฅ ์—ฐ๊ฒฐ ์‹คํ—˜์—์„œ๋Š” ์ƒˆ๋กœ ํ•™์Šตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ Left ๋ณธ๋ฌธ์˜ ์„ธ ๊ฐ€์ง€ ์ด์ง„ ์กฐ๋ฆฝ ์„ ํƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. AddยทDifferenceยทLabelยท Compare์˜ ๋ณธ๋ฌธ๊ณผ ์—ฐ๊ฒฐ ์ˆœ์„œ๋Š” Gooo ์„ ์–ธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์™„์ „์„ฑ์€ ๋ฌด์—‡์„ ํ™•์ธํ–ˆ๋Š”์ง€์™€ ํ•จ๊ป˜ ์ฝ์Šต๋‹ˆ๋‹ค

ํ™•์ธํ•œ ๊ฒƒ ์ด๋ฒˆ ๊ด€์ธก
์„ ํƒํ•œ Left ๋ณธ๋ฌธ์˜ ์œ ํ•œ ์˜ˆ์‹œ ์ฒซ ๋ชจ๋ธ ํ›„๋ณด 0/6, ๋‹ค์Œ ํ›„๋ณด 6/6
์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ช…์‹œ๋œ ์ถœ๋ ฅ ํ•œ ์ œ์–ด์—์„œ 49/49
์—ฌ๋Ÿฌ ์ž…๋ ฅ์ด ์‹ค์ œ ๊ฐ’์œผ๋กœ ๋„์ฐฉํ–ˆ๋Š”์ง€ ํ•œ ์ œ์–ด์—์„œ ์ž…๋ ฅ 84๊ฐœยท์—ฐ๊ฒฐ ์ „๋‹ฌ 42๊ฐœ
๋ฐ˜๋ณต ์ƒ์„ฑ๊ณผ ์ €์žฅ ๊ธฐ๋ก ์žฌ์‹คํ–‰ 12๊ฐœ ์ œ์–ด์—์„œ 588/588ยท์ž…๋ ฅ 1,008๊ฐœยท์—ฐ๊ฒฐ 504๊ฐœ
ํ‹€๋ฆฐ ๊ธฐ๋Œ€๊ฐ’ ํ•˜๋‚˜๋ฅผ ์ผ๋ถ€๋Ÿฌ ๋„ฃ์€ ๋ณ„๋„ ์ œ์–ด 48/49

์ ์ˆ˜์˜ ๋ถ„๋ชจ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•œ ์ถœ๋ ฅ ๊ธฐ๋Œ€๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Œ€๊ฐ’์„ ์ƒ๋žตํ•œ ์ค‘๊ฐ„ ๊ฐ’์€ ๊ด€์ธก์—๋Š” ๋‚จ๊ณ  ์ ์ˆ˜์—๋Š” ๋”ํ•ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ๋งˆ๋‹ค ์œ„์น˜ยทํƒ€์ž…์˜ ์‹๋ณ„์žยท์ƒ์‚ฐ์žยท ์‹ค์ œ ๊ฐ’์ด ๊ธฐ๋ก๋˜์–ด ์—ฐ๊ฒฐ์ด ์–ด๋””์„œ ํ‹€๋ ธ๋Š”์ง€ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ์„ธ ๊ธฐ๋Œ€๊ฐ’์˜ JSON๋„ ํ›„์† ํ›„๋ณด 6b6c86f2์—์„œ ์ž์ฒด ๋ชจ๋ธ์„ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•ด ์‹คํ–‰ํ–ˆ๊ณ , ๋‘ ์‹ค์ œ ์‹คํ–‰์ด ์ผ์น˜ํ•˜๋ฉฐ 3/3์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. 588๊ฐœ๋Š” ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ฐ˜๋ณตํ•œ ์ œ์–ด์˜ ํ•ฉ๊ณ„์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝ ๊ณผ์ œ ์ˆ˜์™€ ์ผ๋ฐ˜์ ์ธ ์˜๋„ ์ถฉ์กฑ๋ฅ ์„ ์ถ”์ •ํ•  ๋•Œ๋Š” ๋ณ„๋„์˜ ๊ณผ์ œ์™€ ๊ด€์ธก์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ํ›„๋ณด 5af78bcb์˜ ์„ธ ๋ฒˆ์”ฉ ์ธก์ •์—์„œ ๋ชจ๋ธ์€ ํ›„๋ณด 2๊ฐœ, ๊ฒฐ์ •๋ก ์  ํƒ์ƒ‰์€ 8๊ฐœ๋ฅผ ํ™•์ธํ–ˆ๊ณ  ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ ์‹œ๊ฐ„์˜ ์ค‘์•™๊ฐ’์€ ๋ชจ๋ธ 9.711msยท๊ฒฐ์ •๋ก ์  6.396ms์˜€์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ์™€ ๋‘ ์‹คํ–‰์„ ํฌํ•จํ•œ ์ „์ฒด ๋ช…๋ น์€ ์•ฝ 301566ms, ๊ด€์ธก๋œ ํ”„๋กœ์„ธ์Šค ์ตœ๋Œ€ RSS๋Š” ์•ฝ 8183MiB์˜€์Šต๋‹ˆ๋‹ค. ๊ณ ์ •๋œ ์‹คํ–‰ ์ˆœ์„œ์™€ ๋”ฐ๋œปํ•œ Go ์บ์‹œ์—์„œ ์ธก์ •ํ–ˆ์œผ๋ฉฐ, ์ปดํ“จํ„ฐ ์ „์ฒด CPU ์‚ฌ์šฉ๋ฅ ์€ ์ด ์ธก์ •์— ํ•จ๊ป˜ ์ˆ˜์ง‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์›๋ณธยท๋น„์šฉยท๋™์‹œ ์š”์ฒญยท์ถ”๊ฐ€ ์ž…๋ ฅ ๊ธฐ๋ก์„ ํ•จ๊ป˜ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. ์ธก์ • ํ›„๋ณด์˜ ๋ฐฐํฌ ๊ฒ€์‚ฌ์—์„œ ์ค€๋น„ ํ•จ์ˆ˜๋ฅผ ๋” ์ž‘๊ฒŒ ๋‚˜๋ˆŒ ํ•„์š”๊ฐ€ ํ™•์ธ๋˜์–ด ํ›„์† ์†Œ์Šค 6b6c86f2๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœยทmain์˜ ๊ฐ ์ „์ฒด CI์™€ ๋…๋ฆฝ ์ฆ๊ฑฐ๋ฅผ ํ™•์ธํ•ด main 1bef47fc๋กœ ๋ณ‘ํ•ฉํ•˜๊ณ  CLIยท์‹คํ–‰๊ธฐ๋ฅผ ํ•จ๊ป˜ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์„ค์น˜๋ณธ์˜ ๋ณ„๋„ ๊ด€์ธก

๊ฐ™์€ ์—ด๋‘ ์ œ์–ด์—์„œ 588/588ยท์ž…๋ ฅ 1,008๊ฐœยท์—ฐ๊ฒฐ 504๊ฐœ์™€ ๋™์ผํ•œ GoooยทGoยท์—ฐ๊ฒฐ ์ฝ”๋“œ ์ง€๋ฌธ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋ธ์€ ์„ธ ๋ฒˆ ์‹ค์ œ ํ˜ธ์ถœํ–ˆ๊ณ  ์ €์žฅ ์žฌ์‹คํ–‰์€ ์ถ”๊ฐ€ ์ถ”๋ก  0๋ฒˆ์ž…๋‹ˆ๋‹ค. ๋™์‹œ ์š”์ฒญ์€ 98/98ยท์ •์ƒ ์ข…๋ฃŒ, ์ถ”๊ฐ€ ์ž…๋ ฅ์€ 42/42, ์˜๋„์ ์œผ๋กœ ๋ฐ”๊พผ ๊ธฐ๋Œ€๊ฐ’์€ 48/49์˜€์Šต๋‹ˆ๋‹ค. ์ƒˆ ์ƒ์„ฑ ์‹œ๊ฐ„ ์ค‘์•™๊ฐ’์€ ๋ชจ๋ธ 9.449msยท๊ฒฐ์ •๋ก  8.480ms, ์ „์ฒด ๋ช…๋ น ์ค‘์•™๊ฐ’์€ 316.959msยท312.954ms์˜€์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์—ด๋‘ ์ œ์–ด์˜ ์ตœ๋Œ€ RSS ๋ฒ”์œ„๋Š” 81.33~83.56MiB์ž…๋‹ˆ๋‹ค. ๋”ฐ๋œปํ•œ Go ์บ์‹œยท๊ณ ์ • ์ˆœ์„œยท๊ฐ ์„ธ ๋ฒˆ์˜ ์ƒˆ ์ธก์ •์ด๋ฉฐ ์›์ธ๋ณ„ ์†๋„ ๋ณ€ํ™”๋ฅผ ์ถ”์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ์†Œ์Šคยท์›๋ณธยท์‹œ๊ฐ„ยท๋ฉ”๋ชจ๋ฆฌยท๊ฐ ๊ด€์ธก ๋ฒ”์œ„. ๊ฐ™์€ ์„ค์น˜ ๊ธฐ๋ก์€ ์—ฐ๊ตฌ ์ €์žฅ์†Œ์—๋„ ์˜ฌ๋ ธ์œผ๋ฉฐ, ์—ด๋‘ ์ œ์–ด์˜ ์†Œ์Šคยท์ƒ์„ฑ ์ฝ”๋“œยท์‹ค์ œ ์ถ”๋ก  ํšŸ์ˆ˜ยท์ž…๋ ฅ ๊ด€์ธก์„ ๊ฒ€์‚ฐํ•˜๋Š” ํšŒ๊ท€ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จํ•ด 20๊ฐœ CI ์ž‘์—…์„ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์— ์ด ์—ฐ๊ฒฐ์„ ํ™œ์šฉํ•  ๊ณณ

๋ช…์‹œ์ ์ธ ์ž…๋ ฅ ์œ„์น˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์€ ๋ชจ๋ธ์ด ํ—ˆ์šฉ๋œ ์ธ์žยท์—ฐ๊ฒฐ ํ›„๋ณด๋ฅผ ๊ณ ๋ฅด๋Š” ์‹คํ—˜์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด, ๋ณ€์ˆ˜ ํ• ๋‹น, ์ž๋ฃŒ ์ „๋‹ฌ์„ ์†Œ์Šค์— ๋‚จ๊ธฐ๋ฉด์„œ ๊ฐ ๋‹จ๊ณ„์˜ ๊ด€์ธก์„ ๋‹ค์Œ ์„ ํƒ์˜ ์ž๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ก๊ฐ’์„ ๋ฐ›๋Š” ๋ณธ๋ฌธ, ํ˜ธ์ถœยท๋ฐ˜๋ณต, ํ˜ธ์ถœ์„ ๋„˜๋Š” ํ”ผ๋“œ๋ฐฑ์€ ๊ฐ๊ฐ์˜ ์˜๋ฏธ์™€ ์‹คํ–‰ ๊ตฌํ˜„์„ ์ด์–ด ํ™•์žฅํ•  ์˜์—ญ์ž…๋‹ˆ๋‹ค.