1. 서론
- Git과 GitHub는 현대 소프트웨어 개발에서 필수적인 도구입니다.
- 이 글에서는 Git과 GitHub의 개념과 특징, 그리고 소프트웨어 개발에서 이들이 어떻게 중요한 역할을 하는지에 대해 자세히 알아보겠습니다.
2. Git이란?
- Git은 소프트웨어 개발 프로젝트의 변경 이력을 관리하는 분산 버전 관리 시스템(DVCS, Distributed Version Control System)입니다.
- Git은 개발자가 프로젝트의 모든 변경 사항을 로컬 저장소에 저장하고, 필요할 때 원격 저장소와 동기화하는 방식으로 관리됩니다.
- 이는 여러 명의 개발자가 동시에 작업하더라도 서로의 작업에 영향을 주지 않고, 언제든지 이전 상태로 되돌릴 수 있도록 합니다.
- Git은 로컬 저장소와 원격 저장소를 활용해 파일 변경 사항을 쉽게 관리하고, 개발자들이 원활하게 협업할 수 있도록 도와줍니다.
2.1 버전 관리란?
- 버전 관리는 파일의 변경 사항을 시간의 흐름에 따라 기록하고, 필요에 따라 특정 시점의 상태로 되돌릴 수 있는 시스템입니다.
- 이러한 버전 관리 시스템(VCS)은 협업 개발 시에 필수적이며, 특히 대규모 프로젝트에서 각 개발자의 작업을 효과적으로 통합하고 관리할 수 있게 해줍니다.
2.2 Git의 장점
2.2.1 분산 구조
- Git은 로컬에서 모든 변경 사항을 관리하므로, 인터넷 연결 없이도 모든 변경 이력에 접근할 수 있습니다.
- 이는 중앙 집중형 버전 관리 시스템(CVCS)에 비해 안정적이고 빠릅니다.
2.2.2 변경 사항 추적
- Git은 파일이나 프로젝트의 변경 내역을 세세하게 기록합니다. 이를 통해 언제, 누가, 무엇을 변경했는지 명확히 확인할 수 있습니다.
2.2.3 협업 용이성
- 여러 개발자가 동시에 작업하더라도 각자의 작업을 독립적으로 수행하고 나중에 쉽게 통합할 수 있습니다.
2.2.4 브랜치 기능
- Git은 브랜치(branch)를 사용해 독립적인 개발 흐름을 만들어, 실험적인 기능을 안전하게 개발하고 테스트할 수 있습니다.
- 작업이 완료되면 병합(merge)을 통해 브랜치를 통합할 수 있습니다.
2.2.5 버그 수정 및 기능 추가 관리
- 이전 시점으로 쉽게 되돌아갈 수 있어 문제 해결이나 새로운 기능 추가가 수월합니다.
2.2.6 분산 백업
- Git의 분산 구조로 인해 모든 개발자가 프로젝트의 전체 내역을 로컬에 가지고 있어, 중앙 서버에 문제가 발생하더라도 안전하게 데이터를 복구할 수 있습니다.
2.3 버전 관리 시스템의 종류
2.3.1 로컬 버전 관리 시스템 (Local Version Control System, LVCS)
- 서버 없이 로컬 컴퓨터에서 버전을 관리합니다.
- 파일의 버전을 로컬 디렉토리 내에서 관리하므로 간단하지만, 데이터 손실 위험이 높고 협업에 제한이 있습니다.
2.3.2 중앙집중식 버전 관리 시스템 (Centralized Version Control Systems, CVCS)
- 모든 버전 관리 정보를 중앙 서버에서 관리합니다.
- 모든 프로젝트 파일과 변경 이력이 한 곳에 저장되고, 네트워크를 통해 중앙 서버에 접속하여 사용할 수 있습니다.
- 중앙 서버를 통해 일관된 관리를 유지할 수 있으나, 중앙 서버가 다운되면 작업이 불가하고 네트워크가 없으면 작업을 수행할 수 없습니다.
2.3.3 분산 버전 관리 시스템 (Distributed Version Control System, DVCS)
- CVCS의 한계를 극복하기 위해 등장한 시스템입니다.
- 모든 사용자는 저장소(repository)의 전체 복사본을 로컬에 보유하고 있으며, 이를 통해 각 사용자가 서버와 연결 없이도 로컬 저장소에서 작업할 수 있습니다.
- 각 사용자는 자신의 로컬 변경 사항을 다른 사용자와 공유하기 위해 중앙 서버에 푸시(push)할 수 있으며, 이러한 구조로 인해 협업과 백업이 더 유연하고 안전합니다.
- 대표적인 DVCS 도구로 Git이 있으며, Git은 분산 구조로 인해 효율적이고 안전한 협업을 지원합니다
2.4 GIT 구조 이해하기
- Git은 크게 작업 디렉토리(Working Directory), 스테이징 영역(Staging Area), 로컬 저장소(Local Repository), 그리고 원격 저장소(Remote Repository)로 구성됩니다.
2.4.1 Working Directory
- 사용자가 실제로 작업하는 공간으로, 변경된 파일들이 이곳에 있습니다.
- 파일을 수정하거나 생성하면 이 공간에서 관리됩니다.
2.4.2 Staging Area
- 커밋을 하기 전에 변경 사항을 임시로 모아두는 공간입니다.
- git add 명령어를 통해 파일을 스테이징 영역에 추가합니다.
- 스테이징 영역을 사용하면 특정 파일만 선택적으로 커밋할 수 있어, 변경 사항을 효과적으로 관리할 수 있습니다.
2.4.3 Local Repository
- 로컬 컴퓨터에 위치한 저장소로, 파일의 변경 이력을 관리합니다.
- 변경 사항을 git commit 명령어를 통해 저장하며, git push 명령어를 사용해 원격 저장소로 업로드할 수 있습니다.
- 로컬 저장소는 각 개발자의 컴퓨터에 있어, 네트워크 연결 없이도 모든 이력에 접근할 수 있습니다.
2.4.4 Remote Repository
- 원격 서버에 위치한 저장소로, 여러 개발자들이 공유하여 협업할 수 있는 저장소입니다.
- git push 명령어를 통해 로컬 저장소의 변경 사항을 업로드하거나, git pull 명령어를 통해 다른 개발자들의 변경 사항을 받아올 수 있습니다.
- 원격 저장소는 협업 시 변경 사항을 통합하고, 모든 팀원이 동일한 버전의 코드를 사용할 수 있도록 합니다.
2.5 Git 파일 상태
- Git에서 파일의 상태는 크게 'Untracked'와 'Tracked'의 두 가지로 나뉩니다.
- Tracked 상태에는 다시 'Unmodified', 'Modified', 'Staged'의 세 가지 상태가 있습니다.
- 이 상태들은 파일이 Git 저장소와 어떤 관계에 있는지, 현재 작업 흐름에서 어떤 위치에 있는지를 나타냅니다.
2.5.1 Untracked
- 이 상태의 파일은 Git 저장소에 의해 추적되지 않는 파일입니다.
- 이전에 커밋에 포함되지 않았고, 스테이징 영역에도 추가되지 않은 파일을 말합니다.
- 처음 저장소에 파일을 추가할 때 이 상태가 되며, git add 명령어를 통해 스테이징 영역으로 이동할 수 있습니다.
2.5.2 Tracked
- Tracked 상태의 파일은 이전 커밋에 포함되어 Git에 의해 추적되고 있는 파일입니다.
- Tracked 상태의 파일은 다음의 세 가지 상태 중 하나를 가질 수 있습니다.
- Unmodified
- 파일이 변경되지 않았음을 나타내며, 마지막 커밋 이후로 파일에 어떠한 수정도 가해지지 않았습니다.
- Modified
- 파일이 수정되었지만, 아직 스테이징 영역에 추가되지 않은 상태입니다.
- 수정된 파일은 git add 명령어를 사용하여 스테이징 영역에 추가할 수 있습니다.
- Staged
- 수정된 파일이 커밋을 위해 스테이징 영역에 추가된 상태입니다.
- 이 상태의 파일은 다음 커밋에 포함될 준비가 되어 있으며, git commit 명령어를 실행하면 Staged 상태의 파일들이 커밋에 포함됩니다.
- Unmodified
3. GitHub 란?
- GitHub는 Git 버전 제어 시스템을 기반으로 하는 소프트웨어 개발 프로젝트를 위한 버전 관리 및 협업 플랫폼입니다.
- 개발자들은 GitHub를 사용하여 소스 코드를 저장, 관리하고, 협업을 통해 프로젝트를 효율적으로 발전시킬 수 있습니다.
3.1 GitHub의 주요 기능
3.1.1 리포지토리 호스팅
- 사용자는 GitHub에 개인 또는 공개 리포지토리를 만들어 소스 코드를 저장하고 관리할 수 있습니다.
- 이는 프로젝트의 버전 이력을 체계적으로 관리하고, 필요에 따라 과거 상태로 되돌릴 수 있는 기능을 제공합니다.
3.1.2 협업
- GitHub은 이슈 트래커, 프로젝트 보드, 코드 리뷰, 풀 리퀘스트 등 다양한 협업 도구를 제공합니다.
- 이러한 기능들은 개발자들이 서로의 작업을 쉽게 공유하고 피드백을 주고받을 수 있도록 돕습니다.
- 특히 코드 리뷰 기능은 코드 품질을 유지하고, 버그를 줄이는 데 중요한 역할을 합니다.
3.1.3 포크 & 풀 리퀘스트
- GitHub에서는 다른 사용자의 리포지토리를 포크(fork)하여 자신의 계정으로 복사할 수 있습니다.
- 이를 통해 사용자들은 원본 프로젝트를 기반으로 자신만의 버전을 개발하거나 실험할 수 있습니다.
- 또한, 변경 사항을 원본 리포지토리에 반영하고자 할 때 풀 리퀘스트(pull request)를 보내 협업할 수 있습니다.
- 이는 오픈소스 프로젝트에서 외부 기여를 쉽게 받아들일 수 있게 해줍니다.
3.1.4 GitHub Actions
- GitHub Actions는 소프트웨어 워크플로우를 자동화할 수 있는 CI/CD(지속적 통합/지속적 배포) 기능을 제공합니다.
- 이를 통해 빌드, 테스트, 배포와 같은 작업을 자동으로 실행하여 개발 과정을 효율적으로 관리할 수 있습니다.
- GitHub Actions는 코드 변경 시 자동화된 테스트를 실행하고, 문제가 없을 경우 배포까지 진행할 수 있는 강력한 도구입니다.
'환경 세팅 및 사용법 > GitHub' 카테고리의 다른 글
[GitHub] 기본 용어 정리 (0) | 2024.06.26 |
---|---|
[GitHub] Branch (0) | 2024.06.26 |
[Github] fork, pull request (0) | 2024.06.26 |
[GitHub] 저장소 기본 (1) | 2024.06.26 |
[GitHub] 계정 생성 및 설정 (0) | 2024.04.26 |