๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

ยฉ 2026 Molayo

Zennํ—ค๋“œ๋ผ์ธ2026. 05. 14. 08:43

๐Ÿ’ก ใ€ŒCodexใ€ ํ™œ์šฉ์ˆ : ์‹ค๋กยทAI ์‹œ๋Œ€์˜ ๋‹นํ˜น๊ฐ, ๊ธฐ์ˆ  ์„ ์ •๋ถ€ํ„ฐ ์„ค๊ณ„๊นŒ์ง€ ๋งก๊ธด ๊ฐœ๋ฐœ์€... ๊ฐœ๋ฐœ์˜ ๊ฐœ๋…์ด๋ž€?

์š”์•ฝ

๋ณธ ๊ธฐ์‚ฌ๋Š” AI (Codex)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋…ธ๋ ˆํฌ ํ™˜๊ฒฝ์˜ ํŠน์ • ํด๋” ์ด๋ ฅ ์ถ”์ ์— ํŠนํ™”๋œ ์ „์šฉ GUI ํˆด์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์ž๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ถˆํŽธํ•จ์ด๋‚˜ ์•„์ด๋””์–ด๋ฅผ ๋˜์ง€๊ณ  ๊ธฐ์ˆ  ์„ ์ • ๋ฐ ์„ค๊ณ„ ๋‹จ๊ณ„๊นŒ์ง€ AI์—๊ฒŒ ๋งก๊ธฐ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ AI๋Š” Tauri + React/TypeScript ์กฐํ•ฉ๊ณผ Git CLI ํ˜ธ์ถœ ๋ฐฉ์‹ ๋“ฑ ๋†’์€ ์ˆ˜์ค€์˜ ์•„ํ‚คํ…์ฒ˜ ์ œ์•ˆ์„ ํ–ˆ์œผ๋ฉฐ, ํ•„์ž๋Š” ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ MVP๋ฅผ ์™„์„ฑํ•˜๋Š” ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ AI๋Š” ๋‹จ์ˆœํ•œ ์ฝ”๋”ฉ ํˆด์„ ๋„˜์–ด, ์•„์ด๋””์–ด๋ฅผ ๊ณผ์ œ๋กœ ์Šนํ™”์‹œํ‚ค๊ณ  ์„ค๊ณ„ ๋ฐฉํ–ฅ์„ ์ œ์‹œํ•˜๋ฉฐ ๊ฐœ๋ฐœ ๊ณผ์ • ์ž์ฒด๋ฅผ ํ˜์‹ ํ•˜๋Š” 'ํ™œ์šฉ์ˆ '๋กœ์„œ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํฌ์ธํŠธ

  • AI์—๊ฒŒ ๋ถˆํŽธํ•จ์ด๋‚˜ ๋ง‰์—ฐํ•œ ์•„์ด๋””์–ด๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ช…ํ™•ํ•œ ๊ฐœ๋ฐœ ๊ณผ์ œ(์•„์ด๋””์–ด)๋กœ ์Šนํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ์ˆ  ์„ ์ • ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋‹จ๊ณ„๋ถ€ํ„ฐ AI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ ์˜ ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ๊ตฌ์„ฑ์„ ์ œ์•ˆ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค (์˜ˆ: Tauri + React/TypeScript).
  • Rust์™€ TypeScript ๋“ฑ ์—ญํ•  ๋ถ„๋‹ด์ด ๋ช…ํ™•ํ•œ ์–ธ์–ด ์กฐํ•ฉ(UI๋Š” ์›น, ๋กœ์ปฌ ์กฐ์ž‘์€ Rust)์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ•ด์ƒ๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • AI๊ฐ€ ์ƒ์„ฑํ•œ '์ •๋‹ต ๊ฐ™์€ ์ฝ”๋“œ'๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๊ณผ ๋””ํ…Œ์ผ์„ ๋‹ค๋“ฌ๊ณ  ๊ณ ์ง‘์Šค๋Ÿฝ๊ฒŒ ์ˆ˜์ •ํ•˜๋Š” ๊ณผ์ •์ด์•ผ๋ง๋กœ ํ˜„๋Œ€ ๊ฐœ๋ฐœ์ž์˜ ์žฅ์ธ ์ •์‹ ์ด ํ•„์š”ํ•˜๋‹ค.
  • AI๋Š” ๋‹จ์ˆœ ์ฝ”๋”ฉ ํˆด์„ ๋„˜์–ด, ์•„์ด๋””์–ด ๊ตฌ์ฒดํ™”, ์„ค๊ณ„ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์ธ '๋„๊ตฌ์˜ ์™„์„ฑ'์— ๊ธฐ์—ฌํ•˜๋Š” ํŒŒํŠธ๋„ˆ์ด๋‹ค.

