프롬프트 하나 넣으면 몇 분 만에 키워드 목록이 나오고, 캠페인 구조 초안까지 뽑아주는 시대다. AI가 검색 마케팅의 “어려운 일”을 다 해줄 것처럼 보인다. 그냥 방치해두면 자동으로 성과가 나올 것처럼.

하지만 진짜 계정을 열어보면 이야기가 달라진다. AI가 만들어준 키워드는 출발점이지, 결과가 아니다. 당신이 최종적으로 마주하는 것은 광고 플랫폼이 수만·수십만 개 쌓아준 서치텀 검색어 보고서다. 그리고 그걸 AI는 대신 읽어주지 않는다.

몇 분 만에 캠페인이 생기는데, 왜 아직도 돈은 사라질까

지금은 누구나 AI로 키워드를 뽑고, 몇 분 안에 유료 검색 캠페인을 띄운다. 그래서 “이제 어려운 작업은 끝났다”고 느끼기 딱 좋다. 하지만 구조화되고 스케일 가능한 성과를 만드는 일은 여전히 검색이 실제로 어떻게 돌아가는지 이해한 사람의 몫이다.

브로드 매치는 강력하지만, 강력한 만큼 노이즈도 함께 끌고 온다. AI가 만든 키워드와 실제로 유입된 검색어가 얼마나 맞아떨어지는지는 누구도 보장하지 않는다. 이 글은 그 간극을 메우는 데 필요한 도구 — n-gram, Levenshtein distance, Jaccard similarity — 를 왜 지금 배워야 하는지에 대한 이야기다. AI 시대에 오히려 더 중요해진 이유까지.

AI는 훌륭한 요약자가 될 수 있지만, 검증자는 아니다. 검증을 건너뛰면 그것은 전형적인 “garbage in, garbage out”일 뿐이다.

이번 글의 핵심은 이렇다. AI가 생성의 장벽을 낮췄기 때문에, 이제 차별화는 ‘생성’이 아니라 ‘검증’에서 만들어진다. 그리고 검증은 결국 문자열을 어떻게 해석하는지의 문제다. 아래 내용은 내 경험이 아니라 외부 자료 기반이라는 점을 먼저 밝힌다. 그다음 내가 이 패턴을 어떻게 이해했는지, 그리고 내 작업에서 같은 원칙이 어떻게 살아있는지 풀어보겠다.


외부 정보: 한 PPC 전문가가 10만 개 서치텀을 정리한 방법

Search Engine Land에 게재된 기사 “Why advanced semantic techniques still matter in PPC and SEO”가 이 글의 근거다. 작성자는 15년 이상 경력의 디지털 마케팅 전문가로, Uber·Salomon·Asana 등 계정을 성장시켰던 EU 기반 데이터 마케팅 에이전시 Quantads의 공동창업자다. 그가 대형 계정을 재구성하며 실제로 쓴 기법들을 소개한다.

그의 사례부터 보자. 그는 10만 개가 넘는 서치텀으로 구성된 여러 캠페인을 재구성했다. 그 방대한 목록을 n-gram으로 분해하니 이런 수준으로 줄어들었다:

  • 유니그램(단어 1개): 약 6,000개
  • 바이그램(연속 단어 2개): 약 23,000개
  • 트라이그램(연속 단어 3개): 약 27,000개

이렇게 작아진 집합에서 패턴이 보이기 시작한다. “free”라는 유니그램이 들어간 키워드가 전부 저성과라면, “free”를 브로드 매치 네거티브로 통째로 제외할 수 있다. 반대로 “nearby”가 유난히 잘 전환된다면, 그 방향으로 지역 변형 키워드와 랜딩 페이지 실험을 늘릴 수 있다.

핵심은 n-gram이 키워드를 단순화하고, 그다음 성과 지표를 더해 통찰로 바꾸는 것이다. 각 n-gram별로 비용·노출·클릭·전환·전환가치를 합산한 뒤 CPA, ROAS, CTR, CVR을 계산한다. 그러면 “돈은 쓰는데 전환이 없는 n-gram(네거티브)”과 “실제로 성과를 내는 n-gram(포지티브)”이 선명하게 갈린다.

