AI가 쓴 글에 남는 워터마크는 어떻게 동작할까요?

AI가 쓴 글에 남는 워터마크는 어떻게 동작할까요?

이 글은 사람이 쓴 걸까요, AI가 쓴 걸까요? 요즘 리뷰 하나, 과제 하나, 기사 하나를 두고도 이 질문이 따라붙는데요. 답을 내려주겠다는 탐지 서비스는 많지만 대부분 문체를 보고 짐작하는 수준이라, 억울하게 걸리는 사람과 유유히 빠져나가는 글이 함께 생깁니다. 😅

그래서 모델을 만드는 쪽이 아예 표시를 남기는 방향으로 움직이고 있습니다. Google은 Gemini가 쓴 글에 워터마크를 심어 왔고, Anthropic도 2026년 8월 14일 Claude에 같은 방식을 적용한다고 발표했습니다. 짐작이 아니라 확인을 하겠다는 이야기인데요.

그런데 텍스트에 워터마크를 어떻게 넣을까요? 사진이라면 픽셀을 미세하게 흔들어 놓으면 되겠지만 글자에는 그럴 여백이 없습니다. 폭이 0인 공백 문자를 몰래 끼워 넣거나 알파벳 o를 생김새가 같은 키릴 문자로 바꿔치기하는 수법이 먼저 떠오르는데요. 이런 방식은 오래가지 못합니다. 문서를 평문으로 한 번 저장하거나 유니코드 정규화를 거치면 흔적이 통째로 사라지고, 무엇보다 어떤 문자를 심었는지 알아낸 사람이 정규식 한 줄로 전부 지워 버릴 수 있습니다.

실제 방식은 훨씬 영리합니다. 글에 무언가를 덧붙이는 대신, 글을 만드는 과정 자체를 살짝 비틀어 놓거든요. 이 글에서는 그 원리를 직접 코드로 만들어 돌려보고, 어디까지 통하고 어디서부터 안 통하는지 숫자로 확인해 보겠습니다.

무작위 선택의 출처를 바꿉니다

언어 모델은 다음에 올 단어를 확률분포에서 하나씩 뽑습니다. “날씨가 몹시” 다음에 “차가웠고”가 올 수도 있고 “쌀쌀했고”가 올 수도 있는데요. 둘 다 자연스럽고, 어느 쪽을 골라도 글의 뜻은 그대로입니다. 이렇게 우열을 가리기 어려운 갈림길이 문장마다 수없이 놓여 있습니다.

워터마크는 바로 이 갈림길을 씁니다. 후보 중 하나를 순수한 난수로 고르는 대신, 비밀 키와 앞서 나온 단어 몇 개로 정해지는 값을 보고 고르는 것입니다. Anthropic의 표현을 빌리면 “무작위 선택의 출처를 바꾸는” 방식입니다. 선택은 여전히 무작위처럼 보이지만, 같은 키를 가진 쪽은 완성된 단어 수열을 되짚어 그 키가 쓰였는지 계산해 볼 수 있습니다.

이 방식은 최근에 튀어나온 것이 아닙니다. Google DeepMind가 2024년 Nature 논문으로 발표한 SynthID-Text를 따르고 있고, 그 뿌리는 Scott Aaronson이 2022년에 내놓은 제안까지 거슬러 올라갑니다.

flowchart TB
    accTitle: 워터마크를 심고 다시 찾아내는 흐름
    accDescr: 생성 단계에서는 모델이 뽑은 후보 단어에 비밀 키로 g 값을 매겨 큰 쪽을 고르고, 탐지 단계에서는 같은 키로 각 단어의 g 값을 다시 계산해 평균이 기준을 넘는지 판정한다.

    subgraph gen["생성"]
        direction TB
        cand[/"후보 단어<br/>차가웠고, 쌀쌀했고"/] --> gcalc["비밀 키와 앞선 단어로<br/>g 값 계산"]
        gcalc --> tour["둘을 겨루게 해<br/>g 값이 큰 쪽 선택"]
        tour --> text["완성된 문장"]
    end

    subgraph det["탐지"]
        direction TB
        recalc["같은 키로 단어마다<br/>g 값 다시 계산"] --> avg["평균 내기"]
        avg --> judge{"평균이 0.5보다<br/>뚜렷하게 큰가?"}
        judge -- "예" --> yes(["Claude가 관여"])
        judge -- "아니요" --> no(["판단 보류"])
    end

    text --> recalc

