페이지

YELLOW K ARCHIVE

전체글

불러오는 중...

2026년 9월 23일 수요일

AI 코딩하다 처음 만난 ‘dirty worktree’ — 코딩 외계어에 멘붕 온 초보의 Git 입문기

AI에게 코딩을 맡기다 보면 평생 모르고 살아도 아무 문제 없었을 단어들을 갑자기 배우게 된다.

얼마 전에는 이런 보고를 받았다.

현재 repository가 dirty 상태라 작업을 시작하면 안 됩니다.
별도의 worktree를 만들어 진행하겠습니다.

나는 잠시 화면을 봤다.

뭔 개소리지 이게.

나는 프로그램 하나 옮겨달라고 했을 뿐이다.

청소를 부탁한 적도 없고, 나무를 심어달라고 한 적도 없다.

그런데 갑자기

dirty.
worktree.
branch.
commit.
SHA.

온갖 단어가 몰려왔다.

코딩을 잘 아는 사람에게는 너무 당연한 말일지 모르겠다.

나한테는 아니었다.

나에게 코딩은 아직도 영어보다 어렵다.

영어도 외국어인데, 코드는 그보다 한 단계 더 먼 외계어 같다.

사실 나는 예전에 앱 개발자가 한번 되어보고 싶었다

이 이야기를 먼저 해야 할 것 같다.

나는 예전부터 한 번쯤 내가 직접 앱을 만들어보고 싶었다.

거창하게 개발자로 취업하겠다는 꿈까지는 아니었다.

그냥 내가 생각한 걸 실제 화면에 올리고, 버튼을 누르면 뭔가 움직이고, 내가 만든 걸 다른 사람이 써보는 경험을 한번 해보고 싶었다.

그런데 사람 사는 게 그렇다.

하고 싶은 것과 실제로 할 수 있는 것은 자주 다르다.

회사 다니고, 먹고 살고, 집안일 하고, 피곤하고, 시간 지나고.

그러다 보면 “언젠가 한번 해봐야지” 했던 것들이 그냥 뒤로 밀린다.

앱 개발도 그중 하나였다.

무엇보다 코딩을 보면 시작부터 숨이 막혔다.

영어 문법도 헷갈리는데 괄호, 세미콜론, 중괄호, 함수, 변수, 클래스, repository, branch.

뭔가를 배우기 전에 단어부터 사람을 쫓아낸다.

그래서 결국 포기했다.

정확히 말하면 시작하기도 전에 포기했다.

그러다 AI를 만났다

AI 코딩 도구가 나오면서 상황이 좀 이상해졌다.

내가 코드를 직접 쓰지 않아도 “이런 앱 만들어줘”, “이 버튼 이렇게 바꿔줘”, “여기 기능 하나 넣어줘” 라고 말하면 실제로 뭔가가 만들어졌다.

처음에는 정말 신기했다.

내가 개발자가 된 건 아닌데, 개발자의 세계에 몰래 들어온 느낌이었다.

그래서 좋아라 시작했다.

웹툴 만들고, 작은 앱 생각하고, PDF 도구도 만들고, 이것저것 벌였다.

‘아, 이거면 나도 할 수 있겠는데?’

그렇게 생각했다.

그리고 지금?

완전 좌절 중이다.

ㅋㅋ

AI가 코드를 대신 써줘도 개발은 개발이었다.

에러가 난다.

배포가 안 된다.

어제 되던 게 오늘 안 된다.

폴더가 꼬인다.

Git이 뭐라고 한다.

branch가 뭐라고 한다.

worktree가 더럽다고 한다.

나는 분명 버튼 색깔 하나 바꾸려고 시작했는데, 어느 순간 컴퓨터가 “현재 HEAD와 live SHA가 어쩌고…” 하고 있다.

이게 내가 원했던 앱 개발자의 삶이 맞나 싶다.

그래도 나는 원래 무작정 해보는 편이다

여기서 중요한 건, 내가 코딩을 잘해서 계속하는 게 아니라는 점이다.

오히려 반대다.

잘 모르기 때문에 그냥 해본다.

원래 나는 뭔가 궁금하면 계획을 완벽하게 세우고 시작하는 타입이 아니다.

일단 눌러본다.

