본문 바로가기
홍TV 홍TV

“GitHub”에 코드 올렸는데… 그게 “Codebase”는 아닙니다

홍TV 읽는 시간 약 13분
4.5
(300)

들어가며

개발을 하다 보면 “코드베이스에 반영했다”, “Git에 올렸다”, “Git에서 코드를 가져왔다” 같은 말을 자주 듣게 됩니다.

처음 개발을 시작했을 때는 여기서 조금 헷갈릴 수 있습니다.

코드가 GitHub에 올라가 있으니까 그게 코드베이스인 것 같기도 하고, Git에 저장된 코드가 실제 프로젝트인 것 같기도 합니다.

그런데 엄밀하게 보면 Codebase와 Git은 같은 개념이 아닙니다.

쉽게 말하면 Codebase는 우리가 개발하고 있는 소스 코드 전체에 가깝고, Git은 그 코드를 변경 이력과 함께 관리하기 위한 버전 관리 시스템입니다.

둘은 서로 밀접하게 연결되어 있지만 역할 자체는 다릅니다.

이번 글에서는 개발하면서 자주 사용하는 Codebase와 Git이 정확히 어떻게 다른지, 그리고 GitHub와는 어떤 관계가 있는지까지 한 번에 정리해보겠습니다.

Codebase란 무엇인가?

먼저 Codebase부터 알아보겠습니다.

Codebase를 아주 쉽게 표현하면 하나의 프로그램이나 서비스를 구성하고 있는 코드 전체라고 생각하면 됩니다.

예를 들어 Java로 쇼핑몰 서비스를 개발하고 있다고 해보겠습니다.

프로젝트 안에 다음과 같은 코드가 있다고 가정해보겠습니다.

shopping-mall
 ├─ src
 │   ├─ main
 │   │   ├─ java
 │   │   │   ├─ controller
 │   │   │   ├─ service
 │   │   │   ├─ repository
 │   │   │   └─ domain
 │   │   └─ resources
 │   └─ test
 ├─ build.gradle
 └─ README.md

여기에 회원가입, 로그인, 상품 조회, 주문, 결제 등의 기능을 구현하는 소스 코드가 들어 있습니다.

이 프로젝트를 구성하는 코드들을 통틀어 Codebase라고 부를 수 있습니다.

즉 Codebase는 특정 프로그램을 만들기 위해 작성된 코드의 집합 또는 전체 소스 코드 기반이라고 이해하면 가장 편합니다.

Codebase는 꼭 Git으로 관리해야 할까?

그렇지는 않습니다.

Codebase와 Git은 별개의 개념이기 때문입니다.

예를 들어 개발자가 자신의 PC에서 다음과 같은 프로젝트를 만들었다고 해보겠습니다.

C:\project\shopping-mall

여기에 Java 소스 코드가 수백 개 들어 있다면 이것 역시 하나의 Codebase라고 볼 수 있습니다.

그런데 이 프로젝트에 Git을 사용하지 않을 수도 있습니다.

shopping-mall
 ├─ User.java
 ├─ Product.java
 ├─ Order.java
 └─ Payment.java

이것만 있어도 코드는 존재합니다.

다만 Git을 사용하지 않는다면 “어제 작성한 코드로 돌아가고 싶다”, “누가 이 코드를 수정했지?”, “이번 수정에서 어떤 파일이 변경됐지?” 같은 작업이 어려워집니다.

그래서 실제 개발에서는 Codebase를 Git으로 관리하는 경우가 많습니다.

Git이란 무엇인가?

그렇다면 Git은 무엇일까요?

Git은 분산 버전 관리 시스템(Distributed Version Control System)입니다.

여기서 핵심은 “버전 관리”입니다.

개발을 하다 보면 코드가 계속 바뀝니다.

처음에는 이렇게 작성했는데,

public String getUserName() {
    return "홍길동";
}

나중에는 다음과 같이 수정할 수 있습니다.

public String getUserName(Long userId) {
    return userRepository.findName(userId);
}

문제는 코드가 계속 변경되면서 과거의 상태를 추적하기 어려워진다는 것입니다.

Git은 이런 변경 내용을 기록하고 관리하는 역할을 합니다.

예를 들어,

Commit 1
회원 조회 기능 추가

Commit 2
회원 조회 조건 수정

Commit 3
예외처리 추가

Commit 4
로그 처리 추가

처럼 프로젝트의 변경 이력을 확인할 수 있습니다.

