기능 플래그 뒤에 배포된 GitLab 기능 활성화 및 비활성화
GitLab v19.5Offering: GitLab Self-Managed
요약
GitLab은 개발 초기 단계의 기능을 배포해 점진적으로 롤아웃할 수 있도록 기능 플래그 전략을 채택했습니다. 기능을 영구적으로 제공하기 전에 다음과 같은 여러 이유로 플래그 뒤에 두고 배포할 수 있습니다: 플래그 뒤의 기능은 보통 다음과 같이 단계적으로 롤아웃됩니다:
GitLab은 개발 초기 단계의 기능을 배포해 점진적으로 롤아웃할 수 있도록 기능 플래그 전략을 채택했습니다.
기능을 영구적으로 제공하기 전에 다음과 같은 여러 이유로 플래그 뒤에 두고 배포할 수 있습니다:
- 기능을 테스트하기 위해서입니다.
- 기능 개발 초기 단계에서 사용자와 고객의 피드백을 받기 위해서입니다.
- 사용자 도입률을 평가하기 위해서입니다.
- GitLab 성능에 미치는 영향을 평가하기 위해서입니다.
- 여러 릴리스에 걸쳐 작은 단위로 개발하기 위해서입니다.
플래그 뒤의 기능은 보통 다음과 같이 단계적으로 롤아웃됩니다:
- 기능이 기본적으로 비활성화된 상태로 시작합니다.
- 기능이 기본적으로 활성화됩니다.
- 기능 플래그가 제거됩니다.
이러한 기능은 활성화하거나 비활성화해 사용자가 사용하도록 하거나 사용하지 못하게 할 수 있습니다. Rails 콘솔 또는 기능 플래그 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
=> [#]
# Nice output
Feature.all.map {|f| [f.name, f.state]}
기능 플래그 설정 해제#
기능 플래그 설정을 해제하면 GitLab이 해당 플래그의 현재 기본값으로 돌아갑니다:
Feature.remove(:example_feature)
=> true