형상관리 도구 종류
그 중 SVN이란?
형상관리 도구(Version Control System 또는 Source Code Management)는 소프트웨어 개발 프로젝트에서 코드와 리소스의 변경 내역을 관리하고 추적하는 데 사용되는 소프트웨어 도구이다. 다양한 형상관리 도구가 존재하며, 형상관리 도구는 대규모 프로젝트에서는 필수이다. 형상관리, 협업, 소스코드 공유 등등 가독성 있게 관리하기 쉽게 만들어주는 도구이며 회복 및 백업도 용이하게 할 수 있다. 형상관리 도구에 대해 설명을 하자면,
형상관리 도구 종류
- Git
Git은 분산형 버전 관리 시스템으로, 가장 널리 사용되고 인기 있는 형상관리 도구 중 하나
소스 코드 변경 내역을 추적하고, 여러 개발자가 협업할 때 코드 충돌을 관리
브랜치를 통한 기능 분리 및 병합을 지원하며, 오픈 소스로 공개되어 있어 무료로 사용 가능
- Subversion (SVN)
SVN은 중앙 집중형 버전 관리 시스템으로, 파일의 변경 내역을 중앙 저장소에서 관리
브랜치와 태그를 사용하여 다양한 버전을 관리
팀 협업을 위한 권한 관리 및 안정성을 제공
- Mercurial
Mercurial은 또 다른 분산형 버전 관리 시스템으로, Git과 유사한 기능을 제공
사용자 친화적인 명령어와 간단한 설정을 통해 빠르게 시작이 가능
상대적으로 더 간단하고 직관적인 사용자 인터페이스를 제공
- Perforce (Helix Core)
Perforce는 대규모 팀 및 프로젝트에서 사용되는 중앙 집중형 형상관리 도구
고성능과 확장성을 갖추고 있으며, 대용량 파일 및 이진 파일 관리에 적합
주로 게임 개발 및 그래픽 디자인 분야에서 사용
- TFS (Team Foundation Server) / Azure DevOps
TFS 및 Azure DevOps는 Microsoft가 개발한 형상관리 도구 및 소프트웨어 개발 플랫폼
코드 관리, 빌드 자동화, 이슈 추적 및 프로젝트 관리 등 다양한 개발 생명 주기 관리 기능을 통합적으로 제공
- CVS (Concurrent Versions System)
CVS는 오픈 소스로 개발된 중앙 집중형 형상관리 도구로, 과거에 널리 사용되었음
현재는 Git 및 SVN과 같은 다른 도구로 대체되었지만, 각 형상관리 도구는 특정 프로젝트의 요구 사항과 팀의 작업 방식에 따라 선택되며 개발자 및 팀이 협업하고 변경 관리를 효과적으로 수행하는 데 도움줌
SVN에 대하여
형상관리 도구에서는 Git을 많이 사용하곤 한다. 대규모 프로젝트를 제외하더라도 소규모 팀프로젝트 또는 개인과제 등을 Git 레파지토리에 올리곤 한다. Git은 접근성도 쉽고 가장 유명한 형상관리 도구라고 생각하기에 필자가 SI 프로젝트에서 사용한 SVN에 대해 적어보려고 한다. SVN은 위에 적었던 것처럼 안정성을 보장하고 사용법이 간단하기 때문에 많이 사용된다.
Git과 SVN의 차이로는 가장 크게 분산형 & 중앙 집중형이다. Git은 커뮤니티나 여러 정보들의 접근이 쉽고 빠르다. 하지만 SVN은 Git에 비해 한정적이다. 작업속도 또한 SVN은 서버 속도에 의존하기도 한다. 이 점들만 봐도 왜 Git을 사용하지않고 SVN을 사용하는지 궁금했다. 접근방식이 다르기 때문에 SVN도 보안적인 부분에선 더 좋다고 한다.
사실, SVN을 사용하는 가장 중요한 이유는 대체불가능하기 때문이다. AS-IS에서 TO-BE로 프로젝트를 변경할 때는 이미 만들어진 AS-IS를 기준으로 큰 변경을 주기가 힘들다. 환경 자체를 바꾸게 된다면 변경이 아닌 신규 개발의 느낌이기 때문이다. 여태 사용되었던 형상관리 도구 중 SVN은 정말 오래된 도구이기도 하고, 많은 시간동안 사용되어왔다.
SVN 용어
1. Repository (저장소): SVN에서 모든 버전된 파일과 폴더가 저장되는 중앙 서버 또는 저장 공간을 의미하며, 개발자들은 저장소에서 코드를 체크아웃하여 작업하고, 변경 내용을 커밋한다.
2. Checkout (체크아웃): 저장소에서 프로젝트의 특정 버전을 로컬 컴퓨터로 가져오는 과정을 의미하며, 개발자들은 체크아웃을 통해 프로젝트의 복사본을 작업 디렉터리로 내려받아 수정하거나 확인할 수 있다.
3. Commit (커밋): 로컬 작업 디렉터리에서 변경된 내용을 저장소로 업로드하는 과정이다. 커밋을 통해 변경 내용이 저장소에 기록되며, 다른 개발자들과 공유한다.
4. Update (업데이트): 다른 개발자가 저장소에 변경 내용을 커밋한 경우, 업데이트를 통해 로컬 작업 디렉터리를 최신 버전으로 갱신할 수 있다. 충돌을 방지하고 최신 변경 사항을 반영할 수 있다.
5. Revision (리비전): SVN에서는 각 커밋마다 고유한 숫자(리비전 번호)를 할당하며, 리비전 번호를 통해 특정 시점의 코드 상태를 식별하고 비교할 수 있다.
6. Branch (브랜치): 프로젝트의 특정 버전을 기반으로 만들어진 복사본을 의미하며, 브랜치를 사용하여 동시에 여러 개의 기능 또는 버전을 개발하고 관리할 수 있다.
7. Tag (태그): 특정 시점에서 프로젝트의 상태를 고정하는 데 사용되며, 보통 릴리즈 또는 중요한 마일스톤을 나타내기 위해 태그를 만든다.
8. Merge (병합): 브랜치에서 개발한 변경 내용을 메인 또는 다른 브랜치로 합치는 과정이며, 다른 개발자들과 협업하거나 개발 브랜치를 메인 브랜치로 통합할 때 사용한다.
9. Conflict (충돌): 두 개 이상의 개발자가 동일한 파일 또는 부분을 수정하고 커밋할 때 발생하는 상황을 의미한다. 충돌은 수동으로 해결해야 하며, 자동으로 병합되지 않는다.
10. Lock (락): 다른 개발자가 파일을 수정하지 못하도록 잠그는 기능이며, 락을 사용하여 특정 파일을 단일 사용자에게 독점적으로 제한이 가능하다.
SVN 용어 예시
많이 사용되는 SVN용어를 순서대로 대충 설명하자면,
- 프로젝트에 처음 투입된다면, 레파지토리에 접근하여 기존 코드를 체크아웃해서 내려받는다.
- 받은 코드는 로컬에 저장되고 대부분 신규개발을 완료해서 중앙서버에 올리고 싶다면 커밋.
- 유지보수를 진행했다면 업데이트를 누른다.
- 잘못된 커밋으로 인해 오류가 나는 부분이 있다면 리비전을 확인하여 담당자에게 수정 요청한다.
- 개발이 완료되고 유지보수 중 새로운 버전이 나온다면 새로운 브런치를 생성하여 버전 수정을 한다.
예를 들어, 적어본 것이며 실제로 프로젝트에서 이러한 용어는 많이 사용한다. 만약 SVN를 사용하여 신규개발 또는 유지보수를 한다면 알아둬도 좋을 것 같다.
'개발 지식' 카테고리의 다른 글
[개발지식] 레드마인(PMS)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.07.12 |
---|---|
[개발지식] 롬복(Lombok)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.06.28 |
코드 리팩토링(Refactoring)이란? | 민민의 하드디스크 - 티스토리 (1) | 2023.06.26 |
[개발 지식] Spring과 Spring boot란? | 민민의 하드디스크 - 티스토리 (1) | 2023.06.16 |
[개발 지식] SQL 인젝션(Injection)이란? | 민민의 하드디스크 - 티스토리 (0) | 2023.06.12 |