TDD and Refactoring Help

Branch vs Trunk Based Delivery

브랜치 기반 전달

gitflow.png
  • 절차

    • 릴리즈 브랜치 생성

    • 릴리즈 브랜치에서 배포할 여러가지 기능들을 모아서 검증 & 수정

    • 배포

  • 문제점

    • 한번에 한 기능씩 브랜치를 만들어서 전달한다면 대기가 발생하고, 동시에 여러 개의 브랜치에서 전달을 진행하면 통합의 어려움이 있음

    • 그래서 한 개의 브랜치에 여러개의 기능을 모아서 전달하게 되는 경향이 있음

      • 이럴 경우 검증이 복잡하여 시간이 오래 걸림

        • 그로 인해 1주마다 배포하던 것을 2주, 1달로 늘려서 배포하게 됨

      • 배포 후 문제가 발생했을 때 원인 파악이 어려움이 생김

      • difficulty-in-frequences.png
  • 예.

    • 금요일에 배포가 어려우니 목요일 새벽 정도에 여러가지 기능을 모아서 검증 후 배포

      • 배포 후 문제가 생기면 롤백, 다음 주 목요일에 다른 기능 추가하여 다시 시도

      • 더 문제가 발생할 가능성이 높아짐

    • 배포 준비에 소요되는 시간이 많아서 개발할 시간이 부족해짐

    • 배포를 1주가 아니라 2주마다로 변경

    • 더 많은 변경을 검증, 배포해야 해서 배포에 더 많은 위험이 수반됨

  • 수백명의 개발자들이 진행하는 프로젝트와 같이 느리더라도 안정적인 대규모 배포에 적합

  • 롤백이 어려운 프로젝트에 적합(예. 펌웨어, 하드웨어 등)

  • difficulty=of-gitflow.png
    • 이 방식을 만든 사람(2010년에 만듦)도 이 방식은 웹, 앱과 같은 변경이 빈번한 경우 cotinuous delivery 방식이 더 적합하도 함

트렁크 기반 전달

trunk-based-delivery.png
  • 절차

    • 한가지 기능을 코드리뷰, 개발자 테스트 등을 수행한 후 바로 배포

  • 장점

    • 한번에 하나의 작은 변경만 반영되므로 문제가 발생했을 때 원인 파악과 롤백이 용이

    • 빠른 상시 배포 가능하여 사용자가 원하는 기능을 빠르게 전달 가능

  • 단점

    • 검증에 많은 시간을 투여하지 않으므로 결함이 있는 기능이 배포될 위험이 존재

      • 코드 리뷰를 통한 검증

      • 충분한 검증이 필요한 경우는 스테이지에 배포 후 검증 수행하고 있음

    • 단기에 배포하기 어려운 큰 기능

      • 기능 플래그를 활용해서 덜 준비되더라도 안정적으로 배포하고 있음

  • 트렁크 기반 배포는 작은 규모의 프로젝트나 빠른 개발 사이클을 필요로 하는 프로젝트에 적합

If it hurts, do it more often - 연말 정산

if-it-hurts.png
  • 큰 문제는 기간 산정도 어렵고, 계획하기도 어렵고, 실행하기도 어려움

  • 큰 문제를 작은 문제로 나누면 예측 가능성이 생기고, 실패를 해도 빠르고 복구할 수 있음

참고자료

Last modified: 31 October 2024