구독해서 새 게시물에 대한 알림을 받으세요.

플래그십 소개: AI 시대에 맞춰 구축된 기능 플래그

2026-04-17

6분 읽기
이 게시물은 English日本語로도 이용할 수 있습니다.

본 콘텐츠는 사용자의 편의를 고려해 자동 기계 번역 서비스를 사용하였습니다. 영어 원문과 다른 오류, 누락 또는 해석상의 미묘한 차이가 포함될 수 있습니다. 필요하시다면 영어 원문을 참조하시기를 바랍니다.

AI는 그 어느 때보다 더 많은 코드를 작성하고 있습니다. 현재 AI 지원 기여는 플랫폼 전체에 걸친 새로운 코드 중 빠른 속도로 증가하고 있는 점유율을 차지하고 있습니다. OpenCode 및 Claude Code와 같은 에이전트형 코딩 도구를 사용하면 전체 기능을 몇 분 내에 출시할 수 있습니다.

AI가 생성한 코드가 프로덕션에 들어가는 속도는 더욱 빨라질 것입니다. 하지만 더 큰 변화는 속도뿐만 아니라 자율성입니다.

현재는 AI 에이전트가 코드를 작성하면 사람이 검토, 병합, 배포합니다. 그러면 에이전트가 모든 작업을 스스로 수행합니다. 문제는 모든 안전망을 제거하지 않고 어떻게 에이전트를 프로덕션으로 배송하도록 허용할 것인가 하는 것입니다.

기능 플래그가 해답입니다. 에이전트는 플래그 뒤에 새로운 코드 경로를 작성하고 배포합니다. 플래그가 꺼져 있으므로 사용자가 변경할 수 있는 사항은 없습니다. 그런 다음 에이전트는 자체 또는 소규모 테스트 그룹에 플래그를 활성화하고 프로덕션에서 기능을 연습한 다음 결과를 관찰합니다. 메트릭이 좋아 보이면 롤아웃을 증가시킵니다. 고장나면 플래그를 비활성화합니다. 인간이 모든 단계마다 계속해서 모니터링할 필요는 없습니다. 인간은 경계를 설정하고, 플래그는 영향 반경을 제어합니다.

이는 단순히 배포를 릴리스에서 분리하는 것뿐만 아니라 출시 프로세스의 모든 단계에서 사람의 주의를 끌기까지 분리하기 위해 항상 구축되어 있던 워크플로우 주요 기능의 방향입니다. 플래그 덕분에 에이전트는 빠르게 빠르게 이동할 수 있으므로 에이전트가 빠르게 이동합니다.

오늘, Cloudflare의 네이티브 기능 플래그 서비스인 Flagship을 발표합니다. 이는 기능 플래그 평가를 위한 CNCF 공개 표준인 OpenFeature를 기반으로 구축되었습니다. 모든 곳에서 작동합니다. Workers, Node.js, 번, Deno 및 브라우저 — 하지만 플래그가 Cloudflare 네트워크 내에서 평가되는 Workers에서 가장 빠릅니다. 플래그십 바인딩 및 OpenFeature를 사용한 통합은 다음과 같이 표시됩니다.

await OpenFeature.setProviderAndWait(
    new FlagshipServerProvider({ binding: env.FLAGS })
);

이제 플래그십을 클로즈드 베타로 이용할 수 있습니다.

Workers의 기능 플래그 관련 문제

많은 Cloudflare 개발자는 플래그를 Workers에 직접 하드코딩하는 실용적인 해결 방법에 의존했습니다. 그리고 솔직히 처음에는 충분히 잘 작동합니다. Workers는 몇 초 만에 배포되므로 코드에서 부울 값을 리버싱하고 프로덕션에 푸시하는 것은 대부분의 상황에서 충분히 빠릅니다.

하지만 간단하지 않습니다. 하나의 하드코딩된 플래그가 10개가 됩니다. 서로 다른 팀이 소유한 Ten은 50개가 되며, 상황을 중앙에서 파악할 수 없습니다. 감사 추적은 없습니다. 문제가 발생하면 git blame 을(를) 사용하여 누가 무엇을 토글했는지 파악해야 합니다.

