Development Pilot KO - teamswyg/laya-tools GitHub Wiki

๊ฐœ๋ฐœ ์ž‘์—…์˜ ์ง„ํ–‰ยท์™„๋ฃŒยท์งˆ๋ฌธ ํ‘œ์‹œ: 1์ฐจ shadow ํŒŒ์ผ๋Ÿฟ ์ดˆ์•ˆ

English

์ƒํƒœ: ์„ค๊ณ„ ์ดˆ์•ˆ, ์‹ค์ œ Riido ํŒŒ์ผ๋Ÿฟ0ํšŒ. ๊ธฐ์กด Go ๋ชจ๋ธ์˜ ์ด์–ด ํ•™์Šตยท๊ฒŒ์‹œ์™€ ๋ณ„๋„ CLI ํ•ฉ์„ฑ4๋ฌธ์žฅ ์‹œํ—˜์€ ์™„๋ฃŒํ–ˆ๋‹ค. ์•„๋ž˜ ์‹ค์ œ readerยทํ™”๋ฉด ์—ฐ๊ฒฐ๊ณผ100/400/2400๊ฑด ๊ฒ€์ˆ˜๋Š” ์•„์ง ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ณต๊ฐœ ํ•ฉ์„ฑ ์‚ฌ๋ก€์™€ ๋ช…์‹œ์ ์ธ test double๋กœ ๋‹ค์Œ ๊ฒ€์‚ฌ๋ฅผ ์ค€๋น„ํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๊ณ ๋ฅธ ์ฒซ ๋ฒ”์œ„๋Š” ๊ฐœ๋ฐœ ์ž‘์—… ๋ฉ”์‹œ์ง€์˜ ์ง„ํ–‰ ๋ณด๊ณ ยท์™„๋ฃŒ ๋ณด๊ณ ยท์งˆ๋ฌธ ํ‘œ์‹œ๋‹ค. completion_report๋Š” **โ€œ์™„๋ฃŒ๋๋‹ค๊ณ  ์“ด ๋ฌธ์žฅโ€**์„ ๋œปํ•œ๋‹ค. ์ฝ”๋“œ ์‹คํ–‰ ์„ฑ๊ณต, CI ์„ฑ๊ณต, ๊ฒ€์ฆ๋œ ์ „์ฒด ์—…๋ฌด ์™„๋ฃŒ, ์Šน์ธ ์™„๋ฃŒ๋ฅผ ์ฆ๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ™”๋ฉด์˜ ํ‘œ์‹œ๋ช…๋„ โ€œ์™„๋ฃŒ๋จโ€ ๋Œ€์‹  โ€œ์™„๋ฃŒ ๋ณด๊ณ โ€๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฏธ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ์•„์ง ์—†๋Š” ๊ฒƒ

๊ตฌ๋ถ„ ํ˜„์žฌ ํ™•์ธํ•œ ๋ฒ”์œ„
๊ตฌํ˜„: ๋ถ„๋ฅ˜์™€ ํ•™์Šต ๊ณ ์ •๋œ 8๊ฐœ ์˜๋ฏธ๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” Go ๋ชจ๋ธ๊ณผ ๊ทœ์น™ ๊ธฐ์ค€์„ . V2๋Š” ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ ํ•ฉ์„ฑ ํ•™์Šต 320๊ฐœ์™€ validation/calibration/test ๊ฐ40๊ฐœ๋กœ ์‹ค์ œ ํ•™์Šตยทํ‰๊ฐ€ํ–ˆ๋‹ค.
๊ตฌํ˜„: ์„ ํƒ๋œ ๋ชจ๋ธ v1_warm_start, 1,024๊ตฌ๊ฐ„, 32,960๋ฐ”์ดํŠธ, step 1,520โ†’1,920, temperature 0.9. ๋‘ 2,048๊ตฌ๊ฐ„ ํ›„๋ณด๋Š” ๋น„๊ตํ–ˆ์œผ๋‚˜ ์„ ํƒํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด ํŒŒ์ผ๋Ÿฟ์„ ์œ„ํ•ด ์ƒˆ 3-class ๋ชจ๋ธ์„ ํ•™์Šตํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
๊ตฌํ˜„: ๊ณต๊ฐœ bridge SnapshotReader.Read์™€ Adapter.Propose, opaque ์ฐธ์กฐ, ํ˜„์žฌ active ๋ผ๋ฒจ์˜ ๋ช…์‹œ์  ์˜๋ฏธ ์—ฐ๊ฒฐ, ์ค‘๋ณตยท๋ˆ„๋ฝยทinactiveยท๊ทธ๋ฃน ์ œ์™ธ, canonical ๋ฒ„์ „ ํ™•์ธ, shadow ์ถœ๋ ฅ.
๊ตฌํ˜„: ๊ฒฝ๊ณ„ ํ…Œ์ŠคํŠธ test double๋กœ ์ฝ๊ธฐ ๋ฒ”์œ„ยท์ƒํƒœ ํ›„๋ณด์˜ ๋ชจํ˜ธํ•จยท๋ฒ„์ „ ์—†์Œยท์ค‘๋ณต ํ‘œ์‹œยท๋ณธ๋ฌธ ๋น„๋…ธ์ถœ ๋“ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค. ์‹ค์ œ native reader๋‚˜ ์‹ค์ œ catalog๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒ€์ฆ์€ ์•„๋‹ˆ๋‹ค.
๋ฏธ๊ตฌํ˜„ ์‹ค์ œ Riido reader, ํ˜„์žฌ native catalog ํ™•์ธ, ํ‘œ์‹œ๋ฅผ ๋ฐ›์„ ์ •ํ™•ํ•œ ๋ฉ”์‹œ์ง€/์—…๋ฌด ์œ„์น˜, ๋ณธ๋ฌธ revision ์—ฐ๊ฒฐ, ๋ฆฌ๋น„์ „ ์ด๋ฒคํŠธ ๊ฒ€์ฆ, ์‹ค์ œ ํ™”๋ฉด ํ†ตํ•ฉ, ์ƒˆ ํŒŒ์ผ๋Ÿฟ harness์™€ ๋น„์šฉ ์ธก์ •.
์ฒซ ๋ฒ”์œ„ ๋ฐ– ์—…๋ฌด ์ƒํƒœ ์“ฐ๊ธฐ, ์‹ค์ œ reaction ์ถ”๊ฐ€, ์•Œ๋ฆผ ๋ฐœ์†ก, ์ทจ์†Œ ์‹คํ–‰, ๋ชจ๋ธ/์ถ”๋ก  ์ˆ˜์ค€ ์กฐ์ ˆ, ์‹ค์ œ ์›๋ฌธ์„ ์™ธ๋ถ€ ํ•™์Šตยท๊ณต๊ฐœ์— ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—….

