기능 플래그 뒤에 배포된 GitLab 기능 활성화 및 비활성화
Offering: GitLab Self-Managed
GitLab은 기능 플래그 전략을 채택하여 개발 초기 단계에서 기능을 배포함으로써 점진적으로 출시할 수 있도록 합니다. 기능을 영구적으로 사용 가능하게 하기 전에 다음과 같은 여러 이유로 플래그 뒤에 기능을 배포할 수 있습니다:
GitLab은 기능 플래그 전략을 채택하여 개발 초기 단계에서 기능을 배포함으로써 점진적으로 출시할 수 있도록 합니다.
기능을 영구적으로 사용 가능하게 하기 전에 다음과 같은 여러 이유로 플래그 뒤에 기능을 배포할 수 있습니다:
- 기능을 테스트하기 위해.
- 기능 개발 초기 단계에서 사용자 및 고객의 피드백을 받기 위해.
- 사용자 채택을 평가하기 위해.
- GitLab 성능에 미치는 영향을 평가하기 위해.
- 릴리스 전반에 걸쳐 작은 단계로 구축하기 위해.
플래그 뒤의 기능은 일반적으로 다음과 같이 점진적으로 출시될 수 있습니다:
- 기능이 기본적으로 비활성화된 상태로 시작합니다.
- 기능이 기본적으로 활성화됩니다.
- 기능 플래그가 제거됩니다.
이러한 기능은 사용자가 사용하도록 허용하거나 방지하기 위해 활성화 및 비활성화할 수 있습니다. Rails 콘솔 또는 기능 플래그 API에 액세스할 수 있는 GitLab 관리자가 수행할 수 있습니다.
기능 플래그를 비활성화하면 기능이 사용자에게 숨겨지고 모든 기능이 해제됩니다. 예를 들어, 데이터가 기록되지 않고 서비스가 실행되지 않습니다.
특정 기능을 사용하다가 버그, 잘못된 동작 또는 오류를 발견한 경우, 플래그 뒤에 있는 동안 개선하거나 수정할 수 있도록 가능한 한 빨리 GitLab에 피드백을 제공하는 것이 매우 중요합니다. GitLab을 업그레이드할 때 기능 플래그 상태가 변경될 수 있습니다.
아직 개발 중인 기능 활성화 시 위험성#
프로덕션 GitLab 환경에서 비활성화된 기능 플래그를 활성화하기 전에 관련된 잠재적 위험을 이해하는 것이 중요합니다.
기본적으로 비활성화된 기능을 활성화하면 데이터 손상, 안정성 저하, 성능 저하 및 보안 문제가 발생할 수 있습니다.
기본적으로 비활성화된 기능은 향후 GitLab 버전에서 변경되거나 예고 없이 제거될 수 있습니다.
기본 비활성화 기능 플래그 뒤의 기능은 프로덕션 환경에서 사용하는 것을 권장하지 않으며, 기본 비활성화 기능을 사용하여 발생한 문제는 GitLab Support에서 다루지 않습니다.
기본적으로 비활성화된 기능에서 발견된 보안 문제는 정기 릴리스에서 패치되며, 수정 사항의 백포팅과 관련하여 일반 유지 관리 정책을 따르지 않습니다.
릴리스된 기능 비활성화 시 위험성#
대부분의 경우 기능 플래그 코드는 향후 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
=> [#]
# 보기 좋은 출력
Feature.all.map {|f| [f.name, f.state]}
기능 플래그 설정 해제#
GitLab이 해당 플래그의 현재 기본값으로 폴백하도록 기능 플래그를 설정 해제할 수 있습니다:
Feature.remove(:example_feature)
=> true
