Composing Repair Activities - kimjooyoon/meta-ontology-go GitHub Wiki

์ˆ˜์ • ํ™œ๋™ ์—ฐ๊ฒฐํ•˜๊ธฐ

2026-10-03 ์•ˆ๋‚ด: ์•„๋ž˜ ์˜ˆ์ œ์™€ ๊ด€์ธก์€ ๊ฐ ์ ˆ์— ๊ณ ์ •๋œ ์†Œ์Šคยท๋„๊ตฌ์ฒด์ธ์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฐ”๋”” ์ƒ์„ฑ๊ณผ ์ž์ฒด ์†Œํ˜• ๋ชจ๋ธ์˜ ํ๋ฆ„์€ ๋ชจ๋ธ๊ณผ ๋ฉ”ํƒ€ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ง€๊ธˆ ์‚ฌ์šฉํ•  ๋ฒ„์ „์€ ํ˜„์žฌ ์ƒํƒœ์™€ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Gooo์—์„œ ์ˆ˜์ • ์กฐ๊ฑด์„ ์„ ์–ธํ•˜๋ฉด Go ์ฝ”๋“œ ํ›„๋ณด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ํ›„๋ณด๋ฅผ ๋ˆ„๊ฐ€ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ๋ฐ”๊พธ๊ณ , ๋ฌด์—‡์„ ๊ฒ€์ฆํ•˜๋ฉฐ, ์–ธ์ œ ์‹ค์ œ ์†Œ์Šค์— ๋ฐ˜์˜ํ•ด์•ผ ํ• ๊นŒ์š”?

์ด ๋ฌธ์„œ๋Š” ํ›„๋ณด ์ƒ์„ฑ๊ณผ ํ˜•์‹ ๋ณ€ํ™˜์„ Gooo์˜ ๋‘ ํ™œ๋™์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ฒ€์ฆ์ด๋‚˜ ์ ์šฉ ๊ถŒํ•œ๊นŒ์ง€ ์ƒ๊ธฐ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์„ค๋ช… ๊ธฐ์ค€์€ dev์— ์ •์ƒ ๋ณ‘ํ•ฉ๋œ #856์˜ 9c6fc36456853e7a8a67ca24eadc63ec9290d5a4, Go 1.27.0์ž…๋‹ˆ๋‹ค. ์ด ๊ธฐ์ค€์ด ํ˜„์žฌ ๊ณต๊ฐœ ๋ฆด๋ฆฌ์Šค์— ํฌํ•จ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ˆ˜์ • ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑํ•˜๊ธฐ๋ฅผ ์ฝ์œผ๋ฉด ๊ฐœ๋ณ„ ํ™œ๋™์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋‚˜์š”?

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

์ด ์‚ฌ๋ก€์—์„œ๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” JSON ์ถœ๋ ฅ ๊ฒฝ๋กœ์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•˜์—ฌ, ์˜ค๋ฅ˜๋ฅผ ๋ฒ„๋ฆฌ๋˜ ์‚ฌ๋žŒ์šฉ ์ถœ๋ ฅ ๊ฒฝ๋กœ์— ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Gooo๊ฐ€ ์ƒˆ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ •์ฑ…์„ ์ถ”์ธกํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์—๋Š” ์ƒ์„ฑ๋œ Go ์ฝ”๋“œ๋ฅผ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ์กด Go ๋„๊ตฌ์˜ ์—ญํ• ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€์‹ , ์–ด๋–ค ํ›„๋ณด๋ฅผ ์–ด๋–ค ๋„๊ตฌ ์„ ํƒ์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ๋Š”์ง€๋ฅผ ํ™œ๋™๊ณผ ๊ฒฐ๊ณผ์˜ ์—ฐ๊ฒฐ๋กœ ๋‚จ๊น๋‹ˆ๋‹ค.

Source                RawCandidate                 Candidate
์›๋ณธ Go ๋ฐ”์ดํŠธ         ์ƒ์„ฑ ์งํ›„ Go ํ›„๋ณด              ํ‘œ์ค€ ํ˜•์‹์˜ Go ํ›„๋ณด
       -- GuardWrite -->          -- Canonicalize -->

์—ฌ๊ธฐ๊นŒ์ง€: ํ›„๋ณด ์ƒ์„ฑ
๊ทธ ์ดํ›„: ๋…๋ฆฝ ๊ฒ€์ฆ -> ๋ณ„๋„์˜ ์ฑ„ํƒ ๊ฒฐ์ • -> ์‹ค์ œ ๋ฐ˜์˜ -> ๋‹ค์Œ ์‹คํ–‰

์•ž์˜ ๋‘ ํ™”์‚ดํ‘œ๋งŒ ์ด ํ•ฉ์„ฑ ํ”„๋กœ๊ทธ๋žจ์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋’ค์˜ ๊ฒ€์ฆ๊ณผ ์ฑ„ํƒ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฒ”์šฉ ์ž‘์—… ์—”์ง„์€ ์•„๋‹™๋‹ˆ๋‹ค.

1. ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋„ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค

์•„๋ž˜๋Š” ์„ค๋ช…์šฉ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. SOURCE_HEX์™€ HANDLER_HEX๋Š” ์‹ค์ œ ๊ฐ’์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„ ํƒํ•œ ์›๋ณธ Go ํŒŒ์ผ ์ „์ฒด์™€ ๊ธฐ์กด ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ธ”๋ก์˜ ์ •ํ™•ํ•œ ๋ฐ”์ดํŠธ์—์„œ ๊ฐ๊ฐ ์–ป์€ SHA-256 ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ธ”๋ก์˜ ์ค‘๊ด„ํ˜ธ์™€ ๊ณต๋ฐฑ๋„ ์‹๋ณ„ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค.

package goerrorguard
namespace goerrorguard
entity Source id "gooo://error-guard/source"
entity RawCandidate id "gooo://error-guard/raw-candidate"
entity Candidate id "gooo://error-guard/candidate"
activity GuardWrite(Source) -> RawCandidate computes "go-error-guard:v2;function=runMetaPolicyGenerationProfile;writer=stdout;writer-type=interfaceWriter;source=sha256:SOURCE_HEX;handler=sha256:HANDLER_HEX"
activity Canonicalize(RawCandidate) -> Candidate computes "go-source-format:v1;toolchain=go1.27.0"
์„ ์–ธ ์ฝ๋Š” ๋ฐฉ๋ฒ•
Source ์ˆ˜์ • ํŒ๋‹จ์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์›๋ณธ์ž…๋‹ˆ๋‹ค.
GuardWrite ๋ช…์‹œํ•œ ํ•จ์ˆ˜, ์ถœ๋ ฅ ๋Œ€์ƒ, ์ธํ„ฐํŽ˜์ด์Šค, ์›๋ณธ๊ณผ ์ฒ˜๋ฆฌ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
RawCandidate ์ƒ์„ฑ ์งํ›„ ํ›„๋ณด๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹ ๋ณ€ํ™˜ ๊ฒฐ๊ณผ๋กœ ๋ฎ์–ด์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
Canonicalize ์•ž ํ™œ๋™์˜ ๊ฒฐ๊ณผ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ง€์ •ํ•œ ํ˜•์‹ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
Candidate ์ตœ์ข… ํ›„๋ณด์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ํ›„๋ณด๋ผ๋Š” ์‚ฌ์‹ค ์ž์ฒด๊ฐ€ ์ฑ„ํƒ์„ ๋œปํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ๋ณ„๋„ ๊ฐœ์ฒด๋กœ ์„ ์–ธํ•˜๋ฉด ๋‘ ํ™œ๋™ ์‚ฌ์ด์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์˜๋ฏธ ๊ทธ๋ž˜ํ”„์— ๋‚จ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์กŒ์„ ๋•Œ ์ƒ์„ฑ ๋‹จ๊ณ„์™€ ํ˜•์‹ ๋ณ€ํ™˜ ๋‹จ๊ณ„๋ฅผ ๋‚˜๋ˆ„์–ด ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

computes ๊ฐ’์€ ์ด ์‹คํ—˜์  ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ง€์›ํ•˜๋Š” ์„ ํƒ ํ”„๋กœํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฒ”์šฉ ์ •์ฑ… ๋ฌธ๋ฒ•์ด๋‚˜ ์ž„์˜์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์„ ์–ธ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์˜ ํ•ฉ์„ฑ์€ ์ •ํ™•ํžˆ ์„ธ ๊ฐœ์ฒด์™€ ๋‘ ํ™œ๋™์„ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