๊ธฐ์กด V2์˜ ์ƒˆ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋Š” 34/40์ด๋ฉฐ ์–ธ์–ด๋ณ„๋กœ17/20์ด๋‹ค. ์™„๋ฃŒ ๋ณด๊ณ 5/5, ์งˆ๋ฌธ4/5์˜€์ง€๋งŒ ๊ฐ ์˜๋ฏธ๊ฐ€5๊ฐœ๋ฟ์ด๋‹ค. ์ „์ฒด 8๊ฐœ ์˜๋ฏธ์—์„œ confidence 0.9 ์ด์ƒ์ธ ๋น„๋ชจํ˜ธ ์ œ์•ˆ17๊ฐœ๊ฐ€ ๋งž์•˜๋‹ค๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ด ์„ธ ํ‘œ์‹œ์˜ ์‹ค์‚ฌ์šฉ ์ •ํ™•๋„๋‚˜ ์šด์˜ ์ •๋ฐ€๋„100%๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ํ˜„์žฌ native ๋ผ๋ฒจ๊ณผ ํŒ€๋ณ„ ์ด๋ชจ์ง€ ์„ค์ •์€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์ด๋ฒˆ ์ดˆ์•ˆ์€ ์šด์˜ ์—ฐ๊ฒฐ ์™„๋ฃŒ๋‚˜ 2,400๊ฐœ์˜ ์‹ค์ œ ์—…๋ฌด ๊ฒ€์ฆ์„ ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์‹œ ๋‚ด๋ ค๋ฐ›์€ ๋ชจ๋ธ์˜ ์‹ค์ œ CLI ํ™•์ธ

๊ฒŒ์‹œ revision 81335eadd9f2753d3b86c932e9b00c636714e3b4์˜ ๋ชจ๋ธ๋กœ ๊ณต๊ฐœ ํ•ฉ์„ฑ ์˜ˆ๋ฌธ4๊ฐœ๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. ์˜๋„๋Š”4/4๋งž์•˜์ง€๋งŒ ๊ณ ์ • confidence0.9๋ฅผ ๋„˜๊ธด ์งˆ๋ฌธ ํ•œ ๊ฑด๋งŒ ๋ผ๋ฒจยท์ด๋ชจ์ง€๋ฅผ ์ œ์•ˆํ–ˆ๋‹ค.

์˜ˆ๋ฌธ ์˜๋„ confidence(๋ฐ˜์˜ฌ๋ฆผ) ์‹ค์ œ shadow ๊ฒฐ๊ณผ
์ง„ํ–‰ ๋ณด๊ณ  0.858 ๊ธฐ์ค€ ๋ฏธ๋‹ฌ๋กœ ๋ณด๋ฅ˜
์™„๋ฃŒ ๋ณด๊ณ  0.821 ๊ธฐ์ค€ ๋ฏธ๋‹ฌ๋กœ ๋ณด๋ฅ˜
์งˆ๋ฌธ 0.971 ๋ผ๋ฒจยท์ด๋ชจ์ง€ ์ œ์•ˆ
๊ณ„ํš 0.815 ๊ธฐ์ค€ ๋ฏธ๋‹ฌ๋กœ ๋ณด๋ฅ˜; ์ฒซ ์„ธ ํ‘œ์‹œ ๋ฒ”์œ„ ๋ฐ–

