Topic 19 버전 관리
데이비드 토머스, 앤드류 헌트
느낌표 ! (인상 깊은 문장 | 문맥)
버전 관리 시스템은 일종의 거대한 ‘실행 취소’ 키와 같다. 프로젝트 전체에 걸쳐서 코드가 실제로 컴파일되고 실행되던 지난주의 평화로운 시절로 돌려줄 수 있는 타임머신이다.
p. 119
위와 같은 버전 관리 장점을 누리고 있다. 필자의 경우 우선 코드를 작성하고 예상대로 동작하면 커밋을 한 후 리펙토링을 진행한다. 리펙토링이란 아웃풋은 같지만 내부 코드를 변경하는 것이 때문에 기존 코드와 같은 결과 값이 나오는지 확인하면 된다. 기존 코드를 커밋 후 리펙토링을 할 경우 파일 diff 를 보고 다시 한 번 기존의 로직을 모두 포괄하고 있는지 등을 확인하기 좋다. 또한 이전 버전과 현재 버전을 보며 흐뭇한 것도 느낄 수 있다. 때로는 리펙토링이 산으로 가서 되돌려야할 경우가 있는데 이럴 때는 그냥 롤백하면 끝난다.
버전 관리 시스템은 실수를 되돌리는 것 외에도 아주 많은 일을 한다. 좋은 VCS 를 사용하면 변경 사항을 추적하여 다음과 같은 질문에도 답할 수 있다. 코드의 이 줄을 누가 바꿨을까? 현재 버전과 지난주 버전은 어디가 달라졌나?
p.120
때로는 특정 코드를 보고 어떠한 역할을 하는지 의문이 들 때가 있다. 이 때 파일의 git history 와 커밋 메시지를 보며 유추할 수 있다.(커밋 메시지를 잘 남겼다면..) 필자는 변경 사항들을 잘 유추하기 위해 커밋 단위를 작게 하는 편이다.
브랜치는 프로젝트의 작은 복사본이라고 할 수 있다. 브랜치의 장점 중에 다른 브랜치로부터 격리된다는 것이 있다.
p.121
과거 회사에서 브랜치를 release, develop, feature/*, bug/* 로 나누어 사용하였다. 그때까지 브랜치를 왜 써야하는지 이해를 못 했었는데 코드 병합에 이점과 각 브랜치 별로 deployment 를 적용할 수 있는 것을 보고 생각이 트였던 것이 떠오른다. 역시 경험해보고 부딪혀보는 것 만큼 얻을 수 있는 것은 없다.
Topic 19 느낌
Topic 19 에서는 이제 필자에게는 당연해졌지만 버전 관리를 통해 여러 이점을 누리라고 차분히 설명하고있다.