실용주의 프로그래머 Topic 19

Topic 19 버전 관리

데이비드 토머스, 앤드류 헌트

Alt text

느낌표 ! (인상 깊은 문장 | 문맥)

버전 관리 시스템은 일종의 거대한 ‘실행 취소’ 키와 같다. 프로젝트 전체에 걸쳐서 코드가 실제로 컴파일되고 실행되던 지난주의 평화로운 시절로 돌려줄 수 있는 타임머신이다.

p. 119

위와 같은 버전 관리 장점을 누리고 있다. 필자의 경우 우선 코드를 작성하고 예상대로 동작하면 커밋을 한 후 리펙토링을 진행한다. 리펙토링이란 아웃풋은 같지만 내부 코드를 변경하는 것이 때문에 기존 코드와 같은 결과 값이 나오는지 확인하면 된다. 기존 코드를 커밋 후 리펙토링을 할 경우 파일 diff 를 보고 다시 한 번 기존의 로직을 모두 포괄하고 있는지 등을 확인하기 좋다. 또한 이전 버전과 현재 버전을 보며 흐뭇한 것도 느낄 수 있다. 때로는 리펙토링이 산으로 가서 되돌려야할 경우가 있는데 이럴 때는 그냥 롤백하면 끝난다.

버전 관리 시스템은 실수를 되돌리는 것 외에도 아주 많은 일을 한다. 좋은 VCS 를 사용하면 변경 사항을 추적하여 다음과 같은 질문에도 답할 수 있다. 코드의 이 줄을 누가 바꿨을까? 현재 버전과 지난주 버전은 어디가 달라졌나?

p.120

때로는 특정 코드를 보고 어떠한 역할을 하는지 의문이 들 때가 있다. 이 때 파일의 git history 와 커밋 메시지를 보며 유추할 수 있다.(커밋 메시지를 잘 남겼다면..) 필자는 변경 사항들을 잘 유추하기 위해 커밋 단위를 작게 하는 편이다.

브랜치는 프로젝트의 작은 복사본이라고 할 수 있다. 브랜치의 장점 중에 다른 브랜치로부터 격리된다는 것이 있다.

p.121

과거 회사에서 브랜치를 release, develop, feature/*, bug/* 로 나누어 사용하였다. 그때까지 브랜치를 왜 써야하는지 이해를 못 했었는데 코드 병합에 이점과 각 브랜치 별로 deployment 를 적용할 수 있는 것을 보고 생각이 트였던 것이 떠오른다. 역시 경험해보고 부딪혀보는 것 만큼 얻을 수 있는 것은 없다.

Topic 19 느낌

Topic 19 에서는 이제 필자에게는 당연해졌지만 버전 관리를 통해 여러 이점을 누리라고 차분히 설명하고있다.


실용주의 프로그래머 Topic 18

Topic 18 파워 에디팅

실용주의 프로그래머 Topic 20

Topic 20 디버깅

NCloud LB & SourcePipeline 구축하기
tech collection 서비스 성능 개선하기
Selenium 복권 구매 자동화 만들어보기
디자인 패턴
책 리뷰
블로그 챌린지