๋ชจ๋“  ์ถœ๋ ฅ์˜ mutation/state change๋Š”false์˜€๊ณ  ์‹ค์ œ reader๋Š” ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜๋‹ค. ์ด4๊ฐœ์˜ ์งง์€ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•œ macOS ํ”„๋กœ์„ธ์Šค์˜ ์ตœ๋Œ€ OS RSS๋Š”5,488,640๋ฐ”์ดํŠธ(์•ฝ5.23MiB)์˜€๋‹ค. ๋ชจ๋ธ ์ฝ๊ธฐยท๋ถ„๋ฅ˜ยทJSONLยท์ œ์•ˆ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•œ ์ด ํ”„๋กœ์„ธ์Šค์˜ ๊ด€์ธก์ด๋ฉฐ ์‹ค์ œ catalog ์กฐํšŒยทํ™”๋ฉด ๋ฐฐ์น˜ ๋น„์šฉ์ด๋‚˜ ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ์ฆ๊ฑฐ๊ฐ€ ์•„๋‹ˆ๋‹ค. โ€œ์˜๋„4/4โ€์™€ โ€œํ‘œ์‹œ ์ œ์•ˆ1/4โ€, โ€œ์‹ค์ œ adapter ํŒŒ์ผ๋Ÿฟ0ํšŒโ€๋ฅผ ๊ตฌ๋ถ„ํ•ด ๊ธฐ๋กํ•œ๋‹ค. ๋‚ฎ์€ confidence๋ฅผ ํ†ต๊ณผ์‹œํ‚ค๋ ค๊ณ  threshold๋ฅผ ๋‚ฎ์ถ”์ง€ ์•Š๋Š”๋‹ค.

๊ทผ๊ฑฐ: V2 ๊ฒฐ๊ณผ์™€ ํ•œ๊ณ„, ํ•™์Šต ๊ธฐ์ค€, catalog bridge. ๋ณ„๋„ smoke receipt๋Š” ์ด private cache์˜ publication/DEVELOPMENT-SMOKE.json์— ์žˆ๋‹ค.

ํ‘œ์‹œ ํ›„๋ณด์™€ ํ˜„์žฌ ๋ผ๋ฒจ ํ—ˆ์šฉ์ง‘ํ•ฉ

๋ถ„๋ฅ˜ ๊ฒฐ๊ณผ ํŒŒ์ผ๋Ÿฟ ํ‘œ์‹œ๋ช… ๊ธฐ๋ณธ ์ด๋ชจ์ง€ ํ›„๋ณด canonical code ์—…๋ฌด ์ƒํƒœ ๋ณ€๊ฒฝ
progress ์ง„ํ–‰ ๋ณด๊ณ  ๐Ÿ› ๏ธ 1f6e0-fe0f ์—†์Œ
completion_report ์™„๋ฃŒ ๋ณด๊ณ  โœ… 2705 ์—†์Œ
question ์งˆ๋ฌธ โ“ 2753 ์—†์Œ

ํ‘œ์‹œ๋ช…๊ณผ ์ด๋ชจ์ง€๋Š” ์„ค์ • ๊ฐ€๋Šฅํ•œ ์ดˆ์•ˆ์ด๋ฉฐ ์‹ค์ œ catalog์— ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. blocker, reference, cancel_request, planned, unclear์—๋Š” ์ด๋ฒˆ ํŒŒ์ผ๋Ÿฟ์˜ ์„ธ ํ‘œ์‹œ๋ฅผ ๊ฐ•์ œ๋กœ ๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค. 8๊ฐœ ์˜๋ฏธ์˜ ํ™•๋ฅ ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ ์„ธ ์˜๋ฏธ๋งŒ ๋‚จ๊ฒจ ํ™•๋ฅ ์„ ์žฌ์ •๊ทœํ™”ํ•˜๊ฑฐ๋‚˜ ์ฐจ์„ ์˜ ํ—ˆ์šฉ ์˜๋ฏธ๋ฅผ ๋Œ€์‹  ์„ ํƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ผ๋ฒจ ํ—ˆ์šฉ์ง‘ํ•ฉ์€ ์ฝ๊ธฐ๋งˆ๋‹ค ๋‹ค์Œ ๊ต์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ ๋‹ค.

  1. ์•ฑ์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์กฐํšŒ ๊ฒฝ๊ณ„๊ฐ€ ํ˜„์žฌ scope์—์„œ ์ฝ์€ ๋ผ๋ฒจ์ด๋‹ค.
  2. ํ˜„์žฌ active์ด๊ณ  ๊ทธ๋ฃน container๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๋ผ๋ฒจ์ด๋‹ค.
  3. ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์„ธ ์˜๋ฏธ ์ค‘ ํ•˜๋‚˜์— opaque ์ฐธ์กฐ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋ผ ์žˆ๋‹ค.
  4. ๊ฐ™์€ ์ฐธ์กฐ ๋˜๋Š” ์˜๋ฏธ ์—ฐ๊ฒฐ์ด ์ค‘๋ณตยท์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ˜„์žฌ ์—ฐ๊ฒฐ์ด ๋ˆ„๋ฝยท์‚ญ์ œยทinactive์ด๋ฉด ํ•ด๋‹น ๋ผ๋ฒจ์„ ์ œ์•ˆํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฆ„์ด๋‚˜ ์ƒ‰, ๋ฐฐ์—ด ์ˆœ์„œ๋กœ ๋ผ๋ฒจ ์˜๋ฏธ๋ฅผ ์ถ”์ธกํ•˜๊ฑฐ๋‚˜ ์ƒˆ ๋ผ๋ฒจ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์‹ค์ œ native IDยท์ด๋ฆ„ยท์ธ์ฆ์ •๋ณด์™€ opaque ๋Œ€์‘ํ‘œ๋Š” private reader ์•ˆ์— ๋‘”๋‹ค. ์ด๋ฏธ ๋ถ™์€ ๋ผ๋ฒจยท๋™์ผ ์ด๋ชจ์ง€๋Š” ์ถ”๊ฐ€ ํ‘œ์‹œ ์ œ์•ˆ์ด ์—†๋Š” no-op์ด๋‹ค. ์ด๋ชจ์ง€๋„ ํ™•์ธ๋œ ํ—ˆ์šฉ๋ชฉ๋ก๋งŒ ์ „๋‹ฌํ•˜๊ณ , ์ดˆ์•ˆ์˜ ๊ธฐ๋ณธ ํ›„๋ณด๋ฅผ native ์„ค์ •์œผ๋กœ ์ž๋™ ์Šน๊ฒฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ชจ๋ธ ๊ธฐ์ค€์€ ๊ธฐ์กด catalog bridge์˜ confidence 0.9์™€ margin 0.05๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์•ž์˜ CLI ์‹œํ—˜์€ margin0์ด๋ฏ€๋กœ ๋‹ค์Œ catalog ํŒŒ์ผ๋Ÿฟ๊ณผ ๊ตฌ๋ถ„ํ•œ๋‹ค. guarded input, ๋ฒ”์œ„ ๋ฐ– ๊ฒฐ๊ณผ, ๋ชจํ˜ธํ•œ ๋‚ด์šฉ, ๊ธฐ์ค€ ๋ฏธ๋‹ฌ์€ ํ‘œ์‹œ๋ฅผ ๋ณด๋ฅ˜ํ•œ๋‹ค. ๋ชจ๋ธ ํŒŒ์ผ์„ ์ฝ์ง€ ๋ชปํ•˜๋ฉด ํ•™์Šตํ•˜์ง€ ์•Š์€ ๊ทœ์น™์œผ๋กœ ์กฐ์šฉํžˆ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทœ์น™์€ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•œ ๋ณ„๋„ ๋น„๊ต๊ตฐ์ด๊ณ  ์ ์ˆ˜๋Š” ๋ณด์ •๋œ ํ™•๋ฅ ์ด ์•„๋‹ˆ๋‹ค.

