Public Go Contracts 54 KO - teamswyg/laya-tools GitHub Wiki

PDCA54: ๊ณต๊ฐœ Go ํ›„๋ณด 2๊ฐœ์˜ ์ˆ˜๋ฝ ๊ณ„์•ฝ ์ค€๋น„

English ยท ๊ธฐ๊ณ„ ํŒ๋… ๊ธฐ๋ก

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

์ด ๋ฌธ์„œ๋Š” ์ž‘์„ฑ ์‹œ์ ์˜ ๊ฐœ๋ฐœ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค. CI๋ฅผ ํ†ต๊ณผํ•œ ๊ณต๊ฐœ ์‹คํ–‰ ์ง€์›๊ณผ ๋ฐฐํฌ ์ฆ๊ฑฐ๋Š” ๋ณ„๋„๋กœ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ์ปฌ registry์™€ ์˜คํ”„๋ผ์ธ ๊ฒ€์ฆ ์—ฐ๊ฒฐ์€ ๊ตฌํ˜„๋์ง€๋งŒ, ์ด ๊ธฐ๋ก์—๋Š” ์•„์ง ํ•ด๋‹น ๊ณต๊ฐœ CIยท๋ณ‘ํ•ฉ ์ฆ๊ฑฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ ์ด ๊ธฐ๋ก์˜ ์ˆ˜
์›์ฒœ ์กฐ์‚ฌ์— ๊ธฐ๋ก๋œ ํ›„๋ณด 120
๊ทธ์ค‘ ๋กœ์ปฌ์—์„œ ๊ฒ€์ฆํ•œ ์ˆ˜๋ฝ ๊ณ„์•ฝ 2
์ด ๋‘ ์š”์ฒญ์˜ ์‹ค์ œ ๋ชจ๋ธ ์‹คํ–‰ 0
์ด ๋‘ ์š”์ฒญ์˜ ํ•™์Šต ์‹คํ–‰ยทํ•™์Šต ๋ผ๋ฒจ 0
๋ณดํ˜ธ๋œ ์ตœ์ข… ํ‰๊ฐ€์— ์ ๊ฒฉ์ธ ์š”์ฒญ 0

๋‘ ๊ณ„์•ฝ์€ 120๊ฐœ์— ํฌํ•จ๋œ ์š”์ฒญ์„ ๊ตฌ์ฒดํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›„๋ณด๊ฐ€ 122๊ฐœ๋กœ ๋Š˜์–ด๋‚œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์›๋ณธ PDCA53 ์กฐ์‚ฌ์™€ 120๊ฐœ inventory๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ํŒŒ์ผ์˜ SHA256์€ e79cf90505fff4c636de99f322ab82001afd22516216cebcd8249b9b3d61cf67์ž…๋‹ˆ๋‹ค. ๋ณ„๋„ laya-tools ๊ณผ์ œยท๋ชจ๋ธ ํŒŒ์ผ๋Ÿฟ ๊ฒฐ๊ณผ๋„ ์ด ๋‘ ์š”์ฒญ์˜ ์‹คํ–‰ ์ˆ˜์— ํ•ฉ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1. ๋ถ€ํ˜ธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ „์ฒด int64 ์„œ์ˆ˜