따라서 Git 자체가 Codebase라고 보는 것은 정확하지 않습니다.

Codebase를 관리하는 도구 중 하나가 Git이라고 이해하면 훨씬 쉽습니다.

Codebase와 Git을 한 문장으로 비교하면

둘의 차이를 가장 간단하게 표현하면 다음과 같습니다.

Codebase
→ 실제 서비스를 구성하는 코드

Git
→ 그 코드의 변경 이력을 관리하는 버전 관리 시스템

조금 더 현실적인 예를 들어보겠습니다.

개발자가 노트북에서 프로젝트를 개발하고 있습니다.

내 노트북
└─ shopping-mall
   └─ Java 코드

이 Java 코드 전체가 Codebase입니다.

그리고 여기에 Git을 초기화합니다.

git init

그러면 해당 프로젝트의 변경 이력을 Git으로 관리할 수 있게 됩니다.

즉,

Codebase + Git

이라는 관계가 만들어지는 것입니다.

Git Repository는 또 무엇일까?

여기서 Git을 공부하다 보면 또 하나의 용어가 등장합니다.

바로 Repository(저장소)입니다.

Git Repository는 Git이 프로젝트의 버전 관리 정보를 저장하는 공간이라고 생각하면 됩니다.

프로젝트에서 다음 명령어를 실행하면,

git init

Git Repository가 생성됩니다.

그리고 파일을 추가한 다음,

git add .
git commit -m "첫 번째 커밋"

커밋을 만들면 Git은 해당 시점의 변경 내용을 기록합니다.

그래서 개발하면서 다음과 같은 흐름이 만들어집니다.

Codebase
   ↓
Git으로 관리
   ↓
Commit 생성
   ↓
변경 이력 기록

이렇게 생각하면 Codebase와 Git Repository의 차이도 조금 더 명확해집니다.

GitHub는 Git과 또 다른 개념이다

여기에서 GitHub까지 등장하면 처음에는 상당히 헷갈립니다.

Git과 GitHub도 같은 것이 아닙니다.

Git은 버전 관리 시스템이고, GitHub는 Git Repository를 원격에서 저장하고 협업할 수 있도록 제공하는 서비스입니다.

예를 들어 개발자의 PC에 프로젝트가 있다고 해보겠습니다.

내 PC
└─ shopping-mall
   └─ Git Repository

여기에 GitHub의 원격 Repository를 연결하면 다음과 같은 구조가 됩니다.

내 PC
└─ Git Repository
        ↓
      push
        ↓
GitHub
└─ Remote Repository

개발자는 작업한 내용을 Git으로 커밋한 후 GitHub에 Push할 수 있습니다.

git add .
git commit -m "회원 조회 기능 수정"
git push

그러면 GitHub에 변경 내용이 올라갑니다.

반대로 다른 개발자가 GitHub에 올라온 프로젝트를 가져올 수도 있습니다.

git clone

결국 Git과 GitHub의 역할도 서로 다릅니다.

개발할 때 Codebase라는 말을 사용하는 이유

실무에서는 “이 코드베이스를 확인해보세요”라는 말을 종종 듣습니다.

이때 Git Repository 자체만 의미하는 것은 아닙니다.

보통은 현재 개발하고 있는 프로젝트의 코드 전체와 구조, 설정, 구현 상태 등을 포함한 코드 기반을 이야기하는 경우가 많습니다.

예를 들어,

“현재 Codebase에서 로그인 로직을 확인해 주세요.”

라고 한다면 단순히 Git의 커밋 목록을 확인하라는 의미가 아닙니다.

실제로 현재 프로젝트에 어떤 로그인 코드가 작성되어 있는지 확인해달라는 의미에 가깝습니다.

반면,

“Git History를 확인해 주세요.”

라고 한다면 과거에 누가 어떤 변경을 했는지 커밋 이력을 살펴보라는 의미가 됩니다.

이 차이를 알고 있으면 개발자끼리 대화할 때도 용어가 훨씬 명확해집니다.

Codebase와 Git의 관계를 비유하면

개인적으로 가장 쉽게 이해하는 방법은 책과 수정 이력에 비유하는 것입니다.

Codebase를 현재 완성되어 있는 책이라고 생각해보겠습니다.

Git은 이 책이 어떻게 수정되어 왔는지를 기록하는 변경 이력 관리 시스템입니다.

처음에는 1장만 있었다가,

Version 1
1장 작성

