2번째 세미나

princess·2021년 1월 12일
0

랩 세미나

목록 보기
1/2
post-thumbnail

2번째 세미나 주제는 바로 'Git'

Git이란?

버전 관리 소프트웨어(VCS) : 코드와 콘텐츠의 변화를 관리하고 추적하는 소프트웨어

  • 버전이란 ?

    이전과 약간씩 다른 변화들을 구분하는 표시
    이때 변화들은 의미있는 변화들만을 의미

  • 버전 관리가 필요한 이유?

    프로그래머들은 안정적으로 코드를 관리해야하는데, 프로그램이 한단계씩 증가 할수록 살도 덫붙여 지고 기능들이 추가되기 마련이다. 하지만, 기능을 구현하는 과정에서는 일시적으로 코드가 불안정해지고 비로소 실행이 됨으로써 안정된 코드로 바뀌게 된다.

    이 불안정한 코드로 계속해서 코드를 짜다보면 언젠간 더이상 수정이 불가능하고 개발이 불가능해지는 수준이 될 수가 있다. 이때 이전으로 되돌려 다시 코드를 짜야되는 경우가 생기는데, 그 이전의 기준이 바로 '버전'이라고 하는 것이다.

  • 버전 관리 소프트웨어가 필요한 이유?

    대부분의 사람들은 한 파일에 변경 사항을 저장하는데, 이럴 경우에는 버전이 입력되지 않아 이전으로 되돌리는 것이 불가능해진다. 그래서 다른 이름으로 저장하는 방법을 많이 사용하고는 하지만, 이또한 많은 양의 파일의 경우 관리하기가 매우 불편하다.

    따라서 이때 버전 관리 소프트웨어를 사용할 경우 굉장히 버전의 관리가 쉬워진다.

  • 최초의 버전
    SCCS는 유닉스 환경에서 사용이 가능하며 개발 이후 많은 VCS들이 등장하게 됨

- 집중형

1 저장소를 한 곳에서 중심적으로 관리(개발자들의 소스코드 등)를 하여서 운영에 굉장히 수월 (클라이언트 - 서버 모델)

2 중앙 저장소에 문제가 생기게 된다면 모든 개발자들의 접근이 중단 (인터넷 연결 문제가 중요)

3 하나의 파일을 변경하려면 사용하려고 하는 개발자들이 순서대로 대기를 해야되는데, 이때 적용되는 모델이 '잠금 모델'

- 분산형

1 저장소가 여러개 존재하기 때문에 각 버전 별로 소스를 개별적으로 보관이 가능

2 개발자에게 공유 가능한 저장소 사본을 제공하며 이곳에서 코드를 저장하고 관리

3 서버는 각 저장소 자료를 동기화하고 중개하는 역할만 수행하기 때문에 서버 문제가 생겨도 지속적으로 개발이 가능

Git의 특징

앞서 말한 것들을 정리하여 특징을 나누어 보았다.

1 분산형 버전 관리 시스템

  • 로컬 컴퓨터에 완벽한 복제본 소스 코드를 저장 가능
  • 완벽한 복제본이 존재한다면 중앙 저장소 조회 불필요

2 인터넷 연결 불가 상태에도 관리 가능

  • 동기화나 다른 개발자들과의 코드 공유가 불가능 하지만 커밋은 가능, 푸시는 불가능

3 다른 개발자들과 동기화나 저장소 연결 가능

  • 다른 사람들의 코드를 직접 내려 받을 수 있고 새로 만든 소스 코드를 배포하는 것도 가능하며 내려 받은 소스코드는 병합을 통해서 할 수 있음

Git의 기능

Git에는 여러개의 기능이 존재하지만 크게 두가지로 본다면,

백업 기능

  • 깃은 자신의 로컬 컴퓨터에 독립적으로 소스의 버전을 관리가 가능하다. 하지만 로컬 컴퓨터에만 저장하고 관리하게 된다면 컴퓨터에 문제가 생길시 모든 소스코드를 잃을 수 있다는 단점이 존재하게 된다. 이때 원격 저장소에 저장을 하게 되면 동기화 하여 백업이 가능해 진다.

협업 개발

1 코드 공유

  • 네트워크를 이용하여 간단해진 코드 공유는 인터넷이 연결 불가능한 상태여도 내려 받아 놓은 코드가 존재한다면 코드 이려관리가 가능하다.

2 책임과 저장

  • 깃은 모든 변경이력이 저장되어 누가 언제 수정했는지 모두 기록이 가능하다.
  • 깃은 커밋을 이용하여 변경사항을 기록하는데 이는 수정이 불가능하다.

3 원격 공유

  • 원격 저장소가 중앙서버의 역할을 하면서 자신의 코드를 '푸시'를 통해서 원격 저장소로 업로드를 시키고 다른 개발자의 소스를 '풀' 또는 '페치'를 통해서 원격 저장소의 변경 사항을 로컬 저장소에 적용하거나 내려 받기만 할 수 있다.

4 병합

  • 하나의 소스코드를 여러가지 브랜치로 분기가 가능하며 원할 시 하나로 병합도 가능하다. 깃에서는 다양한 병합 알고리즘을 제공하기 때문에 소스코드의 충돌을 최소화하고 쉽게 유지 가능하다.

5 공개

  • 자신의 소스코드를 외부에 공개함으로써 코드의 한계를 극복할 수 있고 다른 외부 개발자들과 협업하여 프로젝트를 진행함으로써 개발 속도를 늘릴 수 있다. 또한 외부 개발자는 포르가는 다른사람의 원격 저장소를 자신의 원격 저장소로 만드는 것을 통해서 코드에 대한 버그를 수정하고 기능을 개선 가능하다.
profile
성장하는 머신러닝 엔지니어

0개의 댓글