외부 서비스에 대한 네트워크 통화

Workers에서 사용되는 또 다른 일반적인 패턴은 다음과 같은 방식으로 외부 서비스에 HTTP 요청을 하는 것입니다.

const response = await fetch("https://flags.example-service.com/v1/evaluate", {
      ...
      body: JSON.stringify({
        flagKey: "new-checkout-flow",
        context: {
          ...
        },
      }),
    });
const { value } = await response.json();
if (value === true) {
    return handleNewCheckout(request);
}
return handleLegacyCheckout(request);

이러한 아웃바운드 요청은 모든 사용자 요청의 핵심 경로에 위치합니다. 사용자가 플래그 서비스의 지역에서 얼마나 멀리 떨어져 있는지에 따라 대기 시간이 상당히 늘어날 수 있습니다.

상황이 이상합니다. 응용 프로그램은 사용자로부터 밀리초 떨어진 에지에서 실행됩니다. 그러나 기능 플래그 검사로 인해 기능은 렌더링할 대상을 결정하기 전에 인터넷을 통해 다른 API로 강제로 도달합니다.

로컬 평가로 문제가 해결되지 않는 이유

일부 기능 플래그 서비스는 "로컬 평가" SDK를 제공합니다. 요청이 있을 때마다 원격 API를 호출하는 대신 SDK는 모든 플래그 규칙 집합을 메모리에 다운로드하고 로컬에서 평가합니다. 평가당 아웃바운드 요청이 없으며 프로세스 내에서 플래그 결정이 이루어집니다.

Workers에서는 이러한 가정이 통하지 않습니다. 오래 지속되는 프로세스는 없습니다. Worker 격리가 생성되어 요청을 처리하며, 요청 사이에서 만료될 수 있습니다. 새 호출은 SDK를 처음부터 다시 초기화하는 것을 의미할 수 있습니다.

서버리스 플랫폼에서는 이미 에지에 있는 배포 기본 요소가 필요합니다. 이 배포 기본 요소는 사용자를 대신하여 캐싱을 관리하고, 읽기가 로컬에서 이루어지며, 최신 상태로 유지하기 위한 지속적인 연결이 필요하지 않습니다.

Cloudflare KV는 이를 위한 훌륭한 기본 도구입니다!

플래그십 작동 방식

플래그십은 전적으로 Cloudflare의 인프라(Workers, Durable Objects, KV)를 기반으로 구축되었습니다. 평가 경로에는 외부 데이터베이스, 타사 서비스, 중앙 집중식 원본 서버가 없습니다.

플래그를 생성하거나 업데이트하면 제어 영역은 Durable Object에 원자 단위로 변경 사항을 씁니다. Durable Object는 SQLite 기반의 전역 고유 인스턴스로 해당 앱의 플래그 구성 및 변경 로그에 대한 정보 소스 역할을 합니다. 업데이트된 플래그 구성이 몇 초 이내에 Cloudflare의 전 세계에 분산된 키-값 저장소인 Workers KV에 동기화되어 Cloudflare의 네트워크 전체에 복제됩니다.

요청이 플래그를 평가하면 Flagship이 이미 요청을 처리하고 있는 동일한 Cloudflare 위치의 에지의 KV에서 직접 플래그 config를 읽습니다. 그런 다음 평가 엔진이 바로 거기에서 격리에서 실행되며, 플래그의 대상 지정 규칙과 비교하여 요청 컨텍스트를 일치시키고, 롤아웃 비율을 확인하여 대안을 반환합니다. 데이터와 로직 모두 에지에 상주하며 평가를 위해 다른 곳으로 전송되지 않습니다.

플래그십 사용: Worker 바인딩

플래그십은 Cloudflare Workers를 실행하는 팀을 위해 Workers 런타임 내에서 플래그를 평가하는 직접 바인딩을 제공합니다. HTTP 왕복이 없고, SDK 오버헤드도 없습니다. 바인딩을 wrangler.jsonc 에 추가하면 Worker가 연결됩니다.

