내 코드의 첫 저장점 만들기 — git add와 commit, 사진 찍듯 이해하기

2026. 6. 19. 14:04·Hello Dev
이 글은 Git 입문 시리즈의 2편입니다. 아직 Git 설치를 안 하셨다면, 먼저 1편. Git이 대체 뭐길래? (개념과 설치)를 끝내고 오시면 막힘없이 따라오실 수 있습니다.

지난 1편에서 Git을 설치하고 이름·이메일까지 등록했습니다. 그런데 막상 까만 터미널 앞에 앉으면 또 한 번 막막해지죠.

"이제 코드를 저장해야 한다는데, add 치고 또 commit 치고… 왜 이걸 굳이 두 번에 나눠서 하는 거지?"

저도 처음엔 이 두 단계가 그렇게 헷갈렸습니다. 그냥 '저장' 버튼 하나면 될 것 같은데 말이죠. 그런데 이 두 단계의 정체를 '사진 찍는 과정'에 빗대어 보고 나서야, 비로소 머릿속이 환해졌습니다.

이번 글에서는 빈 폴더에 Git을 켜고(init), 첫 번째 저장점(커밋)을 직접 찍어보는 것까지 한 번에 끝냅니다. 1편에서 Git을 '카메라 앱'에 비유했던 걸 그대로 이어받아, 진짜 사진 한 장을 남기듯 커밋을 만들어 보겠습니다.

왜 'add'와 'commit'을 두 번 나눠 칠까

결론부터 말씀드리면, Git이 코드를 저장하는 과정은 우리가 카메라로 마음에 드는 사진 한 장을 남기는 과정과 똑 닮았습니다.

사진을 찍을 때를 떠올려 볼게요. 눈앞에 펼쳐진 풍경이 있고, 우리는 그중 담고 싶은 것만 골라 화면 안에 구도를 잡습니다. 그리고 마음에 들면 그제야 셔터를 누르죠. 이 '구도 잡기'와 '셔터 누르기'가 바로 git add와 git commit입니다.

Git은 내 파일을 세 개의 공간으로 나누어 관리합니다. 이 셋만 이해하면 오늘 내용의 90%는 끝납니다.

Git의 3가지 공간 카메라에 비유하면 하는 일
작업 디렉토리
Working Directory
눈앞의 실제 풍경 지금 내가 코드를 짜고 수정하는 실제 폴더
스테이징 영역
Staging Area
카메라 화면 속 구도 이번 사진(커밋)에 담을 변경사항만 골라 올려두는 곳
저장소
Repository
완성된 사진이 쌓이는 사진첩 셔터를 눌러 영구히 기록된 커밋들이 모이는 곳

그러니까 흐름은 이렇습니다. 작업 디렉토리에서 코드를 고치고 → git add로 "이번 컷에 이 변경을 담겠다" 구도를 잡고 → git commit으로 셔터를 눌러 사진첩에 한 장 남깁니다.

그럼 왜 굳이 '구도 잡기' 단계를 따로 둘까요? 핵심은 "찍을 것을 내가 고를 수 있다"는 데 있습니다. 파일 다섯 개를 고쳤어도, 그중 관련 있는 두 개만 골라 한 장의 의미 있는 사진으로 남길 수 있죠. 이 선택권이 나중에 협업할 때 어마어마한 힘을 발휘합니다.

git init: 빈 폴더에 사진첩 펼치기

이제 직접 해봅시다. 먼저 연습용 폴더를 하나 만들고 그 안으로 들어갑니다. 맥은 터미널, 윈도우는 Git Bash를 엽니다.

mkdir my-first-git
cd my-first-git

아직 이 폴더는 그냥 평범한 빈 폴더입니다. 여기에 Git이라는 카메라를 켜고, 새 사진첩을 펼치는 명령이 바로 git init입니다.

git init

그러면 이런 메시지가 나옵니다.

Initialized empty Git repository in /Users/you/my-first-git/.git/

"비어 있는 Git 저장소를 초기화했다"는 뜻입니다. 이 순간 폴더 안에는 눈에 보이지 않는 .git이라는 숨김 폴더가 생깁니다. 바로 이 폴더가 앞으로 모든 사진(커밋)을 보관할 사진첩의 실체입니다. 이 .git 폴더를 지우면 그동안의 모든 기록이 함께 사라지니, 절대 손대지 마세요.

숨김 폴더가 안 보여요 — .git처럼 점(.)으로 시작하는 폴더는 운영체제가 기본적으로 숨깁니다. 터미널에서 ls -a(맥) 명령을 치면 목록에 .git이 보입니다. 확인용일 뿐이니 안 보여도 정상입니다.

git status: 지금 카메라에 뭐가 잡혔는지 확인하기

본격적으로 찍기 전에, 가장 친한 친구가 될 명령부터 익히겠습니다. 바로 git status입니다. 지금 작업 폴더와 스테이징 영역이 어떤 상태인지 알려주는, Git의 안내판이에요. 앞으로 뭔가 헷갈릴 때마다 이 명령을 치면 됩니다.