go53-humanize-ordinal64๋Š” dustin/go-humanize์˜ ๊ณ ์ • ์›๋ณธ์— Ordinal64๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด -21์€ -21st, -11์€ -11th๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ๊ฐ’ -9223372036854775808๋„ ์ˆซ์ž๋ฅผ ์žƒ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ์—๋Š” Ordinal(int)๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ํ•จ์ˆ˜๋Š” ์Œ์ˆ˜์— th๋ฅผ ๋ถ™์ด๋ฏ€๋กœ Ordinal(-21)์˜ -21th ๋™์ž‘์„ ์œ ์ง€ํ•˜๊ณ , ์ƒˆ ํ•จ์ˆ˜๋งŒ ์ ˆ๋Œ“๊ฐ’ ๊ธฐ์ค€ ์ ‘๋ฏธ์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํƒ€์ž… func(int64) string์„ ํ™•์ธํ•˜๋ฉฐ, ์„ ์–ธ๋œ ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜ ๊ฐ’ ๋ณ€์ˆ˜์˜ ์ฐจ์ด๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ณ„์•ฝ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ณต์‚ฌํ•œ ์›๋ณธ์€ go.mod, ordinals.go, ordinals_test.go, ํ…Œ์ŠคํŠธ ๋„์šฐ๋ฏธ common_test.go, LICENSE์˜ 5๊ฐœ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ „์ฒด upstream ํŒจํ‚ค์ง€๋ฅผ ๋ณต์‚ฌํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์˜์กด์„ฑ์ด ๋‹ซํžŒ ์„œ์ˆ˜ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ์€ ordinals.go ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์›๋ฌธ MIT ๋ผ์ด์„ ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๋„ WTFPL ์›์ „์ด ์žˆ๋Š” number.go๋Š” ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์›๋ณธ์— NOTICE๋Š” ์—†์œผ๋ฉฐ ๋งŒ๋“ค์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ์˜ Apache-2.0 ํ‘œ์‹œ๋กœ upstream MIT๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒ€์‚ฌ ๊ธฐ์ค€์€ ์ž„์˜ ์ •๋ฐ€๋„ math/big ์‚ฐ์ˆ ๊ณผ ๋ช…์‹œ์ ์ธ 100๊ฐœ ๋‚˜๋จธ์ง€๋ณ„ ์ ‘๋ฏธ์‚ฌ ํ‘œ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋Œ€์กฐ ๊ตฌํ˜„์€ ๋ฌธ์ž์—ด ๋์ž๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๊ฒ€์‚ฌ ๊ตฌํ˜„์„ ๊ทธ๋Œ€๋กœ ๋ณต์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–‘ยท์Œ์ˆ˜, 11ยท12ยท13 ์˜ˆ์™ธ, ๋ชจ๋“  ์ ‘๋ฏธ์‚ฌ ๋‚˜๋จธ์ง€, int64 ์–‘ ๋, 32๋น„ํŠธยท์‹ค์ˆ˜ ์ •๋ฐ€๋„ ๊ฒฝ๊ณ„์™€ ๊ณ ์ •๋œ ๋„“์€ ์ž…๋ ฅ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์˜คํ”„๋ผ์ธ ๊ฒ€์ฆ์—์„œ ์›๋ณธ์€ ๊ฑฐ์ ˆ๋˜๊ณ , ๋Œ€์กฐ ๊ตฌํ˜„์€ ์›๋ณธ ํ…Œ์ŠคํŠธ์™€ ๋…๋ฆฝ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ฉ์นœ ํ•„์ˆ˜ terminal pass 6๊ฐœ๋ฅผ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ํ›„๋ณด 13๊ฐœ๋„ ๊ฑฐ์ ˆ๋์Šต๋‹ˆ๋‹ค. ์ด 13๊ฐœ์—๋Š” ์ƒˆ API๊ฐ€ ์—†๋Š” ์ฃผ์„ ์ˆ˜์ •๊ณผ ์ž˜๋ชป๋œ ํƒ€์ž…์˜ ์ปดํŒŒ์ผ ์‹คํŒจ๋„ ํฌํ•จ๋˜๋ฏ€๋กœ ์ „๋ถ€๋ฅผ ํ–‰๋™ ์˜ค๋ฅ˜ ๊ฒ€์ถœ๋กœ ์„ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…๋ฆฝ ๊ฒ€ํ† ์ž๋Š” ๋ณ„๋„์˜ ์•ˆ์ „ํ•œ unsigned ์‚ฐ์ˆ  ๊ตฌํ˜„์„ ํ†ต๊ณผ์‹œํ‚ค๊ณ , ํฐ ์ˆ˜์˜ teen ์ ‘๋ฏธ์‚ฌ์™€ ์ตœ์†Œ๊ฐ’ ์ ‘๋ฏธ์‚ฌ๋ฅผ ์ž˜๋ชป ์ฒ˜๋ฆฌํ•œ ๋‘ ํ›„๋ณด๋ฅผ ๊ฑฐ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ํ›„๋ณด๊ฐ€ ์ž‘์„ฑํ•œ ๊ณ ์žฅ ๋‚œ ํ…Œ์ŠคํŠธ๋Š” ์ˆ˜๋ฝ ๊ทผ๊ฑฐ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

2. ์—„๊ฒฉํ•œ ์†Œ๋ฌธ์ž UUID ํ…์ŠคํŠธ ํŒŒ์„œ

