기능 플래그는 Sentry 코드베이스에서 선언됩니다.
자체 호스팅 사용자의 경우, 이 플래그들은 sentry.conf.py를 통해 설정됩니다.
Sentry SaaS 배포의 경우, 플래그들은 생산 환경에서 Flagr를 통해 구성됩니다.
sentry/features/__init__.py 파일을 통해 사용 가능한 기능 목록을 찾을 수 있습니다.
이들은 FeatureManager에 다음과 같이 선언됩니다:
# Flagr를 사용하지 않을 경우 entity_feature를 설정하지 마시거나 False로 설정하세요
default_manager.add("organizations:onboarding", OrganizationFeature, entity_feature=True)
이 기능은 일반적으로 ~/.sentry/에 위치한 sentry.conf.py에서 다음과 같이 활성화할 수 있습니다:
SENTRY_FEATURES["organizations:onboarding"] = True
테스트에서 기능 플래그 상태를 수정하려면 context manager를 사용할 수 있습니다.
새로운 기능 플래그 생성
기능의 범위 결정
기능은 organization 및 project 단위로 범위를 지정할 수 있습니다.
project 수준의 기능이 필요한지 확실하지 않다면, organization 수준의 기능을 생성하세요.
이 예제에서는 test-feature라는 이름의 organization 수준 기능을 구축하겠습니다.
기능을 server.py에 추가
conf/server.py는 애플리케이션의 많은 기본 설정을 포함합니다.
여기서 기능을 추가하고, 사용자가 지정하지 않는 한 기본값으로 유지할 값을 결정합니다.
SENTRY_FEATURES 딕셔너리는 애플리케이션의 모든 기능과 해당 범위를 포함합니다.
기본적으로 기능은 비활성화 상태여야 합니다:
SENTRY_FEATURES = {
'organizations:test-feature': False,
'auth:register': True,
# ...
'projects:minidump': False,
}
기능을 FeatureManager에 추가
FeatureManager는 애플리케이션 기능을 처리합니다.
/src/sentry/features/__init__.py 파일에 추가할 기능 유형을 포함하여 모든 기능을 FeatureManager에 추가합니다.
생산 환경에서 flagr를 사용할 계획이라면, 기능을 추가할 때 세 번째 선택적 부울 매개변수를 추가하세요:
default_manager.add('organizations:test-feature', OrganizationFeature, True)
flagr를 사용하지 않을 계획이라면 세 번째 매개변수를 전달하지 마세요:
default_manager.add('organizations:test-feature', OrganizationFeature)
Organization Model Serializer에 추가
Organization model serializer(src/sentry/api/serializers/models/organization.py)는 프론트엔드에서 사용할 feature_list라는 목록을 구성합니다.
기본적으로 모든 기능을 확인하고 존재하는 기능을 목록에 추가합니다.
기능에 추가 사용자 정의 로직이 필요한 경우 organization serializer를 업데이트해야 합니다.
Model Flag 사용(덜 일반적)
때로는 모델에 플래그가 기능 플래그를 나타내는 데 사용됩니다.
모델을 변경할 특별한 이유가 없다면 이 방법은 권장되지 않습니다.
예를 들어, require_2fa 플래그는 2단계 인증을 강제 실행하기 위해 백엔드 동작에 영향을 줍니다.
feature_list = []
if getattr(obj.flags, 'allow_joinleave'):
feature_list.append('open-membership')
if not getattr(obj.flags, 'disable_shared_issues'):
feature_list.append('shared-issues')
if getattr(obj.flags, 'require_2fa'):
feature_list.append('require-2fa')
기능 확인
Python 코드에서
FeatureManager의 has 메서드는 기능이 존재하는지 확인합니다.
has 메서드는 기능의 이름, 해당 기능 범위에 해당하는 객체(즉, 조직 수준 기능의 조직 또는 프로젝트 수준 기능의 프로젝트) 및 actor(또는 user)를 받습니다.
예제에서는 기능이 다음과 같이 추가됩니다:
if features.has('organizations:test-feature', obj, actor=user):
feature_list.append('test-feature')
organization 및 주어진 user 유형에 대해 기능이 활성화된 경우에만 해당 feature가 feature_list에 추가됩니다.
프론트엔드에 feature를 제공할 때 범위 접두사를 제거하므로, 'organizations:test-feature'가 'test-feature'가 됩니다.
JavaScript에서
Sentry와 GetSentry에서 플래그 사용은 다릅니다. 이 단계에서는 GetSentry에서 기능 플래그를 사용할 준비가 되지 않았지만 Sentry에서는 사용할 수 있습니다.
Feature 컴포넌트를 사용한 선언적 기능
React는 선언적 프로그래밍 패러다임을 사용합니다. 따라서 organization/project에서 사용 가능한 기능 플래그에 따라 컴포넌트를 숨기기 위한 utility 컴포넌트가 있습니다:
import Feature from 'app/components/acl/feature';
const toRender = (
<Feature features={['test-feature']}>
<MyComponentToFlag />
</Feature>
);
명령적 기능 플래그 확인
React 컴포넌트를 생성해야 하는 경우에는 예외가 있습니다(예: 표의 제목/열).
이러한 경우, Organization/Project 객체에는 기능 플래그 배열이 있으며 다음과 같이 사용할 수 있습니다:
const {organization} = this.props;
// 방법 2
organization.features.includes('test-feature'); // True/False로 평가됨
개발에서 기능 활성화
Sentry에서 sentry devserver를 실행하여 개발 모드의 변경 사항을 볼 수 있습니다.
기능 플래그 뒤의 변경 사항을 보려면 로컬 컴퓨터에서 ~/.sentry/sentry.config.py 파일을 열어야 합니다.
이 파일은 볼 수 있고 편집할 수 있는 Sentry 애플리케이션의 로컬 설정을 포함합니다.
플래그를 켜거나 끄려면 구성 파일에 다음을 추가하세요:
SENTRY_FEATURES['organizations:test-feature'] = True
여기서 SENTRY_FEATURES는 2단계의 SENTRY_FEATURES에 해당합니다.
기능을 사용 가능하게 하려면 True로, 그렇지 않으면 False로 설정하세요.
개발에서의 Flagr(Sentry SaaS)
일반적으로 기능 플래그를 테스트하기 위해 개발에서 flagr를 실행할 필요는 없습니다. flagr를 실행하려면 getsentry를 실행해야 합니다:
- 환경 변수 설정:
export SENTRY_USE_FLAGR=true - devservices 시작
로컬 flagr 인스턴스는 localhost:18000에서 찾을 수 있습니다
생산 환경에서 기능 활성화(Sentry SaaS)
기능 플래그는 Sentry 코드베이스에서 선언됩니다.
자체 호스팅 사용자의 경우, 이 플래그들은 sentry.conf.py를 통해 설정됩니다.
Sentry SaaS 배포의 경우, 플래그들은 생산 환경에서 Flagr를 통해 구성됩니다.
생산 사용자의 일부분에게 기능을 활성화하려면 Flagr에서 기능을 설정해야 합니다. sentry에 플래그를 추가할 때 세 번째 옵션을 전달하여 Flagr가 이 기능을 생산 환경에서 확인해야 함을 확인하지 않았다면, 먼저 확인해야 합니다.
default_manager.add("organizations:onboarding", OrganizationFeature, True) # NOQA
더 알아보기
- Sentry 기업용 데이터 보안 솔루션 - Relay 시작하기
- Sentry 기업용 데이터 보안 솔루션 - Relay 실행 모드
- Sentry 기업용 데이터 보안 솔루션 - Relay 구성 옵션
- Sentry 기업용 데이터 보안 솔루션 - Relay 모니터링 & 지표 수집
- Sentry 기업용 데이터 보안 솔루션 - Relay 프로젝트 구성
- Sentry 개발자 기여 가이드 - SDK 개발(성능 모니터링: Sentry SDK API 진화)