2. ํ•ฉ์„ฑ ์‹คํ–‰์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค

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

go run ./examples/meta-policy-compilation/go-error-guard \
  -pipeline \
  -program /caller/input/canonical-guard.gooo \
  -source /caller/input/original.go \
  > /caller/output/pipeline-proposal.json

-pipeline์€ ์ƒ๋žต ๊ฐ€๋Šฅํ•œ ์žฅ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์–ด๋Œ‘ํ„ฐ์˜ ๋‘ ๊ฐœ์ฒดยทํ•œ ํ™œ๋™ ๊ณ„์•ฝ๊ณผ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ•ฉ์„ฑ ๊ณ„์•ฝ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Œ‘ํ„ฐ๋Š” JSON์„ ํ‘œ์ค€ ์ถœ๋ ฅ์— ๋‚ด๋ณด๋‚ด๋ฉฐ ์ž…๋ ฅ ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ›„๋ณด๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„ ์ถœ๋ ฅ ํŒŒ์ผ์€ ํ˜ธ์ถœ์ž์˜ ์…ธ ๋ฆฌ๋‹ค์ด๋ ‰์…˜์œผ๋กœ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.

3. ๊ฒฐ๊ณผ์—์„œ ๋ฌด์—‡์„ ์ฝ์–ด์•ผ ํ•˜๋‚˜์š”?

ํ•„๋“œ ์˜๋ฏธ ์ด๊ฒƒ๋งŒ์œผ๋กœ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฒƒ
program_digest, semantic_digest ์ž…๋ ฅ Gooo์™€ ์˜๋ฏธ ๊ทธ๋ž˜ํ”„์˜ ์‹๋ณ„์ž ์š”๊ตฌ์‚ฌํ•ญ ์ž์ฒด๊ฐ€ ์ ์ ˆํ•œ์ง€
source_digest ์ด ์ œ์•ˆ์ด ๋Œ€์ƒ์œผ๋กœ ์‚ผ์€ ์›๋ณธ ๋‹ค๋ฅธ ๋ฒ„์ „์—๋„ ์ ์šฉ ๊ฐ€๋Šฅํ•œ์ง€
guard.candidate_source ์ƒ์„ฑ ์งํ›„ Go ์ฝ”๋“œ ์ปดํŒŒ์ผยท๋™์ž‘ยท์ฑ„ํƒ ์„ฑ๊ณต ์—ฌ๋ถ€
guard.candidate_digest ์ƒ์„ฑ ์งํ›„ ํ›„๋ณด์˜ ์‹๋ณ„์ž ํ‘œ์ค€ ํ˜•์‹ ํ›„๋ณด์™€ ๋™์ผํ•œ์ง€
rendering.activity_id ์–ด๋–ค ํ˜•์‹ ๋ณ€ํ™˜ ํ™œ๋™์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์‹คํ–‰ ํ™˜๊ฒฝ ์ „์ฒด์˜ ์‹ ๋ขฐ์„ฑ
rendering.toolchain ์‹ค์ œ ํ˜•์‹ ๋ณ€ํ™˜์˜ Go ๋ฒ„์ „ ๋„๊ตฌ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์„œ๋ช…์ด๋‚˜ ๊ณต๊ธ‰๋ง ์ฆ๋ช…
candidate_source, candidate_digest ์ตœ์ข… ํ‘œ์ค€ ํ˜•์‹ ํ›„๋ณด์™€ ์‹๋ณ„์ž ์‹ค์ œ ์ €์žฅ์†Œ์— ๋ฐ˜์˜๋˜์—ˆ๋Š”์ง€
rendering.fixed_point ๋‹ค์‹œ ํ˜•์‹ํ™”ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€์ง€ ํ”„๋กœ๊ทธ๋žจ ์˜๋ฏธ๊ฐ€ ์˜ณ์€์ง€
admission ๋…๋ฆฝ ๊ฒ€์ฆ์— ๊ด€ํ•œ ํ˜„์žฌ ํŒ์ •๊ณผ ๋ˆ„๋ฝ ์›์ธ ์ž๋™์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ
mutation_authority, promotion_authority ์ด ์ œ์•ˆ์ด ๋ถ€์—ฌํ•˜๋Š” ์ˆ˜์ •ยท์Šน๊ฒฉ ๊ถŒํ•œ ๋ณ„๋„ ๊ฑฐ๋ฒ„๋„Œ์Šค ์ ˆ์ฐจ์˜ ์™„๋ฃŒ ์—ฌ๋ถ€