이미 여러 곳에서 돌아가고 있습니다

한 회사만의 실험처럼 보일 수 있지만 그렇지 않습니다. 앞에서 짚은 SynthID-Text를 만든 Google은 Gemini 앱과 웹에서 만들어지는 글에 이미 워터마크를 심고 있다고 공식 문서에 밝혀 두었거든요. 순서로 따지면 Anthropic이 오히려 늦은 편입니다.

제공자텍스트 워터마크비고
Google적용Gemini 앱과 웹에 SynthID-Text 적용
Anthropic적용2026년 8월부터 전 제품에 일괄 적용
OpenAI미적용이미지와 오디오에는 C2PA로 출처 표기
Microsoft미적용Copilot이 만든 미디어에 C2PA와 워터마크

Anthropic 쪽에서 눈에 띄는 대목은 범위입니다. 규정이 요구하는 지역에만 켜는 대신 처음부터 전 세계에 적용했고, 끄는 방법도 따로 두지 않았습니다.

나머지가 손을 놓고 있는 것도 아닙니다. 뒤에서 이야기할 투명성 실천 규범에는 Anthropic과 OpenAI, Google, Meta, Microsoft, Mistral이 모두 서명했거든요. 방향이 갈렸다기보다 구현 속도가 다를 뿐이라고 보는 편이 맞겠습니다.

워터마크를 직접 만들어 볼까요

원리만 놓고 보면 놀랄 만큼 단순해서, Bun으로 40줄이면 흉내 낼 수 있습니다. 먼저 후보 단어에 0이나 1을 매기는 함수가 필요한데요. 논문에서는 이 함수를 g 함수라고 부릅니다.

watermark.ts
const KEY = "claude-watermark-key";

// 앞선 단어 3개와 후보 단어를 비밀 키로 해싱해 0 또는 1을 뽑습니다
function g(context: string[], candidate: string): number {
  const digest = new Bun.CryptoHasher("sha256", KEY)
    .update([...context.slice(-3), candidate].join(" "))
    .digest();
  return digest[0] & 1;
}

const context = ["날씨가", "몹시"];
for (const word of ["흐렸고", "우중충했고", "잿빛이었고", "칙칙했고"]) {
  console.log(`g("${word}") = ${g(context, word)}`);
}

키를 넘긴 Bun.CryptoHasher는 HMAC을 계산합니다. 결과 바이트의 마지막 비트만 떼어 쓰니 0과 1이 반반씩 나오는데요. 여기서 기대는 성질은 해시 함수가 갖는 것과 똑같습니다. 키를 모르면 어떤 단어가 1인지 짐작할 방법이 없고, 키를 알면 언제든 똑같이 재현할 수 있습니다.

결과
g("흐렸고") = 1
g("우중충했고") = 0
g("잿빛이었고") = 0
g("칙칙했고") = 1

같은 자리에서도 후보마다 값이 갈립니다. 이제 이 값을 보고 단어를 고르면 되는데요. 여기서 한 가지 함정이 있습니다. g가 1인 후보만 골라 쓰면 어떻게 될까요? 워터마크는 아주 선명해지겠지만, 특정 단어만 반복해서 튀어나오면서 글이 어딘가 이상해집니다. 모델이 원래 갖고 있던 확률분포를 망가뜨렸기 때문입니다.

그래서 SynthID-Text는 토너먼트 샘플링(tournament sampling)이라는 방법을 씁니다. 후보를 원래 확률대로 두 번 뽑은 다음, 둘을 겨루게 해서 g 값이 큰 쪽만 남기는 것입니다. 원래 자주 나올 단어는 여전히 자주 뽑히면서, 전체적으로는 g가 1인 쪽으로 살짝 기울게 됩니다.

watermark.ts
// 각 자리마다 뜻이 거의 같은 후보 넷을 두는 아주 단순한 모델
const SLOTS = [
  ["오늘", "금일", "이날", "당일"],
  ["아침에", "새벽에", "이른 시간에", "동틀 무렵에"],
  ["날씨가", "기온이", "바람이", "공기가"],
  ["몹시", "무척", "꽤", "상당히"],
  ["차가웠고", "쌀쌀했고", "서늘했고", "싸늘했고"],
  ["하늘은", "구름은", "머리 위는", "창밖은"],
  ["흐렸다", "우중충했다", "잿빛이었다", "칙칙했다"],
];