먼저 첫 파일을 하나 만들어 봅시다.

echo "# 나의 첫 깃 프로젝트" > README.md

이제 git status를 쳐보면 이런 결과가 나옵니다.

On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md

nothing added to commit but untracked files present (use "git add" to track)

여기서 Untracked files(추적되지 않는 파일)라는 말이 핵심입니다. Git이 "이 README.md라는 파일이 새로 생긴 건 봤는데, 아직 사진에 담으라는 지시는 못 받았어요"라고 알려주는 겁니다. 풍경 속에 새 피사체가 나타났지만, 아직 카메라 구도에는 안 잡힌 상태인 거죠.

git add: 이번 컷에 담을 것 고르기

이제 이 파일을 사진에 담아보겠습니다. 구도를 잡는 명령, git add입니다.

git add README.md

아무 메시지도 안 뜨면 성공입니다. (Git은 일이 잘 풀릴 때 조용한 편입니다.) 다시 git status로 확인해 볼게요.

On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

방금까지 빨간 글씨 'Untracked'였던 파일이 이제 Changes to be committed(커밋될 변경사항), 즉 초록 글씨로 바뀌었습니다. 카메라 화면 속에 README.md가 쏙 들어온 거예요. 셔터만 누르면 사진으로 남을 준비가 끝났습니다.

파일이 많을 땐 한 번에 — 바뀐 파일을 하나하나 적기 번거로울 때는 git add .를 쓰면 현재 폴더의 모든 변경사항을 한꺼번에 구도에 담습니다. 마침표(.)는 '여기 전부'라는 뜻입니다. 편하지만, 담기지 말아야 할 파일까지 쓸려 들어갈 수 있으니 늘 git status로 한 번 확인하는 습관을 들이세요.

실수로 잘못 담았다면? 구도에서 빼기

초보 때 가장 흔한 상황입니다. 올리면 안 되는 파일을 실수로 git add 해버리는 거죠. 당황하지 않아도 됩니다. 셔터는 아직 안 눌렀으니까요. 화면 구도에서 빼기만 하면 됩니다.

git restore --staged README.md

이러면 파일이 스테이징 영역에서 다시 작업 디렉토리로 내려옵니다. 파일 내용이 지워지는 게 아니라, 단지 '이번 사진엔 안 담을게'라고 구도에서 빼는 것뿐이니 안심하세요. (예전 자료에서는 git reset HEAD를 쓰기도 하는데, 요즘 Git은 더 직관적인 git restore --staged를 안내합니다.)

git commit: 셔터를 눌러 한 장으로 남기기

드디어 셔터를 누를 차례입니다. git commit 명령으로 스테이징에 올려둔 변경사항을 사진첩에 영구히 박제합니다.

git commit -m "첫 커밋: README 추가"

-m 뒤 따옴표 안에 적는 것이 커밋 메시지입니다. 이 사진이 어떤 순간인지 적어두는 짧은 메모라고 보면 됩니다. 나중에 사진첩을 넘겨볼 때, 이 메모만 보고도 "아, 이때 이걸 했구나" 하고 알아볼 수 있어야 하죠.

실행하면 이런 결과가 나옵니다.

[main (root-commit) a1b2c3d] 첫 커밋: README 추가
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

축하합니다. 방금 여러분의 첫 번째 커밋, 즉 코드의 첫 저장점이 사진첩에 찍혔습니다. 저 a1b2c3d 같은 알 수 없는 글자는 이 사진에 매겨진 고유 번호입니다. 세상에 단 하나뿐인 사진 일련번호라고 생각하면 됩니다.

좋은 커밋 메시지를 쓰는 작은 습관

커밋 메시지는 미래의 나와 동료에게 보내는 쪽지입니다. 거창할 필요는 없지만, 이 두 가지만 지켜도 충분히 좋습니다.

  • 무엇을 했는지를 적습니다. "수정함", "ㅁㄴㅇㄹ" 같은 메시지는 나중에 아무 도움이 안 됩니다. "로그인 버튼 색상 수정"처럼 구체적으로요.
  • 왜 했는지가 중요하면 한 줄 덧붙입니다. 무엇은 코드를 보면 알지만, 이유는 적어두지 않으면 아무도 모릅니다.

git log: 지금까지 찍은 사진첩 넘겨보기

내가 찍은 사진들이 잘 쌓이고 있는지 보고 싶을 땐 git log입니다.

git log
commit a1b2c3d4e5f6... (HEAD -> main)
Author: 홍길동 <gildong@example.com>
Date:   Thu Jun 18 21:30:00 2026 +0900

    첫 커밋: README 추가

방금 만든 커밋이 보입니다. 1편에서 등록했던 이름과 이메일이 Author에 찍혀 있죠? 이래서 첫 설정이 필요했던 겁니다. 사진마다 '누가 찍었는지' 도장이 박히는 셈이니까요. 로그가 길어져 화면을 꽉 채우면 q 키를 눌러 빠져나옵니다.

찍지 말아야 할 것: .gitignore