go53-uuid-canonical-parse๋Š” google/uuid์˜ ๊ณ ์ • ์›๋ณธ์— ParseCanonical์„ ์ถ”๊ฐ€ํ•˜๋Š” ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ 36๋ฐ”์ดํŠธ์˜ ์†Œ๋ฌธ์ž ASCII hex์™€ ์ •ํ•ด์ง„ ๋„ค ํ•˜์ดํ”ˆ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ์ž…๋ ฅ์€ ์˜ค๋ฅ˜์™€ ๋ชจ๋‘ 0์ธ UUID๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฉฐ, ์ •์ƒ์ ์ธ ์•ž๋ถ€๋ถ„์„ ํ•ด์„ํ•œ ๋’ค ์‹คํŒจํ•ด๋„ ๋ถ€๋ถ„ ๊ฐ’์„ ๋‚จ๊ธฐ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. 0ยท์ตœ๋Œ€ UUID์™€ ๋ชจ๋“  version/variant ๋น„ํŠธ ํŒจํ„ด์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด Parse์™€ ParseBytes์˜ ๋Œ€๋ฌธ์žยทURNยท32์ž๋ฆฌ raw hexยท๋ž˜ํผ ํ—ˆ์šฉ๊ณผ ์˜ค๋ฅ˜ ์ข…๋ฅ˜๋Š” ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์›์ฒœ ์กฐ์‚ฌ์— ์žˆ๋˜ ์งง์€ ์š”์ฒญ์„ ๊ทธ๋Œ€๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š๊ณ , ์ด ๊ฐœ๋ฐœ ๊ณ„์•ฝ์—์„œ ํ˜ธํ™˜์„ฑ๊ณผ ์ง€์› ๊ฐ€๋Šฅํ•œ ๊ตฌํ˜„ ๋ฒ”์œ„๋ฅผ ๋ณ„๋„ prompt๋กœ ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ Go ํŒŒ์ผ 23๊ฐœ์— go.mod์™€ BSD-3-Clause LICENSE๋ฅผ ๋”ํ•œ 25๊ฐœ ํŒŒ์ผ์„ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›๋ณธ Google ํ‘œ์‹œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ์‹ค์ œ NOTICE๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์žฌ๋ฐฐํฌ์—๋Š” ์ €์ž‘๊ถŒยท์กฐ๊ฑดยท๋ฉด์ฑ… ์กฐํ•ญ์„ ์œ ์ง€ํ•˜๊ณ , ๋ฐ”์ด๋„ˆ๋ฆฌ ์žฌ๋ฐฐํฌ์—๋„ ๋ผ์ด์„ ์Šค๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํ‘œ์‹œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒŒ์ผยท์˜์กด์„ฑยท๋ฏธ๋ž˜ ๋ชจ๋ธ ๋ฐฐํฌ์— ๋Œ€ํ•œ ํฌ๊ด„์  ํ—ˆ๊ฐ€๋Š” ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์ˆ˜๋ฝ๊ธฐ๋Š” ์›๋ณธ uuid.go์˜ ์ •ํ™•ํ•œ 10,254๋ฐ”์ดํŠธ prefix ๋˜๋Š” ๊ณ ์ •ํ•œ Go1.27.1 formatter ๊ฒฐ๊ณผ์ธ 10,251๋ฐ”์ดํŠธ prefix ๋’ค์— ํ•จ์ˆ˜ ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ •๊ทœํ™”๋Š” ํ™•์ธ๋œ formatter ๊ณต๋ฐฑ ์ฐจ์ด๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง€์—ญ ๊ฐ’, ๋ฃจํ”„, ๊ณ ์ • ์›๋ณธ์˜ ์ˆœ์ˆ˜ Parseยทxtob์™€ ์„ ์ •ํ•œ ์ˆœ์ˆ˜ ํ‘œ์ค€ ํ˜ธ์ถœ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์—ญ ์“ฐ๊ธฐ, ์ง์ ‘ ๋‚œ์ˆ˜ ์ฝ๊ธฐ, ํ•จ์ˆ˜ ๋ณ„์นญ ํ˜ธ์ถœ, ํฌ์ธํ„ฐยท์ „์—ญ ๋ฐฐ์—ด ๋ณ„์นญ, ์ถ”๊ฐ€ ๋„์šฐ๋ฏธ, ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด, ๋™์‹œ์„ฑ, importยทinitยทdirectiveยท์ €์ž‘๊ถŒ ๋ณ€๊ฒฝ ๋“ฑ์€ ์ง€์› ๋ฐ–์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ง€์—ญ ์„ ์–ธ๊ณผ ์‹ค์ œ ์ „์—ญ ์“ฐ๊ธฐ๋ฅผ ์ด๋ฆ„๋งŒ์œผ๋กœ ํ˜ผ๋™ํ•˜์ง€ ์•Š๋„๋ก ์„ ์–ธ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ง€์› ๋ฐ–์˜ ์ฝ”๋“œ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•ด๋„ verifier_unknown์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ ์‹คํŒจ๋‚˜ ๋‚ฎ์€ ๋Šฅ๋ ฅ์˜ ๋ผ๋ฒจ๋กœ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ Go ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์˜ ํšจ๊ณผ๋ฅผ ์ฆ๋ช…ํ•˜๋Š” ์ˆ˜๋ฝ๊ธฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์›๋ณธ ํ…Œ์ŠคํŠธ๋Š” ํ˜„์žฌ ํ˜ธ์ŠคํŠธ์—์„œ terminal pass 212๊ฐœ๋ฅผ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ API๊ฐ€ ์—†๋Š” ์›๋ณธ์€ ๋…๋ฆฝ ๊ณ„์•ฝ์— ์‹คํŒจํ–ˆ๊ณ , ๋Œ€์กฐ ๊ตฌํ˜„์€ ์›๋ณธ 212๊ฐœ์™€ ๋…๋ฆฝ 6๊ฐœ๋ฅผ ํ•ฉ์ณ 218๊ฐœ๋ฅผ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€์› ๋ฒ”์œ„ ์•ˆ์˜ ์ž˜๋ชป๋œ ํ›„๋ณด 14๊ฐœ๋Š” ๊ฐ๊ฐ ๋…๋ฆฝ ํ…Œ์ŠคํŠธ 6๊ฐœ๋ฅผ ์‹ค์ œ ์ข…๋ฃŒํ•œ ๋’ค ํ–‰๋™ ์˜ค๋ฅ˜๋กœ ๊ฑฐ์ ˆ๋์Šต๋‹ˆ๋‹ค. ์ง€์› ๋ฐ–์˜ ํ›„๋ณด 21๊ฐœ๋Š” ๋ณ„๋„ shape ๊ฒ€์‚ฌ๋กœ ๊ตฌ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋…๋ฆฝ CLI ๊ฒ€ํ† ์—์„œ๋Š” ๋ณ„๋„์˜ hex.DecodeString ๋Œ€์กฐ ๊ตฌํ˜„์ด 218๊ฐœ๋ฅผ ํ†ต๊ณผํ•˜๊ณ , ๋Œ€๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•œ ํ›„๋ณด๋Š” ๊ฑฐ์ ˆ๋์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๋‚œ์ˆ˜ ์ฝ๊ธฐยท์ˆจ๊ธด ์ „์—ญ ํ’€ ์“ฐ๊ธฐยทGoogle ํ‘œ์‹œ ์‚ญ์ œ๋Š” ์‹คํ–‰ ์ „์— unknown์œผ๋กœ ์ฒ˜๋ฆฌ๋์Šต๋‹ˆ๋‹ค. ๊ณ ์ • ๋ฒกํ„ฐ, 36์œ„์น˜ร—256๋ฐ”์ดํŠธ ๊ฒ€์‚ฌ, ๋ฐ˜๋ณตยท๋™์‹œ ํ˜ธ์ถœ, ๋‚œ์ˆ˜ reader ๋ฐ ํ’€ ์ƒํƒœ ๊ฒ€์‚ฌ๋Š” ํ•œ ์š”์ฒญ์˜ ๊ฒ€์‚ฌ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค. 9,216๊ฐœ ๊ฒ€์‚ฌ๋‚˜ 218๊ฐœ terminal pass๋ฅผ ๋ณ„๋„ ๊ณผ์ œ ์ˆ˜๋กœ ์„ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. reader ๊ณ„์ธก๋งŒ์œผ๋กœ ๋ชจ๋“  entropy ๊ฒฝ๋กœ์˜ ๋ถ€์žฌ๋ฅผ ์ฃผ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ง์ ‘ ํ˜ธ์ถœ์€ ์ œํ•œ๋œ ์†Œ์Šค gate์—์„œ๋„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ UUID ๊ธฐ๋ก์€ ๋ณ„๋„ ์›์ฒœยท๊ณ„์•ฝ ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ ๋ฐฉ๋ฒ•๊ณผ ๊ณ ์ • ํ•ด์‹œ

