실무에서는 git을 익숙하게 사용하고 프로젝트 초반에 eslint 설정은 필수라고 들어왔다. 그래서 사용법을 익히고 공부하는데 급급했지만 왜 이러한 도구들을 사용해야하는가에 대한 고민은 해보지 못했던 것 같다. 이번 주제를 고민하면서 그 필요성이 등장한 이유들을 중점적으로 알아보고 싶었다.
먼저 소프트웨어 개발에 있어서 형상관리(Software configuration Management) 도구가 등장하게 된 이유가 궁금했다. 내가 웹개발을 공부하기 시작할 때는 이미 git 사용이 보편화되었지만 과연 git과 같은 형상관리도구가 등장하기 전에는 소프트웨어 개발이 어떤 식으로 진행되었을까?
형상 관리 프로그램이 대중적이지 않던 시절에는 파일 서버를 기반으로 소스 코드, 리소스 등을 관리하였습니다. 이러한 파일 서버 기반의 버전 관리는 다음과 같은 심각한 문제를 야기합니다.
- 파일이 삭제될 경우 복구할 방법이 없다. 파일이 삭제되는 경우를 대비해서 백업을 해두지만 시점 차이로 인한 데이터 손실은 피할 수 없다.
- 하나의 파일을 여러 사람이 동시에 작업할 수 없다.
- 이전 데이터로 복구할 수 없다. 예를 들어 소스 코드 작성 중에 이전 소스 코드로 되돌아가는 것이 불가능하다. 이런 상황을 대비해서 소스 코드를 백업하거나 소스 코드에 과거 이력 코드를 주석으로 남겨놔야 한다.
나는 전 회사에서 기획자분과 협업할 때 파일 서버 기반으로 리소스를 공유했었다. 예를 들면 홈페이지 수정이 필요한 부분을 기획자님이 pdf로 정리해 이메일이나 카카오톡으로 전달해주시는 방식이다. 이런 식의 파일에 기반한 협업은 pdf가 여러 버전으로 수정되었는데 각 작업자가 해당 작업하는 시점이 서로 맞지 않으면 각자 다른 버전의 파일을 기반으로 소통할 확률이 커지고 그렇게 불필요한 시간낭비를 하게 된다. 또 여러 사람이 한 가지 프로젝트에 대해 병렬적으로 기능들을 담당했다면 추후 프로젝트 완성 전에 서로 공유하고 합치는데 문제가 발생할 것이다.
이러한 파일 서버 기반 개발 관리의 문제점을 해결하기 위해 개발된 형상 관리 도구는 다음과 같은 장점을 가지고 있다.
출처: https://taetae0079.tistory.com/m/24
**Git-flow 전략을 설명하는 다음 이미지처럼 프로젝트를 배포할 때마다 이루어지는 병렬적인 작업들을 효과적으로 관리하는데 형상관리도구는 프로젝트를 진행하면서 발생할 수 있는 여러 상황들을 유연하고 일관성있게 대처할 수 있게 해준다.**
소프트웨어를 개발할 때 기술적인 부분을 담당한 엔지니어들은 코드를 기반으로 협업한다. 특히 코딩 스타일에는 정답이 없기 때문에 서로 자신이 맞다고 생각하는 스타일이 있을 것이고 이렇게 생각이 다양한 여러 사람이 같이 코딩을 하면 다양한 스타일들의 차이가 발생할 수밖에 없다. 모두가 만족할만한 코딩 스타일을 찾는 일은 소모적인 논쟁으로 치우치기 쉽다. 어찌보면 사소한 문제이지만 매일 코드를 보고 작업해야하는 엔지니어들에게는 중구난방식의 코딩 스타일은 개발 경험을 부정적으로 만들고 다른 사람이 작성한 코드를 유지보수를 할 때도 시간낭비를 발생시킬 수 있을 것 같다.
이번 주제를 고민하며 다양한 자료들을 접하며 git과 eslint에 익숙해지는 것이 소프트웨어를 개발한다는 목표를 향해 여러 엔지니어들과 함께 협업할 때 얼마나 많은 편의성을 제공해주는지 다시 생각해보게 되었다. 이러한 도구들을 사용함으로써 소프트웨어 개발 시 발생할 수 있는 다양한 문제들에 효율적으로 대처할 수 있다면 러닝커브가 높더라도 많은 시간과 노력을 투자할 만한 충분한 가치가 있다는 것도 납득할 수 있게 되었다.