์ œ์•ˆ ํ๋ฆ„๊ณผ ์—…๋ฌด revision ์ด๋ฒคํŠธ

๊ณ„ํšํ•˜๋Š” ํ๋ฆ„์€ ์ด๋ฏธ ๋ณด์œ ํ•œ ๋ฉ”์‹œ์ง€ โ†’ ํ˜„์žฌ opaque snapshot ์กฐํšŒ โ†’ ์ž ๊ธด ๋ชจ๋ธ ๋ถ„๋ฅ˜ โ†’ ์„ธ ํ‘œ์‹œ ํ—ˆ์šฉ์ง‘ํ•ฉ ๊ฒ€์‚ฌ โ†’ revision ์—ฐ๊ฒฐ ๊ฒ€์‚ฌ โ†’ private shadow ๋ฏธ๋ฆฌ๋ณด๊ธฐ/๊ด€์ธก์ด๋‹ค. ์‹ค์ œ ์›๋ฌธ์ด๋‚˜ ์ถ”๊ฐ€ ๋ฌธ์„œ๋ฅผ reader๊ฐ€ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๋Š” ์—†๋‹ค. ํ˜„์žฌ bridge๋Š” ์ด๋ฏธ ๋ณด์œ ํ•œ Request.Text๋ฅผ ๋ฐ›์œผ๋ฉฐ, metadata ์กฐํšŒ์—๋Š” ์š”์ฒญํ•œ opaque Work ์ฐธ์กฐ๋งŒ ์ „๋‹ฌํ•œ๋‹ค.

ํŒŒ์ผ๋Ÿฟ harness๋Š” StatePlanningAvailable=false๋กœ ๋‘๊ณ  lifecycle event๋ฅผ ๊ณต๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. mutation_executed:false, state_change:false๋ฅผ ๋ชจ๋“  ํ–‰์—์„œ ํ™•์ธํ•œ๋‹ค. CandidateStatusRef๋Š” ์—…๋ฌด ์™„๋ฃŒ๋‚˜ ์ƒํƒœ ๋ณ€๊ฒฝ ์Šน์ธ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด bridge์—๋Š” verified event๋‚˜ ์‚ฌ์šฉ์ž JSON์˜ trusted flag๋ฅผ ๋ฐ›๋Š” API ์ž์ฒด๊ฐ€ ์—†๋‹ค.

