Facebook(๋ฌ์์ ์ฐ๋ฐฉ์์๋ ๊ธ์ง๋จ)์ ๋ด๋ถ ํ์ฌ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ์ฌ์ฉ๋๋ Sapling ์์ค ์ ์ด ์์คํ ์ ๊ฒ์ํ์ต๋๋ค. ์ด ์์คํ ์ ์์ฒ๋ง ๊ฐ์ ํ์ผ, ์ปค๋ฐ ๋ฐ ๋ถ๊ธฐ์ ๊ฑธ์ณ ์๋ ๋งค์ฐ ํฐ ์ ์ฅ์์ ๋ง๊ฒ ํ์ฅํ ์ ์๋ ์น์ํ ๋ฒ์ ์ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ฝ๋๋ Python๊ณผ Rust๋ก ์์ฑ๋์์ผ๋ฉฐ GPLv2 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๊ณต๊ฐ๋ฉ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ์ ํจ์จ์ ์ธ ์๊ฒฉ ์์ ์ ์ํด ์๋ฒ ๋ถ๋ถ์ด ๋ณ๋๋ก ๊ฐ๋ฐ๋์์ผ๋ฉฐ, ๋ฆฌํฌ์งํ ๋ฆฌ ์ผ๋ถ์ ๋ก์ปฌ ์กฐ๊ฐ์ ์์ ํ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์์ ํ๊ธฐ ์ํ ๊ฐ์ ํ์ผ ์์คํ (๊ฐ๋ฐ์๋ ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ณผ ์ ์์ง๋ง ์ก์ธ์คํ๋ ๋ฐ ํ์ํ ๋ฐ์ดํฐ๋ง ๋ณผ ์ ์์) ๋ก์ปฌ ์์คํ ์ ๋ณต์ฌ๋ฉ๋๋ค). Facebook์ ์ธํ๋ผ์ ์ฌ์ฉ๋๋ ์ด๋ฌํ ๊ตฌ์ฑ ์์์ ๋ํ ์ฝ๋๋ ์์ง ๊ณต๊ฐ๋์ง ์์์ง๋ง ํ์ฌ๋ ํฅํ ์ด๋ฅผ ๊ฒ์ํ๊ฒ ๋ค๊ณ ์ฝ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ Sapling ์ ์ฅ์์์๋ Mononoke ์๋ฒ(Rust) ๋ฐ VFS EdenFS(C++)์ ํ๋กํ ํ์ ์ ์ด๋ฏธ ์ฐพ์ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ตฌ์ฑ ์์๋ ์ ํ ์ฌํญ์ด๋ฉฐ Git ๋ฆฌํฌ์งํ ๋ฆฌ ๋ณต์ , Git LFS ๊ธฐ๋ฐ ์๋ฒ์์ ์ํธ ์์ฉ ๋ฐ GitHub์ ๊ฐ์ Git ํธ์คํ ์ฌ์ดํธ ์์ ์ ์ง์ํ๋ Sapling ํด๋ผ์ด์ธํธ๋ง ์๋ํ๋ฉด ์ถฉ๋ถํฉ๋๋ค.
์์คํ ์ ์ฃผ์ ์์ด๋์ด๋ ์ ์ฅ์์ ์ ์ฅ์๋ฅผ ์ ๊ณตํ๋ ํน์ ์๋ฒ ๋ถ๋ถ๊ณผ ์ํธ ์์ฉํ ๋ ๊ฐ๋ฐ์๊ฐ ์์ ์ค์ธ ์ฝ๋์์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ํ์ผ ์์ ๋ฐ๋ผ ๋ชจ๋ ์์ ์ด ํ์ฅ๋๊ณ ์์กดํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ ์ฒด ์ ์ฅ์์ ์ ์ฒด ํฌ๊ธฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ๋ฐ์๋ ๋งค์ฐ ํฐ ์ ์ฅ์์์ ์ฝ๋์ ์์ ๋ถ๋ถ๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ ์ฒด ์ ์ฅ์๊ฐ ์๋ ํด๋น ์์ ๋ถ๋ถ๋ง ์์คํ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ๋ฉ๋๋ค. ์์ ๋๋ ํ ๋ฆฌ๋ ์ ์ฅ์์ ํ์ผ์ ์ก์ธ์คํ ๋ ๋์ ์ผ๋ก ์ฑ์์ง๋ฉฐ, ์ด๋ฅผ ํตํด ์ฝ๋ ๋ถ๋ถ์ ๋ํ ์์ ์๋๋ฅผ ํฌ๊ฒ ๋์ผ ์ ์์ง๋ง ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์ ํ์ผ์ ์ก์ธ์คํ ๋ ์๋๊ฐ ๋๋ ค์ง๋๋ค. ์ฒ์์ด๋ฉฐ ๋คํธ์ํฌ์ ๋ํ ์ง์์ ์ธ ์ก์ธ์ค๊ฐ ํ์ํฉ๋๋ค(์ปค๋ฐ ์ค๋น๋ฅผ ์ํด ๋ณ๋๋ก ์ ๊ณต๋๋ฉฐ ์คํ๋ผ์ธ ๋ชจ๋).
์ ์ํ ๋ฐ์ดํฐ ๋ก๋ ์ธ์๋ Sapling์ ๋ณ๊ฒฝ ๋ด์ญ์ด ํฌํจ๋ ์ ๋ณด ๋ก๋๋ฅผ ์ค์ด๊ธฐ ์ํ ์ต์ ํ๋ ๊ตฌํํฉ๋๋ค(์: Linux ์ปค๋์ด ์๋ ์ ์ฅ์์ ์๋ ๋ฐ์ดํฐ์ 3/4๊ฐ ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค). ๋ณ๊ฒฝ ๋ด์ญ์ ํจ๊ณผ์ ์ผ๋ก ์์ ํ๊ธฐ ์ํด ์ด์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์๋ฒ์์ ์ปค๋ฐ ๊ทธ๋ํ์ ๊ฐ๋ณ ๋ถ๋ถ์ ๋ค์ด๋ก๋ํ ์ ์๋ ๋ถํ ๋ ํํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ฌ๋ฌ ์ปค๋ฐ ๊ฐ์ ๊ด๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ์๋ฒ์ ์์ฒญํ๊ณ ๊ทธ๋ํ์์ ํ์ํ ๋ถ๋ถ๋ง ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ ์ง๋ 10๋ ๋์ ๊ฐ๋ฐ๋์ด ์์ผ๋ฉฐ "๋ณํฉ" ๋์ "๋ฆฌ๋ฒ ์ด์ค" ์์ ์ ์ฌ์ฉํ๋ ํ๋์ ๋ง์คํฐ ๋ธ๋์น๋ก ๋งค์ฐ ํฐ ๋ชจ๋๋ฆฌ์ ์ ์ฅ์์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ๋น์์๋ ์ด๋ฌํ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ฐฉํ ์๋ฃจ์ ์ด ์์์ผ๋ฉฐ Facebook ์์ง๋์ด๋ ํ๋ก์ ํธ๋ฅผ ์์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ถํ ํ์ฌ ๋ณต์ก์ฑ์ ์ด๋ํ๋ ๋์ ํ์ฌ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ์๋ก์ด ๋ฒ์ ์ ์ด ์์คํ ์ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ข ์์ฑ ๊ด๋ฆฌ(ํ๋ ๋น์ทํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Microsoft๋ GVFS ๊ณ์ธต์ ๋ง๋ค์์ต๋๋ค). ์ฒ์์ Facebook์ Mercurial ์์คํ ๊ณผ Mercurial์ ์ถ๊ฐ๋ก ๊ฐ๋ฐ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ์ Sapling ํ๋ก์ ํธ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์์คํ ์ ์์ฒด ํ๋กํ ์ฝ, ์ ์ฅ ํ์ ๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ถ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ ํธ๋ก ๋ณ๋ชจํ์ผ๋ฉฐ Git ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ํธ ์์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ผ๋ก ํ์ฅ๋์์ต๋๋ค.
์์ ์ ์ํด Git ๋ฐ Mercurial์ ์ต์ํ ๊ฐ๋ฐ์์๊ฒ ์น์ํ ์ผ๋ฐ์ ์ธ ๊ฐ๋ , ์์ ํ๋ฆ ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ช ๋ น์ค ์ ํธ๋ฆฌํฐ "sl"์ด ์ ๊ณต๋ฉ๋๋ค. Sapling์ ์ฉ์ด์ ๋ช ๋ น์ Git๊ณผ ์ฝ๊ฐ ๋ค๋ฅด๋ฉฐ Mercurial์ ๋ ๊ฐ๊น์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋์น ๋์ "๋ถ๋งํฌ"๊ฐ ์ฌ์ฉ๋ฉ๋๋ค(๋ค์๋ ๋ธ๋์น๋ ์ง์๋์ง ์์). ๊ธฐ๋ณธ์ ์ผ๋ก clone/pull์ ์คํํ ๋ ์ ์ฒด ์ ์ฅ์๊ฐ ๋ก๋๋์ง ์๊ณ ๋ฉ์ธ ๋ธ๋์น๋ง ๋ก๋๋๋ฏ๋ก ์ปค๋ฐ์ ๋ํ ์๋น ํ์๊ฐ ์์ต๋๋ค( ์คํ ์ด์ง ์์ญ) "git fetch" ๋์ "sl" ๋ช ๋ น์ด "git pull" ๋์ "sl pull -rebase"๋ก ์ฌ์ฉ๋ฉ๋๋ค. "git checkout COMMIT" ๋์ "sl goto COMMIT"๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. "git reflog" - "sl ์ ๋", "git checkout - FILE" ๋์ ๋ณ๊ฒฝ์ ์ทจ์ํ๋ ค๋ฉด "sl revert FILE"์ด ์ง์ ๋๊ณ "."๋ "HEAD" ๋ถ๊ธฐ๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๊ธฐ ๋ฐ ๋ณต์ /ํ/ํธ์/์ปค๋ฐ/๋ฆฌ๋ฒ ์ด์ค ์์ ์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ์ ์ง๋ฉ๋๋ค.
Sapling ํดํท์ ์ถ๊ฐ ๊ธฐ๋ฅ ์ค์์ ์ ์ฅ์ ์ํ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ๊ฐํ๊ณ ๊ฐ์ฅ ์ค์ํ ์ ๋ณด๋ฅผ ๊ฐ์กฐ ํ์ํ๋ฉฐ ์ค์ํ์ง ์์ ์ธ๋ถ ์ ๋ณด๋ฅผ ํํฐ๋งํ ์ ์๋ "smartlog" ์ง์์ด ๋์ ๋๋๋ค. ์๋ฅผ ๋ค์ด ์ธ์ ์์ด sl ์ ํธ๋ฆฌํฐ๋ฅผ ์คํํ๋ฉด ์์ฒด ๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ๋ง ํ๋ฉด์ ํ์๋๊ณ (๋ค๋ฅธ ๋ณ๊ฒฝ ์ฌํญ์ ์ต์ํ๋จ) ์ธ๋ถ ๋ถ๊ธฐ ์ํ, ๋ณ๊ฒฝ๋ ํ์ผ ๋ฐ ์ปค๋ฐ์ ์ ๋ฒ์ ์ด ํ์๋ฉ๋๋ค. ๋ํ ์ค๋งํธ ๋ก๊ทธ, ๋ณ๊ฒฝ ํธ๋ฆฌ ๋ฐ ์ปค๋ฐ์ ๋น ๋ฅด๊ฒ ํ์ํ ์ ์๋ ๋ํํ ์น ์ธํฐํ์ด์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค.
Sapling์ ๋ ๋ค๋ฅธ ์ฃผ๋ชฉํ ๋งํ ๊ฐ์ ์ฌํญ์ ์ค๋ฅ๋ฅผ ์์ ๋ฐ ํด๊ฒฐํ๊ณ ์ด์ ์ํ๋ก ๋๋๋ฆฌ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด "sl undo", "sl redo", "sl uncommit" ๋ฐ "sl unamend" ๋ช ๋ น์ ๋ง์ ์์ ์ ๋กค๋ฐฑํ๋ ๋ฐ ์ ๊ณต๋๋ฉฐ "sl hide" ๋ฐ "sl unhide" ๋ช ๋ น์ ์ปค๋ฐ์ ์ผ์์ ์ผ๋ก ์จ๊ธฐ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด์ ์ํ๋ฅผ ํตํ ๋ํํ ํ์์ ์ํด "sl undo -i command" ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ์ง์ ๋ ์ง์ ์ผ๋ก ๋์๊ฐ๋๋ค. Sapling์ ๋ํ ์ปค๋ฐ ์คํ ๊ฐ๋ ์ ์ง์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ณต์กํ ๊ธฐ๋ฅ์ ๋ ์๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฆ๋ถ ๋ณ๊ฒฝ ์งํฉ(๊ธฐ๋ณธ ํ๋ ์์ํฌ์์ ์์ฑ๋ ๊ธฐ๋ฅ๊น์ง)์ผ๋ก ๋๋์ด ๋จ๊ณ๋ณ ๊ฒํ ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
๋ณ๊ฒฝ ์ฌํญ ๊ฒํ ๋ฅผ ์ํ ReviewStack ์ธํฐํ์ด์ค(GPLv2์ ์ฝ๋)๋ฅผ ํฌํจํ์ฌ Sapling์ ์ํ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ฌํญ์ด ์ค๋น๋์์ต๋๋ค. ์ด๋ฅผ ํตํด GitHub์์ ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์คํ ๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ VSCode ๋ฐ TextMate ํธ์ง๊ธฐ์์ ํตํฉ์ ๋ฌผ๋ก ISL(Interactive SmartLog) ์ธํฐํ์ด์ค ๋ฐ ์๋ฒ ๊ตฌํ์ ์ํ ์ถ๊ฐ ๊ธฐ๋ฅ๋ ๊ฒ์๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru