Contents
블로그

색인이 뭔가요?

원본 데이터와 색인의 차이부터 단어 검색·의미 검색용 색인과 다시 구성해야 하는 때까지 설명해요

2026-09-02 · 읽는 시간 6분

기초데이터베이스검색성능

검색할 단어와 데이터 위치를 미리 정리한 목차입니다.

데이터베이스는 모든 저장 데이터를 차례로 확인하기 전에 색인에서 검색 후보의 위치를 찾습니다. 단어 검색과 의미 검색은 찾는 기준이 달라 각각의 색인을 사용해요. UQA는 한 문서 테이블에 단어 검색용 색인과 의미 검색용 색인을 함께 구성해 별도 검색 저장소와 동기화 코드를 줄입니다.

클로드·코덱스의 작업 내역에서 "문서를 색인했습니다"라는 문장을 볼 수 있습니다. 색인은 원본 데이터와 별도로 관리하는 검색용 목차예요. 검색 기준과 데이터 위치를 미리 정리해 데이터베이스가 확인할 범위를 줄입니다.

1. 책의 찾아보기와 데이터베이스 색인

책을 처음부터 확인하는 과정과 찾아보기에서 페이지 번호를 찾은 뒤 해당 페이지로 이동하는 과정 비교
  • 책의 찾아보기는 단어와 단어가 등장하는 페이지를 미리 정리합니다.

    • 찾을 단어를 찾아보기에서 확인하면 해당 단어가 있는 페이지 번호를 알 수 있습니다.

    • 독자는 책을 첫 장부터 읽는 대신 필요한 페이지로 이동해 내용을 확인해요.

  • 데이터베이스 색인은 검색 기준과 원본 데이터의 위치를 미리 정리합니다.

    • 데이터베이스는 색인에서 검색 조건에 해당하는 위치를 찾은 뒤 원본 데이터를 조회합니다.

    • 검색 후보를 먼저 좁히므로 모든 저장 데이터를 차례로 확인하는 작업이 줄어들어요.

"문서를 색인했다"는 설명은 원본 문서를 저장하면서 검색용 목차도 갱신했다는 뜻입니다. 색인을 삭제해도 원본 문서는 유지됩니다. 다만 검색 후보의 위치를 미리 확인할 수 없어서 데이터베이스가 확인할 범위가 커져요.

2. 색인이 없을 때 커지는 확인 범위

  • 색인이 없을 때 데이터베이스는 검색 조건에 해당하는 데이터를 찾기 위해 모든 저장 데이터를 처음부터 끝까지 확인합니다.

    • 모든 행을 차례로 확인하는 작업을 전체 스캔(Full Table Scan)이라고 합니다.

    • 캠핑 용품 2,000개에서 침낭을 찾는다면 2,000개 상품을 모두 확인해야 해요.

    • 저장된 데이터가 많아질수록 확인해야 할 데이터도 함께 증가합니다.

  • 색인이 있을 때 데이터베이스는 검색 조건에 해당하는 위치를 색인에서 먼저 조회합니다.

    • 색인에서 침낭이 포함된 상품의 식별자와 위치를 찾습니다.

    • 데이터베이스는 색인이 고른 상품만 확인해 검색 결과를 반환해요.

검색 코드가 바뀌지 않았는데 응답 시간이 길어졌다면 검색 조건에 맞는 색인이 있는지 확인합니다. 색인이 있어도 실행 계획에서 해당 색인을 선택하지 않을 수 있으므로, 색인의 존재 여부와 실제 사용 여부를 따로 점검해야 해요.

3. 검색 기준에 따라 달라지는 색인

정확한 글자를 찾는 단어 검색용 색인과 뜻이 가까운 문서를 찾는 의미 검색용 색인 비교
  • 단어 검색용 색인(Keyword Index)은 어떤 단어가 어느 문서에 있는지 정리합니다.

    • "TX-750"이나 "제7조 2항"처럼 글자가 정확히 일치해야 하는 검색에 사용합니다.

    • 책의 찾아보기처럼 특정 단어가 있는 문서의 위치를 알려줘요.

  • 의미 검색용 색인(Semantic Index)은 뜻이 가까운 문서의 임베딩을 이웃으로 연결합니다.

    • 임베딩 모델은 문장이나 문단을 컴퓨터가 비교할 수 있는 숫자 배열로 변환합니다.

    • "겨울에도 따뜻한 침낭"처럼 자연어로 입력하면 질의 임베딩과 가까운 문서를 찾아요.