๊ฐœ๋ฐœ checkout์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ํ•œ ๋ฒˆ ๋งŒ๋“ค๊ณ , ๋ชจ๋ธ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  spec๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mkdir -p .cache/bin
go build -trimpath -o .cache/bin/riido-taskverify ./cmd/riido-taskverify
.cache/bin/riido-taskverify --task go53-humanize-ordinal64 --spec
.cache/bin/riido-taskverify --task go53-uuid-canonical-parse --spec

ํ›„๋ณด๋ฅผ ๊ฒ€์‚ฌํ•  ๋•Œ๋Š” ๊ณ ์ • ๊ณต๊ฐœ ์›๋ณธ๊ณผ ๊ทธ ๋ณต์‚ฌ๋ณธ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ๊ณผ ์‹ค์ œ ๋™์ž‘์ด ํ™•์ธ๋œ Go1.27.1 ์„ค์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋ก์˜ ์‹คํ–‰ ํ˜ธ์ŠคํŠธ๋Š” macOS arm64์ด๋ฉฐ ๋ชจ๋“  ํ”Œ๋žซํผ์„ ์‹œํ—˜ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

.cache/bin/riido-taskverify --task TASK --base-dir PUBLIC_PINNED_BASE --candidate-dir PUBLIC_CANDIDATE_COPY --go-root TRUSTED_GO_1_27_1

