본문 바로가기
카테고리 없음

이미지 기반 검색 엔진을 직접 만들어보며 배운 것들

by AI Specialist 2025. 12. 10.

 

오늘은 이미지 기반 검색 엔진을 직접 구현해 보면서 어떤 구조로 동작하고 어떤 어려움과 배움이 있었는지 전체 과정을 정리해 드릴 예정입니다.

 

이미지 기반 검색 엔진을 직접 만들어보며 배운 것들
이미지 기반 검색 엔진을 직접 만들어보며 배운 것들

 

이미지 기반 검색 엔진은 사용자가 텍스트가 아니라 이미지를 입력하면 그 이미지와 가장 유사한 결과를 찾아주는 시스템입니다. 사진첩에서 특정 물건을 찾는 기능부터 유사한 패턴이나 디자인을 찾는 기능까지 다양한 서비스에서 사용되고 있습니다. 하지만 겉보기에는 단순해 보이지만 실제 구현 과정에서는 모델 선정 데이터 전처리 벡터 저장 전략 검색 속도 최적화 등 여러 가지를 고려해야 합니다. 직접 만들어 보면서 느낀 점들을 세 가지 단계로 나누어 설명드리겠습니다.

 

벡터 임베딩 구조 이해

첫 번째 주제는 유사도 검색의 핵심인 벡터 임베딩 구조를 이해한 과정입니다. 이미지 기반 검색 엔진의 출발점은 이미지를 고정 길이의 벡터로 변환하는 모델을 선택하는 것입니다. 보통은 컨볼루션 기반 네트워크나 최근에는 비전 트랜스포머 계열 모델을 활용해 이미지를 벡터로 바꿉니다. 처음에는 단순히 이미지를 모델에 넣고 출력되는 벡터를 저장하기만 하면 된다고 생각했습니다. 하지만 실제로 구현해 보면 이미지 크기 비율 조정 배경 제거 색상 왜곡과 같은 전처리 단계가 결과에 큰 영향을 준다는 사실을 확인할 수 있습니다. 특히 다양한 기기에서 촬영된 이미지를 처리해야 하는 경우 전처리를 일정하게 유지하는 것이 매우 중요했습니다. 이미지마다 조명과 색감이 제각각이기 때문에 원본에 대한 공정한 비교가 이루어지도록 정규화를 적용하는 것이 큰 도움이 되었습니다. 이러한 과정을 거치며 이미지 임베딩은 단순한 숫자 배열이 아니라 검색 품질을 결정하는 핵심 요소라는 것을 다시 확인했습니다.

 

벡터 검색 시스템 구성

두 번째 주제는 벡터를 저장하고 빠르게 검색하는 시스템을 구성하는 과정입니다. 벡터 하나는 길이가 수백에서 수천 차원에 이르는 경우가 많고 실제 서비스에서는 수만 수십만 개 이상의 벡터를 저장해야 합니다. 처음에는 단순히 데이터베이스에 벡터를 저장하고 거리 계산을 수행하면 충분할 것이라고 생각했지만 실제로는 속도 문제로 접근 방식이 완전히 달라졌습니다. 특히 계산량이 많은 코사인 유사도나 유클리드 거리 기반 검색을 실시간으로 수행하려면 일반적인 데이터베이스만으로는 버티기 어려웠습니다. 결국 전문 벡터 검색 엔진을 사용하는 방식으로 방향을 바꾸었습니다. 예를 들어 HNSW 기반 검색 구조를 사용하는 라이브러리는 매우 높은 검색 속도를 제공하며 검색 정확도도 충분히 확보할 수 있습니다. 직접 테스트해 보니 단순 선형 탐색은 몇 초가 걸리던 요청이 HNSW를 적용한 후에는 수십 밀리초 수준까지 감소했습니다. 프론트엔드 관점에서는 이 속도의 차이가 사용자 경험을 완전히 바꿉니다. 이미지 업로드 후 응답이 바로 돌아오면 기능의 완성도가 크게 높아지는 것입니다. 이 과정에서 벡터 검색은 단순한 알고리즘 문제가 아니라 인프라 성능 최적화와 연결된다는 점이 중요한 배움이었습니다.

 

품질 개선

세 번째 주제는 실제 사용자 사용 환경에 맞춘 품질 개선 과정입니다. 검색 엔진을 구현하고 나면 다음 문제는 실제 사용자가 기대하는 결과를 얼마나 정확하게 찾아주느냐입니다. 개발 중에는 특정 샘플 이미지로 테스트할 때 제대로 동작하는 것처럼 보이지만 실제로 사용자가 입력하는 이미지는 훨씬 다양합니다. 촬영 기울기 배율 차이 배경의 복잡도 화질 저하 등이 검색 품질을 떨어뜨리는 주요 요인입니다. 특히 비슷해 보이지만 작은 차이가 있는 이미지들이 섞여 있을 경우 모델이 구분하기 어려워 잘못된 결과가 출력되기도 합니다. 여기서 크게 도움이 된 것은 임베딩 벡터를 후처리하고 여러 전략을 조합하는 방식이었습니다. 예를 들어 색상 비중이 큰 데이터셋에서는 색상 특징을 별도로 추출해 가중치를 조정하는 방식이 효과적이었습니다. 반대로 형태가 중요한 검색에서는 엣지 기반 특징을 보조 신호로 사용해 정확도가 높아졌습니다. 또 하나 중요한 요소는 사용자가 만족할 만한 결과를 상위 몇 개만 제공하는 방식이었습니다. 즉 완벽한 정답 하나를 찾는 것이 아니라 유사한 후보들을 적절히 섞어 보여주는 것이 실제 서비스 경험을 개선했습니다. 테스트 과정에서 다양한 사용 시나리오를 꾸준히 검증하는 것이 중요하다는 점을 다시 한번 체감했습니다.

 

이미지 기반 검색 엔진을 직접 만들어 본 경험은 단순히 기술을 구현하는 과정이 아니라 데이터의 성질을 이해하고 모델과 인프라가 함께 작동하는 방식을 배우는 과정이었습니다. 이미지 임베딩 모델을 선택하는 일부터 벡터 검색 시스템을 구성하는 일 그리고 최종적으로 사용자 경험을 개선하는 과정까지 모든 단계가 연결되어 있습니다. 처음에는 어렵게 느껴졌지만 각 단계를 구조적으로 분리해 문제를 해결하니 전체 흐름이 명확해졌습니다. 특히 성능 튜닝과 품질 개선을 반복하는 과정에서 이미지 기반 검색이 단순 검색 기능이 아니라 복잡한 데이터 처리 시스템이라는 사실이 더욱 실감되었습니다. 만약 이미지 기반 검색 기능을 도입하고자 한다면 데이터 전처리 일관성 모델 선택 벡터 저장 방식 검색 성능 테스트 등의 요소를 초기에 함께 고려하는 것이 필수적입니다. 이러한 준비가 되어 있다면 실제 서비스에서도 충분한 품질과 속도를 제공할 수 있습니다.