hanker

GIT - 효율적인 협업과 워크플로우 최적화 본문

CI, CD/GIT

GIT - 효율적인 협업과 워크플로우 최적화

hanker 2024. 12. 28. 00:00
반응형

Git은 개발자들에게 필수 도구지만, 대부분은 기본적인 commit, push, pull 정도의 기능만 사용한다.

그러나 Git은 훨씬 더 강력한 기능을 제공하며, 이를 잘 활용하면 협업 효율과 코드 관리의 품질을 크게 향상시킬 수 있다.

 


Git Flow

 

Git Flow 전략은 협업 시 충돌을 줄이고 배포와 개발을 동시에 진행할 수 있다.

 

 

주요 브랜치

- main: 최종 배포 가능한 상태의 코드

- develop: 개발 중인 코드를 모아둔 브랜치

 

 

보조 브랜치

- feature: 새로운 기능 개발용

- release: 배포 준비 브랜치

- hotfix: 긴급 버그 수정 브랜치

 

 

왜 유용한가?

- 역할별 브랜치 구조로 협업 시 충돌을 줄일 수 있다.

- 배포와 기능 개발이 동시에 진행 가능

 

Tip: git-flow 플러그인을 사용하면 명령어로 쉽게 관리할 수 있다.

 

 

 

* Git Flow는 릴리즈가 비교적 덜 빈번한(예: 대규모 On-Premise 제품) 환경에서 매우 유용하지만,

지속적 배포(Continuous Deployment)가 강조되는 최신 SaaS 환경 등에서는 오히려 브랜치가 너무 많아져 관리가 복잡해질 수 있다.

 

* 요즘은 GitHub Flow, GitLab Flow, Trunk-Based Development 등 더 단순화된 전략을 쓰는 팀도 많다.

 


Git Rebase vs. Merge

 

 

Merge의 특징

- 두 브랜치를 합치면서 새로운 병합 커밋을 생성

- 작업 히스토리를 보존

- 협업 중 충돌 해결 시 유용

 

 

Rebase의 특징

- 커밋 히스토리를 다시 작성해 깔끔한 작업 이력을 유지

- 히스토리가 단순화되어 읽기 쉬움

 

 

언제 사용해야 할까?

- Merge: 팀 프로젝트에서 협업의 흔적을 남기고 싶을 때.

- Rebase: 개인 작업이나 깔끔한 커밋 히스토리가 필요한 경우.

 

 

* 이미 원격 저장소(remote)에 푸시된 히스토리를 Rebase로 “다시 쓰는” 것은 협업 충돌을 일으킬 가능성이 크다.

* "어떤 상황에서 Rebase가 이점을 가지는지(로컬에서 작업 후 원격에 반영하기 전)", "어떤 상황에서는 Merge가 안전한 선택인지(이미 팀원이 공유하는 브랜치)" 등을 구체적으로 구분해주면 더 좋다.


 

Git Stash

 

Git Stash란?

작업 도중 코드를 커밋하지 않고도 임시로 저장할 수 있는 기능

 

명령어: git stash

 

사용 사례

- 긴급히 다른 브랜치로 전환해야 할 때

- 테스트 도중 작업 상태를 저장하고 싶을 때

 

유용한 옵션

- git stash apply: 저장된 변경 사항을 다시 적용

- git stash list: 저장된 변경 사항 목록 확인

- git stash drop: 특정 stash 항목 삭제

 


Git Hooks

 

Git Hooks란?

Git에서 특정 이벤트(예: 커밋, 푸시)가 발생할 때 자동으로 실행되는 스크립트이다.

 

 

활용 사례

- Pre-commit Hook: 커밋 전에 코드 스타일 검사 및 테스트 실행

- 예: ESLint, Prettier 자동 실행

 

Post-merge Hook: 브랜치 병합 후 자동으로 의존성 설치

- 예: npm install 실행

 

Pre-push Hook: 푸시 전에 테스트를 실행해 오류 방지

 

 

설정 방법

: .git/hooks 디렉토리에 스크립트 파일 생성

: 파일에 실행 권한 부여: chmod +x <파일명>

 


Git Aliases

 

Git Alias란?

자주 사용하는 Git 명령어를 단축키로 설정하는 기능이다.

 

활용 사례

git lg: 히스토리를 그래프 형태로 출력

git config --global alias.lg "log --oneline --graph --decorate --all"

 

 

git co: git checkout 명령어를 단축

 

git config --global alias.co "checkout"

 

git save: Stash와 동일한 기능을 제공

git config --global alias.save "stash push"
 

 

Git의 협업 도구: Blame과 Bisect

 

Git Blame

- 파일의 각 줄이 누가 언제 작성했는지 확인 가능

- 명령어: git blame <파일명>

- 활용 사례 : 버그를 만든 커밋과 작성자를 추적

 

 

Git Bisect

 

- 버그를 추적하기 위해 특정 커밋을 탐색하는 이진 검색 도구

- 명령어

git bisect start
git bisect bad
git bisect good <커밋>

 

- 활용 사례 : 버그가 도입된 커밋을 빠르게 찾을 때.

 


GitHub Actions

 

GitHub Actions란?

GitHub에서 CI/CD 파이프라인을 자동으로 실행할 수 있는 도구이다.

 

활용 사례

- 코드 푸시 시 자동 빌드 및 테스트 실행

- 릴리즈 생성 및 배포 자동화

 

예시 워크플로우

.github/workflows/main.yml 파일 생성

name: CI Pipeline
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install Dependencies
        run: npm install
      - name: Run Tests
        run: npm test

정리

Git은 단순한 버전 관리 도구를 넘어, 개발자들이 협업과 워크플로우를 최적화할 수 있는 강력한 도구이다.

 

 

반응형