์ตœ๊ทผ, AI (Codex ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํˆด์„ ์™„์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „์—๋Š” ์„ค๊ณ„์„œ๋ฅผ ์ „๋‹ฌํ–ˆ์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” ์„ค๊ณ„์„œ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ€ํƒํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

SourceTree์˜ ๋Œ€์šฉ์ด๋ผ๊ธฐ๋ณด๋‹ค, ๋ชจ๋…ธ๋ ˆํฌ(Monorepo)์—์„œ ใ€Œํด๋” ๋‹จ์œ„์˜ Git ์ด๋ ฅใ€์„ ๋ณด๋Š” ๊ฒƒ์—
ํŠนํ™”๋œ ์ž‘์€ GUI ํˆด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
MVP๋Š”, ๋กœ์ปฌ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ด์–ด์„œ, ๋ฃจํŠธ ์งํ•˜ ํด๋”๋ฅผ ์„ ํƒํ•˜๋ฉด
...

๊ทธ๊ณณ์—์„œ ์ฒดํ—˜ํ•œ ๊ฒƒ์€, ์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฐœ๋ฐœ ์ƒ์‹์ด ํ†ตํ•˜์ง€ ์•Š์„ ์ •๋„์˜ ใ€Œ์†๋„ใ€์™€ ใ€Œ๋‹นํ˜น๊ฐใ€์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ์˜ ํŠธ๋ Œ๋“œ์ธ ใ€Œ๊ธฐ์ˆ  ์„ ์ •์ด๋‚˜ ์„ค๊ณ„๋ถ€ํ„ฐ AI์—๊ฒŒ ํ†ต์งธ๋กœ ๋งก๊ธฐ๋Š”ใ€ ์ˆ˜๋ฒ•์„ ์‹œ๋„ํ•œ ๊ฒฐ๊ณผ, ๊ฐœ์ธ ๊ฐœ๋ฐœ์˜ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ๋ณ€ํ–ˆ๋Š”์ง€.

์‹ค์ œ ์„ธ์…˜ ๋กœ๊ทธ๋ฅผ ๊ณต๊ฐœํ•  ํ…Œ๋‹ˆ, ๊ทธ ๋’ท์ด์•ผ๊ธฐ๋ฅผ ์ฆ๊ฒจ์ฃผ์„ธ์š”. โ† ๋ญ, ์ด๋ฒˆ์—๋Š” ๋„ˆ๋ฌด ์ˆœ์กฐ๋กญ๊ฒŒ ์ง„ํ–‰๋˜์–ด ์žฌ๋ฏธ๋Š” ์—†์ง€๋งŒ...

1. ์ƒ๋‹ด์˜ ๊ณ„๊ธฐ: ๋ฌด์˜์‹์ ์œผ๋กœ ํฌ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ๋˜ ใ€Œ๋ถˆํŽธํ•จใ€์˜ ์ •์ฒด

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

์ €๋Š” ์ด๊ฒƒ์„ ใ€Œ๋ชจ๋…ธ๋ ˆํฌ์˜ ์‚ฌ์–‘์ƒ ์–ด์ฉ” ์ˆ˜ ์—†๋Š” ์ผใ€์ด๋ผ๋ฉฐ ์ ˆ๋ฐ˜์ฏค ํฌ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, Codex์— ์ด ใ€Œํ‘ธ๋…ใ€์„ ๋˜์ ธ๋ณด์•˜๋”๋‹ˆ, ์˜์™ธ์˜ ๋Œ€๋‹ต์ด ๋Œ์•„์™”์Šต๋‹ˆ๋‹ค.

AI (Codex): "๊ทธ๊ฒƒ์€ ๋งŒ๋“ค ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ํƒ€์ž…์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค."

AI์™€์˜ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด, ์ž์‹ ์ด ใ€Œ์–ด์ฉ” ์ˆ˜ ์—†๋‹คใ€๊ณ  ๋ฏฟ๊ณ  ์žˆ์—ˆ๋˜ ๋ถˆํŽธํ•จ์ด, ์‚ฌ์‹ค์€ ใ€Œํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช…ํ™•ํ•œ ๊ณผ์ œ (์•„์ด๋””์–ด)ใ€๋กœ ๋ณ€ํ•œ ์ˆœ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.

2. ๊ธฐ์ˆ  ์„ ์ •๊ณผ ์„ค๊ณ„๋ฅผ ใ€Œํ†ต์งธ๋กœ ๋งก๊ฒจใ€ ๋ณด๊ธฐ

์ด๋ฒˆ์—๋Š” ๊ตฌํ˜„์„ ์ง€์‹œํ•˜๊ธฐ ์ „์— ใ€Œ๊ธฐ์ˆ  ์„ ์ •๊ณผ ์„ค๊ณ„ใ€๋ถ€ํ„ฐ AI์—๊ฒŒ ์ œ์•ˆํ•˜๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šค์Šค๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, AI์—๊ฒŒ ๋ฆฌ๋“œ๋ฅผ ๋งก๊ฒจ๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

GUI: Tauri + React / TypeScript

Git ์กฐ์ž‘: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง์ ‘ ๋ณด์œ ํ•˜๊ธฐ๋ณด๋‹ค, ๋™์ž‘์˜ ์‹ ๋ขฐ์„ฑ์ด ๋†’์€ Git CLI๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์„ฑ

ํ™”๋ฉด ์„ค๊ณ„: ๋ชจ๋…ธ๋ ˆํฌ์˜ ใ€Œํด๋” ๋‹จ์œ„ใ€ ์—ด๋žŒ์— ํŠนํ™”๋œ 3-pane ๊ตฌ์„ฑ

Tauri๋ฅผ ์„ ํƒํ•œ ์ด์œ ๋Š”, OS ํ‘œ์ค€ WebView๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ์šฉ exe๊ฐ€ ๋งค์šฐ ๊ฒฝ๋Ÿ‰ํ™”๋œ๋‹ค๋Š”, ์ง€๊ทนํžˆ ํ•ฉ๋ฆฌ์ ์ธ ์ด์œ ์˜€์Šต๋‹ˆ๋‹ค.

3. ์™œ ๋ฐฑ์—”๋“œ์— Rust์ธ๊ฐ€?

ใ€ŒTypeScript๋งŒ์œผ๋กœ ์™„๊ฒฐ๋˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€?ใ€๋ผ๋Š” ์˜๋ฌธ์— ๋Œ€ํ•ด์„œ๋„, Codex๋Š” ๋ช…ํ™•ํ•œ ์—ญํ•  ๋ถ„๋‹ด์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

TypeScript: ํ™”๋ฉด์˜ ๋ฌ˜์‚ฌ๋‚˜ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋‹ด๋‹น.

Rust (Tauri): ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ (TS)์—์„œ๋Š” ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์šด ใ€ŒOS ์ธก์˜ ์ž‘์—… (git ๋ช…๋ น ์‹คํ–‰์ด๋‚˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ)ใ€์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ด๋‹น.

Rust๋Š” ใ€Œ๋นŒ๋“œ ์‹œ์— exe๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐใ€ ๋•Œ๋ฌธ์—, ๋ฐฐํฌ ๋Œ€์ƒ PC์— Rust๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด ใ€ŒUI๋Š” ์›น ๊ธฐ์ˆ , ๋กœ์ปฌ ์กฐ์ž‘์€ Rustใ€๋ผ๋Š” ๊ตฌ๋ถ„ ์ œ์•ˆ์„ ํ†ตํ•ด, ๊ฐœ๋ฐœ์˜ ํ•ด์ƒ๋„๊ฐ€ ๋‹จ๋ฒˆ์— ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค.

4. ใ€Œํ•œ ๋ฒˆ์— ์ž‘๋™ํ•จใ€์— ๋Œ€ํ•œ ๋‹นํ˜น๊ฐ

๋†€๋ž๊ฒŒ๋„, ์ง€์‹œ๋ฅผ ๋‚ด๋ฆฐ ์งํ›„ AI๋Š” 900ํ–‰์ด ๋„˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ƒˆ๊ณ , ํ•œ ๋ฒˆ์— ์‹คํ–‰๋˜๋Š” MVP (Minimum Viable Product, ์‹ค์šฉ ์ตœ์†Œ ์ œํ’ˆ)๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ผ์ข…์˜ ๋‹นํ˜น๊ฐ์ด ์ƒ๊น๋‹ˆ๋‹ค. ใ€Œ์Šค์Šค๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์œผ๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋˜ ์‹œ์ ˆ์˜ ์†๋ง›ใ€์ด ์–ด๋””์—๋„ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•ฑ์„ ๋งŒ์ง€๊ธฐ ์‹œ์ž‘ํ•˜์ž, ๊ณง๋ฐ”๋กœ ใ€Œ์ธ๊ฐ„๋งŒ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ผใ€์ด ์‚ฐ๋”s์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

  • ใ€Œ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์ฒด ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ์ค„๋ฐ”๊ฟˆ์„ ํ•ด์คฌ์œผ๋ฉด ์ข‹๊ฒ ๋‹คใ€
  • ใ€ŒํŒจ๋„ ๋ฆฌ์‚ฌ์ด์ง•์ด ์•ˆ ๋˜๋ฉด ๊ฒฐ๊ตญ ์ŠคํŠธ๋ ˆ์Šค๊ฐ€ ์Œ“์ธ๋‹คใ€
  • ใ€ŒํŠน์ • ํŒŒ์ผ๋งŒ์˜ ์ฐจ์ด์ (diff)์„ ์ „ํ™˜ํ•˜๊ณ  ์‹ถ๋‹คใ€
  • ใ€Œ์•„์ด์ฝ˜์ด ์žˆ๋Š” ํŽธ์ด ์‹œ๊ฐ์ ์ธ ์ธ์ง€ ๋น„์šฉ์ด ๋‚ฎ์•„์ง„๋‹คใ€
  • ใ€Œ์Šคํฌ๋กค๋ฐ”๊ฐ€ ๋ ˆ์ด์•„์›ƒ์˜ ๋ถ€์ž‘์šฉ์œผ๋กœ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆฐ ๊ฒƒ์„ ๊ณ ์น˜๊ณ  ์‹ถ๋‹คใ€

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

5. ์š”์•ฝ: AI ์‹œ๋Œ€์˜ ๊ฐœ์ธ ๊ฐœ๋ฐœ์— ์žˆ์–ด์„œ์˜ ใ€Œํ™œ์šฉ์ˆ ใ€

์ด๋ฒˆ ์ฒดํ—˜์„ ํ†ตํ•ด ํ™•์‹ ํ•œ ๊ฒƒ์€, AI๋Š” ๋‹จ์ˆœํ•œ ใ€Œ์ฝ”๋”ฉ ํˆดใ€์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

  • ๋ถˆ๋งŒ์˜ ์–ธ์–ดํ™”: ์ž์‹ ์ด ๋А๋ผ๊ณ  ์žˆ๋Š” ใ€Œ์–ด๋”˜๊ฐ€ ๋ชจ๋ฅผ ๋ถˆํŽธํ•จใ€์„ AI์—๊ฒŒ ๋˜์ ธ, ๊ณผ์ œ๋กœ ์Šนํ™”์‹œํ‚จ๋‹ค.
  • ์„ค๊ณ„์˜ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ (ๆ‰“ใกๅˆใ‚ใ›): ๊ธฐ์ˆ  ์„ ์ •์˜ ํƒ€๋‹น์„ฑ์„ AI์™€ ๋…ผ์˜ํ•˜์—ฌ ์ตœ์ ์˜ ๊ตฌ์„ฑ์„ ์ด๋Œ์–ด๋‚ธ๋‹ค.
  • ๋””๋ ‰์…˜: ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์˜จ ํ›„, ์ž์‹ ์˜ ใ€Œ์‹ฌ๋ฏธ์•ˆใ€์œผ๋กœ ์ฒ ์ €ํ•˜๊ฒŒ ๋‹ค๋“ฌ์–ด ์˜ฌ๋ฆฐ๋‹ค.

ใ€Œ์ง์ ‘ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๋Š” ๋А๋‚Œใ€์˜ ํ˜•ํƒœ๋Š” ๋ณ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์šฐ๋ฆฌ๋Š” ใ€Œ์–ด๋–ค ๋„๊ตฌ๊ฐ€ ์ž์‹ ์—๊ฒŒ ์ตœ๊ณ ์ธ๊ฐ€ใ€๋ฅผ ๊ณ ๋ฏผํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Codex ๋ฐ์Šคํฌํ†ฑ ๋ฒ„์ „์ด๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ํŒŒํŠธ๋„ˆ๋ฅผ ์–ป์–ด, ์—ฌ๋Ÿฌ๋ถ„๋„ ใ€Œ์ž์‹ ๋งŒ์˜ ์ „์šฉ ๋„๊ตฌใ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์‹œ๋Š” ๊ฑด ์–ด๋–จ๊นŒ์š”?

์ดํ•˜ ์„ธ์…˜ ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

AI๊ฐ€ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ๋Š” ๋กœ๊ทธ๋ฅผ ๋ณด๋‹ˆ... ์ธ๊ฐ„๊ณผ ๋˜‘๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

SourceTree์˜ ๋Œ€์ฒด๋ผ๊ธฐ๋ณด๋‹ค, ๋ชจ๋…ธ๋ ˆํฌ (Monorepo)์—์„œ ใ€Œํด๋” ๋‹จ์œ„์˜ Git ์ด๋ ฅใ€์„ ๋ณด๋Š” ๊ฒƒ์— ํŠนํ™”๋œ ์ž‘์€ GUI ํˆด์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

MVP (Minimum Viable Product)๋Š” ๋กœ์ปฌ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ (Repository)๋ฅผ ์—ด๊ณ  ๋ฃจํŠธ ์งํ•˜ ํด๋”๋ฅผ ์„ ํƒํ•˜๋ฉด,

git log -- <folder> ์— ์ƒ๋‹นํ•˜๋Š” ์ด๋ ฅ์ด ํ‘œ์‹œ๋˜๊ณ , ์ปค๋ฐ‹์„ ์„ ํƒํ•˜๋ฉด

๋ณ€๊ฒฝ ํŒŒ์ผ๊ณผ diff (์ฐจ์ด์ )๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ๊ธฐ์ˆ  ์„ ์ •๊ณผ ์„ค๊ณ„๋ฅผ ์ƒ๋‹ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์ข‹์Šต๋‹ˆ๋‹ค. SourceTree ๋Œ€์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ใ€Œ๋ชจ๋…ธ๋ ˆํฌ์˜ ํŠน์ • ํด๋” ์ด๋ ฅ ๋ทฐ์–ดใ€๋กœ ๋ฒ”์œ„๋ฅผ ์ขํžŒ๋‹ค๋ฉด, ์ƒ๋‹นํžˆ ์ž‘๊ณ  ๊ธฐ๋ถ„ ์ข‹๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MVP์˜ ํ•ต์‹ฌ๋„ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

์ €๋ผ๋ฉด ์šฐ์„  Tauri + React/TypeScript + Git CLI ๋ฅผ ์ œ1ํ›„๋ณด๋กœ ๊ผฝ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ถ”์ฒœ ๊ตฌ์„ฑ

  • GUI: Tauri
  • UI: React + TypeScript
  • Git ์กฐ์ž‘: ์šฐ์„ ์€ git ์ปค๋งจ๋“œ (Command) ํ˜ธ์ถœ
  • ์ฐจ์ด์  ํ‘œ์‹œ: monaco-editor ๋˜๋Š” react-diff-viewer ๊ณ„์—ด
  • ์ƒํƒœ ๊ด€๋ฆฌ: ์ฒ˜์Œ์—๋Š” React state / Zustand ์ •๋„
  • ๋ฐฐํฌ ๋Œ€์ƒ: Windows ์šฐ์„ ์ด๋ผ๋ฉด Tauri๋Š” ๊ถํ•ฉ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์œ ๋Š”, Git ์ด๋ ฅ ๋ทฐ์–ด๋Š” ใ€Œ๋กœ์ปฌ ํŒŒ์ผใ€, ใ€Œ๋กœ์ปฌ Gitใ€, ใ€Œ๋„ค์ดํ‹ฐ๋ธŒ์— ๊ฐ€๊นŒ์šด ๊ฐ€๋ฒผ์›€ใ€์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Electron๋ณด๋‹ค Tauri ์ชฝ์ด ๋” ์ž‘๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Git ์กฐ์ž‘๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ libgit2 ๋“ฑ์„ ํฌํ•จํ•˜๊ธฐ๋ณด๋‹ค๋Š”, Git CLI์— ๋งž์ถ”๋Š” ํŽธ์ด ๋™์ž‘์ด ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋Œ€์™€ ์ผ์น˜ํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

MVP ํ™”๋ฉด ์„ค๊ณ„

ํฌ๊ฒŒ๋Š” 3-ํŽ˜์ธ (3-pane) ๊ตฌ์กฐ๊ฐ€ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Repository: C:\path\to\repo โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
...

MVP์—์„œ๋Š” ๋ฃจํŠธ ์งํ•˜ ํด๋”๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ , ๋‚˜์ค‘์— packages/*๋‚˜ ์ž„์˜์˜ ๊ฒฝ๋กœ ์„ ํƒ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Git ์ปค๋งจ๋“œ ์„ค๊ณ„

์ฒ˜์Œ์—๋Š” ์ด ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

# ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํŒ์ •
git -C <repo> rev-parse --show-toplevel
# ๋ฃจํŠธ ์งํ•˜ ํด๋” ๋ชฉ๋ก
...

๋‹จ, pretty=format์€ ํŒŒ์‹ฑ (Parsing)์ด ๊นจ์ง€๊ธฐ ์–ด๋ ต๋„๋ก ๊ตฌ๋ถ„์ž๋ฅผ ๊ณ ์•ˆํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด \x1f๋‚˜ \x1e๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‹์ž…๋‹ˆ๋‹ค.

์•„ํ‚คํ…์ฒ˜ (Architecture)

Tauri๋ผ๋ฉด, Git ์‹คํ–‰์€ ํ”„๋ก ํŠธ์—”๋“œ(Frontend)๊ฐ€ ์•„๋‹ˆ๋ผ Rust ์ธก์˜ ์ปค๋งจ๋“œ (Command)๋กœ ๋ชฐ์•„๋„ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

Frontend React
โ†“ invoke()
Tauri Rust commands
...

ํƒ€์ž… (Type)์€ ๋Œ€๋žต ์ด๋ ‡์Šต๋‹ˆ๋‹ค.

type RepoInfo = {
path: string;
root: string;
...

์ฒ˜์Œ์— ๊ฒฐ์ •ํ•˜๊ณ  ์‹ถ์€ ์„ค๊ณ„ ํŒ๋‹จ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ใ€ŒGit ์ด๋ ฅ์˜ ์˜๋ฏธใ€๋ฅผ ์–ด๋””๊นŒ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ๊ฒƒ์ธ๊ฐ€์ž…๋‹ˆ๋‹ค.

MVP์—์„œ๋Š” git log -- <folder> ์— ์ƒ๋‹นํ•˜๋Š” ์ˆ˜์ค€์ด๋ฉด ๋˜์ง€๋งŒ, ์žฅ๋ž˜์—๋Š” ๋‹ค์Œ ์‚ฌํ•ญ๋“ค์ด ๋…ผ์ ์ด ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฆฌ๋„ค์ž„ (Rename) ์ถ”์ ์„ ํ•  ๊ฒƒ์ธ๊ฐ€: --follow๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ์ ํ•ฉํ•˜๋ฉฐ ํด๋”์—๋Š” ํŠน์ดํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋จธ์ง€ ์ปค๋ฐ‹ (Merge Commit)์„ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ๊ฐ€
  • ๊ฑฐ๋Œ€ํ•œ diff๋ฅผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ ๊ฒƒ์ธ๊ฐ€
  • ์‚ญ์ œ๋œ ํด๋”์˜ ์ด๋ ฅ์„ ๋ณด๊ณ  ์‹ถ์€๊ฐ€
  • ์„œ๋ธŒ๋ชจ๋“ˆ (Submodule)์„ ๋‹ค๋ฃฐ ๊ฒƒ์ธ๊ฐ€
  • ์›ŒํฌํŠธ๋ฆฌ (Worktree)์˜ ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ๋ณผ ๊ฒƒ์ธ๊ฐ€

MVP์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์„ ๊ธ‹๋Š” ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ์€ ์ผ๋ฐ˜์ ์ธ ๋กœ์ปฌ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ
  • ๋ฃจํŠธ ์งํ•˜์˜ ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ(Directory)๋งŒ ํ‘œ์‹œ
  • ์ด๋ ฅ์€ git log -- <folder>
  • diff๋Š” 1๊ฐœ ์ปค๋ฐ‹๋ถ„๋งŒ ํ‘œ์‹œ
  • ๊ฑฐ๋Œ€ํ•œ diff๋Š” ์ผ์ • ์‚ฌ์ด์ฆˆ์—์„œ ์ž๋ฆ„
  • ์ปค๋ฐ‹๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋Œ€์ƒ์—์„œ ์ œ์™ธ

์ œ๊ฐ€ ์ œ์•ˆํ•˜๋Š” ์ดˆ๊ธฐ ๋กœ๋“œ๋งต

  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Repository) ์„ ํƒ
  • ๋ฃจํŠธ ์งํ•˜ ํด๋” ๋ชฉ๋ก ํ‘œ์‹œ
  • ํด๋” ์„ ํƒ ์‹œ ์ปค๋ฐ‹ ๋ชฉ๋ก ํ‘œ์‹œ
  • ์ปค๋ฐ‹ ์„ ํƒ ์‹œ ๋ณ€๊ฒฝ ํŒŒ์ผ ๋ชฉ๋ก ํ‘œ์‹œ
  • ํŒŒ์ผ ์„ ํƒ ๋˜๋Š” ์ปค๋ฐ‹ ์ „์ฒด diff ํ‘œ์‹œ
  • ๊ฒ€์ƒ‰, ์ž‘์„ฑ์ž, ๊ธฐ๊ฐ„ ํ•„ํ„ฐ๋Š” ๋‚˜์ค‘์— ์ฒ˜๋ฆฌ

๊ธฐ์ˆ  ์„ ์ •์œผ๋กœ๋Š” ์ €๋Š” Tauri + React + Git CLI๋ฅผ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

"๋น ๋ฅด๊ฒŒ MVP(Minimum Viable Product)๋ฅผ ๋งŒ์งˆ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋งŒ๋“ ๋‹ค", "Git์˜ ๋™์ž‘์ด ์‹ค์ œ์™€ ์ผ์น˜ํ•œ๋‹ค", "ํ–ฅํ›„ Windows์šฉ์œผ๋กœ ๊ฐ€๋ณ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค"์˜ ๊ท ํ˜•์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์šฐ์„  ๊ทธ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค์–ด ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. Tauri + React/TypeScript + Git CLI ๊ธฐ๋ฐ˜์˜ MVP๋กœ, ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ด๊ณ , ๋ฃจํŠธ ์งํ•˜ ํด๋”๋ฅผ ์„ ํƒํ•˜๋ฉฐ, git log -- <folder>์— ํ•ด๋‹นํ•˜๋Š” ์ด๋ ฅ์„ ํ™•์ธํ•˜๊ณ , ์ปค๋ฐ‹ ์„ ํƒ ์‹œ ๋ณ€๊ฒฝ ํŒŒ์ผ๊ณผ diff๋ฅผ ๋ณด๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ์ง„์ž…์ ์€ src/App.tsx์™€ src-tauri/src/main.rs์ž…๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ์ธก๋ฉด์—์„œ ํ•œ ๊ฐ€์ง€ ๋Œ€์‘ ์‚ฌํ•ญ์œผ๋กœ, Tauri ์ตœ์‹  ๋ฒ„์ „์˜ ์˜์กด์„ฑ์ด Rust 1.88 ์ด์ƒ์„ ์š”๊ตฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, rustup update stable์„ ํ†ตํ•ด ๋กœ์ปฌ์˜ Rust stable์„ 1.95.0์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ๋Š” ์‹ค์ œ ๊ทœ๋ชจ๊ฐ€ ํฐ ๋ชจ๋…ธ๋ ˆํฌ(Monorepo)์—์„œ ํ…Œ์ŠคํŠธํ•˜๋ฉฐ, diff ์‚ฌ์ด์ฆˆ ์ œํ•œ, ํŒŒ์ผ ๋‹จ์œ„ diff ์„ ํƒ, ๊ธฐ๊ฐ„/์ž‘์„ฑ์ž ํ•„ํ„ฐ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

13๊ฐœ์˜ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (+992).

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

๊ธฐ๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋‹จ์˜ ใ€Œ์ฐธ์กฐใ€์—์„œ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„ ํƒํ•˜๊ณ , ์™ผ์ชฝ์˜ ๋ฃจํŠธ ์งํ•˜ ํด๋”๋ฅผ ์„ ํƒํ•ด ์ฃผ์„ธ์š”. ์ปค๋ฐ‹ ๋ชฉ๋ก, ๋ณ€๊ฒฝ ํŒŒ์ผ, diff๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค๋ฉด MVP์˜ ์ฃผ์š” ๊ฒฝ๋กœ๋ฅผ ํ†ต๊ณผํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ง์ค„์ž„ํ‘œ(...)๋กœ ์ƒ๋žต๋˜๋Š”๋ฐ, ์ „์ฒด ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜ ์—†๋‚˜์š”?

๐Ÿค– Codex

๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์˜ ๋ง์ค„์ž„ํ‘œ ์ƒ๋žต์„ ์—†์• ๊ณ , ์—ฌ๋Ÿฌ ์ค„๋กœ ์ „์ฒด ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ปค๋ฐ‹ ๋ชฉ๋ก์—์„œ ๊ธด ๋ฉ”์‹œ์ง€๊ฐ€ ์ค„๋ฐ”๊ฟˆ๋˜์–ด ์ „์ฒด ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

(์ด๋ฏธ์ง€ ์ฒจ๋ถ€)

์šฐ์ธก ์ƒ๋‹จ์˜ ํŒŒ์ผ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ํ•ด๋‹น ํŒŒ์ผ์˜ ์ฐจ๋ถ„(diff)์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜ ์—†๋‚˜์š”?

๐Ÿค– Codex

๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์ธก ์ƒ๋‹จ์˜ Changed Files์—์„œ ๊ฐ ํŒŒ์ผ์„ ํด๋ฆญํ•˜๋ฉด, ํ•ด๋‹น ํŒŒ์ผ๋งŒ์˜ diff๋ฅผ ์šฐ์ธก ํ•˜๋‹จ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ ์ค‘์ธ ํŒŒ์ผ์€ ์—ฐํ•œ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ํ•˜์ด๋ผ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/App.tsx, src/styles.css, src-tauri/src/main.rs์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ์ธก ์ƒ๋‹จ์˜ Changed Files์—์„œ ํŒŒ์ผ์„ ํด๋ฆญํ•˜๋ฉด, ์šฐ์ธก ํ•˜๋‹จ์˜ Diff๊ฐ€ ํ•ด๋‹น ํŒŒ์ผ์˜ ๋‚ด์šฉ์œผ๋กœ ์ „ํ™˜๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

๊ฐ ํŒจ๋„์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜ ์—†๋‚˜์š”?

๐Ÿค– Codex

๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒจ๋„์˜ ๊ฒฝ๊ณ„์„ ์„ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํด๋” ๋ชฉ๋ก๊ณผ ์ปค๋ฐ‹ ๋ชฉ๋ก ์‚ฌ์ด
  • ์ปค๋ฐ‹ ๋ชฉ๋ก๊ณผ ์šฐ์ธก ์ƒ์„ธ ํŽ˜์ธ(Pane) ์‚ฌ์ด
  • ์šฐ์ธก์˜ Changed Files์™€ Diff ์‚ฌ์ด

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/App.tsx์™€ src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŒจ๋„ ์‚ฌ์ด์˜ ๊ฐ€๋Š” ๊ฒฝ๊ณ„์„ ์„ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์ขŒ์šฐ ํญ๊ณผ ์šฐ์ธก ์ƒํ•˜ ๋†’์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ ์‹คํ–‰ ์‹œ ํ™”๋ฉด ์ค‘์•™์— ํ‘œ์‹œ๋˜๋„๋ก ํ•ด์ฃผ์„ธ์š”.

๐Ÿค– Codex

๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ ์ฐฝ์ด ํ™”๋ฉด ์ค‘์•™์— ๋‚˜ํƒ€๋‚˜๋„๋ก src-tauri/tauri.conf.json์˜ window ์„ค์ •์— center: true๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค

๐Ÿค– Codex

๊ธฐ๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐฝ์ด ํ™”๋ฉด ์ค‘์•™์— ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

๋‹ค์Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Repository)์— ์ปค๋ฐ‹(Commit), ํ‘ธ์‹œ(PUSH)๋ฅผ ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค– Codex

์ปค๋ฐ‹ํ•˜์—ฌ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ: my-proj/MonorepoViewer
  • ๋ธŒ๋žœ์น˜: main
  • ์ปค๋ฐ‹:
    4ecxxxx

Initial monorepo viewer MVP

์ž‘์—… ํŠธ๋ฆฌ(Working tree)๋„ ๊นจ๋—ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

(์ด๋ฏธ์ง€ ์ฒจ๋ถ€๋จ)

์ด๋Ÿฐ ๋А๋‚Œ์œผ๋กœ ์ฐจ์ด์ (Diff)์„ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†์„๊นŒ์š”?

๐Ÿค– Codex

๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์ธก ํ•˜๋‹จ์˜ diff ํ‘œ์‹œ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์—์„œ ํ–‰ ๋ฒˆํ˜ธ ํฌํ•จ, ๋ฉ์–ด๋ฆฌ(Hunk) ๋ถ„ํ• , ์ถ”๊ฐ€/์‚ญ์ œ ์ƒ‰์ƒ ๊ตฌ๋ถ„ ํ‘œ์‹œ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ํ—ค๋”๋„ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์ปค๋ฐ‹ ์ „์ฒด diff์—์„œ๋„ ๋ณด๊ธฐ ํŽธํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€/๋ณ€๊ฒฝํ•œ ์ฃผ์š” ํŒŒ์ผ์€ src/DiffViewer.tsx, src/diffParser.ts, src/App.tsx, src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๋นŒ๋“œ๋Š” ์ด์ „ ์•ฑ์ด ์‹คํ–‰ ์ค‘์ด๋ผ ์‹คํ–‰ ํŒŒ์ผ(exe)์„ ์ž ๊ทธ๊ณ  ์žˆ์—ˆ๊ธฐ์—, ํ•œ ๋ฒˆ ์ข…๋ฃŒํ•œ ํ›„ ์žฌ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ์ธก ํ•˜๋‹จ์˜ diff๊ฐ€ ํ–‰ ๋ฒˆํ˜ธ ํฌํ•จ, hunk ๋ถ„ํ• , ์ถ”๊ฐ€/์‚ญ์ œ ์ƒ‰์ƒ ๊ตฌ๋ถ„์œผ๋กœ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์šฐ์ธก ๋์˜ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•  ๋•Œ ์ง€์›Œ๋ฒ„๋ฆฐ ๊ฒƒ ์•„๋‹Œ๊ฐ€์š”?

๐Ÿค– Codex

๋ง์”€ํ•˜์‹  ๋Œ€๋กœ, diff ๋ทฐ ๊ฐœ์„  ์‹œ์— "์ง€์šด" ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, pre์—์„œ div ๊ธฐ๋ฐ˜์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œ์‹œ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ WebView ์ธก์—์„œ ์Šคํฌ๋กค๋ฐ” ํ‘œ์‹œ๊ฐ€ ์•ฝํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ๋‚ด์šฉ์€ src/styles.css์ด๋ฉฐ, ๋‹ค์Œ์„ ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์„ธ๋กœ ์Šคํฌ๋กค๋ฐ”๋ฅผ ์ƒ์‹œ ํ™•๋ณด
  • diff ์˜์—ญ์€ overflow-y: scroll
  • ์Šคํฌ๋กค๋ฐ” ํญ์„ ๋‘๊ป๊ฒŒ ์„ค์ •
  • ํŠธ๋ž™(Track)๊ณผ ํ•ธ๋“ค(Thumb)์˜ ์ƒ‰์ƒ์„ ๋ณด์ด๋„๋ก ์กฐ์ •

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ์ธก ๋์˜ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ํด๋”/์ปค๋ฐ‹/๋ณ€๊ฒฝ ํŒŒ์ผ/diff ์˜์—ญ์—์„œ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธด diff ํ–‰์ด ์žˆ๋Š” ์ƒํƒœ์—์„œ๋„ ์šฐ์ธก ํ•˜๋‹จ diff ํŒจ๋„์˜ ์šฐ์ธก ๋์— ์„ธ๋กœ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ๋‚จ์•„์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

ํŒŒ์ผ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•˜๋ฉด ๋” ์•Œ๊ธฐ ์‰ฝ์ง€ ์•Š์„๊นŒ์š”?

๐Ÿค– Codex

๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. Changed Files์˜ ๊ฐ ํ–‰์— ํ™•์žฅ์ž ๊ธฐ๋ฐ˜์˜ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ถ„๋ฅ˜๋Š” ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€: png, jpg, svg, ico ๋“ฑ
  • ์ฝ”๋“œ: ts, tsx, rs, cs, kt, dart, py ๋“ฑ
  • ๋งˆํฌ์—…/UI: html, css, xaml, xml ๋“ฑ
  • ์„ค์ •: toml, yaml, config, dotfile ๋“ฑ
  • JSON/lockfile, DB, ํ…์ŠคํŠธ, ๊ธฐํƒ€

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/App.tsx์™€ src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ์žฌ๋นŒ๋“œํ•˜์—ฌ ๊ธฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

Changed Files์˜ ๊ฒฝ๋กœ ์™ผ์ชฝ์— ํŒŒ์ผ ์ข…๋ฅ˜๋ณ„ ์•„์ด์ฝ˜์ด ๋‚˜์˜ค๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•„์ด์ฝ˜์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋‹ค์‹œ ์šฐ์ธก ๋์˜ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

๋„ค, ๋‹ค์‹œ ๋ ˆ์ด์•„์›ƒ ์ธก์˜ ๋ถ€์ž‘์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•„์ด์ฝ˜ ์ถ”๊ฐ€๋กœ ์ธํ•ด Changed Files์˜ ํ–‰์ด 3์—ด ๊ทธ๋ฆฌ๋“œ(Grid)๊ฐ€ ๋˜๋ฉด์„œ, ํ–‰ ์š”์†Œ๊ฐ€ ๋ถ€๋ชจ ๋„ˆ๋น„๋ฅผ ๋ฐ€์–ด๋‚ด์–ด ์šฐ์ธก ๋์˜ ์Šคํฌ๋กค ๋ ˆ์ธ์ด ์ฐŒ๊ทธ๋Ÿฌ์ง€๋Š” ์ผ€์ด์Šค๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐ ํŒจ๋„์„ overflow: hidden์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ž์‹ ์š”์†Œ์˜ ๋„˜์นจ์„ ๋ฐฉ์ง€
  • .list / .file-list / .file-row๋ฅผ width: 100%, min-width: 0, max-width: 100%๋กœ ๊ณ ์ •
  • ๊ฒฝ๋กœ ๋ฌธ์ž์—ด ์—ด๋งŒ ์ƒ๋žต๋˜๋„๋ก ์กฐ์ •

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„์ด์ฝ˜ ํ‘œ์‹œ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์—์„œ๋„ ์˜ค๋ฅธ์ชฝ ๋์˜ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ๊ฐ ํŒจ๋„์— ๋‚จ์•„ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์ผ๋‹จ ์ปค๋ฐ‹(Commit) ๋ฐ ํ‘ธ์‹œ(Push) ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿค– Codex

์ปค๋ฐ‹ํ•˜์—ฌ ํ‘ธ์‹œ(Push)ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ปค๋ฐ‹:
    6875684

Improve diff viewer and file list UI - Push ๋Œ€์ƒ: origin/main

์ž‘์—… ํŠธ๋ฆฌ(Working tree)๋„ ๊นจ๋—ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

ํด๋”๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ํด๋”์— ๋Œ€ํ•ด์„œ๋„ ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ญ์‹œ ์ „์ฒด ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“œ๋„ค์š”.

๐Ÿค– Codex

๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™ผ์ชฝ ํด๋” ๋ชฉ๋ก์˜ ๋งจ ์•ž์— All์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ๊ทธ๊ฒƒ์„ ์„ ํƒํ•˜๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ(Repository) ์ „์ฒด์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ฐ ์งํ›„์—๋„ ์ž๋™์œผ๋กœ All์ด ์„ ํƒ๋˜์–ด ์ „์ฒด ๋กœ๊ทธ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋”๋ฅผ ์„ ํƒํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด๊ณผ ๋™์ผํ•˜๊ฒŒ git log -- <folder>

All์ธ ๊ฒฝ์šฐ์—๋Š” git log์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ „์ฒด ๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. ์ปค๋ฐ‹ ์ƒ์„ธ ๋‚ด์šฉ๋„ All์—์„œ๋Š” ์ปค๋ฐ‹ ์ „์ฒด์˜ ๋ณ€๊ฒฝ ํŒŒ์ผ/diff๋ฅผ, ํด๋” ์„ ํƒ ์‹œ์—๋Š” ํ•ด๋‹น ํด๋” ๋‚ด์˜ ๋‚ด์šฉ๋งŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/App.tsx, src/styles.css, src-tauri/src/main.rs์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ด๋ฉด ์™ผ์ชฝ ์ƒ๋‹จ์— All์ด ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์ดˆ๊ธฐ ์ƒํƒœ์—์„œ ์ „์ฒด ์ปค๋ฐ‹ ๋กœ๊ทธ๊ฐ€ ํ‘œ์‹œ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋”๋ฅผ ์„ ํƒํ•˜๋ฉด ํ•ด๋‹น ํด๋”์˜ ๋กœ๊ทธ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

(์ด๋ฏธ์ง€ ์ฒจ๋ถ€)

์˜ค๋ฅธ์ชฝ ๋์— ์Šคํฌ๋กค๋ฐ”๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•  ์ˆ˜ ์—†์„๊นŒ์š”?

๐Ÿค– Codex

์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ์ƒ์„ธ ํŒจ๋„(Detail pane)์ด ๊ธด diff ํ–‰์ด๋‚˜ ํŒŒ์ผ ๊ฒฝ๋กœ์— ๋ฐ€๋ ค ๊ฐ€๋กœ๋กœ ๋„“์–ด์ง€๋ฉด์„œ, ์˜ค๋ฅธ์ชฝ ๋์˜ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋ฒ—์–ด๋‚ฌ๋˜ ๊ฒƒ์ด ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‘ ๋‚ด์šฉ:

  • detail-panel, file-pane, diff-pane์„ ๋ถ€๋ชจ ๋„ˆ๋น„ ๋‚ด๋กœ ๊ณ ์ •
  • Changed Files์™€ Diff์˜ ์Šคํฌ๋กค ์˜์—ญ์„ width: 100% / min-width: 0 / overflow: hidden์œผ๋กœ ์ œํ•œ
  • diff ๋‚ด๋ถ€์˜ ํ–‰์ด ๋ถ€๋ชจ ํŒจ๋„์„ ๋„“ํžˆ์ง€ ์•Š๋„๋ก ์กฐ์ •

๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ src/styles.css์ž…๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์•ฑ์„ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ ํ™•์ธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๐Ÿค– Codex

์—…๋ฐ์ดํŠธ๋œ ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅธ์ชฝ์˜ Changed Files์™€ Diff์˜ ์„ธ๋กœ ์Šคํฌ๋กค๋ฐ”๊ฐ€ ํŒจ๋„ ์˜ค๋ฅธ์ชฝ ๋์— ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

thx

๐Ÿค– Codex

๋‹คํ–‰์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์œผ๋กœ ์ผ๋‹จ๋ฝ๋˜์—ˆ๋„ค์š”.

๋‹ค์Œ์— ์ž‘์—…ํ•œ๋‹ค๋ฉด, All๊ณผ ํด๋” ์ด๋ ฅ ์ „ํ™˜ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ, ์ปค๋ฐ‹ ์ „์— ํ•œ๊บผ๋ฒˆ์— build / cargo check๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค ํ‘ธ์‹œ(Push)ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

๊ทธ๊ฒƒ๋„ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ‘ธ์‹œ(Push)๊นŒ์ง€ ํ•ด์ฃผ์…จ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”.

๐Ÿค– Codex

์ปค๋ฐ‹ํ•˜์—ฌ ํ‘ธ์‹œ(Push)ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ปค๋ฐ‹:
    af7xxxx

Add repository-wide history view - Push ๋Œ€์ƒ: origin/main

์ž‘์—… ํŠธ๋ฆฌ(Working tree)๋„ ๊นจ๋—ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์•Œ๋ ค์ฃผ์„ธ์š”. Tauri๋Š” ๋ฐ์Šคํฌํ†ฑ ์•ฑ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑฐ์ฃ ?

Rust๋Š” ์™œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”?

TypeScript๋กœ ์™„๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ € ์ž์‹ ์ด ๊ทธ ๋ถ€๋ถ„์˜ ์žฅ๋‹จ์  ๊ฐ™์€ ๊ธฐ์ˆ ์ ์ธ ๋‚ด์šฉ์€ ์ž˜ ๋ชจ๋ฅด๋‹ˆ ์•Œ๋ ค์ฃผ์…จ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค– Codex

๋„ค, ์ดํ•ดํ•˜์‹  ๋‚ด์šฉ์ด ๊ฑฐ์˜ ๋งž์Šต๋‹ˆ๋‹ค. Tauri๋Š” "React/TypeScript๋กœ ๋งŒ๋“  ํ™”๋ฉด์„ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์œผ๋กœ ๊ฐ์‹ธ๊ธฐ ์œ„ํ•ด" ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ Rust๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”, ๊ฐ„๋‹จํžˆ ๋งํ•ด TypeScript๋งŒ์œผ๋กœ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ค์šด "PC ๋ณธ์ฒด ์ธก์˜ ์ž‘์—…"์„ ๋‹ด๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

์ด ์•ฑ์—์„œ๋Š” ์—ญํ• ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

React + TypeScript
ํ™”๋ฉด, ๋ฒ„ํŠผ, ๋ฆฌ์ŠคํŠธ, ๊ฒ€์ƒ‰, diff ํ‘œ์‹œ, ์ƒํƒœ ๊ด€๋ฆฌ
Rust / Tauri
...

์‹ค์ œ๋กœ src-tauri/src/main.rs

๊ทธ๋Ÿฌ๋ฉด Rust๊ฐ€ git ๋ช…๋ น์–ด๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด open_repository, get_folder_history, get_commit_detail, get_file_diff์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ Rust ์ธก์— ์žˆ์œผ๋ฉฐ, TypeScript ์ธก์˜ src/App.tsx์—์„œ invoke("get_folder_history", ...)์™€ ๊ฐ™์ด ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ์ด ํ”„๋กœ์ ํŠธ์—์„œ Rust๋Š” ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Business Logic)์šฉ์ด๋ผ๊ธฐ๋ณด๋‹ค,

"UI๋กœ๋ถ€ํ„ฐ ์š”์ฒญ๋ฐ›์€ ์ผ์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ์ž‘์€ ๋ฐฑ์—”๋“œ(Backend)"

๋ผ๋Š” ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค.

"TypeScript๋กœ ์™„๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€ ์•Š๋‚˜์š”?"๋ผ๋Š” ๋А๋‚Œ๋„ ์ƒ๋‹นํžˆ ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํ™”๋ฉด๋งŒ ๋ณธ๋‹ค๋ฉด ์™„๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ด ์•ฑ์€ ๋กœ์ปฌ์˜ Git ์ด๋ ฅ์„ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— git log๋‚˜ git show๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ง€์ ๋ถ€ํ„ฐ๋Š” ๋ธŒ๋ผ์šฐ์ €/TypeScript์˜ ์ „๋ฌธ ์˜์—ญ์„ ์กฐ๊ธˆ ๋ฒ—์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์—, Tauri์˜ Rust ์ธก์— ๋งก๊ธฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Electron์ด๋ผ๋ฉด Node.js๋ฅผ ๊ฐ™์€ ์—ญํ• ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Tauri๋Š” ๊ทธ ๋ฐฑ์—”๋“œ ์—ญํ• ๋กœ Rust๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„ค๊ณ„๋ผ๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

Electron์€ ์‚ฌ์šฉํ•ด ๋ณธ ์ ์ด ์žˆ๋Š”๋ฐ, ์ด๋ฒˆ์— Tauri๋กœ ๋ฐ”๊พธ๋ฉด exe ํ•˜๋‚˜๋กœ ๋ฐฐํฌ๊ฐ€ ๋๋‚˜๋Š” ๋“ฑ์˜ ์ด์ ์ด ์žˆ๋‚˜์š”?

๐Ÿค– Codex

์•„๋งˆ Electron์„ ๋– ์˜ฌ๋ฆฌ๊ณ  ๊ณ„์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. VS Code๋‚˜ Slack ๊ณ„์—ด์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด์ฃ .

๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ๋ฉด, Tauri๋กœ ๋งŒ๋“ค๋ฉด "์ƒ๋‹นํžˆ ์ž‘๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ์‰ฌ์šด exe"๊ฐ€ ๋˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์—„๋ฐ€ํ•˜๊ฒŒ "ํ•ญ์ƒ exe 1๊ฐœ๋งŒ์œผ๋กœ ์™„์ „ํžˆ ์™„๊ฒฐ๋œ๋‹ค"๋ผ๊ณ  ๋‹จ์ • ์ง“๊ธฐ์—๋Š” ์•ฝ๊ฐ„์˜ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” README์—๋„ ๋‚˜์™€ ์žˆ๋“ฏ์ด, ๋นŒ๋“œํ•˜๋ฉด ์šฐ์„  ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

src-tauri/target/release/monorepo-viewer.exe

๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž ๊ด€์ ์—์„œ๋Š” "์ด exe๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์•ฑ์ด ๋™์ž‘ํ•œ๋‹ค"๋ผ๋Š” ํ˜•ํƒœ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

Electron๊ณผ์˜ ํฐ ์ฐจ์ด์ ์€ ์ด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

Electron
Chromium + Node.js๋ฅผ ์•ฑ์— ๋™๋ด‰ํ•จ
์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์ง€๊ธฐ ์‰ฌ์›€
...

์ฆ‰, Tauri๋Š” "๋ธŒ๋ผ์šฐ์ € ์—”์ง„์„ ํ†ต์งธ๋กœ ๋“ค๊ณ  ๋ฐฐํฌํ•˜๋Š”" ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, Windows์— ์žˆ๋Š” WebView2๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ exe๋‚˜ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ€๋ฒผ์›Œ์ง€๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ฃผ์˜์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Windows ์ธก์— Microsoft Edge WebView2 Runtime์ด ํ•„์š”ํ•จ (๋Œ€๋ถ€๋ถ„์˜ ํ™˜๊ฒฝ์—๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Œ)
  • ์ด๋ฏธ์ง€, DB, ์™ธ๋ถ€ ๋„๊ตฌ ๋“ฑ์„ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๊ฐ€์ง€๋Š” ์„ค๊ณ„๋กœ ํ•  ๊ฒฝ์šฐ, exe ๋‹จ๋…์œผ๋กœ ๋๋‚˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ
  • ์ด ์•ฑ์€ ๋กœ์ปฌ์˜ git CLI๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ, ์ด์šฉํ•˜๋Š” PC์— Git์ด ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋Š” ์ „์ œ๊ฐ€ ํ•„์š”ํ•จ

์ด๋ฒˆ Monorepo Viewer์˜ ๊ฒฝ์šฐ, Tauri๋ฅผ ์„ ํƒํ•˜๋Š” ์ด์ ์€ ์ƒ๋‹นํžˆ ๋งŽ์Šต๋‹ˆ๋‹ค.

  • Git ์ด๋ ฅ ๋ทฐ์–ด์ด๋ฏ€๋กœ ๋กœ์ปฌ ํŒŒ์ผ์ด๋‚˜ git ๋ช…๋ น์–ด์— ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ
  • ์›น ์•ฑ๋ณด๋‹ค ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋กœ์ปฌ PC์™€ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ์Œ
  • Electron๋ณด๋‹ค ๊ฒฝ๋Ÿ‰ํ™”๋œ ๋ฐฐํฌ๋ฌผ์ด ๋˜๊ธฐ ์‰ฌ์›€
  • React + TypeScript์˜ UI ์ž์‚ฐ์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • Rust ์ธก์€ ์–‡์€ "๋กœ์ปฌ ๋ช…๋ น ๋Œ€ํ–‰์ž" ์—ญํ• ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•จ

๊ทธ๋ž˜์„œ ์ด๋ฏธ์ง€๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด,

Electron:
TypeScript/Node.js๋กœ ์ „๋ถ€ ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋ฐฐํฌ๋ฌผ์€ ํผ
Tauri:
...

๋ผ๋Š” ๋А๋‚Œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ์šฉ๋„๋ผ๋ฉด Tauri๋Š” ๊ถํ•ฉ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿง‘๐Ÿ’ป ์‚ฌ์šฉ์ž

์ผ๋ฐ˜์ ์ธ ์ด์•ผ๊ธฐ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”. ์ œ๊ฐ€ Rust์˜ ์“ฐ์ž„์ƒˆ๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ, ํ•™์Šตํ•ด๋„ ์–ด๋””์— ์จ์•ผ ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ฑฐ๋“ ์š”. ์ด๋ฒˆ์ฒ˜๋Ÿผ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ๊ฐ€์š”? ๋ฐฐํฌ ๋Œ€์ƒ PC์— Rust๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•˜์ง€๋Š” ์•Š๋‚˜์š”?

๐Ÿค– Codex

๋„ค, ์ด๋ฒˆ์ฒ˜๋Ÿผ ๋ฐ์Šคํฌํ†ฑ ์•ฑ์˜ ๋’ท๋‹จ(Backend)์— Rust๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์ผ๋ฐ˜์ ์ธ ์ผ์ด ๋˜์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Tauri๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด Rust๋Š” ํ‘œ์ค€์ ์ธ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๋ถ€๋ถ„๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด, ๋ฐฐํฌ ๋Œ€์ƒ PC์— Rust๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Rust๋Š” ใ€Œ๊ฐœ๋ฐœยท๋นŒ๋“œํ•˜๋Š” ์‚ฌ๋žŒ์˜ PCใ€์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œํ•˜๋ฉด Rust ์ฝ”๋“œ๋Š” .exe ์•ˆ์— ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ ๋Œ€์ƒ(้…ๅธƒๅ…ˆ)์—์„œ๋Š” Rust ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ Cargo๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ PC:
Rust๊ฐ€ ํ•„์š”ํ•จ
cargo build / tauri build๋กœ exe๋ฅผ ์ƒ์„ฑ
...

Tauri์˜ ๊ฒฝ์šฐ, ๋ฐฐํฌ ๋Œ€์ƒ์—์„œ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ Rust๊ฐ€ ์•„๋‹ˆ๋ผ, Windows๋ผ๋ฉด WebView2 Runtime์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ตœ๊ทผ์˜ Windows ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Rust์˜ ์‚ฌ์šฉ์ฒ˜๋Š” ๋Œ€๋žต ๋งํ•˜์ž๋ฉด ใ€ŒOS์— ๊ฐ€๊นŒ์šด ์ฒ˜๋ฆฌใ€ ใ€Œ์†๋„๊ฐ€ ํ•„์š”ํ•œ ์ฒ˜๋ฆฌใ€ ใ€Œ๊ณ ์žฅ ๋‚˜๋ฉด ๊ณค๋ž€ํ•œ ๊ธฐ๋ฐ˜ ๋ถ€๋ถ„ใ€ ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณณ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ฐ์Šคํฌํ†ฑ ์•ฑ:
Tauri์˜ ๋ฐฑ์—”๋“œ (Backend)
ํŒŒ์ผ ์กฐ์ž‘, ํ”„๋กœ์„ธ์Šค ์‹คํ–‰, OS ์—ฐ๋™
...

๋ฐ˜๋Œ€๋กœ, React ํ™”๋ฉด์„ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•˜๊ฑฐ๋‚˜, ๊ด€๋ฆฌ ํ™”๋ฉด์„ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•˜๊ฑฐ๋‚˜, ๊ฐ„๋‹จํ•œ Web API๋ฅผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด Rust์ผ ํ•„์š”์„ฑ์€ ๋‚ฎ์Šต๋‹ˆ๋‹ค. TypeScript, Python, Go, C# ๋“ฑ์ด ๋” ํŽธํ•œ ๊ฒฝ์šฐ๋„ ๋งŽ์Šต๋‹ˆ๋‹ค.

Rust์˜ ๊ฐ•์ ์€ ์ด ์ง€์ ์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋น ๋ฆ„ โ€” C/C++์— ๊ฐ€๊นŒ์šด ์„ฑ๋Šฅ์„ ๋‚ด๊ธฐ ์‰ฌ์›€ -
๋ฐฐํฌ ์šฉ์ด โ€” ๋‹จ์ผ exe๋กœ ๋งŒ๋“ค๊ธฐ ์‰ฌ์›€ -
๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „ (Memory Safety) โ€” C/C++ ๊ฐ™์€ ์˜์—ญ์„ ๋‹ค๋ฃจ๋ฉด์„œ๋„, ์œ„ํ—˜ํ•œ ๋ฒ„๊ทธ๋ฅผ ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐฉ์ง€ํ•˜๊ธฐ ์‰ฌ์›€ -
๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ (Concurrency)์— ๊ฐ•ํ•จ โ€” ์—ฌ๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ธฐ ์‰ฌ์›€ -
๋Ÿฐํƒ€์ž„ (Runtime)์ด ๊ฐ€๋ฒผ์›€ โ€” Node.js๋‚˜ .NET ๊ฐ™์€ ๊ฑฐ๋Œ€ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ์‰ฌ์›€

AI ์ž๋™ ์ƒ์„ฑ ์ฝ˜ํ…์ธ 

๋ณธ ์ฝ˜ํ…์ธ ๋Š” Zenn AI์˜ ์›๋ฌธ์„ AI๊ฐ€ ์ž๋™์œผ๋กœ ์š”์•ฝยท๋ฒˆ์—ญยท๋ถ„์„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์› ์ €์ž‘๊ถŒ์€ ์›์ €์ž‘์ž์—๊ฒŒ ์žˆ์œผ๋ฉฐ, ์ •ํ™•ํ•œ ๋‚ด์šฉ์€ ๋ฐ˜๋“œ์‹œ ์›๋ฌธ์„ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.

์›๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
1

๋Œ“๊ธ€

0