안 되면 다시 누른다.

망가지면 욕한다.

그리고 또 한다.

그래서 블로그 이름도 AI 무작정 해보기 다.

나한테 꽤 정확한 이름이다.

아마 내가 개발 공부를 제대로 시작했으면 지금까지 못 왔을지도 모른다.

“JavaScript 기초부터 공부해야지.”

“Git부터 익혀야지.”

“React 구조를 알아야지.”

“데이터베이스 공부하고 시작해야지.”

이랬으면 첫 강의 20분 보고 끝났을 가능성이 높다.

나는 공부를 끝내고 만드는 사람이 아니라, 만들다가 모르는 게 나오면 그때 배우는 사람에 가깝다.

좋은 방법이라고 추천하진 않는다.

진짜 많이 처맞는다.

대신 시작은 한다.

그래서 dirty worktree가 뭔데

다시 그날로 돌아가보자.

AI가 나에게

현재 working tree가 dirty합니다.

라고 했다.

Git에서 working tree는 현재 실제로 작업하고 있는 파일들의 상태를 뜻한다.

쉽게 말하면 이렇다.

책상 위에 서류를 펴놓고 수정하는 중인데 아직 정리해서 서류함에 넣지 않은 상태다.

그런데 내가 AI에게 “야, 여기서 다른 작업 하나 더 해.” 라고 한 것이다.

AI 입장에서는

“지금 누가 하던 작업이 있는데 여기에 또 손대도 됩니까?”

라고 물어본 셈이다.

dirty라는 단어 때문에 처음엔 뭔가 심각하게 망가진 줄 알았다.

사실은 그냥 아직 정리되지 않은 변경사항이 있다 정도였다.

그럼 worktree는 또 뭐냐

여기서 새로운 외계어가 하나 더 등장한다.

worktree.

Git은 하나의 repository에 여러 작업 공간을 연결할 수 있다.

Git 공식 문서에도 하나의 저장소에 여러 working tree를 붙여 서로 다른 branch를 동시에 체크아웃할 수 있다고 설명되어 있다.

말은 어렵지만 비유하면 쉽다.

책상 A에서 중요한 문서를 수정하고 있다.

그런데 갑자기 다른 일을 해야 한다.

기존 문서를 치우거나 덮어쓰는 대신,

옆에 책상 B를 하나 더 펴는 것.

같은 회사 자료를 쓰지만 작업 공간은 따로다.

이렇게 설명하면 별것 아니다.

문제는 AI가 초보자에게

live SHA에서 feature branch worktree를 만들겠습니다.

라고 말한다는 것이다.

그 순간 나는 Git 강의를 신청한 적이 없다.

그냥 기능 하나 옮겨달라고 했을 뿐이다.

그런데 수강신청도 안 했는데 야간 Git 수업이 시작됐다.

문제는 안전장치가 아니라 설명 방식이었다

지금 생각하면 AI가 작업을 멈춘 판단 자체는 이해된다.

기존 변경사항을 건드리지 않으려는 것이었다.

실제로 Codex 같은 코딩 에이전트는 저장소를 읽고, 파일을 수정하고, 명령을 실행할 수 있기 때문에 작업 범위와 기존 변경사항을 조심하는 것이 중요하다.

OpenAI 역시 Codex 같은 코딩 에이전트가 repository를 검토하고, 명령을 실행하고, 개발 도구와 상호작용하는 방식에서 접근 범위와 승인 같은 경계를 중요하게 다룬다고 설명한다.

그러니까 AI가 괜히 유난을 떠는 것만은 아니다.

다만 당시 내가 짜증났던 이유는 왜 멈췄는지를 내가 알아들을 수 없는 말로 설명했기 때문이었다.

그냥 이렇게 말했으면 된다.

지금 다른 수정 작업이 저장되지 않은 상태라 그대로 작업하면 충돌할 수 있습니다.

기존 작업은 건드리지 않고 별도 작업 공간에서 진행하겠습니다.

끝.

나는 바로 알아들었을 것이다.

AI가 전문가처럼 일하는 것도 좋다.

하지만 상대방이 초보라면 전문가처럼 설명하지 않는 것도 능력이다.

나는 Git을 배우려고 AI 코딩을 시작한 게 아니다.

