본문 바로가기

PYTHON-BACK

#파이썬 19일차_GitHub Action

728x90

버전 관리 시스템

 

버전 관리 시스템(Version Control System, VCS)

문서나 설계도, 소스 코드 등의 변경점을 관리해 주는 소프트웨어 시스템

 

버전 관리의 중요성

  • 변경점 관리: 어떤 내용을 누가 작성해서 어느 시점에 들어갔는지 확인
  • 버전 관리: 특정 시점에 Tag를 달아서 버전 표시, Branch 등으로 동시에 여러 버전 개발 가능
  • 백업 & 복구 : 무엇인가 잘못 되었을 때 특정 시점으로 돌아가게 해 줌, 사고로 소실 시에도 복구 가능
  • 협업: 같이 일하는 사람들에게 수정 사항을 쉽게 공유 가능함.

 

버전 관리 없는 일반적인 프로세스

새 폴더 생성 > 새 파일 생성 > 내용 주정 > 이전 버전 복사 > 이전 버전 붙여넣기 > 파일명 변경

  • 문제
  • 각 버전간 차이 알 수 없다.
  • 버전 증가시 새롭게 파일이 생성됨으로 관리가 어렵고, 용량을 많이 처리한다

 

버전관리 시스템 종류

버전 관리 시스템만 따로 사용해 관리하는 경우

  • 통합 개발 환경(Visual Studio, intelliJIDEA)과 텍스터 에디터 등에서 제공하는 소프트웨어와 통합된 관리 기능을 사용하는 경우
  • 클라우드 컴퓨팅(Google Docs, MS oneDrive 등)에서 제공하는 버전 관리 기능을 사용하는 경우

 버전관리 시스템의 분류

  • 관리형태에 따라 로컬 VSC. 중앙집중식 VSC, 분산 VSC로 분류

로컬 VSC

  • 처리방식 : 서버 없이 로컬 컴퓨터 내에서 버전을 관리
  • 장점 : 간단하게 데이터베이스 만드로 구현 가능 > 단순하고 개인적인 프로젝트에 적합
  • 단점 : 협업 시 사용하기 어려움, 컴퓨터 고장 등 내부 정도 소실시 복구 방법이 없음

 

중앙집중식 VCS( Central VCS, CVCS)

  • 처리방식 : 서버에 최종본 한 벌이 저장되어 있음, 수정을 원하는 파일만 로컬 시스템이 다운한 후 수정한 파일을 다시 서버에 업로드하는 방식을 따름
  • 대표적 CVCS: CVS(이클립스에 포함), Subversion(SVN), Perforce 등
  • 장점 
    • 간단한 방법으로 협업 가능
    • 누가 어떤 일을 하고 있는지 관리자가 파악이 쉬움
    • 관리가 쉬움(전체 클라이언트의 로컬 데이터베이스를 관리하는 것보다 CVCS 하나를 관리하기가 훨씬 쉬움)
  • 단점
    • 중앙 서버가 다운될 경우 복원될 때까지 업무가 마비됨(업무 백업 불가능)
    • 서버의 정보가 소실될 경우 모든 히스토리가 함께 소실됨( 단, 개인이 로컬에 저장해 둔 스냅샷은 유지)
    • 협업의 규모가 커지면 수정 충돌 문제 등이 발생할 수 있음

수정 충돌 문제 

 

분산 VCS(Distributed VCS, DVCS)

처리방식

  • 파일을 저장하는 서버가 있는 것은 CVCS와 동일
  • 프로젝트 전체를 로컬에 다운 받은 뒤(복제) 수정
  • 대표적인 DVCS : git, mecurial, Bazaar, Darcs 등
  • 장점
    • 저장소의 프로젝트 내용을 히스토리를 포함하여 모두 복제하여 사요하므로(분산저장) 서버에 문제가 발생했을 경우 복제물을 이용하여 복원 가능(작업도 언제든 가능하다)
    • 수정 작업은 복제된 로컬시스템에서 수행하므로 충돌의 우려없이 작업 가능
      • 최종본을 서버에 업로드 할 때 신경 써서 통합(Merge) 해 주면 됨
    • 원격 저장소를 이용함으로 동시에 다양한 그룹과 다양한 방법으로 협업이 가능
    • 중앙집중식 시스템으로 할 수 없는 워크플로를 다양하게 사용 가능함
  • 단점
    • 다양한 기능으로 인하여 중앙집중식 VCS(대표 SVN)보다 복잡하고 배우기 어려움

