ํŽ˜์ด์Šค๋ถ, ์ƒˆ๋กœ์šด ์†Œ์Šค ์ œ์–ด ์‹œ์Šคํ…œ Sapling ๊ณต๊ฐœ

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 ๊ณต๊ฐœ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€