ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Git-regret ๐Ÿ’€ โ€” I Finally Finished the CLI That Reads Your Shame
Dev.toDev.to
DevOps

๋‹จ์ผ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ Modular Architecture์™€ AI๋กœ ํ•ด๊ฒฐํ•œ git-regret

Git-regret ๐Ÿ’€ โ€” I Finally Finished the CLI That Reads Your Shame

Ishant gupta2026๋…„ 6์›” 2์ผ8๋ถ„intermediate

Context

ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์‹คํ–‰ ์ œํ•œ๊ณผ ์ทจ์•ฝํ•œ String Parsing ๊ธฐ๋ฐ˜์˜ ๋‹จ์ผ ํŒŒ์ผ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ธํ•œ ํ™•์žฅ์„ฑ ๋ถ€์žฌ. ๋ถ„์„ ๋Œ€์ƒ 20๊ฐœ ์ปค๋ฐ‹ ์ œํ•œ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฏธ๋น„๋กœ ๋Œ€๊ทœ๋ชจ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€ ์ƒํƒœ์˜€์Œ.

Technical Solution

  • ๋ถ„์„ ์—”์ง„๊ณผ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ ˆ์ด์–ด๋ฅผ ๋ถ„๋ฆฌํ•œ Decoupled Architecture ์„ค๊ณ„
  • ์ •๊ทœํ‘œํ˜„์‹ ๊ธฐ๋ฐ˜์˜ Compiled Regex ํŒจํ„ด์„ ๋„์ž…ํ•˜์—ฌ AWS, Stripe ๋“ฑ Secret Leak ํƒ์ง€ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • Severity ๊ธฐ๋ฐ˜์˜ Multi-Dimensional Analysis ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ๋ถ„์„ ๊ทœ์น™์„ 1๊ฐœ์—์„œ 5๊ฐœ๋กœ ํ™•์žฅ
  • GitHub Copilot์„ ํ™œ์šฉํ•œ Interactive Rebase ๋ฐ git filter-repo ๊ธฐ๋ฐ˜์˜ ์ž๋™ Remediation Plan ์ƒ์„ฑ ๋กœ์ง ๊ตฌํ˜„
  • 35๊ฐœ ์ด์ƒ์˜ Assertion์„ ํฌํ•จํ•œ Automated Testing ๋„์ž…์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์•ˆ์ •์„ฑ ํ™•๋ณด

Impact

  • ์ฝ”๋“œ ๊ทœ๋ชจ: 87๋ผ์ธ์—์„œ 520๋ผ์ธ ์ด์ƒ์œผ๋กœ ํ™•์žฅํ•˜๋ฉฐ ๊ธฐ๋Šฅ์  ์™„์„ฑ๋„ ์ œ๊ณ 
  • ๋ถ„์„ ๊ทœ์น™: ๋‹จ์ผ ๊ทœ์น™์—์„œ 5๊ฐœ ์ด์ƒ์˜ ๋ณตํ•ฉ ๋ถ„์„ ๋ฃฐ๋กœ ํ™•์žฅ
  • ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€: Zero ์ƒํƒœ์—์„œ 35๊ฐœ Assertion ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ ์ฒด๊ณ„ ๊ตฌ์ถ•

Key Takeaway

๋‹จ์ˆœ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ค‘์‹ฌ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ”„๋กœ๋•์…˜ ์ˆ˜์ค€์˜ ๋„๊ตฌ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์™€ ์ •๊ตํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋“ฑ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ด€์ ์˜ ์ ‘๊ทผ์ด ํ•„์ˆ˜์ ์ž„.


1. ๋ถ„์„ ๋„๊ตฌ ์„ค๊ณ„ ์‹œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ(Extraction)๊ณผ ๊ฒฐ๊ณผ ํ‘œ์‹œ(Presentation) ๋ ˆ์ด์–ด๋ฅผ ์—„๊ฒฉํžˆ ๋ถ„๋ฆฌํ–ˆ๋Š”๊ฐ€?

2. ๋‹จ์ˆœ String Split ๋Œ€์‹  Compiled Regex๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์  ๋ถ„์„์˜ ์ •๋ฐ€๋„์™€ ์„ฑ๋Šฅ์„ ํ™•๋ณดํ–ˆ๋Š”๊ฐ€?

3. ๋ฐœ๊ฒฌ๋œ ๋ฌธ์ œ์ ์— ๋Œ€ํ•ด ๋‹จ์ˆœ ์•Œ๋ฆผ์„ ๋„˜์–ด ๊ตฌ์ฒด์ ์ธ Remediation Workflow(์˜ˆ: Rebase Plan)๋ฅผ ์ œ๊ณตํ•˜๋Š”๊ฐ€?

์›๋ฌธ ์ฝ๊ธฐ