Skip to content
Jacob's second brain 탐색
어느 개발자의 인문학 · 5 / 7화

commit - 개발자들은 매일 정원을 가꾼다

5 min read

Pasted image 20260601185939

개발자의 프로필을 들여다본 적이 있다면, 작은 초록색 칸이 격자무늬로 빼곡히 박힌 화면을 본 적이 있을지 모릅니다. 깃허브1라는 공간에는 개발자가 매일 한 일이 작은 네모 칸으로 표시되는데, 일을 많이 한 날일수록 칸이 진한 초록으로 물듭니다. 1년 치가 모이면 마치 잔디가 자란 들판처럼 보여서, 개발자들은 이것을 ‘잔디밭’이라 부릅니다.

적지 않은 개발자들이 이 잔디밭을 빼곡히 채우는 일을 좋은 습관으로 여깁니다. ‘하루에 하나씩’을 다짐하며 매일 조금씩이라도 작업을 남기는 사람이 많습니다. 잔디밭이 초록으로 가득한 프로필을 보면, 우리는 별다른 설명 없이도 짐작하게 됩니다. 아, 이 사람은 매일 꾸준히 무언가를 쌓아온 사람이구나. 빼곡한 잔디밭은 성실의 풍경입니다.

그런데 이 초록 칸 하나하나가 대체 무엇이기에, 매일 채울 가치가 있다고들 여기는 걸까요. 그 칸 하나가 바로 ‘커밋(commit)‘입니다2. 작업의 가장 작은 단위이지요. 사소해 보이는 이 단위 안에, 뜻밖에도 무언가를 이루어 나가는 일의 비밀이 거의 다 들어 있습니다.

가장 작은, 완결된 한 조각

커밋은 작업의 가장 작은 단위이지만, 단순히 작기만 한 것이 아니라 그 자체로 하나의 완결된 이야기를 담습니다. 커밋 하나에는 세 가지가 반드시 새겨집니다. 무엇이 바뀌었는지, 누가 바꿨는지, 그리고 바꿨는지.

특히 ‘왜’가 중요합니다. 개발자는 커밋을 남길 때마다 “이번에 나는 이것을, 이런 이유로 바꿨다”는 한 줄을 적어야 합니다. 그냥 고치면 될 것을 매번 이유까지 적으라니, 처음엔 번거롭게 느껴집니다. 그러나 시간이 지나면 그 진가가 드러납니다. 1년 전 누군가 왜 이 부분을 굳이 이렇게 바꿔놓았는지 도무지 이해되지 않는 순간이 오는데, 무심코 되돌리려다 그 옆의 한 줄을 발견합니다. “이렇게 하지 않으면 특정 상황에서 오류가 났음.” 그 한 줄이 같은 실수를 반복하려던 손을 멈춰 세웁니다.

그래서 잘 쌓인 커밋의 기록은 단순한 변경의 나열이 아니라, ‘왜 이렇게 변해왔는가’에 대한 서사가 됩니다. 누구도 익명으로 숨지 못하고, 어떤 변화도 이유 없이 일어나지 않습니다. 모든 매듭에 이름과 까닭이 적혀 있습니다.

작은 것들이 쌓여 큰 것이 된다

이 작은 커밋들은 혼자서는 대단치 않아 보입니다. 한 줄을 고치고, 오타를 바로잡고, 함수 하나를 다듬는 정도이지요. 그러나 이 사소한 매듭들이 수십, 수백 개 쌓이면 어느새 하나의 큰 변화가 완성됩니다. 개발자들은 그렇게 모인 결과물에 “이것이 v2.0이다” 하고 이름을 붙여 세상에 내놓습니다. 우리가 쓰는 앱이 ‘v2.1로 업데이트되었습니다’ 하고 알려오는 그 순간이지요3.

그런데 그 거창한 v2.0은 누군가 한 번에 거대하게 만들어낸 것이 아닙니다. 그것은 오로지 작고 사소한 커밋들이 차곡차곡 쌓인 결과입니다. 잔디밭의 초록 들판이 사실은 하루치 작은 칸들의 누적인 것처럼, 큰 도약처럼 보이는 모든 것의 안쪽에는 눈에 띄지 않는 작은 걸음들의 축적이 들어 있습니다.

우리는 자주 이 순서를 거꾸로 생각합니다. 대단한 결과를 내려면 대단한 한 방이 필요하다고 믿지요. 그래서 거대한 결심을 하고, 한 번에 모든 것을 바꾸려다, 첫걸음의 무게에 짓눌려 시작도 못 하곤 합니다. 그러나 개발자가 v2.0에 이르는 방식은 정반대입니다. 오늘 한 줄, 내일 또 한 줄. 작고 확실한 매듭을 그저 자주 지을 뿐입니다.

작게 끊을수록, 되돌아가기 쉽다

작게 커밋하는 데에는 더 실용적인 이유도 있습니다. 되돌아가기 쉽다는 것입니다.

한 번의 커밋에 너무 많은 변경을 욱여넣으면, 나중에 그중 한 부분이 잘못됐을 때 곤란해집니다. 멀쩡한 것과 잘못된 것이 한 덩어리로 묶여 있어, 잘못된 부분만 떼어내기가 어렵습니다. 반면 변경을 작고 확실한 단위로 끊어 커밋해두면, 문제가 생겼을 때 바로 그 작은 매듭 하나만 깔끔하게 되돌리면 됩니다. 나머지는 그대로 둔 채로요.

