자격증/정보처리기사

정보처리기사 2과목 소프트웨어 개발 (버전 관리 도구(클라이언트/서버 방식 SVN과 분산 저장소 방식 Git), 깃허브 차이점)

ByeongJun 2023. 5. 7. 02:39
반응형

버전 관리가 필요한 이유

개발자 간의 협업을 위해 전체 개발 소스를 공유하면서 개발 파트를 나눌 수 있고 

같은 모듈을 개발하더라도 소스를 공유하며 개발할 수 있기 때문이다. 

 

 


공유 폴더 방식

  • 버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식
  • 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사함
  • 담당자는 공유 폴더의 파일을 자기 PC로 복사해 컴파일 한 후 이상 유무 확인
  • 파일의 변경 사항을 데이터베이스에 기록하며 관리

 

 


클라이언트/서버 방식

  • 버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
    ex) CVS (Concurrent Versions System, 동시 버전 시스템), SVN (Subversion)
  • 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사해 작업한 후 변경된 내용을 중앙 서버에 반영
  • 모든 버전 관리는 서버에서 수행됨
  • 하나의 파일을 서로 다른 개발자가 작업할 경우 경고 메시지 출력
  • 서버에 문제가 생기면 다른 개발자와의 협업 및 버전 관리 작업은 중단

 

SVN(Subversion)
- CVS를 개선한 것으로 아파치 소프트웨어 재단에서 2000년 발표함
- 모든 개발 작업은 trunk 디렉터리에서 수행되며, 추가 작업은 branches 디렉터리 안에 별도의 디렉터리를 만들어
  작업을 완료한 후 trunk 디렉터리와 병합(merge)

- 커밋(Commit)할 때마다 리비전(Revision) 1씩 증가
- 서버는 주로 유닉스(UNIX) 사용
- 오픈 소스로 무료사용 가능
- CVS의 단점이었던 파일이나 디렉터리의 이름 변경, 이동 등이 가능
명령어 의미
add 새로운 파일이나 디렉터리를 버전 관리 대상으로 등록
commit 버전 관리 대상으로 등록된 클라이언트의 소스 파일을 서버의 소스 파일에 적용
update 서버의 최신 commit 이력을 클라이언트의 소스파일에 적용
checkout 버전 관리 정보와 소스 파일을 서버에서 클라이언트로 받아옴
lock/unlock 서버의 소스 파일이나 디렉터리를 잠그거나 해제
import 아무것도 없는 서버의 저장소에 맨 처음 소스 파일을 저장하는 명령으로 한 번 사용 후 다시 사용하지 않음
export 버전 관리에 대한 정보를 제외한 순수한 소스 파일만을 서버에서 받아옴
info 지정한 파일에 대한 위치나 마지막 수정 일자 등에 대한 정보를 표시
diff 지정된 파일이나 경로에 대해 이전 리비전과의 차이를 표시
merge 다른 디렉터리에서 작업된 버전 관리 내역을 기본 개발 작업과 병합

 

 


분산 저장소 방식

  • 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식
    ex) Git, Bitkeeper
  • 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사해 작업한 후
    변경 된 내용을 로컬 저장소에서 우선 반영(Commit) 한 다음 이를 원격 저장소에 반영(Push)
  • 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용해 작업 가능
  • 로컬 저장소에서 작업을 수행할 수 있어 처리속도가 빠름



Git (깃)
- 리누스 토발즈(Linus Torvalds) 2005년 리눅스 커널 개발에 사용할 관리 도구
  개발한 이후 주니오 하마노(Junio Hamano)에 의해 유지 보수되고 있음

- 원격 저장소는 여러 사람들이 협업을 위해 버전을 공동 관리하는 곳,
  자신의 버전 관리 내역을 반영(Push)하거나 다른 개발자의 변경 내용을 가져올 때(Fetch) 사용

- 로컬 저장소는 개발자들이 본인의 실제 개발을 진행하는 장소로 버전 관리가 수행됨
- 브랜치(Branch)를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능 테스팅 가능
- 파일의 변화를 스냅샷(Snapshot)으로 저장
- 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름 파악 가능

 

 

  1. git init               (로컬 저장소 생성)
  2. git remote add (원격 저장소 연결)
  3. git add -all        (작업 내역을 로컬 저장소에 저장하기 위해 스테이징 영역에 추가)
  4. git commit        (작업 내역을 로컬 저장소에 저장)
  5. git push            (로컬 저장소에 저장한 내역을 원격 저장소에 반영) 

 

 

명령어 의미
add - 작업 내역을 로컬 저장소에 저장하기 위해 스테이징 영역에 추가,
- ‘--all’ 옵션으로 작업 디렉터리의 모든 파일을 스테이징 영역에 추가 가능
commit 작업 내역을 로컬 저장소에 저장
branch -최초로 commit을 하면 master branch 생성됨
- commit 할 때마다 해당 브랜치는 가장 최근의 commit한 내용을 가리킴
- ‘-d’옵션으로 브랜치 삭제 가능
checkout 지정한 브랜치로 이동
merge 지정한 브랜치의 변경 내역을 현재 HEAD 포인터가 가리키는 브랜치에 반영함으로써 두 브랜치를 병합
init 로컬 저장소를 생성
remote add 원격 저장소에 연결
push 로컬 저장소의 변경 내역을 원격 저장소에 반영 (올리기)
fetch 원격 저장소의 변경 이력만을 로컬 저장소로 가져와 반영 (내려받기)
clone 원격 저장소의 전체 내용을 로컬 저장소로 복제 (완전 똑같게 전체 내려받기)
fork 지정한 원격 저장소의 내용을 자신의 원격 저장소로 복제

 

 

Git과 Github 차이점

Git

Github

  • 오픈 소스 버전 관리 시스템
    (VCS: Version Control System)
  • 로컬에서 버전 관리
  • 소프트웨어 개발 및 소스 코드 관리에 사용
  • Git Repository를 위한 웹 기반 호스팅 서비스
  • 클라우드 서버를 사용해서 로컬에서 버전 관리한
    소스코드를 업로드하여 공유 가능
  • 분산 버전 제어, 액세스 제어, 소스 코드 관리, 버그 추적, 기능 요청 및 작업 관리를 제공
버전 관리 프로그램
(로컬 저장소를 사용하기 때문에
다른 개발자와 실시간 작업 공유 불가)
버전 관리, 소스 코드 공유, 분산 버전 제어 등이
가능한 원격 저장소 (git의 기본적인 기능을 확장해 제공하며,
클라우드 서버에 소스를 올리기 때문에
다른 개발자들과 버전 제어 및 공동 작업이 가능
)
반응형