์ด ์ƒ์„ฑ ๊ฒฐ๊ณผ๋Š” PROPOSED์ด๋ฉฐ ๋…๋ฆฝ ๊ฒ€์ฆ ํŒ์ •์€ UNKNOWN, ์ˆ˜์ •ยท์Šน๊ฒฉ ๊ถŒํ•œ์€ 0์ž…๋‹ˆ๋‹ค. ์ดํ›„ CI์—์„œ ์–ป์€ ๊ด€์ธก์€ ๋ณ„๋„ ๊ทผ๊ฑฐ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ์‹œ์ ์˜ ๊ธฐ๋ก์„ ๋‚˜์ค‘์— ์ด๋ฏธ ๊ฒ€์ฆ๋œ ๊ธฐ๋ก์ด์—ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4. ์–ด๋””๊นŒ์ง€ ์ง€์›ํ•˜๋‚˜์š”?

์ด ๋ฒ„์ „์€ ๊ธฐ์กด v1 ๋˜๋Š” v2 ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ทœ์น™์„ ๋ช…์‹œ์ ์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์œ„ ํ…œํ”Œ๋ฆฟ์€ v2์ž…๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ•จ์ˆ˜์™€ ์ง€์—ญ ์ถœ๋ ฅ ์ธํ„ฐํŽ˜์ด์Šค, ๋ฐ˜ํ™˜๋งŒ ํ•˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ธ”๋ก, ์ธ์ ‘ํ•œ ์ถœ๋ ฅยท๋ฐ˜ํ™˜ ๊ตฌ์กฐ ๋“ฑ ๊ธฐ์กด ๊ทœ์น™์˜ ์ œํ•œ์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

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

ํ˜•์‹ ๋ณ€ํ™˜ ๋‚ด๋ถ€์˜ ์„ธ ๋ฒˆ์˜ ํ˜ธ์ถœ์€ ์›๋ณธ ํ˜•์‹ ํ™•์ธ, ํ›„๋ณด ํ˜•์‹ํ™”, ๊ฒฐ๊ณผ์˜ ํ˜•์‹ ๊ณ ์ •์  ํ™•์ธ์ž…๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์˜ ์ „์ฒด ํ…Œ์ŠคํŠธ๋‚˜ ์„ธ ๋ฒˆ์˜ ์˜๋ฏธ ๊ฒ€์ฆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ด€์ธก ์ƒํ™ฉ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•˜๋‚˜์š”? ๋‹ค์Œ์— ํ•„์š”ํ•œ ๊ฒƒ
๋ช…์‹œํ•œ ์›๋ณธยท์ฒ˜๋ฆฌ ๋ธ”๋ก ์‹๋ณ„์ž๊ฐ€ ๋‹ค๋ฆ„ ์•Œ๋ ค์ง„ ๋ชจ์ˆœ์ธ REFUTED์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ๊ณผ ์„ ํƒ์˜ ๋ถˆ์ผ์น˜๋ฅผ ์กฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์‹๋ณ„์ž๋ฅผ ์ƒˆ ๊ฐ’์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•จ์ˆ˜๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ˜„์žฌ ์ง€์› ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚จ ์›์ธ์ด ์žˆ๋Š” UNKNOWN์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ก๋œ ์›์ธ์— ๋”ฐ๋ผ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ์–ธ์–ด ํ™•์žฅ์„ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค.
์•ž ํ™œ๋™์ด ํ›„๋ณด๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•จ ๋’ค ํ˜•์‹ ๋ณ€ํ™˜์€ ์˜์กด ๋Œ€์ƒ ๋•Œ๋ฌธ์— ์ง„ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋’ค ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ๋ณด๋‹ค ์•ž ๋‹จ๊ณ„์˜ ์ง์ ‘ ์›์ธ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
๊ด€๊ณ„์—†๋Š” ์›๋ณธ๊นŒ์ง€ ํ˜•์‹ํ™”ํ•ด์•ผ ํ•จ ์ด ์ œํ•œ๋œ ์ˆ˜์ •์œผ๋กœ๋Š” ๋ฒ”์œ„๋ฅผ ๋‹ซ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„ ๋ฒ”์œ„์™€ ๊ทผ๊ฑฐ๋ฅผ ๊ฐ€์ง„ ์ž‘์—…์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
ํ˜•์‹ํ™” ๊ฒฐ๊ณผ๊ฐ€ ์žฌ์‹คํ–‰๊ณผ ๊ฐ™์Œ ๊ฒฐ์ •์ ์ธ ํ˜•์‹ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋™์ž‘์— ๊ด€ํ•œ ๋…๋ฆฝ ๊ฒ€์ฆ์€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