마지막으로 하나만 더. 사진첩에 굳이 담고 싶지 않은 것들이 있습니다. 비밀번호가 담긴 설정 파일, 용량만 큰 임시 파일, 라이브러리가 자동으로 만드는 잡다한 폴더(node_modules 같은) 들이죠.

이런 것들을 매번 손으로 골라 빼는 건 번거롭습니다. 그래서 Git에는 "이 목록에 적힌 건 아예 카메라에 잡지 마" 하고 지정하는 파일이 있습니다. 바로 .gitignore입니다.

폴더에 .gitignore라는 이름의 파일을 만들고, 무시할 대상을 한 줄에 하나씩 적으면 됩니다.

# 한 줄이 무시 규칙 하나입니다
.env
node_modules/
*.log

이렇게 적어두면 .env 파일도, node_modules 폴더도, 확장자가 .log인 모든 파일도 git status에 아예 나타나지 않습니다. 실수로 민감한 정보를 커밋하는 사고를 막아주는 든든한 안전장치입니다.

한 번 커밋된 파일은 .gitignore가 막지 못합니다 — .gitignore는 '아직 추적하지 않는 파일'에만 효과가 있습니다. 이미 커밋해 버린 비밀번호 파일은 목록에 추가해도 계속 따라다니므로, 처음부터 담기지 않게 하는 것이 가장 중요합니다.

정리 — 첫 사진을 남겼습니다

방금 전까지 텅 비어 있던 폴더가, 이제 첫 사진 한 장을 품은 사진첩이 되었습니다. 돌이켜보면 결국 익힌 것은 '사진 찍는 흐름' 하나뿐이죠.

  • git init으로 폴더에 사진첩(.git)을 펼칩니다. 딱 한 번만 하면 됩니다.
  • git add로 이번 사진에 담을 변경사항의 구도를 잡고, git commit으로 셔터를 눌러 한 장으로 남깁니다.
  • 헷갈릴 땐 git status, 찍은 사진을 넘겨볼 땐 git log. 이 두 명령이 길잡이가 되어 줍니다.

여기까지는 모두 내 컴퓨터 안에서만 벌어진 일입니다. 사진첩이 내 폰 안에만 있는 셈이죠. 다음 3편에서는 이 사진첩을 클라우드(GitHub)에 올려서, 컴퓨터가 고장 나도 안전하게 백업하고 전 세계와 공유하는 방법을 다룹니다. 1편에서 예고했던 '인스타그램에 사진 올리기'가 드디어 등장합니다.

Git 입문 시리즈
← 이전 글 1편. Git이 대체 뭐길래? (개념과 설치)
다음 글 → 3편. 내 코드를 클라우드에 백업 (GitHub 원격 연결)

참고 자료

  • Pro Git 2판 — 수정하고 저장소에 저장하기 (공식 한국어)
  • Git 공식 문서 — gitignore
저작자표시 비영리 변경금지 (새창열림)

'Hello Dev' 카테고리의 다른 글

오픈소스와 팀 협업의 꽃 — Fork·Clone과 Pull Request로 첫 기여하기  (0) 2026.06.23
평행 우주에서 안전하게 개발하기 — Git 브랜치·병합(merge)과 충돌(conflict) 해결  (0) 2026.06.22
실수해도 괜찮아 — Git으로 되돌리기 (restore·amend·reset·revert, 그리고 생명줄 reflog)  (0) 2026.06.22
내 코드를 클라우드에 백업하기 — GitHub에 처음 git push 하기 (인스타에 사진 올리듯)  (0) 2026.06.22
Git이 대체 뭐길래? 10분 만에 이해하는 핵심 개념과 설치 가이드  (0) 2026.06.17
'Hello Dev' 카테고리의 다른 글
  • 평행 우주에서 안전하게 개발하기 — Git 브랜치·병합(merge)과 충돌(conflict) 해결
  • 실수해도 괜찮아 — Git으로 되돌리기 (restore·amend·reset·revert, 그리고 생명줄 reflog)
  • 내 코드를 클라우드에 백업하기 — GitHub에 처음 git push 하기 (인스타에 사진 올리듯)
  • Git이 대체 뭐길래? 10분 만에 이해하는 핵심 개념과 설치 가이드
@Cura
@Cura
재밌는 IT 이야기와 최신 개발 뉴스를 쉽고 친절하게 전합니다.
  • @Cura
    HelloDev.kr
    @Cura
  • 전체
    오늘
    어제
    • 분류 전체보기 (9)
      • Hello Dev (8)
      • Trend & Tech (0)
      • Core Tech (0)
      • Dev Life (0)
      • Dev Humor (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      rebase merge 차이
      git alias
      git restore
      개발입문
      깃 입문
      HelloDev
      깃
      깃허브 협업
      충돌해결
      버전관리
      reset revert 차이
      깃허브 올리기
      개발유머
      git switch
      git 입문
      Github
      깃 고급
      깃 되돌리기
      git
      git amend
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.6
    @Cura
    내 코드의 첫 저장점 만들기 — git add와 commit, 사진 찍듯 이해하기
    상단으로

    티스토리툴바