Git이 뭐야!

DevSeong2·2021년 3월 23일
0

Git

목록 보기
1/2

Git 소개

팀 프로젝트 중 겪는 난관😵

  1. 데이터 전달
    기능을 나누어 개발하는데 어떻게 데이터를 전달할 것인가?
    USB💾 E-mail💌 직접🏃‍♀️? 는 번거로워 보인다.
    각자 개발하다보면 코드를 동기화시킬 시점이 필요한데 데이터를 전달할 수 있는 방법이 필요하다!

  2. 변경점 검토
    상대방이 데이터를 무사히 전달했다고 하자. 그런데 전달받은 데이터를 확인해보니 어떤 데이터가 변경되었고 최신버전인지 도무지 알 수가 없다.😅

  3. 코드의 손실
    데이터를 받아서 작업을 하고 돌려주기를 여러 번.. 그러던 어느 날, 내가 완성하여 보내준 데이터가 사라졌다❓❗ 이유는.. 팀원 한 명이 내가 보낸 최신 파일로 작업한 것이 아닌 이전 버전으로 작업하다가 덮어써버린 것⚡

  4. 변경 이력
    "됐었는지 왜 안되지?" "안됐는데 왜 되지?" "이 코드는 뭐지?"
    도무지 알 수 없는 일이 벌어지고 있다. 누가 수정했지? 언제 수정된거야?

이처럼 팀 단위로 개발하다보면 다양한 문제가 발생할 수 있다. 이런 일이 매번 벌어진다면 수정을 할 때마다 🤪😂🤔 놀라운 일들을 겪게 될 것이다. 심지어! 개발을 마친 최종본이 사라질 수도 있다!

이러한 난관들을 어떻게 도와줄 수 있을까?
버전 관리와 협업이 팀 프로젝트를 원활히 이끌어 갈 수 있는 열쇠가 된다.

버전 관리👀

  • 코드 변경 이력 유지
    누가 무엇을 추가, 변경했다는 흔적👣 남기기.
    "돌아가고 싶다.." 변경 이력이 있어야 돌아갈 수 있다
  • 롤백(rollback)
    작업하다가 오류가 생겼을 때 이전 상태로 되돌릴 수 있음!

협업🤼‍♂️

  • 코드 동기화
    모두 최신 코드로 작업해야 합칠 때 수월하다.
  • 코드 리뷰
    새로운 기능을 추가하려고 할 때 잘 만들어진 코드일까? 코드 컨벤션에 맞는지, 가독성이 좋은지 등 검토하고 병합하기 위해
    * 코드 컨벤션: 관리하기 쉬운 코드를 작성하기 위한 코딩 스타일 규칙
  • 분산/병렬 작업
    하나의 프로젝트에 대해 순서대로 구현하면 효율이 떨어진다. 각자 작업하고 합치죠!

버전 관리를 하며 협업을 할 수 있는 토대를 마련해주고 코드를 안정적으로 유지, 배포될 수 있도록 도와주는 서비스가 필요해! 💬Git?

기본 구성 & 흐름

Git의 작업방식은 저장소가 존재하고 각자 Local 공간에서 작업하고 원격 저장소에 올린다. 다른 팀원들도 가져가서 공유하고 싶으면 저장소에 올린다. 이 과정에서 변경 이력 유지!

작업 환경

  • 저장소(repository): 변경이력과 관련된 모든 정보가 담긴 저장소
  • 파일/코드(working copy): 프로젝트 작업물

기본 흐름

  • Update: 최신 코드 끌어오기
  • Edit: 코드 수정하기
  • Commit: 코드 반영하기

Git

저장소에서 끌어오고 작업하고 반영하며 팀원과 함께할 수 있도록 도와주는 서비스가 Git이다.

Git을 사용하면?

  • 불편하게 소스코드 주고받기가 필요 없다.
  • 같은 파일을 여러 명이 동시에 작업하는 등 병렬 개발이 가능
    새로운 기능을 추가하는 경우, 브랜치 분리를 통해 충분히 실험을 한 뒤 병합하는 방식(merge)으로 개발 가능
    중앙 저장소가 폭파🧨되어도 다시 원상복구 할 수 있다. (특정 공간에만 유지되는 것이 아니라 저장소가 여러 곳에 존재하기 때문에)
  • 프로그램의 변동 과정을 체계적으로 관리 가능
    버전 관리가 용이해져 생산성 증가👆
    언제든지 지난 시점의 소스코드로 점프(Checkout)할 수 있다.

작업 공간

  • Working directory: 실제 작업 공간
  • Staging area: 임시 저장 영역
  • Local repo: 로컬 저장소
  • Remote repo: 원격 저장소

개발 내용(추가/수정/삭제)을 커밋(commit)단위로 쌓아간다. 👉 변경 이력 조회 뿐만 아니라 롤백도 가능

작업 흐름

  • 코드 수정
  • 저장 준비
  • 저장 및 배포
    코드 수정을 열심히 한 후에 저장소에 저장할 준비를 하고 배포. 또는, 저장소에서 가져와서 열심히 코드 수정하기

Branch(가지치기)

실험적인 코드를 추가해 보고 싶다면?
기존 코드에 영향을 주지 않으면서 기능 개발을 하고 싶다면?
코드의 분기점🔱을 만들어서 병렬 작업 후 병합하자. 👉다중 브랜치 운영
Master Branch는 안정적으로 수행되는 코드 🥰
작업해보고 안정되면 Master Branch에 반영하도록!


Git 작업 환경

GitHub & GitLab

버전관리, 협업 등을 위한 코어 시스템인 Git을 바탕으로 웹 인터페이스 및 부가 서비스를 통한 프로젝트 관리를 도와주는 서비스이다.

둘의 차이는 뭐야? - 인터페이스와 일부 기능의 차이
GitHub
- Open Source Project가 많다
- Public Repository에 대해서는 무료, 용량제한 있음
- 서버가 안정적
👉 오픈소스 프로젝트에 추천

GitLab
- Public, Private 상관없이 무료
- 중앙 서버에서 저장소 관리에 용이
👉 Private 프로젝트에 추천

Git Client

결국 소프트웨어를 개발하는 환경은 나의 Local 환경이다~ Git 시스템과 Local 환경 간의 인터페이스가 필요로 한데 이것이 Git Client.

  • CLI: 커맨드 라인 기반의 인터페이스(GitBash)
    장점 : Git의 모든 기능을 활용 가능
  • GUI: 그래픽 기반의 인터페이스 (SourceTree)
    장점: 사용하기 쉬움,정보들을 시각적으로 편리하게 확인
profile
차근차근

0개의 댓글