Public Behavior Plan 57 KO - teamswyg/laya-tools GitHub Wiki

๊ณต๊ฐœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ž‘์€ ๋™์ž‘ ์ฃผ์žฅ ๊ฒ€์ฆ57

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

์ด ๋‹จ๊ณ„๋Š” ์‹ค์ œ ์›๋ณธ Go ํ•จ์ˆ˜์™€ ์‚ฌ์ „ ์ž‘์„ฑํ•œ ์œ ํ•œ ์ž…๋ ฅ ๊ธฐ๋Œ€๊ฐ’์„ ๋Œ€์กฐํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ฝ”๋“œ ์ดํ•ด, ์™„์„ฑํ˜• ๋ผ์šฐํ„ฐ์˜ ์ ˆ๊ฐ ํšจ๊ณผ, ์ƒˆ ํ•™์Šต ์„ฑ๊ณต์„ ๋ณด์—ฌ์ฃผ๋Š” ์‹คํ—˜์€ ์•„๋‹ˆ๋‹ค. ๊ด€์ธก ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ๊ธฐ๋Œ€๊ฐ’์„ ๊ณ ์ณ ํ†ต๊ณผ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์›์ฒœ๊ณผ ๊ถŒ๋ฆฌ

์›์ฒœ ๊ณ ์ • ๋ฒ„์ „ยท๋ฆฌ๋น„์ „ ์‚ฌ์šฉํ•  ๋™์ž‘
Masterminds/semver v3.4.0 / 61fc460d28283a91c53be65c2e0f20b494ac8ad9 Strict parsing, metadata, prerelease precedence
bmatcuk/doublestar v4.9.1 / 8b690afa33319b0a1869367f594e53977e38bc99 slash/glob, escaping/character matching, pattern validation

์›๋ณธ 15๊ฐœ ํŒŒ์ผ์€ ์ด99,035๋ฐ”์ดํŠธ๋‹ค. ๋‘ MIT LICENSE์˜ ์ €์ž‘๊ถŒยทํ—ˆ์šฉยท๋ฉด์ฑ… ๋ฌธ๊ตฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•œ๋‹ค. Go ์†Œ์Šค๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ฐ์‚ฌ์šฉ fixture์— ๋‘”๋‹ค. ์›๋ž˜ go.mod๋Š” metadata ํ•˜์œ„์— ๋ณด์กดํ•˜์—ฌ ๋ถ€๋ชจ ๋ชจ๋“ˆ์˜ ์˜์กด์„ฑ์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค. ์›๋ณธ ๊ฒฝ๋กœ์™€ ๋ฐฐํฌ ๊ฒฝ๋กœ์˜ ๋ฐ”์ดํŠธยทSHA ์—ฐ๊ฒฐ์„ ๊ธฐ๋กํ•œ๋‹ค. SemVer ๊ทœ๋ฒ”์€ 2.0.0 ์›๋ฌธ์„ ๋งํฌํ•˜๊ณ  ๊ธฐ๋Œ€๊ฐ’์„ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•œ๋‹ค.