{
  "flagship": [
    {
      "binding": "FLAGS",
      "app_id": "<APP_ID>"
    }
  ]
}

다 됐습니다. 계정 ID는 Cloudflare 계정에서 추론되며 app_id 는 바인딩을 특정 플래그십 앱과 연결합니다. In your Worker, you just ask for a flag value:

export default {
  async fetch(request: Request, env: Env) {
    // Simple boolean check
    const showNewUI = await env.FLAGS.getBooleanValue('new-ui', false, {
      userId: 'user-42',
      plan: 'enterprise',
    });
    // Full evaluation details when you need them
    const details = await env.FLAGS.getStringDetails('checkout-flow', 'v1', {
      userId: 'user-42',
    });
    // details.value = "v2", details.variant = "new", details.reason = "TARGETING_MATCH"
  },
};

이 바인딩은 모든 변형 유형( getBooleanValue(), getStringValue(), getNumberValue(), getObjectValue() )에 대해 유형이 지정된 접근자를 지원하며, *Details() 변형은 일치하는 변형 및 해당 변형을 선택한 이유와 함께 확인된 값을 반환합니다. 평가 오류가 발생하면 기본값이 정상적으로 반환됩니다. 유형이 일치하지 않는 경우 바인딩에서 예외가 발생합니다. 이는 일시적인 오류가 아닌 코드의 버그입니다.

SDK: OpenFeature 네이티브

대부분의 기능 플래그 SDK에는 자체 인터페이스와 평가 패턴이 제공됩니다. 이러한 요소는 시간이 지남에 따라 코드에 깊숙이 내장되며, 공급자를 전환하면 모든 통화 사이트를 다시 작성하게 됩니다.

그런 웹 사이트를 다시 만들고 싶지는 않았습니다. 플래그십은 피처 플래그 평가를 위한 cncf 공개 표준인 OpenFeature를 기반으로 구축되었습니다. OpenFeature는 언어와 공급자 전반에 걸쳐 플래그 평가를 위한 공통 인터페이스를 정의하며, 이는 OpenTelemetry가 관찰 가능성에 대해 갖는 관계와 동일합니다. 평가 코드를 표준에 대해 한 번 작성하고 단 한 줄의 구성 변경으로 공급자를 교체할 수 있습니다.

import { OpenFeature } from '@openfeature/server-sdk';
import { FlagshipServerProvider } from '@cloudflare/flagship/server';
await OpenFeature.setProviderAndWait(
  new FlagshipServerProvider({
    appId: 'your-app-id',
    accountId: 'your-account-id',
    authToken: 'your-cloudflare-api-token',
  })
);
const client = OpenFeature.getClient();
const showNewCheckout = await client.getBooleanValue(
  'new-checkout-flow',
  false,
  {
    targetingKey: 'user-42',
    plan: 'enterprise',
    country: 'US',
  }
);

Workers에서 플래그십 바인딩으로 실행하는 경우, 이를 OpenFeature 공급자에게 직접 전달할 수 있습니다. 바인딩은 이미 계정 컨텍스트를 전달하고 있으므로 구성할 필요가 없습니다. 인증이 암묵적으로 이루어지며,

import { OpenFeature } from '@openfeature/server-sdk';
import { FlagshipProvider } from '@cloudflare/flagship/server';
let initialized = false;
export default {
  async fetch(request: Request, env: Env) {
    if (!initialized) {
      await OpenFeature.setProviderAndWait(
        new FlagshipServerProvider({ binding: env.FLAGS })
      );
      initialized = true;
    }
    const client = OpenFeature.getClient();
    const showNewCheckout = await client.getBooleanValue('new-checkout-flow', false, {
      targetingKey: 'user-42',
      plan: 'enterprise',
    });
  },
};

평가 코드는 변경되지 않으며 OpenFeature 인터페이스는 동일합니다. 그러나 내부적으로는 Flagship은 HTTP가 아닌 바인딩을 통해 플래그를 평가합니다. 바인딩의 성능을 통해 표준의 휴대성을 확인할 수 있습니다.

