ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Trunked Based Development
    Git 2023. 5. 7. 00:01
    728x90

    Trunked Based Development란?

    trunk(main or develop)이라 지칭하는 1개의 브랜치에 모든 개발자가 commit(PR)하고, Release는 별도의 브랜치로 관리한느 개발 방법입니다.

     

    여기서 말하는 trunk란 나무의 줄기를 의미하는 단어로, 소프트웨어에서는 메인라인 또는 마스터 브랜치를 의미합니다.

    보통 나무의 줄기에는 여러 가지(branch)가 뻗어나가는 구조를 가지며 우리가 흔히 아는 feature branch들이 될 수 있을 것 같습니다.

     

     

    TBD의 목표

    • 브랜치 관리에 드는 리소스가 대폭 절약된다, 각자 자신이 맡은 feature branch를 main branch와 싱크를 맞추면 된다.
    • 짧은 주기로 main에 머지되기 때문에, 머지 시 발생하는 변경이 작아집니다. 이는 충돌이 작아지고 코드리뷰가 용이해짐을 뜻합니다.
    • 배포하기 위해서는 main에 머지하는 것으로 충분하기 때문에 배포 프로세스가 간소화되어 더 자주 배포할 수 있게 됩니다.

     

    이제 이렇게 생각할 수 있습니다

    그냥 master에 push하는것과 뭐가 다른 거지?

    하지만 trunk based development를  잘 사용하기 위해서 준비해야 할 부분들이 존재합니다.

     

    이런 것들이 지켜져야 함

    • CI/CD를 통한 자동 빌드 환경 구축
      • Github action을 통해 항상 테스트가 통과해야 하는 등의 정책을 가져갈 수 있습니다.
    • 코드 자동 검증을 위한 Test Code 사용
      • 짧은 주기, 많은 PR이 발생하기 때문에 도메인로직의 검증 절차가 더 중요합니다. 즉, Test Code의 작성이 중요해집니다.
    • PR 단위가 매우 작아야 합니다, 각 작업은 브랜치의 생명주기 이틀을 넘기지 않아야 할 크기여야 합니다.

     

    TBD의 어려움

    장점이 있다면 단점도 존재할 수 있습니다.

    • 의존적인 기능 문제
      • 만들고자 하는 기능 A가 다른 기능 B의 릴리즈에 의존한다면, B기능이 완료되기 전까지 A기능도 배포하기 어렵습니다.
    • 불안정한 기능 문제
      • 스테이지 서버등에서 검증하고 배포하는 것이 아니라 바로 실서버로 배포하기 때문에 잘못된 기능이 메인 브랜치로 머지될 위험이 증가합니다.

     

    어떻게 해결할 것인가?

    • 더 작은 단위의 배포
    • 피쳐 토클

     

    피쳐 토글이란?

    특정 코드의 실행 여부를 코드 외부에서 제어할 수 있게 하는 시스템입니다.

    // isEnabled 함수는 서버 외부 설정에 따라, true / false중 하나를 반환
    if (isEnabled("awesome-feature")) {
      provideAwesomeFeature();
    } else {
      provideLegacyFeature();
    }

    isEnable 함수가 어떤 값을 반환할지는 서버 외부 설정으로 변경할 수 있습니다.

    예를 들어 개발자가 어드민 페이지에서 awsome-feature를 활성화하면 서버에서는 proviedAwesomeFeature가 실행되고 그렇지 않다면 provideLegacyFeature가 실행됩니다.

     

    이를 확장시키면 기능을 요청하는 유저마다 다른 값을 반환하게 할 수도 있으며 이로써 A/B테스트도 용이하게 진행할 수 있을 것 같습니다.

     

    두려움을 극복하자

    Git Flow에 불편함을 느끼고 TBD의 가치에 공감할 수 있습니다.

    하지만 가장 큰 허들은 "운영배포의 두려움"입니다.

    검증도 안 한 기능을 바로 운영에 올리는 것은 위험성이 존재하고, 당연한 반응입니다.

     

    마틴 파울러는 다음과 같이 말합니다.

    https://martinfowler.com/bliki/FrequencyReducesDifficulty.html

    어떤 일이 고통스럽다면 더 자주 해라

     

     

     

     

    참고자료

    https://tech.mfort.co.kr/blog/2022-08-05-trunk-based-development/

    https://tech.mfort.co.kr/blog/2022-11-24-feature-toggle/

    https://www.atlassian.com/continuous-delivery/continuous-integration/trunk-based-development

    https://trunkbaseddevelopment.com/

     

     

    'Git' 카테고리의 다른 글

    git init으로 Git Reposiotry 생성하기  (0) 2023.08.15
    Github Actions로 CI/CD 구축하기  (0) 2023.05.13
    Git 특정 commit diff 보는 법  (0) 2023.04.26
    Git 커밋 메시지 바꾸는 방법  (0) 2023.03.24
    Git Bio에 개행문자 넣기  (0) 2022.10.17

    댓글

Designed by Tistory.