์—ฌ์„ฏ ์†์„ฑ, ๋‘ ์›์ฒœ ๊ฐ€์กฑ

  1. Strict parser: ์„ฑ๊ณต ์‹œ ์›๋ณธ ๋ฌธ์ž์—ดยท์ˆซ์ž ๋ถ€๋ถ„ยทprereleaseยทmetadata, ์‹คํŒจ ์‹œ nil๊ณผ ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ์ข…๋ฅ˜๋ฅผ ๋ณด์กดํ•œ๋‹ค. ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์˜ค๋ฅ˜ ์ข…๋ฅ˜๋Š” ๊ธฐ์ˆ ์  API ๊ณ„์•ฝ์ด๋ฉฐ SemVer ๊ทœ๋ฒ”์ด ๊ทธ ์˜ค๋ฅ˜ ์ด๋ฆ„์„ ์š”๊ตฌํ•œ๋‹ค๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค.
  2. Metadata: ๋ฌธ์ž์—ด์— ๋ณด์กด๋˜์ง€๋งŒ ๋น„๊ต ์šฐ์„ ์ˆœ์œ„์—๋Š” ์˜ํ–ฅ์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ํ™•์ธํ•œ๋‹ค.
  3. Prerelease: ์ •์‹ ๋ฒ„์ „, ์ˆซ์ž/๋ฌธ์ž, ์ ์œผ๋กœ ๋‚˜๋ˆˆ ์ ‘๋‘์‚ฌ, ASCII ๋Œ€์†Œ๋ฌธ์ž ์ˆœ์„œ๋ฅผ ํ™•์ธํ•œ๋‹ค. uint64๋ณด๋‹ค ํฐ ์ˆซ์ž ์‹๋ณ„์ž๋„ ํฌํ•จํ•˜์—ฌ ๊ทœ๋ฒ”๊ณผ ๊ตฌํ˜„์˜ ์ฐจ์ด๋ฅผ ๋†“์น˜์ง€ ์•Š๋Š”๋‹ค.
  4. Glob: ์ „์ฒด ์ด๋ฆ„ยท/ ๊ฒฝ๊ณ„ยท*์™€ ๊ฒฝ๋กœ ๊ตฌ์„ฑ์š”์†Œ์ธ **์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•œ๋‹ค. ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ OS๋ณ„ PathMatch๋Š” ์ œ์™ธํ•œ๋‹ค.
  5. Escape/character: escaped wildcard์™€ ?๋ฅผ ํ™•์ธํ•œ๋‹ค. ASCII ๋ฐ Unicode ๊ฒฝ๊ณ„๋Š” ์ž…๋ ฅ๋ณ„๋กœ ๋ช…์‹œํ•œ๋‹ค.
  6. Validation: ValidatePattern์˜ bool๊ณผ Match์˜ bool/error๋ฅผ ๊ฐ๊ฐ ๊ด€์ธกํ•œ๋‹ค. ์ž˜๋ชป๋œ brace์˜ ์ฒซ ๋Œ€์•ˆ์ด ์„ฑ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•œ๋‹ค. ๋ชจ๋“  ํŒจํ„ด์„ ๋จผ์ € ๊ฑฐ์ ˆํ•˜๋Š” ๊ฐ•ํ•œ ์ •์ฑ…๊ณผ ์›๋ณธ API์˜ ๋™์ž‘ ์ฐจ์ด๋Š” ์ •์ฑ… ์ฐจ์ด๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์›์ฒœ ํŒ๋…์—์„œ ํฐ prerelease ์ˆซ์ž์˜ ๋น„๊ต์™€ malformed brace์˜ ์กฐ๊ธฐ ์„ฑ๊ณต์ด ์˜ˆ์ƒ๋˜์—ˆ๋‹ค. ์ด๋Š” ์‹คํ–‰ ์ „ ๊ฐ€์„ค์ด๋‹ค. ๊ธฐ๋Œ€๊ฐ’์—๋Š” ๊ทœ๋ฒ”ยทAPI ๊ธฐ์ˆ ยท๋ณ„๋„ ์ •์ฑ…์˜ ๊ตฌ๋ถ„์„ ๋‘๊ณ  ์›์ฒœ ํŒ๋… ๊ฐ€์„ค์„ ์ •๋‹ต์œผ๋กœ ๋ณต์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. aliasยทhelperยท๋ฐ˜์ „ ์Œยท๊ฐ™์€ ์š”์ฒญ์˜ ์ž…๋ ฅ ๋ณ€ํ˜•์€ ์ƒˆ๋กœ์šด ๋…๋ฆฝ ์ž‘์—…์ด๋‚˜ ๊ฐ€์กฑ์œผ๋กœ ์„ธ์ง€ ์•Š๋Š”๋‹ค.

์‹คํ–‰ ๊ฒฝ๊ณ„

Go 1.27.1, ์ˆœ์ˆ˜ Go ๊ฐ์‚ฌ ์‹คํ–‰, ๋„คํŠธ์›Œํฌ ์—†๋Š” ๊ด€์ธก, ์ž…๋ ฅยทํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์›๋ณธ ํ•จ์ˆ˜๋Š” raw UTF-8 ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค. ์†Œ๋ฌธ์žํ™”๋‚˜ ๊ตฌ๋‘์  ์ œ๊ฑฐ๋Š” API ์ž…๋ ฅ์— ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ •๋‹ต๊ณผ source ID๋ฅผ ํžŒํŠธ ์ž…๋ ฅ์— ์ž๋™ ์ฑ„์šฐ๋Š” ๊ฒฝ๋กœ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.