다만 한계도 분명하다. 서치텀 볼륨이 커야 의미가 있고, n이 커질수록 출력이 커져 오히려 비효율이 된다. “24/7”, “same day”, “urgent” 같은 긴급 관련 n-gram이 높은 전환율을 보인다면 그 테마를 분리해 집중 관리하라는 식으로 쓴다.

Levenshtein distance: 오타를 잡고, 과하게 잘게 쪼갠 구조를 병합한다

Levenshtein distance는 한 문자열을 다른 문자열로 바꾸는 데 필요한 단일 문자 편집(삽입·삭제·대체)의 최소 횟수다. “cat”에서 “cats”로는 1번(“s” 추가), “cat”에서 “dog”로는 3번이다. 개념은 단순하다.

가장 흔한 쓰임은 브랜드·경쟁사 오타 감지다. “uber”와 “uver”는 거리 1이므로, 논브랜드 캠페인에서 오타 버전을 자신 있게 제외할 수 있다. 거꾸로 키워드와 매칭된 검색어 사이의 거리가 10 이상으로 크다면, 그 검색어는 키워드와 공통점이 거의 없는 것이므로 검토 대상이다. 거리가 가까우면 안전하다고 보고 수동 확인을 건너뛴다.

n-gram으로 초기 클러스터를 만든 뒤에도 수천 개의 유니그램이 남는다면, 그걸 손으로 분류하는 건 불가능하다. 이때 Levenshtein으로 거의 동일한 키워드를 타깃하는 광고그룹을 병합한다. 과도하게 세분화된 SKAG 형태의 구조는 리포팅과 계정 관리가 복잡해지고, 입찰도 비효율적이 되며 돈이 낭비되기 때문이다.

기준값(threshold)은 정확도에 따라 나눈다. 3이면 안전하게 병합하고, 6 정도의 느슨한 기준이면 의도나 유사성별로 광고그룹을 묶거나 이름을 붙이는 데 쓴다. 예를 들어 아래 세 키워드는 서로 거리 1 이내라서 한 그룹으로 묶어도 안전하다:

검색어 24/7 plumber 24 7 plumber 247 plumber
24/7 plumber 0 1 1
24 7 plumber 1 0 1
247 plumber 1 1 0

Jaccard similarity: 순서만 다른 키워드를 지운다

Jaccard similarity는 두 집합의 겹침을 잰다. 두 n-gram 집합에서 공통 유니그램 수를, 두 집합의 고유 유니그램 수로 나눈 값이다. 직관적으로는 “공통분모 / 전체 유니그램”이다.

예시가 가장 명확하다. “new york plumber”와 “plumber new york”은 세 유니그램이 모두 공유되므로 유사도 1이다. 단어 순서가 다를 뿐이니 완전히 같은 검색어로 보는 것이다. 반면 “new york plumber”와 “NYC plumber”는 “plumber”만 공유되고 총 유니그램은 4개이므로 유사도 0.25다.

이건 예전 phrase match와 broad match modified 로직 사이의 간극을 메우는 첫 단계로 유용하다. 순서만 바뀐 중복 키워드를 제거하는 데 탁월하다. 다만 의미는 계산하지 못한다는 한계가 있다. “new york”과 “NYC”는 같은 의미인데도 Jaccard 계산은 서로 다른 유니그램으로 취급한다. 그런 뉘앙스까지 처리하려면 더 고급 기법이 필요하다고 저자는 지적한다.

조합이 진짜다: Levenshtein → Jaccard → n-gram 시퀀스

사이버보안 강의 캠페인 예시를 보자. Semrush 기준 미국 월간 검색량이 있는 키워드 상위 10개가 있다. “cybersecurity courses”(5,400), “cybersecurity online course”(1,900), “free cybersecurity courses”(1,300), “online cybersecurity courses”(1,300), “cybersecurity course”(1,000), “cybersecurity courses online”(880), “google cybersecurity course”(880), “cybersecurity courses free”(720), “cybersecurity free courses”(590), “cybersecurity online courses”(480).

복수·단수형과 순서 재배열을 합치면, 이 10개를 사실상 4개로 줄일 수 있다. “Cybersecurity courses”, “Cybersecurity courses online”, “Free cybersecurity courses”, “Google cybersecurity course”. n-gram으로도 가능하지만, 수천 개 키워드로 확장하면 n-gram만으로는 압도당한다.

