학습 자료

보고서_최종_최종2_진짜최종 — 깃이 없으면 생기는 일


Article

첫 강의부터 명령어를 치지는 않습니다. 설치는 다음 강의에서 합니다.

대신 이번 시간에는 왜 이걸 배우는지만 확실히 하고 갑니다. 이유를 모른 채 명령어부터 외우면 사흘 뒤에 다 잊습니다. 반대로 "아 이래서 필요하구나"가 한 번 잡히면, 뒤에 나올 명령어들이 전부 그 자리에 붙습니다.

시작은 아주 익숙한 폴더 하나입니다.

이 폴더, 본 적 있을 겁니다

과제를 내거나 보고서를 쓰다가 폴더가 이렇게 되어본 적이 있을 겁니다.

내 문서 폴더의 최후
파일 이름언제 만든 건지뭐가 다른지
보고서.docx월요일처음 쓴 것
보고서_수정.docx화요일기억 안 남
보고서_수정2.docx화요일기억 안 남
보고서_최종.docx수요일이게 최종이었음
보고서_최종2.docx목요일최종이 아니었음
보고서_진짜최종.docx금요일제출한 게 이건지 확실치 않음

웃기지만 실제로 이렇게 됩니다. 저도 그랬습니다. 그리고 이 방식은 나름대로 작동은 합니다. 파일을 복사해 두는 건 원시적이긴 해도 목적 자체는 맞습니다. 옛날 상태를 남겨두고 싶은 것이니까요.

문제는 이게 세 군데에서 반드시 무너진다는 데 있습니다.

복사해서 버티는 방식이 무너지는 세 지점
  1. ① 뭐가 다른지 모른다_최종_최종2 사이에 무엇을 고쳤는지 파일 이름은 알려주지 않는다
  2. ② 돌아갈 수 없다수요일 상태로 딱 되돌리고 싶은데, 그 이후 고친 것 중 살릴 것도 섞여 있다
  3. ③ 둘이 하면 즉시 터진다각자 고친 _최종 두 개를 합칠 방법이 없다

세 번째가 특히 치명적입니다. 혼자 할 때는 파일 이름이 지저분한 정도로 끝나지만, 두 사람이 같은 파일을 각자 고쳐 오면 방법이 없습니다. 결국 한 명이 자기가 고친 걸 다시 손으로 옮겨 붙이게 됩니다. 팀 과제에서 한 번쯤 겪어봤을 겁니다.

게임 세이브 슬롯을 떠올려 봅니다

여기서 게임 이야기를 하나 하겠습니다. 이 편에서 배울 거의 모든 것이 이 비유 안에 들어 있습니다.

RPG 게임을 하다가 어려운 보스 앞에 도착했다고 해봅니다. 뭘 합니까. 세이브를 합니다. 그리고 보스에게 도전합니다. 죽으면 불러오기를 눌러서 보스 앞으로 돌아옵니다. 장비를 바꿔서 다시 도전합니다. 또 죽으면 또 불러옵니다.

여기서 중요한 건, 세이브가 있으니까 마음 놓고 이상한 시도를 해볼 수 있다는 점입니다. 세이브가 없는 게임이었다면 아무도 새 전략을 실험하지 않습니다. 죽으면 처음부터니까요.

파일 복사 vs 세이브 슬롯

보고서_최종2.docx

파일을 복사해 두는 방식

  • 슬롯 이름이 곧 설명이라 길어진다
  • 언제 왜 저장했는지 안 적힌다
  • 슬롯이 늘수록 뭐가 뭔지 모른다
  • 두 사람의 슬롯을 합칠 수 없다

세이브 슬롯

게임이 관리해 주는 방식

  • 저장한 시각이 자동으로 붙는다
  • "보스 직전" 처럼 메모를 남길 수 있다
  • 목록에서 골라 그 시점으로 돌아간다
  • 원본 파일은 하나뿐이라 안 지저분하다

깃은 정확히 이 세이브 기능을 아무 폴더에나 붙여주는 프로그램입니다.

폴더 하나를 깃에게 맡기면, 그때부터 "지금 이 상태 저장" 이라고 시킬 수 있습니다. 그 저장 하나하나를 깃에서는 커밋이라고 부릅니다. 이 편에서 앞으로 수십 번 나올 단어니까 여기서 한 번만 짚고 갑니다. 커밋 = 세이브 한 칸입니다.

세이브를 쌓으면 뭐가 달라지나

세이브가 하나둘 쌓이면 폴더는 이렇게 바뀝니다. 파일은 계속 보고서.docx 하나인데, 그 뒤에 기록이 줄줄이 달립니다.

파일은 하나, 기록은 여러 칸
보고서.docx
초안목차 정리수치 수정제출본
폴더에 보이는 파일은 언제나 한 개다. 나머지 세 칸은 깃이 따로 기억하고 있다