ํ‘œ์‹œ ๋ฐฐ์น˜์šฉ revision ๊ทผ๊ฑฐ์™€ ์—…๋ฌด ์ƒํƒœ ์ „์ด ๊ทผ๊ฑฐ๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๊ทผ๊ฑฐ ํ–ฅํ›„ ์š”๊ตฌํ•  ์—ฐ๊ฒฐ ํ˜„์žฌ ์ƒํƒœ
revision ๊ด€์ธก receipt/event ์ธ์ฆ๋œ ์•ฑ ์กฐํšŒ ๊ฒฝ๊ณ„์˜ provenance, owner scope, opaque Work ์ฐธ์กฐ, ์›๋ณธ canonical ์—…๋ฌด revision, ํ‘œ์‹œํ•  content ์ฐธ์กฐ์™€ content revision, ๊ด€์ธก/๋ณ€๊ฒฝ event ์ฐธ์กฐ ์ƒˆ ํŒŒ์ผ๋Ÿฟ harness ๋ฐ ์‹ค์ œ reader์— ์•„์ง ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์Œ
์ง„ํ–‰/์™„๋ฃŒ lifecycle ์‚ฌ์‹ค ๋ณ„๋„ ์—…๋ฌด ์‹œ์Šคํ…œ์ด ํ™•์ธํ•œ started/completed ์‚ฌ์‹ค, ๋Œ€์ƒ ์—…๋ฌดยทscopeยท๋ช…๋ น, ๊ธฐ๋Œ€/ํ˜„์žฌ revision, ์‹ค์ œ ์—…๋ฌด ๊ฒฐ๊ณผ์™€ ์ค‘๋ณต ์ฒ˜๋ฆฌ receipt ์ฒซ ํ‘œ์‹œ ํŒŒ์ผ๋Ÿฟ ๋ฒ”์œ„ ๋ฐ–. ๋ชจ๋ธ ๋ฌธ์žฅ์ด๋‚˜ JSON flag๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ

revision ๊ด€์ธก receipt๋Š” โ€œ์ด ํ‘œ์‹œ๊ฐ€ ์–ด๋А ์—…๋ฌด์™€ ๋ณธ๋ฌธ revision์— ์†ํ•˜๋Š”๊ฐ€โ€๋ฅผ ๊ณ ์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ๊ด€์ธก ์‹œ๊ฐ์ด๋‚˜ ReadTimes๋งŒ์œผ๋กœ ์ตœ์‹  revision ๋˜๋Š” ์‹คํ–‰ ์„ฑ๊ณต์„ ์ฆ๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์—…๋ฌด์˜ ๊ธฐ๋Œ€ revision๊ณผ ํ˜„์žฌ revision์ด ๋‹ค๋ฅด๊ฑฐ๋‚˜ ๋ณธ๋ฌธ์ด ์ˆ˜์ •๋์œผ๋ฉด ์ด์ „ ์ œ์•ˆ์€ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๊ณ  stale๋กœ ๊ธฐ๋กํ•œ๋‹ค. ์ƒˆ revision์„ ๋‹ค์‹œ ์ฝ์€ ๋’ค ๋ณ„๋„ ์ œ์•ˆ์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. ์‹œ๊ฐ„ยทํ–‰ ๋ฒˆํ˜ธยท์ž„์˜0/1์„ canonical revision ๋Œ€์‹  ์“ฐ์ง€ ์•Š๋Š”๋‹ค.

canonical ๋ฒ„์ „์ด ์—†๋Š” ํ•ญ๋ชฉ์—์„œ๋„ ํ˜„์žฌ bridge๋Š” ๋ผ๋ฒจยท์ด๋ชจ์ง€ ์ถ”์ฒœ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ ๊ทธ ๊ฒฐ๊ณผ๋Š” ํ˜„์žฌ ์—…๋ฌด์— ๋ฐฐ์น˜ ๊ฐ€๋Šฅํ•œ ํ‘œ์‹œ๋กœ ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ ์ถ”์ฒœ์ด๋‹ค. ์ƒˆ ํŒŒ์ผ๋Ÿฟ harness์—์„œ revision ์—ฐ๊ฒฐ์„ ํ™•์ธํ•˜๊ธฐ ์ „์—๋Š” ์—…๋ฌด ์œ„์น˜์— ๋ถ™์ด์ง€ ์•Š๊ณ  unavailable๋กœ ๋‚จ๊ธด๋‹ค. ๊ธฐ์กด bridge์˜ Request/Work์—๋Š” ๋ณ„๋„์˜ content revision๊ณผ event receipt๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ด ์—ฐ๊ฒฐ์€ ์ถ”๊ฐ€ ์„ค๊ณ„ยท๊ตฌํ˜„ ๋Œ€์ƒ์ด๋‹ค.

Workยท๋ผ๋ฒจยท์ƒํƒœ์˜ ๋ณ„๋„ ์ฝ๊ธฐ๋ฅผ ๋‹จ์ผ atomic snapshot์ด๋ผ๊ณ  ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฝ๊ธฐ ์‹œ์ ์„ ๊ทธ๋Œ€๋กœ ๋‚จ๊ธฐ๊ณ  catalog_consistency:unqualified๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์ดํ›„ ์‹ค์ œ ํ‘œ์‹œ๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ๋„ ํ˜„์žฌ ์กฐํšŒ ๊ถŒํ•œยทscopeยทcatalogยท๋ณธ๋ฌธ/์—…๋ฌด revision์„ ์•ฑ์ด ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. shadow ์ถœ๋ ฅ์€ lasting permission์ด ์•„๋‹ˆ๋‹ค.

ํ•ฉ์„ฑ test double๋กœ ๋จผ์ € ์ค€๋น„ํ•  ๊ฒ€์‚ฌ

์•„๋ž˜๋Š” ๊ฒ€์‚ฌ ์„ค๊ณ„์ด๋ฉฐ ์ด๋ฒˆ ๋ฌธ์„œ ์ž‘์„ฑ์—์„œ ์‹คํ–‰ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ˆ˜์ž‘์—… fake prediction์„ ์‚ฌ์šฉํ•˜๋Š” ์ •์ฑ… ํ…Œ์ŠคํŠธ์™€ ์‹ค์ œ ์ž ๊ธด ๋ชจ๋ธ์˜ ๋ถ„๋ฅ˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋ถ„๋ฆฌํ•ด ๊ธฐ๋กํ•œ๋‹ค. fake score์˜ ํ†ต๊ณผ๋ฅผ ๋ชจ๋ธ ์ •ํ™•๋„๋‚˜ native ์กฐํšŒ ์„ฑ๊ณต์œผ๋กœ ํ‘œํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

ํ•ฉ์„ฑ ์กฐ๊ฑด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒฐ๊ณผ
ํ˜„์žฌ ์ง„ํ–‰ ๋ณด๊ณ  + ํ—ˆ์šฉ๋œ ์ง„ํ–‰ ๋ผ๋ฒจ/์ด๋ชจ์ง€ + ๋™์ผ revision ์ง„ํ–‰ ๋ณด๊ณ  ํ‘œ์‹œ ํ›„๋ณด๋งŒ ์ œ์•ˆ. ์—…๋ฌด ์ƒํƒœ ์œ ์ง€
์ „์ฒด ์—…๋ฌด๋ฅผ ๋๋ƒˆ๋‹ค๋Š” ๋ฌธ์žฅ + ์™„๋ฃŒ ํ‘œ์‹œ ํ—ˆ์šฉ โ€œ์™„๋ฃŒ ๋ณด๊ณ โ€ ํ›„๋ณด. ์‹คํ–‰ ์„ฑ๊ณตยท์—…๋ฌด done ์‚ฌ์‹ค ์—†์Œ
์™„๋ฃŒ/์ทจ์†Œ๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š” ์‹ค์ œ ์ •๋ณด ์งˆ๋ฌธ ์งˆ๋ฌธ ํ›„๋ณด๋งŒ ํ—ˆ์šฉ. lifecycle ๋ณ€๊ฒฝ ์—†์Œ
์ผ๋ถ€ ๊ฒ€์‚ฌ๋Š” ๋๋‚ฌ์ง€๋งŒ ๊ฐ™์€ ์—…๋ฌด์˜ ์ž‘์—…์„ ๊ณ„์†ํ•จ ์ง„ํ–‰/์™„๋ฃŒ ๊ตฌ๋ถ„์„ ๊ฒ€์ˆ˜ํ•˜๋ฉฐ ์ „์ฒด ์™„๋ฃŒ๋กœ ๋‹จ์ •ํ•˜์ง€ ์•Š์Œ
์ธ์šฉยท๋ถ€์ •ยท๊ฐ€์ •ยท์ถฉ๋Œยท๋‹ค๋ฅธ 5๊ฐœ ์˜๋ฏธ ์„ธ ํ‘œ์‹œ๋ฅผ ๊ฐ•์ œ๋กœ ์„ ํƒํ•˜์ง€ ์•Š์Œ
active catalog์—์„œ ์—ฐ๊ฒฐ ๋ˆ„๋ฝยทinactiveยทgroupยท์ค‘๋ณตยทforeign scope ์ž˜๋ชป๋œ ์ฐธ์กฐ ์ œ์™ธ ๋˜๋Š” ์š”์ฒญ ๊ฑฐ์ ˆ
canonical ์—…๋ฌด revision ์—†์Œยท๋น„canonical ๊ฐ’ยทrevision ๋ณ€๊ฒฝยท๋ณธ๋ฌธ ์ˆ˜์ • ๊ฐ€์งœ ๋ฒ„์ „ ์—†์Œ. ์—…๋ฌด ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜์ง€ ์•Š์Œ
๊ฐ™์€ ๋ณธ๋ฌธ revision/๋ช…๋ น์˜ ์žฌ์ „๋‹ฌยท๋™์ผ ํ‘œ์‹œ ์กด์žฌ ์ค‘๋ณต ํ‘œ์‹œ ์—†์Œ. ์žฌ์ „๋‹ฌ/๊ธฐ์กด ํ‘œ์‹œ no-op ๊ตฌ๋ถ„
reader error ๋˜๋Š” scope์— ์—†๋Š” Work ์›๋ฌธ/credential ๋…ธ์ถœ ์—†์Œ. ํ•ด๋‹น Work๋ฅผ ๋ถ„๋ฅ˜ยท๋ฐฐ์น˜ํ•˜์ง€ ์•Š์Œ
์ˆซ์ž์ƒ ์ผ๊ด€๋˜์ง€ ์•Š์€ ํ™•๋ฅ ยทguarded inputยทoversized text ํ‘œ์‹œ ๋ณด๋ฅ˜/๊ฑฐ์ ˆ

๊ด€์ธก ํ•ญ๋ชฉ์€ ๋ชจ๋ธ hashยท์˜๋ฏธยทconfidenceยท์›๋ฌธ ์—†์ด ํ•ด์„ ๊ฐ€๋Šฅํ•œ ๋ณด๋ฅ˜ ์ด์œ ยทopaque case/family ์ฐธ์กฐยทํ˜„์žฌ ๋ผ๋ฒจ ํ—ˆ์šฉ์ง‘ํ•ฉ fingerprintยทrevision ์—ฐ๊ฒฐ ๊ฒฐ๊ณผยท๊ธฐ์กด ํ‘œ์‹œ ์—ฌ๋ถ€ยท๋ถ„๋ฅ˜/์กฐํšŒ/์ „์ฒด ์ฒ˜๋ฆฌ ๋น„์šฉ์ด๋‹ค. ์‹ค์ œ ์›๋ฌธ๊ณผ native ๋Œ€์‘ํ‘œ๋Š” ๋ณ„๋„ private ์ €์žฅ์†Œ์— ๋‘”๋‹ค. ๋ถ„๋ฅ˜๊ธฐ hot-path์˜ ๊ธฐ์กด allocation0 ์ธก์ •์„ readerยทJSONยทharness์˜ ์ด ๋น„์šฉ์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค.

100๊ฐœ โ†’ 400๊ฐœ โ†’ 2,400๊ฐœ ํ‘œ๋ณธ ๊ณ„ํš

  1. ์ดˆ๊ธฐ100๊ฐœ ๊ฒ€์ˆ˜: ๋จผ์ € ๊ณต๊ฐœ ํ•ฉ์„ฑ test double๋กœ ๋ฐฐ์น˜/๋ณด๋ฅ˜ ๊ฒฝ๊ณ„๋ฅผ ํ™•์ธํ•œ๋‹ค. ์‹ค์ œ ์ž๋ฃŒ๋ฅผ ๋‹ค๋ฃฐ ๋‹จ๊ณ„์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ—ˆ์šฉํ•œ ๊ฐœ๋ฐœ ์—…๋ฌด ์›๋ฌธ์„ private์— ๋ณด๊ด€ํ•˜๊ณ , ๊ฐ€๋Šฅํ•˜๋ฉด ์˜ˆ์ธก์„ ๋ณด์ง€ ์•Š์€ ๊ฒ€์ˆ˜์ž๊ฐ€ ์„ธ ํ‘œ์‹œ์™€ ๊ฒฝ๊ณ„ ์‚ฌ๋ก€๋ฅผ ์ฃผ์„ํ•œ๋‹ค. ์™„๋ฃŒ ๋ณด๊ณ ์˜ ๋ฌธ์žฅ ์˜๋ฏธ์™€ ์‹ค์ œ ์—…๋ฌด ์™„๋ฃŒ ์‚ฌ์‹ค์€ ๋ณ„๋„ ์นธ์ด๋‹ค. ์ด100๊ฐœ๋Š” ๊ฐœ๋ฐœยท๊ฒ€์ˆ˜ ์ž๋ฃŒ์ด๊ณ  ์ƒˆ ์ตœ์ข… ํ‰๊ฐ€์…‹์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค.
  2. ์„œ๋กœ ๋‹ค๋ฅธ ์—…๋ฌดยท๋ฌธ๋งฅ400๊ฐœ: ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ ์ž‘์—…, ๋‹จ๊ณ„, ๋ฌธ์ฒด, ๋‘ ์–ธ์–ด ๋ฐ ํ˜ผํ•ฉ ์–ธ์–ด, ์งˆ๋ฌธ/์ธ์šฉ/๋ถ€์ •/๋ถ€๋ถ„ ์™„๋ฃŒ/ํ˜„์žฌ ์ง„ํ–‰์„ ํฌํ•จํ•œ๋‹ค. 100๊ฐœ์—์„œ ๋ณธ ์‹คํŒจ๋Š” ๊ณต๊ฐœ ํ•ฉ์„ฑ ์žฌํ˜„์œผ๋กœ ๋ณ„๋„ ๊ธฐ๋กํ•˜๊ณ  ์›๋ฌธ์„ ๊ทธ๋Œ€๋กœ ์™ธ๋ถ€๋กœ ์˜ฎ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ์—…๋ฌดยทincidentยท๋Œ€ํ™” ๋ฌธ๋งฅ family ์ˆ˜๋ฅผ ํ–‰ ์ˆ˜์™€ ํ•จ๊ป˜ ์„ผ๋‹ค.
  3. ์ด2,400๊ฐœ๋กœ ํ™•๋Œ€: ๋ถ€์กฑํ•œ family๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค. ๊ฐ™์€ ๋ฌธ์žฅ์˜ ๋ฐ˜๋ณตยท์ด๋ฆ„ ๋ณ€๊ฒฝยท๋ฒˆ์—ญยท๊ฐ™์€ ์—…๋ฌด revision ์—ฐ์‡„๋Š” ๋…๋ฆฝ ์ƒ˜ํ”Œ๋กœ ์ง‘๊ณ„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ™์€ ์‚ฌ๊ฑด์˜ ๋ณ€ํ˜•์€ ๊ฐ™์€ family์— ๋ฌถ์–ด train/validation/calibration/์ตœ์ข… ํ‰๊ฐ€๋ฅผ ํ•จ๊ป˜ ๋„˜๋‚˜๋“ค์ง€ ์•Š๊ฒŒ ํ•œ๋‹ค. ํ–‰2,400๊ฐœ๊ฐ€ family2,400๊ฐœ๋ฅผ ๋œปํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ƒˆ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์‹ค์ œ ์ž๋ฃŒ์˜ ์‚ฌ์šฉ ๋ฒ”์œ„, ์ฃผ์„ ๊ธฐ์ค€, family grouping, split, ๋ชจ๋ธ ํ›„๋ณด, calibration๊ณผ ๊ณ ์ • ๊ธฐ์ค€์„ ์ž ๊ทผ๋‹ค. ์ด๋ฏธ ๊ด€์ธกํ•œ100/400๊ฐœ์™€ ๋…ธ์ถœ๋œ V1/V2 ํ‰๊ฐ€๋ฅผ ๋‹ค์Œ ์ตœ์ข… ๋ชจ๋ธ ์„ ํƒ์šฉ ์‹œํ—˜์œผ๋กœ ๋‹ค์‹œ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. ์ƒˆ ์ตœ์ข… ํ‰๊ฐ€์—๋Š” ์ƒˆ family๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋ณ„๋„ ๊ฒ€์ˆ˜ํ•œ๋‹ค. ๋‹จ๊ณ„๋งˆ๋‹ค ์ž˜๋ชป๋œ ์™„๋ฃŒ ๋ณด๊ณ  ํ‘œ์‹œ, ์งˆ๋ฌธ ์˜ค๋ถ„๋ฅ˜, ๋ณด๋ฅ˜์œจ, ์ค‘๋ณต/์˜ค๋ž˜๋œ ํ‘œ์‹œ, ์ „์ฒด ๋น„์šฉ์„ ์–ธ์–ดยท์˜๋ฏธยทfamily๋ณ„๋กœ ํ™•์ธํ•˜๋ฉฐ, ํ‹€๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ threshold๋ฅผ ๋‚ด๋ ค ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

๋น„๊ณต๊ฐœ์™€ ๊ณต๊ฐœ ์ฃผ์žฅ์˜ ๊ฒฝ๊ณ„

์‹ค์ œ ์›๋ฌธยท์‹ค์ œ ์‚ฌ๊ฑด receiptยทnative IDยท์—…๋ฌด ๋งํฌยทcredential์€ private๊ฐ€ ๊ธฐ๋ณธ์ด๋‹ค. ์™ธ๋ถ€ ๊ณต๊ฐœ๋Š” ํ—ˆ๊ฐ€๋œ ์š”์•ฝ๊ณผ ํ•ฉ๊ณ„๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. ์‚ฌ๋ก€ ๋ฌธ์žฅ์„ ๊ณต๊ฐœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ณ„๋„๋กœ ํ—ˆ๊ฐ€๋œ ๋‚ด์šฉ ๋˜๋Š” ์ƒˆ๋กœ์šด ๊ณต๊ฐœ ํ•ฉ์„ฑ ์žฌํ˜„์œผ๋กœ ์ค€๋น„ํ•œ๋‹ค. ์›๋ฌธ hashยทopaque ์ฐธ์กฐ๋„ ์ž๋™์œผ๋กœ ๊ณต๊ฐœ ๋ชฉ๋ก์— ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.

์ •์ฑ… test double ํ†ต๊ณผ, ํ•ฉ์„ฑ ๋ชจ๋ธ ํ‰๊ฐ€, ์‹ค์ œ read-only ์กฐํšŒ, ์‹ค์ œ ํ™”๋ฉด ํ‘œ์‹œ, ์‹ค์ œ ์—…๋ฌด ์ƒํƒœ ์ „์ด๋ฅผ ๊ฐ๊ฐ ๋”ฐ๋กœ ์ง‘๊ณ„ํ•œ๋‹ค. ์ด๋ฒˆ ์ดˆ์•ˆ์œผ๋กœ ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์„ธ ํ‘œ์‹œ์˜ ๋ฒ”์œ„์™€ ๋‹ค์Œ ๊ฒ€์‚ฌ ๊ณ„ํš์„ ๊ตฌ์ฒดํ™”ํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค๋ฟ์ด๋‹ค. ์ƒˆ ํ›ˆ๋ จ, ์‹ค์ œ reader ์ ‘์†, ์‹ค์ œ ํ‘œ์‹œ ์„ค์น˜, ์„œ๋น„์Šค ์“ฐ๊ธฐ, 100/400/2,400๊ฐœ ๊ฒ€์ˆ˜ ์™„๋ฃŒ, ์‹ค์‚ฌ์šฉ ์ •ํ™•๋„ ํ–ฅ์ƒ์„ ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ฒŒ์‹œยท์ „์ฒดํŒŒ์ผ๊ฒ€์ฆ๊ธฐ๋ก. OS RSS์™€Go heap/GPU๋ฉ”๋ชจ๋ฆฌ๋Š” ์ธก์ • ๋ฒ”์œ„๊ฐ€ ๋‹ฌ๋ผ ๋”ํ•˜์ง€ ์•Š๋Š”๋‹ค.