더 효율적인 방법은 두 유사도 지표를 순서대로 쓰는 것이다. 먼저 Levenshtein으로 매우 유사한 검색어를 병합하고, 이어서 Jaccard로 순서만 바뀐 변형을 중복 제거한다. 각 단계에서 비용·전환 등 KPI를 합산해두면 n-gram 분석이 계속 실행 가능하게 유지된다. 결과는 검색어 볼륨이 커져도 견디는, 깔끔하게 압축된 구조다.

저자가 정리한 선택 테이블은 이러하다:

상황 최적 기법 이유
거대한 서치텀에서 고의도 패턴 찾기 n-gram 테마를 빠르게 드러내고 차원을 줄임
중복·근접 키워드 대량 정리 Levenshtein distance 철자·구조 유사성을 함께 포착
순서 바뀌거나 미세 변형된 문자열 중복 제거 Jaccard similarity 순서에 무관한 토큰 기반 비교
캠페인 재구축용 스케일 클러스터 조합: Levenshtein → Jaccard → n-gram 정확도와 압축을 모두 얻는 시퀀스

AI 시대에 왜 오히려 시맨틱 기법이 되살아나는가

이제부터는 외부 자료가 아니라 내 해석이다. 왜 “이제 AI가 다 해주지 않나” 하는 시대에 이런 문자열 수학이 다시 주목받는 걸까.

첫째, AI는 생성하는 쪽에서만 일한다. 검증하는 쪽은 여전히 사람 몫이다. AI가 뽑아준 키워드를 그대로 캠페인에 넣으면, 그 키워드가 실제로 어떤 검색어와 매칭되는지는 광고 플랫폼이 결정한다. 브로드 매치는 매칭 범위를 넓히는 대신 노이즈도 늘린다. 이제 AI라는 또 하나의 노이즈 발생원이 추가된 셈이다. 검색어 보고서를 까서 “이게 정말 의도한 고객인가”를 판단하는 일은 기술이 아니라 판단력의 문제로 남았다.

둘째, 스케일이 커질수록 검증의 비용이 분산된다. 검색어가 수백 개일 때는 눈으로 훑어도 된다. 수만 개부터는 그게 불가능하다. 10만 개 서치텀을 사람이 다 읽을 수 없으니, 그걸 6,000개의 유니그램으로 압축하고 패턴을 보는 작업이 필요한 것이다. AI는 이 압축의 초안을 만들어줄 수 있지만, “어느 n-gram이 진짜 네거티브인지”는 성과 데이터로 검증해야만 확신이 선다.

셋째, 그리고 가장 중요한 부분인데, 검증이 시스템 전체의 건전성을 결정한다는 사실은 검색 마케팅에만 해당하지 않는다. 내가 1년 넘게 AI 에이전트 시스템을 운영하면서 매일 맞닥뜨리는 원칙과 정확히 같은 모양이다.

상호작용: 에이전트 운영에서 배운 “검증 없는 출력은 수락하지 않는다”

나는 Drewgent라는 개인 AI 에이전트 시스템을 만들고 운영하고 있다. 수십 개의 자동화가 매일 코드를 쓰고, 콘텐츠를 만들고, 기억을 저장한다. 그 과정에서 내가 가장 일찍, 그리고 가장 뼈저리게 배운 규칙이 있다.

확인되지 않은 subagent 출력은 수락하지 않는다. Filesystem = Truth. 나는 이걸 절대 규칙으로 박아놨다. 에이전트가 “검색했다”, “테스트했다”, “저장했다”고 말해도, 그게 실제 파일과 데이터로 증명되지 않으면 신뢰하지 않는다. 소리 좋은 요약보다, 검증된 상태가 진실이다.

이 규칙이 검색 마케팅의 시맨틱 기법과 만나는 지점이 재미있다. AI가 만들어주는 키워드 목록은 사실 “확인되지 않은 subagent 출력”과 같다. AI가 아무리 그럴듯한 구조를 뽑아줘도, 실제 서치텀 데이터라는 파일시스템과 대조하기 전에는 믿을 수 없는 것이다. n-gram으로 실제 데이터를 압축하고, Levenshtein으로 거짓 근접을 걸러내고, Jaccard로 순서 변형을 정리하는 과정은 곧 “생성물을 근거 데이터로 검증”하는 일이다.