이 상태에서 "화요일 상태 좀 보자" 하면 그 시점으로 돌아갈 수 있습니다. "수요일에 뭘 고친 거지" 하면 바뀐 줄만 딱 집어서 보여줍니다. 파일 이름을 하나도 건드리지 않고 말입니다.

실제로 깃에게 기록을 보여달라고 하면 이런 게 나옵니다. 아직 따라 칠 필요는 없습니다. 7강에서 직접 쳐봅니다.

터미널
  • $ git log --oneline
  • a3f9c21 제출본 - 오탈자 수정
  • 7b2e4d8 3장 수치를 최신 자료로 교체
  • c81a06f 목차 순서 정리
  • e0d4b13 초안 작성

왼쪽의 알 수 없는 글자들은 각 세이브 칸에 자동으로 붙는 이름표입니다. 지금은 무시해도 됩니다. 볼 곳은 오른쪽입니다. 무엇을 왜 고쳤는지가 한글로 적혀 있습니다.

보고서_최종2.docx 라는 파일 이름이 절대 알려주지 못하던 정보가 여기에는 있습니다. 이게 버전 관리의 핵심입니다.

흔한 오해 두 가지

여기서 미리 털고 갈 오해가 둘 있습니다. 둘 다 나중에 사람을 헷갈리게 만드는 것들입니다.

그래서 이 편에서 뭘 하게 되나

26강짜리 여정입니다. 크게 다섯 덩어리로 갑니다.

Git / GitHub 편 26강의 지도
  1. 01

    Part 1 · 시작 (1~5강)

    설치하고, 터미널을 열고, 첫 저장소를 만듭니다

  2. 02

    Part 2 · 기록 (6~10강)

    혼자서 커밋을 찍고, 읽고, 되돌립니다. 인터넷은 아직 안 씁니다

  3. 03

    Part 3 · 마크다운 (11~13강)

    깃허브에서 글을 쓰는 문법을 배웁니다. 노션에서도 그대로 씁니다

  4. 04

    Part 4 · 깃허브 (14~20강)

    인터넷에 올립니다. 20강에서 내 URL 이 열리는 페이지가 생깁니다

  5. 05

    Part 5 · 협업 (21~26강)

    브랜치와 충돌을 지나 남과 코드를 주고받습니다

끝까지 가면 손에 두 가지가 남습니다. 주소창에 쳐서 열리는 내 페이지 하나, 그리고 남과 주고받은 기록이 있는 깃허브 계정 하나입니다. 이력서에 링크로 붙일 수 있는 것들입니다.

한 가지 미리 말해둘 게 있습니다. 이 편에서는 코드를 한 줄도 쓰지 않습니다. 실습 파일은 메모장으로 여는 텍스트 파일 하나로 시작합니다. HTML 도 자바스크립트도 나오지 않습니다.

이유가 있습니다. 깃을 배우는데 코드까지 같이 씨름하면, 에러가 났을 때 그게 깃 문제인지 코드 문제인지 구분이 안 됩니다. 그래서 이 편은 깃 하나에만 집중하도록 일부러 파일을 단순하게 잡았습니다.

이 편의 범위

합니다

  • 메모 파일 한 줄 고치고 저장하기
  • 깃 명령어 직접 손으로 치기
  • 일부러 에러를 내고 읽어보기
  • 깃허브에 올리고 남과 주고받기

안 합니다

  • HTML · CSS · 자바스크립트
  • 깃 내부가 어떻게 도는가
  • 고급 명령어
  • 서버 · 배포 자동화

정리하면

  • 파일 이름에 _최종 을 붙여 버티는 방식은 뭐가 달라졌는지 모르고, 되돌릴 수 없고, 둘이 하면 터집니다
  • 깃은 아무 폴더에나 게임 세이브 슬롯을 붙여주는 프로그램입니다. 이걸 버전 관리라고 부릅니다
  • 세이브 한 칸을 커밋이라고 합니다. 파일은 하나로 유지되고 기록만 뒤로 쌓입니다
  • 깃은 백업이 아닙니다. 자동이 아니라 직접 찍을 때만 남습니다
  • 깃과 깃허브는 다른 물건입니다. 내 컴퓨터의 프로그램과 인터넷 서비스입니다

Part 1 이 시작됐습니다. 다음 2강에서는 깃을 실제로 설치하고, 설치 직후 반드시 해야 하는 설정 두 줄을 칩니다. 택배 송장에 보내는 사람 이름을 적는 일과 똑같은 작업입니다. 이걸 빼먹으면 나중에 커밋이 누가 찍은 건지 알 수 없게 되고, 19강에서 잔디가 안 심기는 원인이 되기도 합니다.

보고서_최종_최종2_진짜최종 — 깃이 없으면 생기는 일 — 디코드랩(DCODELAB)