const pick = <T>(xs: T[]): T => xs[Math.floor(Math.random() * xs.length)];

// 워터마크 없이: 후보 중 하나를 그냥 뽑습니다
function generatePlain(length: number): string[] {
  const out: string[] = [];
  for (let i = 0; i < length; i++) out.push(pick(SLOTS[i % SLOTS.length]));
  return out;
}

// 워터마크: 후보를 두 번 뽑아 g 값이 큰 쪽을 남깁니다
function generateWatermarked(length: number): string[] {
  const out: string[] = [];
  for (let i = 0; i < length; i++) {
    const slot = SLOTS[i % SLOTS.length];
    const a = pick(slot);
    const b = pick(slot);
    out.push(g(out, a) >= g(out, b) ? a : b);
  }
  return out;
}

탐지는 g 값의 평균을 내는 일입니다

심는 쪽을 만들었으니 찾아내는 쪽도 만들어 봅시다. 탐지기는 완성된 글을 받아서, 각 단어가 실제로 쓰인 자리마다 g 값을 다시 계산하고 평균을 냅니다.

watermark.ts
// 탐지: 실제로 쓰인 단어들의 g 값 평균을 냅니다
function score(words: string[]): number {
  let sum = 0;
  for (let i = 0; i < words.length; i++) sum += g(words.slice(0, i), words[i]);
  return sum / words.length;
}

const plain = generatePlain(7);
const marked = generateWatermarked(7);

console.log(`워터마크 없음: ${plain.join(" ")}`);
console.log(`             점수 ${score(plain).toFixed(3)}`);
console.log(`워터마크 있음: ${marked.join(" ")}`);
console.log(`             점수 ${score(marked).toFixed(3)}`);

무작위로 고른 글이라면 g 값이 0과 1로 반반 나올 테니 평균은 0.5 언저리에 머뭅니다. 반면 토너먼트를 거친 글은 1이 더 자주 섞이므로 평균이 위로 뜹니다.

결과
워터마크 없음: 오늘 이른 시간에 날씨가 몹시 차가웠고 머리 위는 우중충했다
             점수 0.571
워터마크 있음: 이날 동틀 무렵에 기온이 몹시 차가웠고 머리 위는 흐렸다
             점수 0.714

두 문장을 소리 내어 읽어 보면 어느 쪽이 워터마크가 박힌 문장인지 전혀 알 수 없습니다. 이것이 이 방식의 핵심입니다. 사람 눈에는 아무 차이가 없고, 키를 가진 쪽에게만 차이가 보입니다. 워터마크가 출력 품질에도 속도에도 실질적인 영향을 주지 않는다고 말하는 이유가 여기에 있습니다. 비용이 더 드는 것도 아닙니다. 워터마크 때문에 토큰이 더 생기지도 않습니다.

참고로 이 예제에서 워터마크가 붙은 글의 점수는 길이가 길어질수록 0.6875로 수렴합니다. 후보 넷 가운데 둘을 뽑아 겨루게 했을 때 g가 1인 단어가 이길 확률이 그만큼이기 때문입니다.

물론 지금 만든 건 원리만 남긴 축소판입니다. 실제 모델은 단어가 아니라 토큰 단위로 움직이고, 매 자리에서 후보로 삼을 수 있는 토큰이 수만 개에 달합니다. 자리마다 선택의 폭이 훨씬 넓으니 같은 길이의 글에서도 훨씬 진한 신호를 남길 수 있습니다. 뒤에서 살펴볼 성질은 방식이 정교해져도 그대로 따라옵니다. 결국 고를 여지가 있어야 심을 수 있고, 충분히 길어야 찾아낼 수 있다는 제약은 바뀌지 않거든요.

짧은 글에서는 잘 통하지 않습니다

여기까지만 보면 완벽해 보이는데요. 이제 한계를 확인할 차례입니다. 점수 0.6을 기준으로 판정한다고 정해 놓고, 길이를 바꿔 가며 2,000번씩 돌려보겠습니다.

trials.ts
const THRESHOLD = 0.6; // 이 점수를 넘으면 워터마크가 있다고 판정
const TRIALS = 2000;