또 하나 내가 반복적으로 겪은 일은 조용한 부패(silent drift)다. 에이전트 시스템의 검색 인덱스가 최신 데이터와 어긋나면, 어떤 에러도 없이 검색 결과 품질만 조용히 나빠진다. 캠페인도 마찬가지다. 노이즈가 섞인 검색어를 오래 방치하면 큰 실패처럼 보이지 않으면서 CPA만 조용히 올라간다. 조용한 악화를 잡는 유일한 방법은 정기적으로 근거 데이터와 대조하는 루틴이다.

그래서 내 결론은 이렇다. AI가 검색 마케팅의 “생성”을 대신하게 될수록, 마케터의 가치는 “검증”으로 옮겨간다. 그리고 검증의 가장 저렴하고 빠른 형태가 바로 이 시맨틱 기법들이다. 값비싼 툴이 필요하지 않다.

당신의 워크플로에 넣는 법

시작은 어렵지 않다. 첫 단계는 지금 당장 광고 계정에서 서치텀 보고서를 export 하는 것이다. 그다음 n-gram으로 분해하고, 각 유니그램·바이그램별로 비용과 전환을 합산한다. 스프레드시트나 파이썬 30줄이면 충분하다. 두 번째로, “이건 같은 검색어다” 싶은 변형들(오타, 순서 변경, 24/7과 247 같은 표기 차이)을 Levenshtein threshold 3으로 묶어본다. 마지막으로 Jaccard로 순서만 바뀐 중복을 지운다.

주의할 점 하나. 이 기법들은 서치텀 볼륨이 충분할 때 의미가 있다. 검색어가 수백 개뿐인 소규모 계정이라면, n-gram 클러스터링보다 눈으로 훑는 게 더 빠르고 정확하다. 이건 큰 예산 계정에서 빛나는 도구다. 그리고 이 도구의 목적은 키워드 재구축 그 자체가 아니라, 검색어 데이터에 당신의 비즈니스 맥락을 입히는 것임을 잊지 말자. “free”가 당신 계정에서 나쁜 유니그램이었던 건, 그 데이터가 그렇게 말했기 때문이다.

n-gram, Levenshtein, Jaccard는 AI의 대체재가 아니다. AI가 만든 초안을 근거 데이터로 검증하고, 당신의 맥락을 입히는 프레임이다.

이번 주, 딱 한 가지면 된다. 서치텀 보고서 하나를 export해서 n-gram으로 쪼개보라. 그리고 “이건 진짜 돈 낭비”라고 확신한 유니그램 하나를 골라 네거티브로 걸어보라. 그 한 번의 행동이, AI가 만들어준 키워드를 맹신하던 방식에서 벗어나는 첫 단계다.

혹시 이미 이 패턴을 쓰고 있는가? 당신 계정에서 “free” 같은 함정 유니그램은 무엇이었나? 댓글로 공유해달라 — 같은 실수를 반복하지 않는 데 도움이 될 것이다.


근거 출처

외부 정보(하베스터 수집): Rémi Kerhoas, “Why advanced semantic techniques still matter in PPC and SEO”, Search Engine Land (2025-12-02 수집). 10만 개 서치텀의 n-gram 압축(6,000 유니그램/23,000 바이그램/27,000 트라이그램), Levenshtein distance 기반 오타 감지·광고그룹 병합, Jaccard similarity 기반 순서 변형 중복 제거, Levenshtein → Jaccard → n-gram 조합 시퀀스, 사이버보안 강의 키워드 10→4 압축 사례와 기법 선택 테이블의 근거. 작성자는 15년 이상 경력의 검색 마케팅 전문가로, EU 기반 에이전시 Quantads의 공동창업자.

상호작용(에이전트-드루 대화·작업): 본문 “상호작용” 섹션의 “확인되지 않은 subagent 출력은 수락 금지, Filesystem = Truth” 원칙, 조용한 부패(silent drift) 관찰, 생성물을 근거 데이터로 검증하는 습관은 Drewgent(AI 에이전트 시스템) 운영 중의 실제 작업에서 얻은 경험이다.

이 글은 Drewgent(개인 AI 에이전트 시스템)의 콘텐츠 파이프라인으로 작성됐다. 외부 자료는 하베스터가 수집한 기사, 경험은 에이전트-인간 작업 기록에서 분리해 인용했다.