브라우저용 클라이언트 측 공급자를 사용할 수도 있습니다. 사용자가 지정한 플래그를 프리페치하고, 구성 가능한 TTL로 캐시하여 해당 캐시에서 동기적으로 평가를 제공합니다.

플래그십으로 할 수 있는 일들

플래그십은 기능 플래그 서비스에서 예상할 수 있는 패턴과 AI에서 생성된 코드가 매일 프로덕션에 출시될 때 중요해지는 패턴을 지원합니다.

플래그 값은 부울, 문자열, 숫자 또는 전체 JSON 개체일 수 있으며, 구성 블록, UI 테마 정의 또는 별도의 코드 경로를 유지 관리하지 않고 다른 API 버전으로 사용자를 라우팅하는 데 유용합니다.

대상 규칙

각 플래그에는 우선순위에 따라 평가되는 여러 규칙이 있을 수 있습니다. 먼저 일치하는 규칙이 승리합니다.

규칙은 다음으로 구성됩니다.

  • 규칙이 주어진 컨텍스트에 적용되는지 여부를 결정하는 조건

  • 규칙이 일치할 때 제공할 변형 플래그

  • 백분율 기반 전달을 위한 선택적 롤아웃

  • 규칙이 여러 개 있을 때 평가 순서를 결정하는 우선순위(낮은 숫자 = 높은 우선순위)

중첩된 논리 조건

AND/OR 로직을 사용하여 조건을 구성할 수 있으며, 최대 5개 레벨까지 중첩될 수 있습니다. 단일 규칙으로 다음과 같은 것을 표현할 수 있습니다.

(plan == “enterprise” AND region == “us” ) OR (user.email.endsWith(“@cloudflare.com”))
= serve (“premium”)

규칙의 최상위 수준에서는 여러 조건이 암시적 AND와 결합되어 규칙이 일치하기 위해 모든 조건을 통과해야 합니다. 각 조건 내에서 AND/OR 그룹을 중첩하여 더 복잡한 로직을 사용할 수 있습니다.

비율별 롤아웃 플래그 지정

Worker의 서로 다른 업로드된 버전 간에 트래픽을 분할하는 점진적 배포와 달리 기능 플래그를 사용하면 트래픽을 100% 제공하는 단일 버전 내에서 동작을 백분율로 롤아웃할 수 있습니다.

어떤 규칙이든 비율 롤아웃을 포함할 수 있습니다. 여러분은 조건에 일치하는 모든 사람에게 변형을 제공하는 대신 그들 중 일정 비율에게 변형을 제공합니다.

롤아웃은 지정된 컨텍스트 속성에 대해 일관된 해싱을 사용합니다. 동일한 속성 값(예: userId)은 항상 동일한 버킷을 해시하므로, 요청 간에 변형이 바뀌지 않습니다. 5%에서 10%로, 50%에서 100%의 사용자까지 증가시킬 수 있으므로 이미 롤아웃에 참여한 사람들이 계속 그 사용자를 유지할 수 있습니다.

향후 계획을 위한 구축

AI가 생성한 코드가 프로덕션에 들어가는 속도는 더욱 빨라질 것입니다. 에이전트형 워크플로우는 프로덕션 환경에서 코드를 자율적으로 배포, 테스트, 반복하는 에이전트 등의 방식을 더욱 발전시킬 것입니다. 이러한 세계에서 성공하는 팀이 가장 빠르게 출시하는 팀은 아닐 것입니다. 이 조직에서는 빠르게 배포하면서, 사용자에게 표시되는 내용을 계속 제어하고, 문제가 발생하면 몇 초 안에 롤백시키며, 자신 있게 새로운 코드 경로를 노출할 수 있습니다.

이것이 바로 Flagship의 목적입니다.

  • 지구 전역에 걸친 평가, K/V를 사용하여 전 세계적으로 캐시됩니다.

  • 완전한 감사 추적. 모든 플래그 변경은 필드 수준 diff와 함께 기록되므로 누가 언제 무엇을 변경했는지 알 수 있습니다.

  • 대시보드 통합. 팀의 누구나 코드를 건드리지 않고도 플래그를 전환하거나 롤아웃을 조정할 수 있습니다.

  • OpenFeature 호환성. 평가 코드를 다시 작성하지 않고 플래그십을 채택하세요. 다시 쓰지 말고 종료하세요.

플래그십 시작하기

플래그십은 오늘부터 비공개 베타로 제공됩니다. 액세스를 요청할 수 있습니다 여기. 가격에 대한 자세한 내용은 일반 제공이 가까워지는 대로 공유해 드리겠습니다.

  • Cloudflare 대시보드로 이동해 첫 플래그십 애플리케이션을 만들어 보세요

  • SDK를 설치하세요: npm i @cloudflare/flagship; 또는 Worker에서 직접 Worker 바인딩을 사용하세요.

  • 문서를 읽고 통합 가이드 및 API 참조를 확인하세요

  • 소스 코드에서 예제를 확인하고 기여해 보세요

현재 Workers에서 플래그를 하드코딩하거나 모든 요청에 대기 시간을 추가하는 외부 서비스에서 플래그를 평가하고 있다면, Flagship을 사용해 보세요. Cloudflare는 여러분이 무엇을 구축하고 있는지 듣고 싶습니다.

Cloudflare에서는 전체 기업 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효과적으로 구축하도록 지원하며, 웹 사이트와 인터넷 애플리케이션을 가속화하고, DDoS 공격을 막으며, 해커를 막고, Zero Trust로 향하는 고객의 여정을 지원합니다.

어떤 장치로든 1.1.1.1에 방문해 인터넷을 더 빠르고 안전하게 만들어 주는 Cloudflare의 무료 애플리케이션을 사용해 보세요.

더 나은 인터넷을 만들기 위한 Cloudflare의 사명을 자세히 알아보려면 여기에서 시작하세요. 새로운 커리어 경로를 찾고 있다면 채용 공고를 확인해 보세요.
Agents WeekCloudflare Workers개발자 플랫폼AIDurable Objects성능기능 플래그

X에서 팔로우하기

Abhishek Kankani|@KankaniAbhishek
Cloudflare|@cloudflare

관련 게시물

2026년 4월 30일

이제 에이전트는 Cloudflare 계정을 생성하고, 도메인을 구매하고, 배포할 수 있습니다.

오늘부터 이제 에이전트도 Cloudflare 고객이 될 수 있습니다. 즉시 Cloudflare 계정을 만들고, 유료 구독을 시작하고, 도메인을 등록하고, API 토큰을 다시 받아 코드를 배포할 수 있습니다. 권한을 부여하기 위해 인간이 개입할 수는 있지만, 굳이 대시보드로 이동하거나, API 토큰을 복사하여 붙여넣거나, 신용카드 세부 정보를 입력할 필요가 없습니다. ...

2026년 4월 22일

Rust Workers를 안정적으로 만들기: wasm-bindgen에서의 패닉 및 중단 복구

Rust Workers에서의 패닉은 역사적으로 치명적이었으며 전체 인스턴스를 중독시켰습니다. Rust Workers는 이제 Wasm-bindgen 프로젝트에서 업스트림과 협업하여 WebAssembly 예외 처리를 사용한 패닉 상태를 해결하는 등 탄력적인 중요 오류 복구를 지원합니다....

2026년 4월 21일

봇과 인간의 비교를 넘어서기

AI 비서와 개인정보 보호 프록시가 기존 봇 감지의 기능에 도전하고 있으므로 웹에는 책임을 묻는 새로운 모델이 필요합니다. Cloudflare는 제어 능력은 클라이언트의 몫으로 남겨두어야 하며, 익명 자격 증명의 개방형 생태계가 사용자 개인정보를 보호하면서 남용으로부터 원본을 보호하는 데 핵심적인 역할을 한다고 생각합니다....