console.log("길이   미탐지율   오탐률");
for (const n of [10, 30, 100, 300, 1000]) {
  let missed = 0;
  let falseAlarm = 0;
  for (let i = 0; i < TRIALS; i++) {
    if (score(generateWatermarked(n)) <= THRESHOLD) missed++;
    if (score(generatePlain(n)) > THRESHOLD) falseAlarm++;
  }
  const miss = ((missed / TRIALS) * 100).toFixed(1);
  const fa = ((falseAlarm / TRIALS) * 100).toFixed(1);
  console.log(
    `${String(n).padStart(4)}    ${miss.padStart(6)}%   ${fa.padStart(6)}%`,
  );
}

미탐지율은 워터마크가 있는데 놓친 비율이고, 오탐률은 워터마크가 없는 글을 있다고 잘못 짚은 비율입니다.

결과
길이   미탐지율   오탐률
  10      31.9%     21.9%
  30      15.9%     12.9%
 100       3.0%      2.1%
 300       0.1%      0.1%
1000       0.0%      0.0%

숫자가 꽤 냉정하죠. 열 단어짜리 문장 하나로는 셋 중 하나를 놓치고, 애먼 글 다섯 중 하나를 범인으로 지목합니다. 반면 천 단어가 넘어가면 둘 다 0에 붙습니다. 워터마크 탐지는 결국 통계 검정이라, 표본이 적으면 판정이 무너질 수밖에 없습니다. 이 한계는 발표문에도 “작은 샘플에서는 잘 동작하지 않는다”고 분명히 적혀 있습니다. 트윗 한 줄이나 채팅 답변 하나를 놓고 워터마크를 따지는 일은 애초에 성립하지 않습니다.

단어를 바꿔 쓰면 지워질까요

그럼 표현을 조금씩 손보면 워터마크를 지울 수 있을까요? 천 단어짜리 글에서 일정 비율의 단어를 뜻이 같은 다른 단어로 바꿔치기해 보겠습니다.

edit.ts
// 원문의 일부 단어를 뜻이 같은 다른 단어로 바꿔치기합니다
function paraphrase(words: string[], ratio: number): string[] {
  return words.map((word, i) =>
    Math.random() < ratio ? pick(SLOTS[i % SLOTS.length]) : word,
  );
}

const TRIALS = 200;
console.log("고친 비율   평균 점수");
for (const ratio of [0, 0.1, 0.3, 0.5, 1]) {
  let sum = 0;
  for (let i = 0; i < TRIALS; i++) {
    sum += score(paraphrase(generateWatermarked(1000), ratio));
  }
  console.log(
    `${String(Math.round(ratio * 100)).padStart(6)}%       ${(sum / TRIALS).toFixed(3)}`,
  );
}
결과
고친 비율   평균 점수
     0%       0.688
    10%       0.633
    30%       0.562
    50%       0.522
   100%       0.499

절반을 고쳐 써도 0.522로, 워터마크가 없는 글의 0.5보다는 여전히 위에 있습니다. 신호가 약해질 뿐 완전히 사라지지는 않는 것인데요. 모든 단어를 갈아치운 마지막 줄에 와서야 0.499로 떨어집니다. 발표문의 설명도 같은 이야기입니다. 가벼운 편집으로는 워터마크를 완전히 없앨 수 없고, 모든 단어를 바꾸면 없앨 수 있지만 그쯤 되면 그 글을 AI가 썼다고 말할 수 있는지부터 논쟁거리가 됩니다.

다만 이 축소판은 실제보다 신호가 빨리 약해지는 편입니다. 앞선 단어 세 개를 문맥으로 쓰기 때문에 한 단어를 고치면 뒤따르는 세 자리의 계산까지 함께 어긋나거든요. 실제 글에는 고칠 여지가 없는 토큰이 훨씬 많이 섞여 있어서 사정이 조금 다릅니다.

코드와 사실 문장에는 붙지 않습니다

개발자 입장에서 가장 눈여겨볼 대목은 따로 있습니다. 워터마크는 고를 여지가 있을 때만 심을 수 있다는 점인데요.

“2 + 2 =” 다음에 올 수 있는 답은 하나뿐입니다. “아이작 뉴턴의 가장 유명한 저작은 프린키피아”라는 문장에서도 마지막 자리에 다른 단어를 넣을 수 없습니다. 다른 단어를 골랐다면 사실이 틀리거나 코드가 깨지는 자리, 그러니까 정확한 출력이 요구되는 자리에는 워터마크를 넣지 않습니다.