단어 검색과 의미 검색은 검색 후보를 고르는 기준이 다릅니다. 제품 코드와 조항 번호에는 단어 검색용 색인을 사용하고, 표현이 달라도 뜻이 가까운 문서를 찾아야 할 때는 의미 검색용 색인을 사용합니다.

4. 데이터 변경에 따른 색인 갱신과 재구성

  • 문서를 추가·수정·삭제할 때 데이터베이스는 변경된 원본 데이터와 관련 색인 항목을 함께 갱신합니다.

    • 문서 한 건이 바뀔 때마다 모든 색인을 처음부터 다시 구성할 필요는 없습니다.

    • 변경된 문서와 연결된 색인 항목만 갱신해요.

  • 색인 대상 필드를 바꿀 때 기존 색인을 삭제하고 새 기준으로 다시 구성합니다.

    • 상품 이름 대신 상품 코드를 검색 기준으로 삼으려면 상품 코드 필드에 새 색인을 구성합니다.

  • 임베딩 모델이나 벡터 차원을 바꿀 때 모든 문서를 새 모델로 변환하고 의미 검색용 색인을 다시 구성합니다.

    • 기존 임베딩과 새 임베딩은 변환 기준이나 숫자 배열의 길이가 달라 함께 비교할 수 없습니다.

5. UQA에서 함께 관리하는 단어 검색용 색인과 의미 검색용 색인

단어 검색을 Elasticsearch에 맡기고 의미 검색을 벡터DB에 맡기면 원본 데이터와 단어 검색용 색인 및 의미 검색용 색인을 여러 저장소에 관리하게 됩니다. 문서를 추가·수정·삭제할 때 각 저장소의 데이터를 함께 갱신하는 연결 코드도 필요해요.

Elasticsearch와 벡터DB를 따로 관리하는 구성과 UQA의 같은 문서 테이블에서 단어 검색용 GIN 색인과 의미 검색용 HNSW 색인을 관리하는 구성 비교

UQA(Unified Query Algebra)는 같은 문서 테이블에 원본 데이터와 단어 검색용 GIN 색인, 의미 검색용 HNSW 색인을 함께 관리합니다. GIN은 단어가 포함된 문서 위치를 찾고, HNSW는 질의 임베딩과 가까운 문서 후보를 탐색해요. 앱은 어떤 필드를 검색할지, 어떤 임베딩 모델을 사용할지, 검색 결과를 화면에 어떻게 표시할지 정합니다.

data 폴더의 문서를 UQA에 저장하고, 문서 본문에는 단어 검색용 GIN 색인을 구성해줘. 문서 임베딩 열에는 의미 검색용 HNSW 색인을 구성하고, 두 검색이 정상 작동하는 예시 질의도 실행해줘

현재 UQA 테이블에 어떤 색인이 구성돼 있는지 보여주고, 각 색인이 담당하는 필드와 검색 조건을 설명해줘

임베딩 모델을 새 모델로 바꿀 예정이야. 기존 임베딩을 새 모델로 다시 생성하고 의미 검색용 HNSW 색인을 재구성하는 작업 순서와 검증 쿼리를 작성해줘

색인은 원본 데이터의 검색 기준과 위치를 미리 정리해 확인할 후보를 줄입니다. 단어 검색과 의미 검색에 맞는 색인을 선택하고, 검색 대상 필드나 임베딩 모델이 바뀌면 해당 색인을 새 기준으로 다시 구성하세요. UQA에서는 원본 데이터와 단어 검색용 색인 및 의미 검색용 색인을 함께 관리해 별도 검색 저장소의 연결과 동기화 작업을 줄일 수 있습니다.

검색 응답 시간이 길 때 색인 사용 여부 점검하기체험하기에서 단어 검색과 의미 검색 비교하기