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과 같은 웹 사이트 빌드 도구를 사용할 수 있음
- 저장소에 간단한 마크다운(Markdown) 형식 파일을 저장하고 설정하면 간단한 웹사이트를 만들어 주는 서비스
- GitHub CoPilot
- AI, 머신러닝 기술을 사용해서 개발자가 작성하는 코드의 내용을 파악하고 나머지 코드를 대신 적어주는 서비스
- GitHub Codespace
- 저장소 안에서 별도의 다운로드나 설치 없이 웹 브라우저에서 런칭하여 코드를 개발할 수 있게 해주는 내장 IDE
- 원하는 방법으로 원하는 곳에서 작동하는 안전하고 구성 가능한 전용 개발 환경에서 개발을 시작할 수 있음
- GitHub 가입하기
- Git 가입하기
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
'PYTHON-BACK' 카테고리의 다른 글
#파이썬 21일차_GitHub Action + CI/CD (0) | 2024.07.29 |
---|---|
#파이썬 20일차_GitHub Action (1) | 2024.07.26 |
#파이썬 도서관 출납 시스템_18일차_var. 0.2.0 (3) | 2024.07.24 |
#파이썬 도서관 출납 시스템_18일차_var. 0.1.0 (0) | 2024.07.24 |
#파이썬 도서관 출납 시스템_17일차 (3) | 2024.07.23 |