Docker & K8S

Docker & K8S - Git과 Github 소개

터칭 데이터 2023. 12. 19. 21:10

 

학습 목표

 

CI/CD의 개념과 가장 많이 사용되는 소스 컨트롤 시스템

 

Git과 Github에 대해 알아보고 Github이 제공하는 CI/CD 서비스인

 

Github Actions에 대해 알아보려 합니다.

 

 

이렇게 배운 개념들을 바탕으로

1. Github Actions로 Hangman 코드에 테스트를 붙이는 실습

 

2. Github Actions를 통해 Docker Image를 만들고 Docker hub에 push하는 실습

 

2개의 실습을 하려합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Git이란?

 

Git은 분산환경을 지원하는 소스 버전 컨트롤 시스템

CVS, SVN은 항상 서버에 연결되어 있다는 전제하에서 사용 가능 (중앙 개발)

 

리눅스를 만든 Linus Torvalds가 개발

리눅스 커널 개발을 위해 만들었으며 GPL v2 오픈소스

 

SVN/CVS에 비해 현저하게 빠르나 사용법은 훨씬 더 복잡함 :(

 

 

 

 

 

 

 

Git의 장점 짧은 버전

 

다수의 개발자가 공동 개발

 

코드 리뷰 가능

 

코드 백업

 

과거의 코드로 롤백 가능

 

 

 

 

 

 

 

 

 

 

 

Git의 장점 긴 버전

 

팀원들과 코딩을 같이 할 수 있고 코드 충돌이 생기면 이를 해결가능하고 (구글닥처럼) 

 

코드변경을 주기적으로 저장하면서 리뷰를 받을 수 있고

 

모든 코드 변경이 기록되며 (백업)

 

지금 코드의 스냇샵을 잡아 (이를 버전이라 부름) 나중에 필요시 버전간 이동이 가능

 

사실 이런 모든 작업을 꼭 코드 뿐만 아니라 모든 텍스트 파일에 사용 가능

 

 

 

 

 

 

 

 

 

 

 

Git 사용시 필요한 것

 

직접 git을 사용한다면 git이 설치된 컴퓨터와 저장 공간

 

클라우드 버전 사용 (GitHub, BitBucket, GitLab 등등)

클라이언트는 별도 설치

Github이 가장 인기가 많음

 

 

 

 

 

 

 

 

 

 

 

 

Github이란?

 

Git repo 호스팅/클라우드 서비스 (http://github.com)

대부분의 회사들이 Git을 직접 설치해서 사용하기 보다는 github을 사용

 

Git은 텍스트 커맨드라인 툴이지만 Github은 웹기반 인터페이스도 제공 (일부)

 

자신이 만든 repo들이 모두 public일 경우 사용이 무료

private repo의 수에 따라 가격대가 결정됨
개발자들을 위한 Facebook!

 

다양한 툴을 제공하여 생태계 마련

Code 개발 생산성 증대를 위한 Copilot
CI/CD등의 다양한 연동을 위한 Workflows 제공
또한 문서화를 위한 Wikis와 버그리포트와 트랙킹을 위한 Issues 기능을 제공

 

2018년에 마이크로소프트가 $7.5B에 인수함

 

 

 

 

 

 

 

 

 

 

Git 사용방법

 

CLI (커맨드라인)

 

 

GUI (웹 UI 혹은 데스크탑 프로그램)

 

Github이 가장 인기가 많음

 

 

 

 

 

 

 

분산개발 vs. 중앙개발

 

 

중앙개발: SVN/CVS (좌측 이미지)

 

분산개발: Github (우측 이미지)

 

 

 

 

 

 

 

 

 

 

 

 

Git 관련 용어 (I)

 

Repo

Repository의 준말로 Git으로 관리되는 소프트웨어 프로젝트를 지칭

 

Master/Main

한 Repo에서 기본이 되는 메인 코드를 지칭. Git에서는 master이고 github에서는 이제 main

main은 언제나 가장 믿을 수 있는 상태여야 합니다. main은 source of truth가 되는 특별한 branch

 

Branch

자신의 Repo에서 새로운 기능 개발등을 위해 Master 혹은 다른 Branch로부터 만든 코드 작업본을 지칭. 작업 후 나중에 원본 Branch와 다시 병합하려는 목적으로 만들어진다

 

Clone

다른 계정에 존재하는 repo로부터 새로운 local repository를 만드는 것

 

Commit (Check-in)

내가 만든 코드 변경을 Branch의 특정 브랜치(Local Repository)에 반영하는 것

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Git 관련 용어 (2)

 

작업은 항상 내 컴퓨터에 있는 Local Repo에서 일어나며 Pull과 Push를 통해 서버상의 Remote Repo와 연결

 

Pull

Master와 같은 Remote Repo로부터 마지막 Pull이후 변경된 것을 다시 가져오는 작업. 즉 Master(혹은 Branch)와 씽크하는 것을 지칭

 

Push

작업 중인 로컬 복사본 (Local Repo)에서 서버(Remote Repo)로 변경사항들을 복사하는 것을 지칭

 

Merge

Pull이나 Push했을 경우 두 Branch(대부분 이 중 하나는 Master)간의 충돌(Conflict)을 해결하는 과정. 많은 경우 니는 자동으로 해결되나 몇몇 경우에는 손으로 직접 충돌을 해결해야 한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

메인/마스터 브랜치

 

Github에서는 이전에 master라 불렀고 지금은 main이라 부르는 source of truth가 되는 특별한 branch

 

특정한 기능을 구현하기 위해 만들어진 mainline의 복사본. 구현과 테스트가 이뤄진 후에 main branch와 머지됨

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

전체플로우

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Push나 Merge 시점이 CI/CD를 실행하기 위한 절호의 순간

 

코드가 메인/마스터나 브랜치에 추가되는 순간 CI/CD를 트리거

이를 특정 메인/마스터나 특정 브랜치만 대상으로 하도록 설정 가능
이 때 테스트 수행하고 최종적으로 Docker Image등을 만들도록 하는 것이 가능
그래서 CI/CD는 Github에 구현하는 것이 가장 자연스러움

 

Github에서는 이를 Actions라는 기능을 통해 Workflow라는 이름으로 구현 가능