생성형 AI가 검색의 중심으로 자리 잡으면서, 콘텐츠가 AI에게 인용되려면 단순히 키워드를 나열하는 것만으로는 부족해졌습니다. AI는 문장의 의미를 숫자로 변환한 벡터 임베딩(Vector Embedding)을 기준으로 콘텐츠의 관련성을 판단하기 때문에, 생성형 엔진 최적화(Generative Engine Optimization, GEO)를 이야기할 때 벡터 임베딩의 개념을 정확히 이해하는 것이 출발점이 됩니다. 이 글에서는 벡터 임베딩을 전혀 모르는 분들도 쉽게 따라올 수 있도록, 벡터 임베딩이 무엇인지와 GEO에서 왜 중요한지부터 실제로 사용해볼 수 있는 임베딩 모델과 Python 코드 예시까지 차례대로 살펴보겠습니다.

벡터 임베딩이란 무엇인가?

벡터 임베딩(Vector Embedding)은 텍스트나 이미지 같은 데이터를 인공지능이 이해하도록 숫자의 배열로 변환하는 기술입니다. Google Cloud의 Embeddings API 문서에 따르면, 이는 데이터의 의미를 여러 개의 수치로 표시해 정보 간의 유사성을 계산하는 방식으로 작동합니다. 예를 들어 “사과”와 “바나나”는 서로 비슷한 수치를 가지게 되어 AI가 두 단어의 연관성을 즉각적으로 파악할 수 있습니다. 결과적으로 컴퓨터가 인간의 언어와 개념을 수학적 방식으로 이해하고 처리하게 돕는 가장 핵심적인 통역 과정이라고 할 수 있습니다.

생성형 엔진 최적화(GEO)에서 벡터 임베딩이 중요한 이유

생성형 엔진 최적화(GEO)에서 벡터 임베딩이 중요한 이유는 AI가 단순 키워드를 넘어 문맥과 의미를 이해하는 핵심 기준이기 때문입니다. GTM Delta에 의하면 AI 시스템은 긴 텍스트를 여러 개의 수치로 이루어진 벡터로 변환해 저장하고 이를 통해 단어 형태가 달라도 의미적 유사성을 수학적으로 계산할 수 있습니다. 예를 들어 “신입 개발자 온보딩”을 검색하면, 텍스트에 해당 단어가 정확히 없어도 “API 통합 가이드”의 의미적 연관성을 파악해 연결합니다. 사용자의 질문 또한 벡터로 변환되며, AI는 데이터베이스에서 질문과 가장 가까운 거리의 벡터를 찾아 답변의 근거로 삼습니다. 따라서 AI의 인용을 받으려면 키워드 나열보다 주제를 깊이 있게 다루어 AI에게 가장 관련성 높은 콘텐츠로 인식되는 것이 중요합니다.

벡터 임베딩 모델 추천

벡터 임베딩이 처음이라 어떤 임베딩 모델을 골라야 할지 막막하다면, 복잡한 설정 없이 무료 티어를 제공하는 Gemini 임베딩 모델(Gemini Embedding 2)을 선택하는 것이 좋습니다. Milvus에 의하면 Gemini 임베딩 모델은 다국어 검색(Cross-lingual), 주요 정보 확인(Key Information) 테스트 등에서 가장 높은 점수를 받아, OpenAI 3-Large 및 Qwen3-VL-2B 등 타 모델 대비 일반적으로 사용하기 좋은 모델로 평가되었습니다. 기타 오픈소스 모델의 경우, 초기 구축 비용이 필요하고 사용자가 직접 서버를 구축하고 유지해야 해서 초보자가 다루기 어렵습니다. 그러면 이제 Gemini 임베딩 모델을 실제로 어떻게 사용하는지 함께 살펴보겠습니다.

벡터 임베딩 모델 사용법

Python에서 Gemini의 임베딩 모델인 Gemini Embedding 2 사용 방법을 간단하게 설명합니다. 지금까지 벡터 임베딩의 개념과 GEO에서의 중요성을 살펴봤다면 이제는 실제로 문장이 어떻게 숫자로 변환되는지 직접 눈으로 확인해볼 차례입니다. 코딩 경험이 없어도 아래 순서를 그대로 따라하기만 하면 되니 개념을 좀 더 확실히 이해하고 싶다면 실습까지 진행해 보는 것을 추천합니다.

먼저 Gemini 임베딩 모델을 사용하려면 AI Studio에서 Gemini API Key를 발급받아야 합니다.

Google AI Studio 주소: https://aistudio.google.com/

좌측 메뉴에서 “API 키” 메뉴로 이동 후 우측 상단의 “API 키 만들기” 선택하여 발급할 수 있습니다.

Google AI Studio

생성한 API 키는 별도로 보관하는 것이 좋으며, 코드에 키를 직접 넣을 경우(하드코딩) Github 등에 업로드 시 다른 사람이 해당 API 키를 사용할 수 있어서 위험합니다.

Gemini API Key 발급이 완료되었으면 벡터 임베딩 테스트를 진행할 폴더를 하나 만들고, 메모장에서 새 파일을 연 후 GEMINI_API_KEY=”API Key 값” 작성 후 파일 이름은 .env로 저장합니다.

예시: GEMINI_API_KEY=”AQ….”

.env file

Python으로 벡터 임베딩을 확인하기 전에 dotenv 및 genai 라이브러리가 설치되어 있지 않다면 먼저 pip로 설치합니다

pip install 1

동일한 테스트 폴더에서 아래 Python 코드를 실행하면 입력한 문장이 여러 개의 숫자(차원)를 가진 벡터로 변경된 것을 확인할 수 있습니다.

from dotenv import load_dotenv
from google import genai

load_dotenv()
client = genai.Client()

text1 = "벡터 임베딩이란 무엇인가?"

result = client.models.embed_content(
        model="gemini-embedding-2",
        contents=text1
)

values = result.embeddings[0].values

print(f"벡터 임베딩 문장: {text1}")
print(f"벡터 임베딩 값 (일부분): {values[:5]}")
Vector Embedding Python Code

여기에서 확인할 수 있는 숫자들은 사람이 보기엔 별다른 의미가 없어 보이지만 AI에게는 해당 문장의 의미를 수치적으로 이해하는 값이 됩니다. 의미가 비슷한 문장일수록 이 숫자들의 조합도 서로 가까워지는데 GEO에서는 이 원리를 사용하여 콘텐츠 간의 관련성을 확인하는 지표로 사용할 수 있습니다.

GEO에서의 벡터 임베딩 활용법

GEO에서는 벡터 임베딩 및 코사인 유사도(Cosine Similarity)를 사용해 관련성 있는 콘텐츠를 작성하는 데 활용할 수 있습니다. 코사인 유사도를 이용하면 콘텐츠 간의 의미가 얼마나 비슷한지 수치로 확인할 수 있는데, 임베딩 모델로 변환한 벡터 값을 비교해 유사도를 계산합니다. Gemini API 공식 문서에 따르면 코사인 유사도는 -1에서 1 사이의 값을 가지며, 1에 가까울수록 의미가 비슷하고 -1에 가까울수록 정반대의 의미를 나타냅니다.

Python으로 코사인 유사도를 확인하기 전에 scikit-learn과 numpy 라이브러리가 설치되어 있지 않다면 먼저 pip로 설치합니다.

pip install 2

동일한 테스트 폴더에서 아래 Python 코드를 실행하면 기준 문장과 비교 문장들 사이의 코사인 유사도 값을 확인할 수 있습니다.

예를 들어, “벡터 임베딩이란 무엇인가” 라는 문장은 벡터 임베딩의 정의를 다루는 문장(코사인 유사도: 0.8198)이 오늘 저녁 메뉴를 다루는 문장(코사인 유사도: 0.3785)보다 의미적으로 더 유사하다는 것을 확인할 수 있습니다.

다른 문장을 테스트 하고 싶은 경우에는 아래 Python 코드에서 text1 및 text2 값에 있는 문장을 변경하면 됩니다.

from dotenv import load_dotenv
from google import genai
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

load_dotenv()
client = genai.Client()

text1 = "벡터 임베딩이란 무엇인가?"
text2 = [
    "벡터 임베딩은 텍스트나 이미지 같은 데이터를 인공지능이 이해하도록 숫자의 배열로 변환하는 기술입니다.",
    "오늘 저녁 메뉴는 치킨을 먹고 싶어요."
]

result1 = client.models.embed_content(
        model="gemini-embedding-2",
        contents=text1
)

embedding1 = np.array(result1.embeddings[0].values).reshape(1, -1)

print(f"코사인 유사도 확인 기준 문장: {text1}")

for i, j in enumerate(text2, start=1):
    result2 = client.models.embed_content(
        model="gemini-embedding-2",
        contents=j
    )
    embedding2 = np.array(result2.embeddings[0].values).reshape(1, -1)
    
    similarity = cosine_similarity(embedding1, embedding2)
    print(f"{i}번 문장 코사인 유사도: {similarity[0][0]:.4f}")
Cosine Similarity Python Code

이처럼 GEO에서는 벡터 임베딩 및 코사인 유사도를 활용해 관련성 있는 콘텐츠를 작성하는 데 활용할 수 있습니다.

마치며

지금까지 벡터 임베딩의 개념부터 GEO에서의 역할, 그리고 Gemini 임베딩 모델과 코사인 유사도를 활용한 실습까지 살펴보았습니다. 벡터 임베딩은 AI가 콘텐츠의 의미를 이해하고 관련성을 판단하는 핵심 기준인 만큼, GEO 전략을 세울 때도 키워드 중심의 사고에서 벗어나 콘텐츠가 담고 있는 의미와 맥락을 촘촘하게 다루는 것이 중요합니다. 이 글에서 소개한 Python 코드를 직접 실행해보면서 벡터 임베딩과 코사인 유사도가 실제로 어떻게 작동하는지 체감해보시기를 바랍니다.

참고 출처 (Reference)

  1. 1. Google Cloud – Embeddings API 개요

  2. 2. GTM Delta - How to Rank in AI Search with GEO

  3. 3. Milvus – How to Choose the Best Embedding Model for RAG in 2026: 10 Models Benchmarked

  4. 4. Google AI Studio

  5. 5. Gemini API - 임베딩