그래서 노련한 개발자일수록 커밋을 잘게 나눕니다. 하나의 커밋은 하나의 분명한 일만 담도록. 그래야 각각의 매듭이 독립적으로 의미를 가지고, 언제든 그 지점으로 안전하게 돌아갈 수 있기 때문입니다. 작게 끊는다는 것은 곧, 돌아갈 좌표를 촘촘히 남겨둔다는 뜻입니다.

돌아갈 수 있기에 두렵지 않다

그리고 여기서 마지막 사슬이 이어집니다. 작게 끊어 되돌아가기 쉬워지면, 두려움 없이 시도할 수 있게 됩니다.

생각해보면 우리가 무언가를 시작하지 못하는 가장 큰 이유는 실패의 두려움입니다. 한 번 잘못되면 돌이킬 수 없을 것 같다는 공포. 그러나 작은 매듭마다 안전하게 돌아갈 지점이 마련되어 있다면, 그 공포의 크기는 확 줄어듭니다. 안 되면 이 매듭 하나만 되돌리면 그만이니까요. 잃을 것이 작으니, 걸어볼 용기가 납니다.

소프트웨어(Software)라는 말에서 알 수 있듯, 개발자가 만드는 작업물은 변화무쌍하게 바뀌는 것처럼 보입니다. 그럴 때마다 개발자가 겁 없이 코드를 뜯어고치고 과감하게 실험하는 것은, 딱히 용감해서가 아닙니다. 작게 끊어 되돌아갈 길을 촘촘히 확보해두었기 때문입니다. 용기는 타고난 기질이라기보다, 작은 단위로 일을 쪼개 안전망을 깔아둔 사람에게 자연스럽게 따라오는 결과에 가깝습니다.

삶도 다르지 않습니다. 거대한 도전을 한 번에 감행하려 하면, 실패의 무게가 너무 커서 시작조차 못 합니다. 그러나 그것을 작고 확실한 걸음으로 쪼개고, 걸음마다 돌아갈 자리를 만들어두면, 우리는 비로소 두려움 없이 첫발을 뗄 수 있습니다. 큰 용기를 끌어모으려 애쓰기 전에, 먼저 일을 충분히 작게 쪼개는 것. 어쩌면 그것이 용기의 진짜 비결인지도 모릅니다.

칸을 채우는 일과 무언가를 쌓는 일

다만 한 가지는 짚어두고 싶습니다. 잔디밭을 채우는 일이 좋은 습관으로 통하다 보니, 더러 본말이 뒤집히기도 합니다. 초록 칸을 채우는 것 자체가 목적이 되어, 의미 없는 수정을 억지로 만들어 커밋하는 경우입니다. 잔디밭은 빼곡해지지만, 그 안에 정작 쌓인 것은 없습니다.

이것은 사실 우리가 기록하고 습관 들이는 모든 일에 해당하는 이야기입니다. 매일의 흔적은 분명 성실의 증거가 될 수 있지만, 흔적을 남기는 일 자체가 목적이 되어버리면 그 성실은 공허해집니다. 중요한 것은 칸이 초록으로 물드는가가 아니라, 그 하루에 정말로 무언가가 한 매듭만큼 자랐는가입니다. 잔디밭은 결과로서 채워지는 것이지, 채우기 위해 사는 것이 아닙니다.

한 번에, 한 매듭씩

우리는 흔히 인생을 한 번에 완성해야 할 거대한 작품으로 여깁니다. 그래서 완벽한 한 방을 준비하느라 정작 아무것도 시작하지 못합니다. 그러나 개발자가 거대한 소프트웨어를 만드는 방식은 그렇지 않았습니다. 그저 오늘 하나의 작은 매듭을 짓고, 왜 그랬는지 한 줄을 남기고, 내일 또 하나를 짓는 것. 한 번에 한 매듭씩. 그렇게 매일의 작은 칸들이 모여, 돌아보면 어느새 무성한 들판이 되어 있습니다.

그러니 무언가를 시작하기가 너무 거대하게 느껴진다면, 아마 그것을 충분히 작게 쪼개지 않았기 때문일 것입니다. 완성하려 하지 않아도 됩니다. 오늘의 작은 매듭 하나면, 그것으로 충분합니다.

Footnotes

  1. 깃허브(GitHub)는 개발자들이 자신의 작업물과 그 변경 기록을 인터넷 위에 올려두고 함께 보는 공간입니다. 전 세계 개발자들이 모이는 거대한 공동 서고인 셈입니다.

  2. 영어 commit에는 ‘맡기다’, ‘약속하다’라는 뜻이 있습니다. 그 순간까지의 작업을 책임지고 기록에 맡긴다는 어감이 담겨 있는 셈입니다.

  3. 이렇게 쌓인 커밋들 중 특정 시점에 이름표를 붙여 표시해두는 것을 ‘태그(tag)’, 그렇게 표시한 버전을 “이제부터 정식으로 씁니다” 하고 세상에 내놓는 일을 ‘릴리즈(release)‘라 부릅니다.

See Also

Graph View

댓글 (1)

  • 웃음 포인트가 고장난 여우 2026. 06. 03. 15:53

    작은 매듭이 용기를 만든다! 개발자 아니어도 저런 정원 가꿀 수 있나요