특징 플래그

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

특징 플래그를 사용하면 새로운 기능을 보다 작은 배치로 프로덕션 환경에 배포할 수 있습니다. 특징을 일부 사용자의 하위 집합에게 토글하여 지속적 배포를 달성할 수 있습니다. 특징 플래그는 제어된 테스트를 수행하고 특징 전달을 고객 출시와 분리하여 리스크를 감소시킬 수 있습니다.

특징 플래그를 실제로 확인하려면 특징 플래그로 위험 제거하기를 참조하세요.

클릭하여 데모를 보려면 특징 플래그를 참조하십시오.

note
GitLab 제품 개발에 기여하려면 이 특징 플래그 콘텐츠를 확인하세요.

작동 방식

GitLab은 특징 플래그용 Unleash-호환 API를 제공합니다.

GitLab에서 플래그를 활성화하거나 비활성화함으로써 응용 프로그램은 어떤 기능을 활성화하거나 비활성화할지 결정할 수 있습니다.

GitLab에서 특징 플래그를 만들고 응용 프로그램에서 해당 특징 플래그 디렉터리과 상태를 가져오기 위해 API를 사용할 수 있습니다. 응용 프로그램은 GitLab과 통신하도록 구성되어야 하므로 호환되는 클라이언트 라이브러리를 사용하고 응용 프로그램에 특징 플래그를 통합하는 것은 개발자의 몫입니다.

특징 플래그 만들기

특징 플래그를 만들고 활성화하려면 다음 단계를 수행합니다:

  1. 좌측 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 특징 플래그를 선택합니다.
  3. 새 특징 플래그를 선택합니다.
  4. 글자로 시작하고 소문자, 숫자, 밑줄(_), 또는 대시(-)만 포함하며 대시(-) 또는 밑줄(_)로 끝나지 않는 이름을 입력합니다.
  5. 선택 사항. 설명을 입력합니다 (최대 255자).
  6. 특징 플래그에 전략을 추가하여 플래그가 어떻게 적용될 지 정의합니다. 각 전략에는 유형(모든 사용자로 기본 설정됨)과 환경(모든 환경으로 기본 설정됨)을 포함합니다.
  7. 특징 플래그 만들기를 선택합니다.

이 설정을 변경하려면 디렉터리에서 어떤 특징 플래그 옆의 편집()을 선택합니다.

최대 특징 플래그 수

GitLab Self-Managed형 인스턴스의 프로젝트 당 최대 특징 플래그 수는 200개입니다. GitLab SaaS의 경우 최대 수는 티어에 따라 결정됩니다:

티어 프로젝트 당 특징 플래그 (SaaS) 프로젝트 당 특징 플래그 (Self-Managed형)
Free 50 200
Premium 150 200
Ultimate 200 200

특징 플래그 전략

동일한 전략을 여러 환경에 걸쳐 적용할 수 있습니다.

GitLab 특징 플래그는 Unleash를 기반으로 합니다. Unleash에는 세분화된 피처 플래그 제어를 위한 전략가 있습니다. GitLab 특징 플래그는 여러 전략을 가질 수 있으며 지원되는 전략은 다음과 같습니다:

생성 중인 특징 플래그에 전략을 추가하거나 생성 후 배포 > 특징 플래그로 이동하여 기존 특징 플래그를 편집하여 전략을 추가할 수 있습니다.

모든 사용자

모든 사용자에게 특징을 활성화합니다. 이는 표준(default) Unleash 활성화 전략을 사용합니다.

사용자 비율

사용자 페이지 뷰의 일부분에 대해 특징을 활성화하며 구성 가능한 일관성이 있습니다. 이 일관성은 점착성(stickiness)으로도 알려져 있습니다. 이는 점진적 롤아웃(flexibleRollout) Unleash 활성화 전략를 사용합니다.

일관성을 다음과 같이 구성할 수 있습니다.

  • 사용자 ID: 각 사용자 ID는 세션 ID를 무시한 상태에서 일관된 동작을 합니다.
  • 세션 ID: 각 세션 ID는 사용자 ID를 무시한 상태에서 일관된 동작을 합니다.
  • 랜덤: 일관된 동작이 보장되지 않습니다. 선택된 페이지 뷰의 백분율로 기능이 무작위로 활성화됩니다. 사용자 ID와 세션 ID는 무시됩니다.
  • 사용 가능한 ID: 사용자의 상태에 기반하여 일관성을 시도합니다:
    • 사용자가 로그인한 경우, 사용자 ID를 기반으로 동작을 일관되게 만듭니다.
    • 사용자가 익명인 경우, 세션 ID를 기반으로 동작을 일관되게 합니다.
    • 사용자 ID나 세션 ID가 없는 경우, 선택된 페이지 뷰의 백분율로 기능이 무작위로 활성화됩니다.

예를 들어, 사용 가능한 ID에 15%의 값을 설정하여 페이지 뷰의 15%에 대해 특징을 활성화할 수 있습니다. 인증된 사용자의 경우 사용자 ID에 기반하여, 익명 사용자의 경우 세션 ID에 기반하여 활성화됩니다. 그리고 세션 ID가 제공되지 않으면 무작위로 동작합니다.

롤아웃 퍼센티지는 0%에서 100%까지 설정할 수 있습니다.

사용자 ID에 기반한 일관성을 선택하는 것은 사용자 비율 롤아웃과 동일하게 작동합니다.

caution
랜덤을 선택하면 개별 사용자의 일관되지 않은 응용 프로그램 동작이 제공됩니다.

사용자 비율

인증된 사용자의 백분율에 따라 특징을 활성화합니다. 이는 Unleash 활성화 전략 gradualRolloutUserId를 사용합니다.

예를 들어, 15%의 값을 설정하여 인증된 사용자의 15%에 대해 특징을 활성화할 수 있습니다.

롤아웃 퍼센티지는 0%에서 100%까지 설정할 수 있습니다.

일관성(동일 사용자의 일관된 응용 프로그램 동작)은 인증된 사용자에게 보장되지만 익명 사용자는 보장되지 않습니다.

사용자 비율 롤아웃이 사용자 비율 롤아웃과 동일한 동작을 하기 때문에 사용자 비율을 권장합니다.

caution
사용자 비율 전략이 선택되면, Unleash 클라이언트는 특징이 활성화되기 위해 사용자 ID를 받아야 합니다. 아래의 루비 예제를 참조하십시오.

사용자 ID

대상 사용자 디렉터리에 대해 특징을 활성화합니다. Unleash UserIDs (userWithId) 활성화 전략를 사용합니다.

예를 들어, user@example.com, user2@example.com, 또는 username1,username2,username3과 같이 쉼표로 구분된 값의 디렉터리으로 사용자 ID를 입력합니다. 사용자 ID는 응용 프로그램 사용자의 식별자입니다. GitLab 사용자일 필요는 없습니다.

caution
특정 사용자에게 특징을 활성화하기 위해 Unleash 클라이언트는 대상 사용자의 사용자 ID를 받아야 합니다. 아래의 루비 예제를 참조하십시오.

사용자 디렉터리

특징을 특징 플래그 UI에서 생성하거나 특징 플래그 사용자 디렉터리 API를 사용하여 사용자 디렉터리에 대해 특징을 활성화합니다. 사용자 ID와 유사하게 Unleash UsersIDs (userWithId) 활성화 전략를 사용합니다.

특정 사용자에 대해 특징을 비활성화할 수는 없지만 사용자 디렉터리에 대해 특징을 활성화함으로써 비슷한 결과를 얻을 수 있습니다.

예를 들어:

  • 전체 사용자 디렉터리 = User1A, User1B, User2A, User2B, User3A, User3B, ...
  • 전체 사용자 디렉터리 중 B 사용자 제외 = User1A, User2A, User3A, ...

사용자 디렉터리 생성

사용자 디렉터리을 만들려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 사용자 디렉터리 보기를 선택합니다.
  4. 새 사용자 디렉터리을 선택합니다.
  5. 디렉터리에 이름을 입력합니다.
  6. 만들기를 선택합니다.

사용자 디렉터리의 사용자 ID를 보려면 해당 디렉터리 옆의 편집()을 선택합니다. 디렉터리을 보는 동안 편집()을 선택하여 이름을 바꿀 수 있습니다.

사용자를 사용자 디렉터리에 추가

사용자를 사용자 디렉터리에 추가하려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 사용자를 추가할 디렉터리 옆의 편집()을 선택합니다.
  4. 사용자 추가를 선택합니다.
  5. 사용자 ID를 쉼표로 구분된 값 디렉터리으로 입력합니다. 예를 들어 user@example.com, user2@example.com, 또는 username1,username2,username3 등입니다.
  6. 추가를 선택합니다.

사용자 디렉터리에서 사용자 제거

사용자 디렉터리에서 사용자를 제거하려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 변경하려는 디렉터리 옆의 편집()을 선택합니다.
  4. 제거하려는 ID 옆의 제거()를 선택합니다.

코드 참조 검색

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

정리 중에 코드에서 플래그를 제거하려면 해당 플래그에 대한 프로젝트 참조를 찾으세요.

특정 피처 플래그의 코드 참조를 검색하려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 제거하려는 피처 플래그를 편집합니다.
  4. 더 많은 작업()을 선택합니다.
  5. 코드 참조 검색을 선택합니다.

특정 환경에 대한 피처 플래그 비활성화

특정 환경에 대한 피처 플래그를 비활성화하려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 비활성화하려는 피처 플래그를 선택합니다.
  4. 플래그를 비활성화하려면:
    • 환경 아래 각 전략에 대해 환경을 삭제합니다.
  5. 변경 사항 저장을 선택합니다.

모든 환경에 대한 피처 플래그 비활성화

모든 환경에 대한 피처 플래그를 비활성화하려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 비활성화하려는 피처 플래그의 상태 토글을 비활성화됨으로 슬라이드합니다.

해당 피처 플래그는 비활성화됨 탭에 표시됩니다.

애플리케이션과 피처 플래그 통합

애플리케이션과 피처 플래그를 함께 사용하려면 GitLab에서 액세스 자격 증명을 가져옵니다. 그런 다음 클라이언트 라이브러리로 애플리케이션을 준비하세요.

액세스 자격 증명 가져오기

GitLab과 통신하는 데 애플리케이션이 필요로 하는 액세스 자격 증명을 얻으려면:

  1. 왼쪽 사이드 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 배포 > 피처 플래그를 선택합니다.
  3. 다음을 보려면 구성을 선택합니다:
    • API URL: 클라이언트(애플리케이션)가 피처 플래그 디렉터리을 가져오기 위해 연결하는 URL
    • 인스턴스 ID: 피처 플래그를 검색하는 데 권한을 부여하는 고유 토큰
    • 애플리케이션 이름: 애플리케이션이 실행되는 환경의 이름 (애플리케이션 자체의 이름이 아님).

      예를 들어, 애플리케이션이 프로덕션 서버에서 실행되는 경우 애플리케이션 이름production 또는 비슷한 값일 수 있습니다. 이 값은 환경 스펙 평가에 사용됩니다.

이러한 필드의 의미는 시간이 지나면 바뀔 수 있습니다. 예를 들어 인스턴스 ID가 하나의 토큰일 수도 있고 여러 토큰이 할당될 수도 있습니다. 또한 애플리케이션 이름은 실행 환경 대신 애플리케이션 버전을 설명할 수도 있습니다.

클라이언트 라이브러리 선택

GitLab은 Unleash 클라이언트와 호환되는 단일 백엔드를 구현합니다.

Unleash 클라이언트를 사용하면 개발자들은 응용 프로그램 코드에서 플래그의 기본값을 정의할 수 있습니다. 각 피처 플래그 평가는 제공된 구성 파일에 플래그가 없는 경우 원하는 결과를 표현할 수 있습니다.

현재 Unleash는 다양한 언어 및 프레임워크를 위한 많은 SDK를 제공합니다.

피처 플래그 API 정보

API 콘텐츠는 다음과 같습니다:

Go 애플리케이션 예시

Go 애플리케이션에서 피처 플래그를 통합하는 예시는 다음과 같습니다:

package main

import (
    "io"
    "log"
    "net/http"
    
    "github.com/Unleash/unleash-client-go/v3"
)

type metricsInterface struct {
}

func init() {
    unleash.Initialize(
        unleash.WithUrl("https://gitlab.com/api/v4/feature_flags/unleash/42"),
        unleash.WithInstanceId("29QmjsW6KngPR5JNPMWx"),
        unleash.WithAppName("production"), // 애플리케이션이 실행되는 환경으로 설정
        unleash.WithListener(&metricsInterface{}),
    )
}

func helloServer(w http.ResponseWriter, req *http.Request) {
    if unleash.IsEnabled("my_feature_name") {
        io.WriteString(w, "기능이 활성화되었습니다\n")
    } else {
        io.WriteString(w, "안녕, 세상아!\n")
    }
}

func main() {
    http.HandleFunc("/", helloServer)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

Ruby 애플리케이션 예시

Ruby 애플리케이션에서 피처 플래그를 통합하는 예시는 다음과 같습니다.

Unleash 클라이언트에는 Percent rollout (로그인된 사용자) 롤아웃 전략이나 대상 사용자들 디렉터리을 사용하기 위한 사용자 ID가 제공됩니다.

#!/usr/bin/env ruby

require 'unleash'
require 'unleash/context'

unleash = Unleash::Client.new({
  url: 'http://gitlab.com/api/v4/feature_flags/unleash/42',
  app_name: 'production', # 애플리케이션이 실행되는 환경으로 설정
  instance_id: '29QmjsW6KngPR5JNPMWx'
})

unleash_context = Unleash::Context.new
# 인증된 사용자의 ID로 "123"을 대체합니다.
# 컨텍스트의 사용자 ID는 반드시 문자열이어야 합니다:
# https://unleash.github.io/docs/unleash_context
unleash_context.user_id = "123"

if unleash.is_enabled?("my_feature_name", unleash_context)
  puts "기능이 활성화되었습니다"
else
  puts "안녕, 세상아!"
end

Unleash Proxy 예시

Unleash Proxy의 0.2 버전부터 프록시는 피처 플래그와 호환됩니다.

GitLab.com에서 프로덕션에 Unleash Proxy를 사용해야 하는 성능 노트에 대한 자세한 내용은 여기를 참조하세요.

프로젝트의 피처 플래그에 연결하려면 Docker 컨테이너를 실행하려면 다음 명령을 실행하세요:

docker run \
  -e UNLEASH_PROXY_SECRETS=<secret> \
  -e UNLEASH_URL=<project feature flags URL> \
  -e UNLEASH_INSTANCE_ID=<project feature flags instance ID> \
  -e UNLEASH_APP_NAME=<project environment> \
  -e UNLEASH_API_TOKEN=<tokenNotUsed> \
  -p 3000:3000 \
  unleashorg/unleash-proxy
변수
UNLEASH_PROXY_SECRETS 프록시 클라이언트를 구성하기 위해 사용하는 공유 비밀
UNLEASH_URL 프로젝트의 API URL입니다. 자세한 내용은 액세스 자격 증명 가져오기를 읽으세요.
UNLEASH_INSTANCE_ID 프로젝트의 인스턴스 ID입니다. 자세한 내용은 액세스 자격 증명 가져오기를 읽으세요.
UNLEASH_APP_NAME 애플리케이션이 실행되는 환경의 이름입니다. 자세한 내용은 액세스 자격 증명 가져오기를 읽으세요.
UNLEASH_API_TOKEN Unleash Proxy를 시작하는 데 필요하지만 GitLab에 연결하는 데 사용되지 않습니다. 아무 값이나 설정할 수 있습니다.

피처 플래그 관련 이슈

Tier: Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

특성 플래그와 관련된 이슈를 연결할 수 있습니다. 특성 플래그의 연결된 이슈 섹션에서, + 버튼을 선택하고 이슈 참조 번호 또는 전체 이슈 URL을 입력합니다. 그러면 이슈가 관련 특성 플래그에 나타나며, 그 반대도 마찬가지입니다.

이 기능은 연결된 이슈 기능과 유사합니다.

성능 요소

GitLab 특성 플래그는 모든 애플리케이션에서 사용할 수 있습니다. 대형 애플리케이션에서는 고급 구성이 필요할 수 있습니다. 이 섹션에서는 조직이 사용하기 전에 필요한 작업을 파악하는 데 도움이 되는 성능 요소를 설명합니다. 자세한 내용은 세부 정보에 들어가기 전에 작동 방식 섹션을 읽어보세요.

응용 프로그램 노드의 지원 최대 클라이언트 수

GitLab은 요청 제한에 도달할 때까지 가능한 한 많은 클라이언트 요청을 수락합니다. 특성 플래그 API는 인증되지 않은 트래픽(특정 IP 주소에서)으로 간주됩니다. GitLab.com의 경우, GitLab.com 특정 제한 사항을 참조하세요.

폴링 속도는 SDK에서 구성할 수 있습니다. 모든 클라이언트가 동일한 IP에서 요청하는 경우:

  • 분당 한 번 요청 … 500 클라이언트를 지원할 수 있습니다.
  • 15초마다 한 번 요청 … 125 클라이언트를 지원할 수 있습니다.

보다 확장 가능한 솔루션을 찾는 응용 프로그램의 경우 Unleash Proxy를 사용해야 합니다. GitLab.com의 경우, Unleash Proxy를 사용하여 엔드포인트 전반에 걸쳐 요청 제한을 줄일 수 있습니다. 이 프록시 서버는 서버와 클라이언트 사이에 위치하여 클라이언트 그룹을 대신하여 서버에 요청을 수행하므로 아웃바운드 요청 수를 크게 줄일 수 있습니다. 여전히 429 응답을 받는 경우, Unleash Proxy의 UNLEASH_FETCH_INTERVAL 값을 늘리세요.

현재 요청 제한에 더 많은 용량을 제공하기 위한 이슈도 있습니다.

네트워크 오류 복구

일반적으로 Unleash 클라이언트는 서버가 오류 코드를 반환할 때 후퇴 메커니즘을 가지고 있습니다. 예를 들어, unleash-ruby-client는 애플리케이션이 현재 상태에서 계속 실행할 수 있도록 로컬 백업에서 플래그 데이터를 읽습니다.

더 많은 정보는 SDK 프로젝트의 문서를 참조하세요.

Self-Managed GitLab

기능상의 차이는 없습니다. SaaS와 Self-Managed는 동일한 방식으로 작동합니다.

확장성 측면에서는 GitLab 인스턴스의 사양에 달려 있습니다. 예를 들어, GitLab.com은 HA 아키텍처를 사용하여 많은 동시 요청을 처리할 수 있습니다. 그러나 성능이 비교할만한 Self-Managed형 인스턴스는 성능을 제공하지 못할 수 있습니다. 자세한 정보는 참고 아키텍처를 참조하세요.