UNKNOWN์—๋Š” stage, step, reason, unknown_class, next_operation, blocked_by๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ๋ˆ„๋ฝ๊ณผ ์˜์กด ๋Œ€์ƒ ๋•Œ๋ฌธ์— ๋ง‰ํžŒ ์ƒํƒœ๋ฅผ ํ•œ ์‹คํŒจ๋กœ ๋ญ‰๊ฐœ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ž ํ™œ๋™์ด ์‹คํŒจํ•˜๋ฉด ํ˜•์‹ ๋ณ€ํ™˜์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

5. ์‹ค์ œ๋กœ ๊ด€์ธก๋œ ์ž‘์€ ์‚ฌ๋ก€

์„ค๋ช… ๊ธฐ์ค€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ CI ์‹คํ–‰์€ ๋™์ผํ•œ ๊ณ ์ • ๊ฒ€์ฆ ์กฐ๊ฑด์—์„œ ์›๋ณธ๊ณผ ํ‘œ์ค€ ํ˜•์‹ ํ›„๋ณด๋ฅผ ๊ฐ๊ฐ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹ค์„ฏ ํ•ญ๋ชฉ์€ ์ด ์‚ฌ๋ก€์˜ ๊ณ ์ •๋œ ๋ถ„๋ชจ์ด์ง€ ์–ธ์–ด ์ „์ฒด์˜ ์™„์„ฑ๋„ ์ง€ํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณต์šฉ ์ƒ์„ฑ ๋ช…๋ น์˜ ๊ฒ€์ฆ ํ•ญ๋ชฉ ์›๋ณธ ํ›„๋ณด
์‚ฌ๋žŒ์šฉ ์ถœ๋ ฅ ๊ฑฐ์ ˆ์„ ์‹คํŒจ๋กœ ๋ฐ˜ํ™˜ ์‹คํŒจ ์„ฑ๊ณต
JSON ์ถœ๋ ฅ ๊ฑฐ์ ˆ์„ ์‹คํŒจ๋กœ ๋ฐ˜ํ™˜ ์„ฑ๊ณต ์„ฑ๊ณต
์‚ฌ๋žŒ์šฉ ์ถœ๋ ฅ ์„ฑ๊ณต ๋‚ด์šฉ ๋ณด์กด ์„ฑ๊ณต ์„ฑ๊ณต
JSON ์ถœ๋ ฅ ์„ฑ๊ณต ๋‚ด์šฉ ๋ณด์กด ์„ฑ๊ณต ์„ฑ๊ณต
๊ธฐ์กด ์ •ํ™•ํ•œ ๋„ค ์ƒ์„ฑ ํŒŒ์ผ ํšŒ๊ท€ ๊ฒ€์‚ฌ ์„ฑ๊ณต ์„ฑ๊ณต