그래서 코드에는 워터마크가 다른 글보다 훨씬 옅게 들어갑니다. 변수 이름이나 주석에는 고를 여지가 남아 있지만, 로직 자체는 대체로 정해져 있기 때문입니다. 같은 정렬 알고리즘을 짜라고 하면 사람이 쓰든 모델이 쓰든 나오는 코드가 크게 다르지 않은 것과 같은 이치죠. Claude Code 같은 코딩 에이전트가 짜준 코드를 워터마크로 가려내겠다는 기대는 접는 편이 좋겠습니다.

원고를 건네주고 문법과 문장부호만 고쳐 달라고 시킨 경우도 마찬가지입니다. 원문 단어가 그대로 남아 있으니 심을 자리가 거의 없습니다. 뒤집어 보면 워터마크가 진하게 남는 쪽은 모델이 백지에서 길게 써 내려간 산문입니다. 초안을 통째로 맡긴 블로그 글이나 보고서가 여기에 해당하고, 짧은 요약이나 자료 정리처럼 형식이 정해진 글은 상대적으로 옅습니다. 어떤 작업에 흔적이 진하게 남는지는 결국 그 작업에 선택의 여지가 얼마나 있었는지를 그대로 따라갑니다.

이미지에는 C2PA 자격 증명이 붙습니다

텍스트가 아닌 파일에는 다른 방식이 적용됩니다. 모델이 .png나 .jpg, .svg 같은 지원 포맷으로 파일을 만들면 C2PA 표준을 따르는 자격 증명(content credential)을 함께 붙이는 방식인데요. 파일 메타데이터에 암호로 서명한 짧은 기록을 넣기 때문에 그림의 픽셀 자체는 전혀 건드리지 않습니다. 앞의 표에서 봤듯이 OpenAI와 Microsoft는 글에는 아직 워터마크를 넣지 않지만 파일에는 이 기록을 붙이고 있습니다.

앞서 C2PA 자격 증명을 직접 서명하고 깨뜨려 보며 살펴봤는데요. 같은 목표를 두고 접근이 이렇게 갈리는 점이 흥미롭습니다. 텍스트 워터마크는 본문 자체에 스며들어서 복사해 붙여넣어도 살아남는 반면, C2PA 자격 증명은 메타데이터에 얹혀 있어서 스크린샷을 다시 찍거나 다른 포맷으로 변환하면 그대로 날아갑니다. 대신 자격 증명 쪽은 어떤 도구로 언제 만들어졌는지를 훨씬 분명하게 적어 둘 수 있습니다.

확인해 주는 도구는 아직 닫혀 있습니다

원리를 알아도 키가 없으면 아무것도 확인할 수 없습니다. 그런데 키를 쥔 쪽은 아직 문을 좁게 열어 두고 있는데요. Anthropic은 탐지 API를 비공개 프리뷰로 두고, 접근 자격이 먼저 열리는 곳을 이렇게 밝혔습니다.

  • 규제 당국과 법 집행 기관
  • 언론사와 팩트체커
  • 독립 연구자와 교육 기관
  • EU 시민사회 단체
  • 준수 의무를 지는 기업

접근 권한은 시간이 지나면서 넓히겠다고 했고, 지금은 관심 등록 양식으로 신청을 받고 있습니다. Google도 사정이 비슷합니다. SynthID Detector라는 확인용 포털을 두었지만 언론인과 미디어 종사자를 대상으로 한 베타 단계입니다. 보통 사용자가 당장 두드릴 창구는 사실상 없는 셈이죠.

다만 기술 자체가 잠겨 있지는 않습니다. SynthID-Text는 오픈소스로 공개돼 있고 Hugging Face Transformers에도 들어가 있어서, 직접 돌리는 모델에 워터마크를 켜는 일은 설정 객체 하나를 넘기는 정도입니다.

from transformers import SynthIDTextWatermarkingConfig

watermarking_config = SynthIDTextWatermarkingConfig(
    keys=[654, 400, 836, 123, 340],  # 실제로는 훨씬 긴 키 목록을 씁니다
    ngram_len=5,
)

output_sequences = model.generate(
    **tokenized_prompts,
    watermarking_config=watermarking_config,
    do_sample=True,
)