์œ„ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ข…๋ฃŒ ์ฝ”๋“œ 0์€ accepted, 1์€ rejected, 2๋Š” ์ž˜๋ชป๋œ ์ž…๋ ฅ, 3์€ ๊ฒ€์ฆ ๋ถˆ๊ฐ€์ž…๋‹ˆ๋‹ค. ์›๋ณธ module ํŒŒ์ผ์€ ๊ทธ๋Œ€๋กœ ๊ณ ์ •ํ•˜๊ณ , ์ž„์‹œ compiler module๋งŒ ์›๋ž˜ module ์ด๋ฆ„๊ณผ Go1.27.1๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๊ณ , ์ธ์ฆ ์ •๋ณดยท์‚ฌ์šฉ์ž ํ™ˆยท๋„คํŠธ์›Œํฌ๋ฅผ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์€ ๋ชจ๋ธ ์†๋„๋‚˜ ๋น„์šฉ ์ธก์ •์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณ ์ • ํ•ญ๋ชฉ Humanize UUID
Spec SHA256 5c6fd6058a48bd0e6441a68c351e7b1ed491aec20baff78c6942e377ae79f5d5 c8e3a2edcc2024ce68ba7ea7b5fed00554b2e1c36a12174f942f32b5a5a5eec3
Definition SHA256 99a7c0723e3c9f40a069003ccf3f9c2e290c3cbe8e67be3a4ced02d4a31a29b8 9413ed54a10ee9a1576f71a68cf664134570cf84e735f8daeb88c66c1f4ad7c8
Contract SHA256 3b1351162b746fa61f7837af2923644eb2f4df100de643114c9d9f0eb064fd06 259f3fcd56ac9bf0d4d307cc1b8ed77968b6b3bf21327160e09efd440f71ffd5
Prompt SHA256 107ae4d6da023114cc615ebdef6709053be8471bb0ee37f9763af73f279a94a9 5c6456db8da12a5e9510cf9f39a448298df4dd73bead5706a41288f567f30cb2

์›๋ณธ ํŒŒ์ผ๋ณ„ SHA256ยทGit blob๊ณผ ๊ตฌํ˜„ ํŒŒ์ผ ์ฐธ์กฐ๋Š” ๋ณ„๋„ JSON ๊ธฐ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์•ฝ ๊ฒ€์‚ฌ๋Š” ์œ ํ•œํ•œ ๊ฐœ๋ฐœ ์ฆ๊ฑฐ์ด๋ฉฐ, ์ „์ฒด int64ยท๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจยท๋ชจ๋“  ํ™˜๊ฒฝ์˜ ์ •ํ˜• ์ฆ๋ช…์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ๋ณต์‚ฌ ๋ฒ”์œ„์˜ ๋ผ์ด์„ ์Šค ๊ฒ€ํ† ๋ฅผ ๋ชจ๋ธ ํ•™์Šตยท๊ฐ€์ค‘์น˜ยท๋ฐ์ดํ„ฐ์…‹ ๋ฐฐํฌ์˜ ์ ๊ฒฉ์„ฑ์œผ๋กœ ํ™•๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

2,400๊ฐœ ๋ชฉํ‘œ๊นŒ์ง€ ๋‚จ์€ ์ผ

๋ชฉํ‘œ๋Š” ๋„๋ฉ”์ธ๋งˆ๋‹ค ์ตœ์†Œ 2,400๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ณดํ˜ธ๋œ ์ตœ์ข… ์š”์ฒญ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ 120๊ฐœ ์›์ฒœ ํ›„๋ณด์™€ ๋‘ ๊ฐœ๋ฐœ ๊ณ„์•ฝ์€ ์ •๋‹ต ์ง‘ํ•ฉ์ด๋‚˜ ๋‹ฌ์„ฑ ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฏธ ๊ฐœ๋ฐœ ์ค‘ ์ฝ์€ ์ด ์ž๋ฃŒ๋Š” ๋ณดํ˜ธ๋œ ์ตœ์ข… ํ‰๊ฐ€์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

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

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