나중에 2장이 추가되고,

Version 2
2장 추가

내용을 수정하고,

Version 3
1장 내용 수정

다시 문제가 생겨 이전 상태로 돌아갈 수도 있습니다.

현재 책의 내용이 Codebase라면, 책이 어떻게 변화했는지를 추적하는 것이 Git의 역할이라고 생각하면 이해하기 쉽습니다.

물론 실제 Git은 단순한 수정 이력 이상의 다양한 기능을 제공하지만, 개념을 처음 잡을 때는 이 정도로 이해해도 충분합니다.

Git을 사용하면 Codebase를 안전하게 관리할 수 있다

실제 개발 프로젝트에서는 코드가 한 번 작성되고 끝나는 경우가 거의 없습니다.

기능을 추가하고, 버그를 수정하고, 성능을 개선하고, 다시 기존 코드를 수정합니다.

특히 여러 명의 개발자가 함께 작업한다면 코드 변경 내용을 관리하는 것이 더 중요해집니다.

이때 Git을 사용하면 각 개발자가 작업한 내용을 커밋으로 기록하고 브랜치를 활용해 서로 다른 기능을 독립적으로 개발할 수 있습니다.

예를 들어,

main
 ├─ feature/login
 ├─ feature/payment
 └─ feature/order

처럼 기능별 브랜치를 만들어 작업할 수 있습니다.

작업이 완료되면 변경 내용을 병합합니다.

이런 방식으로 하나의 Codebase를 여러 개발자가 함께 관리할 수 있습니다.

Codebase가 망가졌을 때 Git이 도움이 되는 이유

개발하다 보면 가끔 이런 일이 생깁니다.

“분명 잘 되던 코드였는데 수정하고 나니까 갑자기 안 된다.”

이럴 때 Git의 가치가 확실하게 느껴집니다.

최근 커밋에서 어떤 코드가 변경됐는지 확인할 수 있고, 필요하다면 이전 버전으로 돌아가 문제를 비교할 수도 있습니다.

예를 들어 다음과 같이 커밋이 쌓여 있다면,

A123 회원가입 기능 추가
B456 로그인 기능 추가
C789 로그인 예외처리 수정
D111 로그인 오류 수정

D111을 적용한 이후 문제가 발생했다면 이전 커밋과 현재 코드를 비교해볼 수 있습니다.

Git을 사용하지 않았다면 이런 변경 내용을 직접 기억하거나 별도의 백업 파일을 만들어야 했을 것입니다.

그래서 실제 개발 환경에서 Git은 거의 필수적인 도구처럼 사용됩니다.

Codebase vs Git 핵심 정리

마지막으로 두 개념을 간단하게 정리해보겠습니다.

Codebase
→ 애플리케이션을 구성하는 소스 코드 전체

Git
→ 소스 코드의 변경 이력을 관리하는 버전 관리 시스템

Git Repository
→ Git이 버전 관리 정보를 저장하는 저장소

GitHub
→ Git Repository를 원격으로 저장하고 협업할 수 있는 서비스

관계를 그림처럼 표현하면 다음과 같습니다.

             Codebase
                │
                │ 관리
                ▼
               Git
                │
                │ 원격 저장
                ▼
             GitHub

결국 Codebase와 Git은 경쟁 관계가 아니라 서로 다른 역할을 하는 개념입니다.

Codebase가 “무엇을 개발하고 있는가”에 가깝다면 Git은 “그 코드가 어떻게 변경되어 왔는가”를 관리한다고 생각하면 됩니다.

개발하면서 “코드베이스를 확인해 주세요”라는 말을 들었을 때는 현재 프로젝트의 코드와 구조를 살펴보고, “Git을 확인해 주세요”라는 말을 들었다면 커밋이나 브랜치, 변경 이력 등을 확인하면 됩니다.

처음에는 비슷하게 들리는 용어들이지만 이렇게 역할을 나눠서 생각하면 의외로 간단합니다.

Codebase는 코드이고, Git은 그 코드를 관리하는 도구입니다.

이 한 문장만 기억해두어도 Git, GitHub, Repository를 공부할 때 개념이 훨씬 깔끔하게 정리될 것입니다.

이 게시물이 얼마나 유용했나요?

별점을 클릭하여 평가하세요!

평균 평점 4.5 / 5. 투표 수: 300

아직 투표가 없습니다! 첫 번째로 평가해보세요.

홍TV

홍TV
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.