๊ด€์ธก์€ 4๊ฐœ ์„ฑ๊ณตยท1๊ฐœ ์‹คํŒจ์—์„œ 5๊ฐœ ์„ฑ๊ณตยท0๊ฐœ ์‹คํŒจ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒ€์ฆ์€ ๊ณต์šฉ ์ƒ์„ฑ ํ”„๋กœํŒŒ์ผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฉฐ ์ •์ฑ… ์ˆ˜์ • ํ”„๋กœํŒŒ์ผ ์ „์ฒด์˜ ์‹คํ–‰ ์ฆ๊ฑฐ๋กœ ํ™•๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ Gooo์™€ ์ƒ์„ฑ ํŒŒ์ผ, ํ™œ์„ฑ ํ…Œ์ŠคํŠธ ์†Œ์Šค์˜ ๊ฒฝ๊ณ„๋„ ํ•จ๊ป˜ ๊ณ ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ ํˆฌ์˜๋œ ์ €์žฅ์†Œ ํ˜•ํƒœ์—์„œ๋„ ํŒจํ‚ค์ง€ ๊ฒ€์‚ฌ๊ฐ€ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋ณ„๋„๋กœ ๋ณต๊ตฌํ•œ ๋˜ ํ•œ ๋ฒŒ์˜ ๋‹ค์„ฏ ๊ฐœ ์‹คํ–‰ ์‚ฌ๊ฑด์œผ๋กœ ์ค‘๋ณต ๊ณ„์‚ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์ฒด CI ์‹œ๊ฐ„์ด๋‚˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ๋„ ์ด ์‚ฌ๋ก€ ์ˆ˜์—์„œ ์ถ”์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์†Œ์Šค์™€ ๊ด€์ธก์˜ ์ •ํ™•ํ•œ ์—ฐ๊ฒฐ ๋ณด๊ธฐ

์•ž์˜ ์„ค๋ช…์šฉ ํ…œํ”Œ๋ฆฟ์ด ์ด CI ์ž…๋ ฅ๊ณผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋™์ผํ•˜๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. CI์˜ ํ”„๋กœ๊ทธ๋žจ ์‹๋ณ„์ž๋Š” ์‹ค์ œ ์‹คํ–‰ ์ž…๋ ฅ์—๋งŒ ์†ํ•ฉ๋‹ˆ๋‹ค.

6. ์ƒ์„ฑ ๋‹ค์Œ์—๋Š” ๋ฌด์—‡์ด ๋‚จ๋‚˜์š”?

  1. ์›๋ณธ๊ณผ ํ›„๋ณด๋ฅผ ๊ฐ™์€ ๋…๋ฆฝ ๊ฒ€์ฆ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ํ›„๋ณด๊ฐ€ ์ž์‹ ์„ ํ†ต๊ณผ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ธฐ์ค€๋„ ํ•จ๊ป˜ ๋‚ฎ์ถฐ์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  2. ์‹ค์ œ ์ ์šฉ ๋Œ€์ƒ์ด ์—ฌ์ „ํžˆ ๋งž๋Š”์ง€, ๊ธฐ์กด ์ˆ˜์ •์ด๋‚˜ ๋‹ค๋ฅธ ์„ ์–ธ์„ ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”์ง€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ž˜๋œ ์ „์ฒด ํŒŒ์ผ์„ ๊ทธ๋Œ€๋กœ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•œ ์ ์šฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.
  3. ๊ถŒํ•œ ์žˆ๋Š” ์ฑ„ํƒ ๊ฒฝ๋กœ์—์„œ ์‹ค์ œ ๋ณ€๊ฒฝ๊ณผ ์ „์ฒด CI ๊ฒ€์ฆ์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ์‹คํ–‰ ์„ฑ๊ณต๊ณผ ์˜๊ตฌ ๋ฐ˜์˜์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ฑ„ํƒ๋œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ ์‹ค์ œ ์‹คํ–‰์— ์‚ฌ์šฉ๋˜๋Š”์ง€ ๊ด€์ธกํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ฐ๊ฒฐ ์ „์—๋Š” ๋ˆ„์ ๋˜๋Š” ์ž๊ธฐ๊ฐœ์„ ์ด๋ผ๊ณ  ๋‹จ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ณต์šฉ ๋‘ ํ”„๋กœํŒŒ์ผ์˜ ๋ณ„๋„ ์ˆ˜์ •์ธ #853์€ ๋‘ ์›์‹œ ์ œ์•ˆ๊ณผ CI ํ˜•์‹ ๋ณ€ํ™˜์„ ์กฐํ•ฉํ•œ ์ด๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด๋ ฅ์„ ์ด ์ƒˆ ํ•ฉ์„ฑ ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž‘์—… ๋ฐฉ์‹์ด ๋ฐœ์ „ํ•˜๋Š” ๊ณผ์ • ์ž์ฒด๋„ provenance์— ์†ํ•ฉ๋‹ˆ๋‹ค.

์ด์–ด์„œ ์ฝ๊ธฐ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