VCS(Version Control System)
- 버전 관리 시스템.
소프트웨어에서는 소스코드를 VCS를 통해 관리한다. 버전을 관리해야 하는 여러 이유가 있지만 실무에서 있을법한 사례로 왜 사용해야 하는지 그 이유를 알아보자.
DEV기업에서 운영하고 있는 devTroh라는 웹사이트를 운영하고 있다. devTroh에서는 현재 "회원 탈퇴 기능"과 "회원 정보 수정" 기능을 구현해야 한다. 2명의 개발자(A,B)가 각 기능을 구현하기로 정해졌다. 각 개발자가 확인을 하다보니 모두 User컨트롤러와 User서비스라는 수정해야 했다. 하지만 2명의 개발자가 User클래스를 동시에 수정할 수 있을까..?
class UserController {
//로그인.
//로그아웃.
}
class UserService {
//로그인 처리.
//로그아웃 처리.
}
현재 UserController와 UserService 클래스는 위와 같다. A개발자는 회원 탈퇴 기능을 구현하기 위해서 컨트롤러와 서비스에 회원 탈퇴 기능을 위한 코드를, B개발자는 회원 정보 수정 기능을 구현하기 위한 코드를 구현해야 한다.
class UserController {
//로그인
//로그아웃
//회원탈퇴
}
class UserService {
//로그인
//로그아웃
//회원탈퇴
}
< 개발자A의 소스 코드 >
class UserController {
//로그인
//로그아웃
//유저정보수정
}
class UserService {
//로그인
//로그아웃
//유저정보수정
}
< 개발자B의 소스 코드>
만약 A개발자가 먼저 회원 탈퇴 기능을 구현한 뒤 운영 서버에 반영하였다. 사이트에는 회원 탈퇴 기능이 정상적으로 동작하게 되었다. 이후 B개발자가 유저 정보를 수정하는 기능을 완성하였는데 B개발자에는 회원 탈퇴 기능을 하는 소스코드가 없다 !! 이대로 운영서버에 반영한다면 devTroh 사이트에서는 회원 탈퇴 기능이 동작하지 않을 것이다. 이 문제를 해결하려면 두 개발자의 소스코드를 합친 뒤에 운영서버에 반영해야 한다. 위와 같이 2개의 클래스가 아니라 수십개의 클래스를 각자 생성/수정/삭제 했다면 사람이 이를 정확하게 수정할 수 있겠는가..? 절망적인 상황이다.. VCS를 이용하면 위와 같은 문제를 해결할 수 있다.
위의 예시는 개발자 간의 협업을 위한 예시였는데 1인 개발자라고 하더라도 하나의 기능을 수정하고 반영했는데 오류가 발생했다. 오류가 발생하기 이전 소스코드로 되돌리고 싶은데 따로 저장해둔 것이 없다면 다시 기능을 구현해야하는 상황이 발생한다. 이정도면 소스코드 관리를 해야하는 이유로 충분하지 않을까 생각한다. 자 그럼 이제 VCS에 어떤 것들이 있는지 살펴보자.
중앙 집중식 버전 관리 시스템(SVN) VS 분산형 버전 관리 시스템(GIT)
버전 관리 시스템의 방식에는 중앙 집중식 버전 관리와 분산형 버전 관리가 있을 수 있다. 각 방식의 대표적인 시스템은 중앙 집중식의 SVN과 분산형의 GIT이 있다.
중앙 집중식 버전 관리 시스템(CVCS - Centeralized Version Control System)
소스 코드를 중앙 서버 한곳에서 관리하는 방식이다. 각 개발자는 중앙에서 관리하는 소스코드를 다운받은 뒤 각자 작업을 한 후 다시 중앙 서버로 올려보낸다.
단점: 중앙서버 한 군데서 소스코드를 관리하기 때문에 중앙서버에 문제가 발생할 경우 여러가지 문제가 생긴다. 서버가 다시 복구 될때까지 다른 사람과 협업이나 진행중이던 버전관리에도 문제가 생긴다.
분산형 버전 관리 시스템(DVCS - Distributed Version Control System)
중앙 서버의 마지막 버전만 가져오는 대신 저장소 자체를 복제하는 방식. 즉 로컬에 소스코드를 관리하는 또 하나의 저장소가 생기는 것.
장점: 중앙 서버에 문제가 생겼을 시 로컬 백업본을 이용하여 복구가 용이함(저장소 자체를 복제하는 방식이기 때문)
요새는 Git이 대세인 것 같으니 Git부터 알아보자.