
저는 코딩을 모르는 직장인이고, 주식 자동매매 프로그램을 클로드 코드로 만들어 실제 계좌에서 돌리고 있습니다. 9월 8일과 9일, 이 프로그램 폴더 두 곳에 git을 붙였습니다.
그런데 붙이면서 제일 먼저 한 일이 git의 대표 기능인 「되돌리기」 명령을 금지하는 것이었습니다. 이상하게 들리실 텐데, 이유가 있습니다. 먼저 git이 무엇인지부터 정리하고 그 이야기를 하겠습니다.
① git이 무엇인가
git은 파일이 바뀐 이력을 차곡차곡 저장해 두는 프로그램입니다. 문서를 고칠 때마다 「보고서_최종」, 「보고서_최종_진짜」, 「보고서_최종_0908」처럼 사본을 만들어 본 적이 있으실 겁니다. git은 그 일을 대신해 줍니다. 사본을 만들지 않고도 언제, 무엇을, 어떻게 바꿨는지를 한곳에 쌓아 두고, 필요하면 그때 상태를 꺼내 볼 수 있습니다.
이 글에서 쓰는 낱말은 몇 개뿐입니다.
| 낱말 | 뜻 | 비유 |
|---|---|---|
| 저장소 (repository) | 이력이 쌓이는 곳. 폴더 안에 숨은 .git 폴더로 생깁니다 |
문서철 |
| 작업 폴더 (작업트리) | 지금 내가 파일을 고치고 있는 평소의 폴더 | 책상 위에 펼친 문서 |
| add | 이번에 기록할 파일을 고르는 것 | 문서철에 넣을 종이 고르기 |
| 커밋 (commit) | 고른 파일을 그 순간 모습 그대로 이력에 저장하는 것. 설명 한 줄을 붙입니다 | 날짜와 메모를 적어 철하기 |
| 되돌리기 | 이력에 저장된 옛 모습으로 작업 폴더의 파일을 바꿔 놓는 것 | 책상 위 문서를 옛 사본으로 바꿔치기 |
| 원격 저장소 (remote) | 이력을 인터넷의 다른 곳에 올려 두는 것 | 문서철을 바깥 창고에 맡기기 |
git과 GitHub는 다릅니다. 자주 헷갈리는 부분이라 짚고 넘어가겠습니다.
| git | GitHub (깃허브) | |
|---|---|---|
| 무엇인가 | 내 컴퓨터에 까는 프로그램 | git 저장소를 올려 두는 인터넷 서비스 |
| 인터넷이 필요한가 | 필요 없습니다 | 필요합니다 |
| 없어도 되나 | 이 글의 주인공입니다 | 없어도 git은 잘 돕니다 |
저는 GitHub를 쓰지 않습니다. 자동매매 프로그램에는 매매 규칙이 들어 있어서, 저장소를 인터넷에 올리는 원격 저장소 기능 자체를 금지했습니다(뒤의 ④). git은 제 컴퓨터 안에서만 돕니다.
② 왜 붙였나 — 백업 파일 95개
git을 붙이기 전에는 고치기 전마다 백업 파일을 만들었습니다. 백테스트 폴더에만 백업 파일이 95개, 23.8MB 쌓여 있었습니다. 그리고 「이 파일이 언제 바뀌었나」를 알려고 파일마다 지문(md5 값)을 문서에 적어 두고 손으로 대조했습니다.
결정적인 계기는 9월 7일 사고였습니다. 파일 한 곳을 자동으로 고치는 과정에서 줄바꿈 문자 하나가 잘못 들어가, 매매 엔진 파일에 다른 형식의 줄바꿈 21줄이 섞였습니다. 눈으로는 보이지 않는 차이라 백업에서 파일을 통째로 복원해야 했습니다. 이런 일을 「어느 커밋에서 무엇이 바뀌었나」로 바로 읽고 싶었습니다.
| 백테스트 폴더 | 실거래 폴더 | |
|---|---|---|
| git 시작 | 2026년 9월 8일 | 2026년 9월 9일 |
| 지금까지 커밋 (9월 14일) | 42개 | 19개 |
| 기록 중인 파일 | 4,250개 | 365개 |
.git 크기 |
24MB | 8.4MB |
③ 되돌리기 명령을 금지했습니다
git 입문 글을 보면 「실수하면 되돌리면 된다」가 가장 큰 장점으로 나옵니다. 그런데 제 환경에는 그게 위험했습니다. 클로드 코드 세션 여러 개가 같은 폴더를 동시에 쓰기 때문입니다. 한 세션은 백테스트를 고치고, 다른 세션은 문서를 정리하고, 또 다른 세션은 결과를 검증합니다.
git은 누가 어떤 파일을 고치고 있는지 모릅니다. 잠금도 걸어 주지 않습니다. 그래서 한 세션이 되돌리기 명령을 치면 다른 세션이 한창 고치던 파일이 경고 없이 옛 모습으로 바뀝니다. 고치던 세션은 그 사실을 모른 채 계속 작업합니다.
| 명령 | 왜 | |
|---|---|---|
| 금지 | checkout -- 파일 · restore · stash · reset --hard · clean |
작업 폴더의 파일을 바꾸거나 지웁니다 — 다른 세션의 작업이 사라집니다 |
| 금지 | revert · rebase · merge |
여러 파일을 한꺼번에 바꿉니다 |
| 금지 | remote · push |
이력을 인터넷으로 내보냅니다 |
| 허용 | status · log · diff · show · blame |
읽기만 합니다 |
| 허용 | add · commit |
이력에 쌓기만 하고 작업 폴더는 건드리지 않습니다 |
그럼 정말 옛 파일이 필요할 때는 어떻게 하느냐. 되돌리지 않고 꺼내서 옆에 둡니다.
git show 커밋번호:파일이름 > 옛버전_따로.py
이러면 작업 폴더의 파일은 그대로 두고, 옛 모습을 새 이름으로 꺼내 비교만 할 수 있습니다. 실제로 덮어써야 한다면 그때는 제가 직접 확인하고 승인합니다. 그리고 git을 붙인 뒤에도 파일 지문 검사는 그대로 유지합니다. git이 생겼다고 기존 안전장치를 걷어내지 않았습니다.

