기능 토글은 선택 사항이 아닙니다.

4124 단어
다음은 https://martinfowler.com/articles/feature-toggles.html의 설명입니다.

Feature Toggles (often also refered to as Feature Flags) are a powerful technique, allowing teams to modify system behavior without changing code. They fall into various usage categories, and it's important to take that categorization into account when implementing and managing toggles. Toggles introduce complexity. We can keep that complexity in check by using smart toggle implementation practices and appropriate tools to manage our toggle configuration, but we should also aim to constrain the number of toggles in our system.



좋습니다. 간단합니다. 새/이전 코드 블록을 실행해야 하는지 여부를 결정하기 위해 및 if/else를 생성하기만 하면 됩니다.

이제 기능 플래그가 선택 사항이 아니어야 하는 이유는 무엇입니까?
품질 때문입니다. 우리는 인간이고 실수할 수 있지만 지불 영역 내에서 실수를 하고 배포하고 쉬면 너무 비싸고 실패할 때 코드를 변경할 수 없고 누군가 코드를 읽어야 하거나 롤백해야 할 수도 있습니다. 그러나 다른 팀 구성원이 이미 배포되어 있기 때문에 일부 다른 기능이 영향을 받을 수 있으므로 변경 사항뿐만 아니라 다른 중요한 기능도 복원될 수 있습니다.
막다른 길입니다. 팀이 해결책을 찾았을 때 회사는 많은 돈을 잃었습니다.

새로운 기능을 쉽게 비활성화할 수 있는 방법이 필요합니다. 하지만 기능 토글이 중요한 경우가 여기에 있습니다. 모든 팀 구성원, 심지어 고객도 "기능 시스템"으로 이동하여 잠시 후 비활성화할 수 있기 때문입니다. . PRODUCTION 사이트에서는 1분 1초가 중요합니다.

그것은 좋은 이유이지만 더 많은 이유가 있습니다. 이제 보호에서 큰 기능이 개발되고 있고 3명의 개발자가 서로 다른 모듈에서 작업하고 있지만 그 중 한 명이 먼저 완료하고 주요 기능이 여전히 불완전하므로 코드를 프로덕션 사이트에 배포할 수 없다고 생각하십시오. 다른 팀 구성원이 완료될 때까지 분기를 열어 두십시오. 그러나 전체 기능이 완료되면 변경 사항을 병합해야 하며 예상한 코드 블록이 다른 팀 구성원에 의해 변경되었을 수 있습니다. 그러면 코드를 다시 업데이트하고 충돌을 수정하고 다시 테스트를 해보면 시간이 많이 걸린다고 생각합니다. 간단한 기능 토글이 해결책이 될 수 있습니다. 코드를 작성하기만 하면 됩니다. 종속성이 완전하지 않은 경우 기능 토글을 끄고(코드가 프로덕션에서 중단되는 것을 방지하기 위해) 변경 사항을 마스터로 쉽게 보낼 수 있습니다. 이렇게 하면 다른 팀원이 변경 사항을 갖게 되며 여기에서 작업이 완료됩니다. 축하합니다!

기능 토글은 기능 플래그라고도 합니다. 및 if/else만으로 매우 언어적으로 구현될 수 있지만 ENV 변수, 데이터베이스, 외부 기능 또는 자체 기능을 사용하여 개선할 수 있으며 복잡하지 않습니다.

원하는 IP, 환경, 호스트, 영역, 국가 등을 기반으로 추천 플래그 조건을 사용할 수 있습니다.

기본 예




if( useNewAlgorithm ){
   return enhancedSplineReticulation();
}else{
   return oldFashionedSplineReticulation();
}


동적 예




function reticulateSplines(){
  if( featureIsEnabled("use-new-SR-algorithm") ){
    return enhancedSplineReticulation();
  }else{
    return oldFashionedSplineReticulation();
  }
}


다음은 사용할 수 있는 서비스 목록입니다.
  • https://www.cloudbees.com/products/feature-flags
  • https://rollout.io/
  • https://www.unleash-hosted.com/
  • https://www.upstamps.com/
  • https://featureflags.io/

  • 개인적인 조언으로 기능 플래그 지정 플랫폼을 구입하고 자체 플랫폼을 구축하지 마십시오. 여기의 목표는 코드를 단순하게 만들고 숙련된 팀이 열심히 일하게 하는 것이기 때문입니다.

    그리고... 코드가 실행되고 검증된 후에 기능을 제거하십시오. 가능한 한 간단하게 유지하십시오.

    좋은 웹페이지 즐겨찾기