์›์ฒœ/๊ด€์ธก๊ธฐ/๊ณ„ํš/expectation์„ ๊ณ ์ •ํ•˜๊ณ  ์‹ค์ œ binary SHA์™€ input freeze๋ฅผ ํ™•์ธํ•œ ๋’ค ๊ณต์‹ ์ˆ˜์ง‘์„ ํ•œ ๋ฒˆ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฐ ์†์„ฑ ๊ด€์ธก ์ˆ˜์™€ ์š”์ฒญํ•œ entry API ํ˜ธ์ถœ ์ˆ˜๋ฅผ ๋ณ„๋„๋กœ ์„ผ๋‹ค. getter/String/Original ํ˜ธ์ถœ์€ ๋ณ„๋„ ๊ธฐ๋กํ•˜๋ฉฐ ์›๋ณธ ๋‚ด๋ถ€ helper ํ˜ธ์ถœ์€ ์„ธ์ง€ ์•Š๋Š”๋‹ค. Compare์—๋Š” ๋‘ strict parse์™€ ํ•œ compare๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ํ•œ ๊ด€์ธก์„ ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋ถ€ํ’€๋ฆฌ๊ฑฐ๋‚˜ ์ค„์ด์ง€ ์•Š๋Š”๋‹ค. ์˜ค๋ฅ˜ยทpanicยทunsupported๋Š” ๋ณ„๋„๋กœ ๋ณด์กดํ•˜๊ณ  ๋ถˆ์™„์ „ ๊ด€์ธก์œผ๋กœ false ๋ผ๋ฒจ์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. ์ˆ˜์ง‘ ๋’ค ํšŒ๊ท€ ๊ฒ€์‚ฌ ์žฌ์ƒ์€ ์ƒˆ ๊ณต์‹ ํ‘œ๋ณธ์ด ์•„๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ฐ์‚ฌ๋Š” ์ƒ์‚ฐ riidolaya์˜ ํžŒํŠธ ์ฒ˜๋ฆฌ ๊ฒฝ๋กœ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋”ฉ์ด๋‚˜ lock์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. fixture์™€ ๊ฐ์‚ฌ๊ธฐ๋Š” ๋ณ„๋„ ์œ ์ง€๋ณด์ˆ˜ ๋„๊ตฌ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ soft limit์ด๋‚˜ ์‹คํ–‰ ์‹œ๊ฐ„ ์„ค์ •์€ ์‹ค์ธก ์ž์› ์ˆ˜์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋‹ค์Œ ํŒ๋‹จ

๊ธฐ์กด56์˜ pending/unknown๊ณผ ์ธก์ •๊ฐ’์„ ๋ณด์กดํ•œ๋‹ค. ์‹ ๊ทœ ๊ณต๊ฐœ ๋™์ž‘ ๊ทผ๊ฑฐ๊ฐ€ ํ™•๋ณด๋˜์–ด๋„ ์ „์ฒด240๊ฐœ ์›์ฒœ, ์ตœ์†Œ15 ๊ด€๊ณ„ ๊ทธ๋ฃน, ํ•„์š”ํ•œ ๋น„ํ•™์Šต ํšจ์šฉ5%, ๋„๋ฉ”์ธ๋ณ„2400๊ฐœ์˜ ๊ณ ์œ  ๋ณดํ˜ธ ์ตœ์ข… ์š”์ฒญ์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค๊ณ  ์„ ์–ธํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ง€๊ธˆ์€ ์ƒˆ fitยท์œ ๋ฃŒ ๋ชจ๋ธ ํ˜ธ์ถœยท์ตœ์ข… ํ‰๊ฐ€ยท๊ฐ€์ค‘์น˜ ๋ฐฐํฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค์–‘์„ฑ๊ณผ ์‹ค์ œ ํ™•์ธ ์ž‘์—… ๊ฐ์†Œ๋ฅผ ๊ฒ€์ฆํ•œ ๋’ค ํ•™์Šต ์ ๊ฒฉ์„ ๋‹ค์‹œ ํŒ๋‹จํ•œ๋‹ค.