[MySQL] Full-Text Search(FTS) 정리

유경록·2025년 4월 2일

데이터베이스

목록 보기
5/5
post-thumbnail

MySQL의 Full-Text Search(FTS)는 단순한 문자열 검색(LIKE)을 넘어서 자연어 처리 기반의 고급 검색을 가능하게 해주는 기능이다. 특히 블로그, 기사, 게시판, 검색 기능이 포함된 웹 서비스에서 매우 유용하게 사용된다.

📌 Full-Text Search란?

단어의 일부분뿐만 아니라, 단어의 위치와 빈도, 연관성 등을 고려하여 검색 결과를 반환하는 방식이다.
단순 문자열 매칭이 아닌, 문서 전체의 의미를 고려한 자연어 처리 기반 검색이 가능하며, MySQL에서는 FULLTEXT 인덱스를 통해 지원된다.


-- 1. Full-Text 인덱스를 포함한 테이블 생성
CREATE TABLE article (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    body TEXT,
    FULLTEXT (title, body)
);

--결과: "MySQL"과 "search"가 의미적으로 관련된 문장을 포함한 row들을 반환
--관련도(relevance score)를 기준으로 정렬됨
SELECT *
FROM article
WHERE MATCH(title, body) AGAINST('MySQL search' IN NATURAL LANGUAGE MODE);

🔍 Full-Text Search vs LIKE 검색 비교

항목Full-Text Search (FTS)LIKE 검색
검색 방식자연어 기반 검색 (단어의 위치, 빈도 등 고려)단순 문자열 포함 여부만 검사
검색 정확도관련성 높은 결과 우선 (relevance score 기반)정확히 일치하는 문자열만 검색
검색 성능인덱스 기반으로 빠름 (FULLTEXT INDEX)인덱스 없이 느릴 수 있음 (%word%)
유사어 검색가능 (검색, 검색합니다, 검색중) 등 일부 가능불가능 (LIKE '%검색%'만 가능)
정렬 기능관련성 순으로 정렬 가능수동 정렬 필요
인덱스 필요 여부FULLTEXT 인덱스 필요없음 (그러나 성능 저하 위험)
적용 대상 필드TEXT, VARCHAR문자열 필드 전체
설정 난이도설정 필요 (FULLTEXT, 최소 단어 길이, 불용어 등)매우 간단
사용 예시블로그, 뉴스, 커뮤니티 등 대용량 텍스트 검색에 적합로그인, 사용자 검색 등 간단한 검색에 적합

✅ 장점

  • 고급 검색 지원: 단순한 텍스트 검색보다 훨씬 유연하고 정확한 검색 결과 제공

  • 자연어 기반 검색: 사용자의 입력 의도를 파악해 연관성 높은 결과 반환

  • 대용량 텍스트 최적화: 블로그, 뉴스, 커뮤니티 게시판 등 텍스트 기반 검색에 적합

⚠️ 단점

  • FULLTEXT 인덱스 설정 필수: 인덱스를 사용하지 않으면 작동하지 않음

  • 추가 저장 공간 필요: 인덱스를 유지하기 위한 공간이 더 필요함

  • 설정 제한: InnoDB에서는 최소 단어 길이, 불용어(stopwords) 등의 제약 존재

배운점

간단한 검색엔 LIKE도 충분하지만, 검색 품질이 중요한 서비스라면 Full-Text Search가 훨씬 좋은 선택이다. 특히 검색 결과를 유저가 어떻게 받아들이느냐가 중요한 서비스(중고거래, 블로그, 커뮤니티 등)라면 고민 없이 FTS를 쓰는 게 낫다.
이번 경험을 통해 단순히 돌아가는 것에서 한 발 더 나아가, "사용자에게 더 나은 결과를 제공하려면 어떤 방식이 더 나을까?"를 고민해보는 계기가 되었다.

profile
작은 문제도 끝까지 파고들며, 꾸준히 성장하는 백엔드 개발자를 지향합니다.

0개의 댓글