Git/GitHub 소개 및 환경 구축

 

Git

  • Linux의 창시자 리누스 토르발스가 오픈소스로 개발한 분산형 버전 관리 시스템
  • 매우 빠른 속도와 분산형 저장소의 지원이 특징
  • 오픈 소스 개발의 특성상 많은 사람이 자유롭게 소스코드 수정 가능해서 잘못됨 수정으로 인해 프로젝트에 큰 문제가 발생하기 쉬우며 Git은 이런 환경적인 특성에 잘 대응할 수 있도록 개발됨
  • 기본 저장소 : git.kernel.org

GitHub

  • 2008년 공개된 대표적인 무료 Git 저장소
  • 2018 MS에 인수
    • MS 인수 후 2019년 1월 비공개 저장소 무료화, 2020년 4월부터 비공개 저장소의 공동 작업자 수 제한도 해제
  • 유사 서비스
    • Bitbucket
    • GitLab
    • Codeberg

GitHub 서비스

  • GitHub Repository(저장소)
    • 프로그램 소스코드를 저장하게 하고 개발자가 사용하는 대표 서비스
  • GitHub Actions
    • 지속적 통합 그리고 지속적 배포를 사용해 빌드, 테스트, 배포를 가능하게 하는 데브옵스(DevOps)파이프라인 자동화 툴
    • GitHub Actions 사용해서 저장소에서 바로 소프트웨어 개발 워크플로 자동화, 사용자 지정 및 실행이 가능
  • GitHub Packages
    • 소프트웨어 패키지 호스팅 서비스
    • 도커 컨테이너 혹은 프로그램 패키지(NPM,NuGet, Maven/Gralde)를 저장할 수 있는 이미지 레지스트리 개념의 서비스
  •  GitHub Advanced Security (GHAS)
    • 코드 패키지에 있는 취약점(프로젝트에서 사용되는 종속성에 대한 취약성)을 찾아주는 Dependabot, 
    • 그리고 소스코드에 있는 문제점들을 찾는 것 등 다양한 보안 기능을 제공하는 서비스
  • GitHub Projects
    • Atlassian JIRA 같이 프로젝트를 관리하게 도와줄 수 있는 서비스
    • 테이블(스프레드시트) 또는 보드의 형태로 제공됨
  • GitHub Discussions
    • 오픈 소스 또는 내부 프로젝트를 중심으로 커뮤니티를 위한 공동 커뮤니케이션 포럼
    • Stackoverflow 나 Quora 같이 질문을 물어보고 대답하는 형식을 제공하는 서비스
  • GitHub Pages
    • 저장소에 간단한 마크다운(Markdown) 형식 파일을 저장하고 설정하면 간단한 웹사이트를 만들어 주는 서비스 
      (일종의 웹 호스팅 서비스)
    • Jekyll과 같은 웹 사이트 빌드 도구를 사용할 수 있음
  • GitHub CoPilot
    • AI, 머신러닝 기술을 사용해서 개발자가 작성하는 코드의 내용을 파악하고 나머지 코드를 대신 적어주는 서비스
  • GitHub Codespace
    • 저장소 안에서 별도의 다운로드나 설치 없이 웹 브라우저에서 런칭하여 코드를 개발할 수 있게 해주는 내장 IDE
    • 원하는 방법으로 원하는 곳에서 작동하는 안전하고 구성 가능한 전용 개발 환경에서 개발을 시작할 수 있음
  • GitHub 가입하기

https://github.com/

 

GitHub: Let’s build from here

GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...

github.com

  • Git 가입하기

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

Linux에 Git 설치하기

 

Mac에 Git 설치하기

 

Git 사용 환경(GUI 도구와 CLI환경 비교)

 