윈도우용 git은 줄바꿈 문자를 자동으로 바꾸는 설정이 켜져 있는 경우가 많습니다. 편하라고 있는 기능이지만, 켜진 채로 첫 기록을 하면 아무것도 안 고친 파일들이 통째로 바뀐 것처럼 됩니다. ②의 줄바꿈 사고가 저장할 때마다 조용히 나는 셈이라, 저는 첫 기록 전에 아래 두 가지를 해 뒀습니다.
git config --local core.autocrlf false — 이 폴더에서 자동 변환 끄기.gitattributes 파일에 * -text 한 줄 — 줄바꿈을 있는 그대로 두라는 규칙④ 자동매매라서 따로 막은 것
| 막은 것 | 왜 | 어떻게 |
|---|---|---|
| API 키가 커밋되는 것 | 한 번 커밋되면 파일을 지워도 이력에서 꺼낼 수 있어 되돌릴 수 없습니다 | 커밋 직전에 도는 검사(pre-commit 훅)가 키 값이 섞이면 커밋을 거부합니다 |
| 장중에 커밋하는 것 | 앱이 상태 파일·로그를 계속 쓰는 중이라 반쯤 쓰인 파일이 이력에 굳습니다 | 커밋은 장 마감 뒤, 앱이 꺼진 것을 프로세스로 확인한 다음에만 |
| 대용량 캐시 | 백테스트용 캐시가 약 380MB입니다. 한 번 들어가면 저장소가 영영 부풉니다 | .gitignore로 제외 — 다시 만들 수 있는 것만 뺍니다 |
| 원격 저장소 | 매매 규칙과 검증 결과가 컴퓨터 밖으로 나갑니다 | remote·push 금지 — GitHub를 쓰지 않습니다 |
키 검사 쪽에서 한 번 헛디뎠습니다. 처음에는 키 이름을 목록으로 적어 검사했는데, 다섯 개 중 하나를 빠뜨렸습니다. 지금은 설정 파일에서 10자가 넘는 문자열 값을 전부 꺼내 대조합니다. 이러면 나중에 새 키가 생겨도 목록을 고칠 필요가 없습니다.
다만 훅도 완벽하지 않습니다. git commit --no-verify를 쓰면 검사를 건너뛸 수 있습니다(직접 확인했습니다). 훅은 「깜빡하는 것」을 막는 그물이지 뚫을 수 없는 벽은 아닙니다.
그리고 .gitignore에서 일부러 빼지 않은 것도 있습니다. 실행 로그 파일들입니다. 백테스트 결과를 적은 문서가 그 로그를 증거로 인용하기 때문에, 로그를 빼면 「이 숫자가 어디서 나왔나」를 다시 확인할 길이 끊깁니다.
한 장 정리
| 상황 | 이렇게 |
|---|---|
| git이 뭔지 한 줄로 | 파일이 바뀐 이력을 저장하는 프로그램. GitHub는 그 이력을 올려 두는 인터넷 서비스 |
| 여러 사람·여러 세션이 한 폴더를 쓴다 | 되돌리기 명령(checkout·restore·stash·reset) 금지. 쌓기(add·commit)와 읽기만 |
| 옛 파일이 필요하다 | git show 커밋:파일 > 새이름으로 꺼내서 비교 |
| 윈도우에서 처음 붙인다 | 첫 기록 전에 줄바꿈 자동 변환 끄기 |
| API 키가 있는 폴더 | 커밋 전 검사 훅. 이름 목록이 아니라 값 전체로 대조 |
| 프로그램이 실행 중인 폴더 | 끈 뒤에 커밋 |
| 큰 캐시 파일 | .gitignore로 제외. 다시 만들 수 있는 것만 |
git을 붙이고 1주일 동안 두 폴더에 커밋 61개가 쌓였습니다. 백업 파일은 새로 만들지 않았습니다. 고치기 전에 git status가 깨끗한지 보고, 고친 뒤 커밋하면 그게 백업이 됩니다.
자료 — 제 컴퓨터의 두 저장소(설정 파일·커밋 기록·훅, 2026년 9월 14일 확인)와 도입하며 남긴 실측 기록. 명령 동작은 git 기본 설정 기준이며, 설치 환경에 따라 기본값이 다를 수 있습니다.
'자동매매 일지 > 개발 이야기' 카테고리의 다른 글
| 백테스트 수익률이 비현실적으로 높을 때 — 연 1억%의 정체 (1) | 2026.08.20 |
|---|---|
| 자동매매 백테스트 첫 결과 — 말도 안 되는 수치가 나왔을 때 의심할 것 (0) | 2026.08.20 |
| 파이썬 자동매매 시작하기 — 코딩의 '코'도 모르던 직장인의 첫걸음 (0) | 2026.08.19 |