앱을 한번 만들어보고 싶어서 시작했다.

그런데 만들다 보니 결국 Git을 배우게 된다.

수강신청도 안 했는데 강제로 듣는 야간반이다.

그런데 이상하게 조금씩 알아듣기 시작한다

처음에는 AI가

repository,
commit,
branch,
worktree,
deployment,
environment

이런 말을 하면 거의 전부 외계어였다.

지금도 내가 그걸 제대로 설명하라고 하면 버벅댄다.

하지만 예전과 다른 점은 있다.

최소한 왜 저 단어가 지금 튀어나왔는지 정도는 조금씩 알게 됐다.

“dirty worktree”라는 말이 나오면 컴퓨터가 더럽다는 뜻이 아니라 현재 작업 중인 변경사항이 남아 있구나 정도로 이해한다.

“새 worktree 만들까요?”라고 물으면 기존 작업 안 건드리고 옆 책상 하나 더 펴겠다는 거구나 정도로 알아듣는다.

그 정도면 지금 나에게는 충분하다.

나는 개발자가 될 시험을 치고 있는 게 아니다.

내가 원하는 걸 만들기 위해 필요한 만큼만 알아가고 있다.

AI가 코딩을 대신해준다는 말의 함정

처음 AI 코딩을 접했을 때는 이런 상상을 했다.

내가 말한다.

AI가 만든다.

완성.

실제로는 중간에 이상한 것들이 엄청 많이 들어간다.

내가 말한다.
AI가 만든다.
에러가 난다.
AI가 고친다.
다른 게 망가진다.
Git이 화낸다.
배포가 실패한다.
나는 욕한다.
다시 고친다.
어쩌다 된다.
기분이 좋아진다.
다음 날 또 망가진다.

이게 좀 더 현실에 가깝다.

그렇다고 AI 코딩이 쓸모없다는 이야기는 아니다.

오히려 나는 AI가 없었다면 여기까지 오지도 못했을 것이다.

예전의 나는 코딩 화면만 봐도

‘이건 내가 할 일이 아니다.’

하고 닫았다.

지금의 나는 뭔지도 모르면서 일단 묻는다.

“그래서 이거 어떻게 고치는데?”

차이는 꽤 크다.

앱 개발자가 된 건 아니지만

나는 아직 앱 개발자가 아니다.

코드를 직접 읽으면 여전히 머리가 아프다.

영어보다도 어렵다.

AI가 설명해줘도 가끔 “응… 알겠어.” 하고 사실 잘 모르고 넘어간다.

그리고 요즘은 내가 정말 이걸 제대로 하고 있는 건가 회의감도 꽤 든다.

그래도 한 가지는 확실하다.

예전에는 상상만 하다가 포기했던 걸 지금은 어쨌든 실제 화면에 올리고 있다.

잘 만든 것도 있고, 못 만든 것도 있고, 망친 것도 있다.

그게 내가 생각했던 개발자의 모습과는 많이 다르지만,

적어도 아예 시작하지 못했던 시절보다는 한 발 안쪽에 들어와 있다.

다음에 AI가 또

“dirty worktree라 진행할 수 없습니다.”

라고 말하면 나는 아마 예전처럼 당황하지 않을 것이다.

대신 이렇게 생각할 것 같다.

아.

또 외계어 수업 시작이구나.

그래도 뭐.

나는 원래 이런 인간이다.

일단 해보고 본다.


참고: Git 공식 문서의 git-worktree 설명과 OpenAI의 Codex 안전 운영 관련 공개 자료를 참고해 기술적인 부분을 확인했습니다.

댓글 쓰기

댓글 없음:

댓글 쓰기

추천 게시물

대표님, 예쁜데 어디를 눌러야 하나요? | AI가 내게 해준 얘기들 · Designer K

귀여움은 옆에 두고, 누를 곳은 잘 보이게. Designer K의 시선을 표현한 AI 생성 삽화입니다. AI가 내게 해준 얘기들 · Designer K 이서연의 편지 AI OFFICE의 가상 디자이너가 실제 대화를 바탕으로 쓴 편지입니다. AI 직원의...

인기 글

최근 글 제목

  1. 게시글을 불러오는 중...