GUI 환경 장점

  • 직관전인 사용자 인터페이스
    • 그래픽으로 구성된 아이콘, 버튼, 창 등 통해 사용자와 컴퓨터가 상호 작용
    • 시각적 요소는 사용자가 작업을 더 쉽게 수행할 수 있도록 도와 줌
  • 비기술자에게 친숙함
    • 대부분의 사람들은 이미 그래픽 인터페이스를 사용하여 스마트폰, 태블릿, 컴퓨터 등과 작용해왔기 때문에 GUI환경이 대다수 사용자에게 익숙하고 친숙함
  • 시각적 피드백
    • GUI 환경에서는 사용자가 작업을 수행할 때 시각적인 피드백 가능( 버튼 클릭시 시각적으로 눌름 확인가능)
  • 멀티태스킹 및 멀티윈도우 지원
    • 여러 작업을 동시에 수행하거나 여러 창을 동시에 열어 작업할 수 있도록 지원
  • 더 많은 기능과 옵션
    • 많은 GUI 애플리케이션은 다양한 기능과 옵션을 제공
    • 사용자는 이러한 기능과 옵션을 시각적으로 탐색하고 사용하 수 있음

GUI 환경 단점

  • 리소스 사용량
    • GUI는 그래픽 처리와 애니메이션 효과 등 필요하기에 시스템 리소스를 많이 사용함
  • 학습 곡선
    • 사용자가 익숙해 지기까지 그래픽 요소의 사용을 위한 학습이 필요
    • 복잡한 애플리케이션의 경우 사용법을 익히는 데 시간이 걸림
  • 작업의 번거로움
    • 일부 작업은 명령어를 통해 CLI 환경에서 더 빠르고 간단하게 수행가능
    • GUI 환경에서는 반듯이 일련의 단계를 거쳐야 함

 

CLI 환경 장점

  • 빠른 작업
    • 명령 줄을 통해 직접 명령어를 입력하여 작업을 수행할 수 있기 때문에 작업을 더 빠르게 수행할 수 있음
    • GUI 환경에서는 마우스를 사용해 메뉴를 탐색하는 경우가 많아 작업에 더 많은 시간이 소요
  • 자동화 및 스크립팅
    • CLI 환경은 명령어 스크립트로 작성하고 실행함으로 반복적인 작업을 자동화 할 수 있음
  • 리소스 사용량
    • CLI 환경은 일반적으로 GUI에 비해 시스템 리소스를 적게 사용함으로 시스템 성능과 안정성에 이점을 제공한다.
  • 원격 작업
    • 원격 서버 또는 네트워크 장치에 대한 원격 작업을 수행하는 데 효과적임
    • 텍스트 기반의 인터페이스로 원격으로 접속하고 명령을 실행할 수 있음

 

CLI 환경 단점

  • 기술적 지식 요구
    • 명령어를 사용해 작업을 수행하므로 일부 사용자에게 기술적인 지식이 필요
    • 명령어를 배우고 익히는 데 시간이 걸림
  • 시각적 피드백 부족
    • 작업의 시각적 피드백이 제한적임
    • 작업이 성공적으로 수행되었는지 확인하기 위해 추가적인 명령어나 로그 확인해야함
  • 작업 명령의 복잡성
    • 복잡한 작업은 여러 단계의 명령어를 조합하여 수행, 명령어를 순서대로 정확하게 입력해야 함
    • 복잡한 작업에서 여러 단계 명령어를 조합해 수행해야 하며, 정확히 입력하고 순서를 지켜야 함

 

Git GUI 환경

  • 장점: Git을 보다 직관적이고 편리하게 사용할 수 있도록 도와주고, 시각적 표현, 작업 편리성, 히스토리 관리 및 시각화, Git 기능의 완전성, 실시간 업데이트 등의 장점으로 Git을 보다 쉽고 효육적으로 활용할 수 있다.
  • 단점: 사용자에게 편의성과 시각 피드백을 제공하지만, 학습곡선, 기능제한, 성능 및 리소스 사용량, 일관성 및 호환성, 제한된 유연성 등 단점을 지님

Git CLI환경

  • 장점: 강력하고 완전한 기능, 자동화 및 스크립팅 가능성, 성능과 리소스 사용량의 효율성, 유연성과 확장성, 멀티플랫폼 지원, 원격 작업과 협업 기능 등을 제공
  • 단점: 학습 곡선, 복잡성, 시각적 피드백 부족, 복잡한 충돌 해결, 사용자 오류 가능성, 시스템 종속성 등의 단점 가짐

 

기본 명령어

  • Git/GitHub 소스 관리 기본 흐름

 

다음에는 Git/GitHub 소스 관리 기본 흐름 및 명령어들 학습예정

728x90