찾아내는 쪽은 이만큼 간단하지 않습니다. Transformers가 함께 제공하는 베이지안 탐지기는 같은 설정으로 만든 예시를 모아 따로 학습시켜야 쓸 수 있거든요. 심는 일과 찾는 일의 품이 이렇게 크게 차이 납니다.

마지막으로 이 방식은 시중의 AI 탐지 서비스와 성격이 아예 다릅니다. Pangram 같은 도구는 문체의 단서를 통계로 잡아냅니다. “이것은 X가 아니라 Y다” 같은 구문이나 특정 부사의 과다 사용 같은 것을 근거로 삼는데요. 어디까지나 짐작입니다. 반면 워터마크 탐지는 특정 키가 쓰였는지를 계산해 확인하는 일입니다. 서명으로 봇의 신원을 증명하는 Web Bot Auth가 IP 목록 대조를 대체하려는 것과 비슷한 흐름입니다.

워터마크가 답해주지 못하는 것

기대치를 정확히 맞춰 두는 편이 좋겠습니다. 워터마크가 없다고 해서 사람이 썼다는 뜻은 아닙니다. 아직 적용을 마치지 못한 모델이 남아 있고, 짧은 글이면 있어도 못 찾습니다.

확인이 닿는 범위도 생각보다 좁습니다. 워터마크를 찾으려면 그 글을 만든 쪽의 키가 있어야 하거든요. Claude의 탐지기는 Gemini가 쓴 글을 알아보지 못하고, 반대도 마찬가지입니다. 방식이 같아도 키가 다르면 남남이니까요. 제공자가 늘어날수록 탐지는 섬처럼 나뉘고, “이 글을 AI가 썼는가”라는 물음에 한 번에 답해주는 통합 탐지기는 원리상 나오기 어렵습니다.

모델이 처음부터 끝까지 썼는지, 아니면 사람이 쓴 글을 손봤을 뿐인지도 구분하지 못합니다. 워터마크가 말해주는 것은 “이 글에 그 모델이 관여했을 가능성이 높다”까지입니다. 이걸 부정행위 적발 도구로 곧장 쓰려는 순간 무리가 시작되는 셈이죠. 🤔

프라이버시 쪽은 오히려 설계상 안심할 만합니다. 워터마크에는 개인을 식별할 정보가 전혀 담기지 않아서, 누가 언제 어느 대화에서 만든 글인지는 복원할 수 없습니다. 특정 개인이나 조직으로 추적하는 일 자체가 불가능하게 만들어져 있습니다.

그럼 왜 하필 지금일까요? 배경에는 EU AI Act가 있습니다. 190여 개 조직이 서명한 AI 생성 콘텐츠 투명성 실천 규범이 2026년 8월 2일부터 발효됐거든요. Anthropic은 지역을 가리지 않고 전 세계 사용자에게 곧바로 적용하기로 했고, 지역별로 범위를 조정할지는 나중에 검토하겠다고 밝혔습니다. 발표문은 앞으로 나올 Claude 모델에 워터마크가 들어간다고만 적었을 뿐, 제품별로 어떻게 갈리는지나 끌 수 있는지는 따로 언급하지 않았습니다.

마치며

지금까지 AI가 쓴 글에 워터마크가 어떻게 심기는지 직접 구현해 가며 살펴봤습니다. 정리하면 이렇습니다. 뜻이 비슷한 후보 중 하나를 고르는 순간마다 비밀 키로 계산한 값을 참고해 살짝 편향을 주고, 나중에 같은 키로 그 편향이 남아 있는지 통계로 확인하는 방식입니다. 글의 뜻도 품질도 그대로지만 흔적은 남습니다.

동시에 만능이 아니라는 점도 숫자로 확인했습니다. 짧으면 못 찾고, 코드에는 거의 안 붙고, 전부 고쳐 쓰면 지워집니다. 여기에 키를 가진 곳이 아직 극소수라는 현실까지 겹치면, 당장 우리 손에 들어오는 도구라기보다는 앞으로 몇 년에 걸쳐 자리를 잡아갈 기반에 가깝습니다. 생성형 AI를 둘러싼 흐름을 더 넓게 보고 싶다면 AI 관련 글도 함께 살펴보세요.

더 자세한 내용은 Anthropic의 공식 발표를 참고하세요.

This work is licensed under CC BY 4.0CCBY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord