Behind Feature Flags에 배포된 GitLab 기능의 활성화 및 비활성화

Tier: 무료, 프리미엄, 얼티메이트 Offering: Self-managed

GitLab은 기능 플래그 전략을 도입하여 기능을 초기 개발 단계에서 점진적으로 롤아웃할 수 있도록 했습니다.

영구적으로 사용할 수 있게 되기 전에 기능은 feature flags 사용 시기에 따라 플래그 뒤에 배포됩니다:

  • 기능을 테스트하기 위해.
  • 기능이 개발 초기 단계에 있을 때 사용자 및 고객으로부터 피드백을 받기 위해.
  • 사용자 채택 평가를 위해.
  • GitLab의 성능에 미치는 영향을 평가하기 위해.
  • 릴리스 중에 여러 작은 부분으로 구축하기 위해.

플래그 뒤에 있는 기능은 일반적으로 점진적으로 롤아웃됩니다:

  1. 기능은 기본적으로 비활성화됩니다.
  2. 기능은 기본적으로 활성화됩니다.
  3. 기능 플래그가 제거됩니다.

이러한 기능은 사용자가 사용하거나 그만두도록 허용하거나 방지하기 위해 활성화 및 비활성화될 수 있습니다. GitLab 관리자가 레일즈 콘솔 또는 Feature flags API에 액세스할 수 있습니다.

기능 플래그를 비활성화하면 해당 기능이 사용자에게 숨겨지고 모든 기능이 꺼집니다. 예를 들어, 데이터는 기록되지 않으며 서비스가 실행되지 않습니다.

특정 기능을 사용했을 때 버그, 오동작 또는 오류를 발견한 경우, GitLab에 가능한 빨리 피드백을 제공하여 수정하거나 개선할 수 있습니다. GitLab을 업그레이드하면 기능 플래그 상태가 변경될 수 있습니다.

아직 개발 중인 기능을 활성화하는 경우의 위험

운영 중인 GitLab 환경에서 비활성화된 기능 플래그를 활성화하기 전에 잠재적인 위험을 이해하는 것이 중요합니다.

경고: 기본적으로 비활성화된 기능을 활성화하면 데이터 손상, 안정성 및 성능 저하, 보안 문제가 발생할 수 있습니다.

기본적으로 비활성화된 기능 플래그 뒤에 있는 기능은 제거되거나 앞으로의 GitLab 버전에서 알림 없이 변경될 수 있습니다.

기본적으로 비활성화된 기능 사용은 운영 환경에서 권장되지 않으며 이로 인한 문제에 대해서는 GitLab 지원이 지원하지 않습니다.

기본적으로 비활성화된 기능에서 발견된 보안 문제는 정기 릴리스에서 수정되며, 이는 일반적인 유지 관리 정책과는 다르게 고침을 되감기하는 것을 따르지 않습니다.

릴리스된 기능을 비활성화하는 경우의 위험

대부분의 경우, 기능 플래그 코드는 향후 GitLab 버전에서 제거됩니다. 그렇게 될 경우, 해당 시점부터 해당 기능을 비활성화 상태로 유지할 수 없습니다.

기능 플래그를 활성화 및 비활성화하는 방법

각 기능은 스스로를 활성화하거나 비활성화하기 위해 사용해야 할 플래그를 가지고 있습니다. 플래그 뒤의 각 기능에 대한 문서에는 플래그의 상태와 해당 기능을 활성화 또는 비활성화하는 명령어가 포함되어 있습니다.

GitLab Rails 콘솔 시작

기능 플래그 뒤에 있는 기능을 활성화 또는 비활성화하려면 먼저 GitLab Rails 콘솔에서 세션을 시작해야 합니다.

Linux 패키지 설치의 경우:

sudo gitlab-rails console

소스에서의 설치의 경우:

sudo -u git -H bundle exec rails console -e production

세부 정보는 Rails 콘솔 세션 시작을 참조하세요.

기능 활성화 또는 비활성화

Rails 콘솔 세션이 시작된 후, 적절하게 Feature.enable 또는 Feature.disable 명령어를 실행하십시오. 특정 플래그는 해당 기능의 문서에서 찾을 수 있습니다.

기능을 활성화하려면 다음을 실행하십시오:

Feature.enable(:<기능 플래그>)

예를 들어, example_feature라는 허구의 기능 플래그를 활성화하려면:

Feature.enable(:example_feature)

기능을 비활성화하려면 다음을 실행하십시오:

Feature.disable(:<기능 플래그>)

예를 들어, example_feature라는 허구의 기능 플래그를 비활성화하려면:

Feature.disable(:example_feature)

일부 기능 플래그는 프로젝트별로 활성화 또는 비활성화될 수 있습니다:

Feature.enable(:<기능 플래그>, Project.find(<프로젝트 id>))

예를 들어, 프로젝트 1234에 대해 example_feature 기능 플래그를 활성화하려면:

Feature.enable(:example_feature, Project.find(1234))

Feature.enableFeature.disable는 항상 응용프로그램이 해당 플래그를 사용하지 않아도 true를 반환합니다:

irb(main):001:0> Feature.enable(:example_feature)
=> true

기능이 준비되면, GitLab은 기능 플래그를 제거하여 활성화 또는 비활성화하는 옵션이 더 이상 존재하지 않습니다. 해당 기능은 모든 인스턴스에서 사용할 수 있게 됩니다.

기능 플래그가 활성화되었는지 확인하기

플래그가 활성화되었는지 여부를 확인하려면 Feature.enabled? 또는 Feature.disabled?를 사용하십시오. 예를 들어, 이미 활성화된 example_feature라는 기능 플래그의 경우:

Feature.enabled?(:example_feature)
=> true
Feature.disabled?(:example_feature)
=> false

기능이 준비되면 GitLab은 기능 플래그를 제거하고, 이를 활성화 또는 비활성화하는 옵션이 더 이상 존재하지 않습니다. 해당 기능은 모든 인스턴스에서 사용할 수 있게 됩니다.

설정된 기능 플래그 보기

모든 GitLab 관리자가 설정한 기능 플래그를 확인할 수 있습니다:

Feature.all
=> [#<Flipper::Feature:198220 name="example_feature", state=:on, enabled_gate_names=[:boolean], adapter=:memoizable>]

# 좋은 출력
Feature.all.map {|f| [f.name, f.state]}

기능 플래그 해제하기

특정 기능 플래그를 제거하여 GitLab이 해당 플래그에 대한 현재 기본 설정으로 되돌아가도록 할 수 있습니다:

Feature.remove(:example_feature)
=> true