๐ก ใ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๊ฐ ์๋์ผ๋ก ์์ฝยท๋ฒ์ญยท๋ถ์ํ ๊ฒ์ ๋๋ค. ์ ์ ์๊ถ์ ์์ ์์์๊ฒ ์์ผ๋ฉฐ, ์ ํํ ๋ด์ฉ์ ๋ฐ๋์ ์๋ฌธ์ ํ์ธํด ์ฃผ์ธ์.
์๋ฌธ ๋ฐ๋ก๊ฐ๊ธฐ