Pyohwan / english-study

0 stars 0 forks source link

Patterns for Managing Source Code Branches #33

Open Pyohwan opened 4 years ago

Pyohwan commented 4 years ago

https://martinfowler.com/articles/branching-patterns.html

Patterns for Managing Source Code Branches

Base Patterns

Feature Branching and Open Source

Reviewed Commits

메인라인에 대한 모든 커밋이 수락되기 전에 동료가 검토한다

  • 코드 리뷰는 코드 품질을 향상 시키고, 모듈화, 가독성을 향상 시키며, 결함을 제거하므로 오랫동안 장려 해왔다.
  • 상용 조직에서는 개발 워크플로우를 맞추기가 어렵다는 것을 알게 됨
  • 오픈소스 세계에서는 널리 사용됨
  • Reviewed Commits 은 오픈 소스에서 인기를 끌었고, 헌신적인 메인티너와 컨트리뷰터가 있는 조직 모델과 잘 어울린다.
  • Reviewed Commits 의 약속을 위한 규율을 정하는것이 중요
  • 어떤 개발자가 어떤 일을 마치고 다른 일을 한다면? 검토 확정까지 추가 적인 개발이 어렵다.
  • Reviewed Commits 와 Continuous Integration 은 함께 할 수 있긴 한데, Reviewed Commits and Feature Branching 이 일반적인 조합이다.

    When to use it

  • 지난 10년 동안 Reviewed Commits 은 관행이 되었지만, 단점과 대안이 있다.
  • Reviewed Commits 을 잘 수행해도, 통합 프로세스에 항상 약간의 대기시간 발생하여 통합 빈도가 낮아진다.
  • Pair Programming 은 코드 리뷰보다 빠른 피드백 가능
  • Reviewed Commits 을 사용하는 팀은 빠르게 커밋하지 않는다.
  • 귀중한 피드백은 너무 늦어서 유용하지 않다.
  • reviewed commits 은 귀중한 관행이 될 수 있지만, 리더에 지나치게 의존하지 않는 균형 잡힌 팀을 키우려는 경우, 건강한 코드 기반으로의 필수 경로는 아니다.

Integration Friction

The Importance of Modularity

Personal Thoughts on Integration Patterns

The path from mainline to production release

Maturity Branch

코드기반 성숙도의 버전을 표시

  • "production branch", "staging branch", and "QA branch" 과 같은 분기 image

Environment Branch

소스 코드 커밋을 적용한 새 환경에서 실행되는 제품 구성

  • 소프트웨어는 일반적으로 워크스테이션, 프로덕션 서버 등 다양한 테스트 및 스테이징 환경에서 실행해야 한다.
  • 메인라인에서 새분기를 만들고, 적절한 환경 변경 사항을 적용하고, 제품을 재구성해서, 스테이징 환경에 배치한다. image
  • 변경 사항은 일반적으로 수작업으로 적용

    When to use it

  • 새로운 환경에 대비할 수 있는 좋은 방법이지만, 매우 고전적인 안티 패턴이다.
  • 모든 환경에서 실행되는 동일한 실행 파일이 필요하며, 환경 파일은 분리시켜야 한다.

Hotfix Branch

긴급한 프로덕션 결함을 해결하기 위한 작업을 캡쳐 지점

  • 프로덕션에 심각한 버그가 나타나면 가능한 빨리 수정해야 한다.
  • 수정이 적용된 프로덕션의 핫픽스는 메인라인에 적용되고, 다음 버전에서 회귀가 발생하지 않도록 해야 한다.

Release Train

정기 일정으로 출발하는 열차처럼 정해진 시간 간격으로 출발

  • 2주 마다 또는 6개우러 마다 정기적으로 릴리스를 설정
  • 기능이 완료될 시기를 예측하는데 도움
  • 단점은, 중요 기능이 몇주 또는 몇 달 동안 누락 되어 있음
  • 릴리스 트레인을 사용하다가, 팀이 점점 나아지면 결국 continuous delivery 로 갈 수 있다.

Release-Ready Mainline

메인라인 헤드를 항상 프로덕션에 넣을 수 있도록, 메인라인을 건강하게 유지

  • 메인라인이 건강하면 언제든지 메인라인을 릴리스해서 태그로 릴리스 기록 가능하다 image

When to use it

Final Thoughts and Recommendations