GitLab 기능이 기능 플래그 뒤에 배포된 상태에서 활성화 및 비활성화
GitLab은 기능 플래그 전략을 채택하여 개발 초기 단계에서 기능을 배포하여 점진적으로 출시할 수 있도록 합니다.
기능을 영구적으로 사용할 수 있게 만들기 전에 여러 가지 이유로 인해 플래그 뒤에서 기능을 배포할 수 있습니다. 여기에는 다음과 같은 이유가 포함됩니다:
- 기능을 테스트하기 위해.
- 기능 개발 초기 단계에서 사용자와 고객의 피드백을 받기 위해.
- 사용자 도입을 평가하기 위해.
- GitLab의 성능에 미치는 영향을 평가하기 위해.
- 출시를 통해 더 작은 조각으로 구축하기 위해.
플래그 뒤의 기능은 일반적으로 점진적으로 출시될 수 있습니다:
- 기능은 기본적으로 비활성화되어 시작됩니다.
- 기능이 기본적으로 활성화됩니다.
- 기능 플래그가 제거됩니다.
이 기능들은 사용자가 사용할 수 있도록 하거나 방지하기 위해 활성화 및 비활성화될 수 있습니다. 이는 Rails 콘솔 또는 Feature flags API에 접근할 수 있는 GitLab 관리자가 수행할 수 있습니다.
기능 플래그를 비활성화하면 해당 기능이 사용자에게 숨겨지고 모든 기능이 꺼집니다.
예를 들어, 데이터가 기록되지 않고 서비스가 실행되지 않습니다.
특정 기능을 사용하다가 버그, 이상 행동 또는 오류를 발견한 경우, 가능한 한 빨리 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(:<feature flag>)
예를 들어, example_feature
라는 가상의 기능 플래그를 활성화하려면:
Feature.enable(:example_feature)
기능을 비활성화하려면 다음을 실행하세요:
Feature.disable(:<feature flag>)
예를 들어, example_feature
라는 가상의 기능 플래그를 비활성화하려면:
Feature.disable(:example_feature)
일부 기능 플래그는 프로젝트별로 활성화하거나 비활성화할 수 있습니다:
Feature.enable(:<feature flag>, Project.find(<project id>))
예를 들어, 1234
프로젝트에 대해 :example_feature
기능 플래그를 활성화하려면:
Feature.enable(:example_feature, Project.find(1234))
일부 기능 플래그는 사용자별로 활성화하거나 비활성화할 수 있습니다. 예를 들어, 사용자 sidney_jones
에 대해 :example_feature
플래그를 활성화하려면:
Feature.enable(:example_feature, User.find_by_username("sidney_jones"))
Feature.enable
및 Feature.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]}
기능 플래그 unset하기
기능 플래그를 unset하여 GitLab이 해당 플래그에 대한 현재 기본값으로 돌아가게 할 수 있습니다:
Feature.remove(:example_feature)
=> true