550만 개 문서를 1초 안에 검색하는 DB를 구축한 썰
클라이원트는 Gen AI를 활용하여 RFP(제안요청서)를 자동으로 분석하는 솔루션을 개발합니다. 이를 통해 나라장터를 비롯한 다양한 기관에 게시된 입찰 공고를 수집하고 분석하여, 고객사가 더욱 효율적으로 입찰 과정에 참여할 수 있도록 지원합니다.
국내를 넘어 글로벌 입찰 시장 진출을 목표로 하고 있으며, 이를 실현하기 위해 개발팀을 확장하고 있습니다. 글로벌 성장 여정을 함께할 열정적이고 재능 있는 (1) AI 엔지니어, (2) 백엔드 엔지니어를 지금 클라이원트에서 모집합니다!
(1) AI 엔지니어 - RAG 시스템
회사 소개:
클라이원트는 AI로 낙후된 입찰시장을 개척합니다. 하루에도 수천건씩 업로드되는 입찰 공고들의 RFP 문서를 AI와 Data로 분석해서 매칭, BI, 제안서 생성 시스템 등 다양한 솔루션을 개발하고 있습니다. 현재 국내 시장에서 입증된 성공을 바탕으로 글로벌 입찰 시장 진출을 목표로 하고 있으며, 이를 실현하기 위해 팀을 확장하고 있습니다.
직무 개요:
RAG 시스템을 전문으로 하는 엔지니어로서, 수많은 RFP를 청킹(Chunking)하여 벡터 데이터베이스(Vector DB)를 구축합니다. 그리고 GPT, Gemini, Llama 등의 대규모 언어 모델(LLM)을 활용해 자동으로 생성된 답변을 제시하는 솔루션을 함께 개발할 것입니다. RFP와 제안서 생성은 시간이 오래 걸리고 작성할 내용이 많아 클라이원트의 고객들이 가장 큰 어려움을 겪는 분야입니다. 전반적인 시스템 개선을 위해 지속적으로 연구하면서 고객들의 어려움을 해결하는 데 열정이 있는 AI 엔지니어분과 함께하고자 합니다.
역할 및 책임:
- RAG 시스템 설계: 클라이원트의 제품 성능과 확장성을 개선하기 위한 RAG 시스템 설계, 구현 및 최적화.
- 프롬프트 엔지니어링: 다양한 프롬프트를 시도하고 연구해보며 RFP와 제안서에 들어갈 내용에 대한 자동생성을 지속적으로 개선.
- Vector Database 구축: 비정형화되어있는 문서를 RAG에 사용하기 위해 효과적인 Chunking 방식을 연구하고, 자동으로 섹션을 구분하는 로직 구현.
- LLM모델 벤치마킹: LLM 모델들을 (GPT, Gemini, Claude, Llama 등) 벤치마킹하고 비교하며 효과적이면서도 비용 효율적인 솔루션 구축.
- 최신 트렌드 파악 및 적용: 자연어, LLMs 및 RAG 분야에서 최신 기술 동향을 연구하고 업데이트.
지원자격:
- 학력: 컴퓨터 과학, 인공지능, 머신 러닝 또는 관련 분야의 학사 또는 석사 학위.
- 경험: NLP, 특히 대규모 언어 모델(LLMs)과 RAG에 대한 경험을 보유.
- 기술 역량: Python과 같은 프로그래밍 언어에 대한 숙련도.
- 데이터 기술: 데이터 전처리, 특징 엔지니어링 및 대규모 데이터셋 작업 경험.
- 문제 해결: 뛰어난 분석 및 문제 해결 능력, 비판적이고 창의적으로 생각할 수 있는 능력.
- 팀 플레이어: 팀 지향 환경에서 효과적으로 일할 수 있는 강력한 협업 및 의사 소통 능력.
우대 사항:
- 자연어 처리(NLP) 분야의 전문성을 갖추고 있으며, 언어적 뉘앙스와 기법을 깊이 이해하여 언어 기반 기술을 발전시키는 데 필수적인 능력을 보유한 분.
- 머신러닝 분야에서 MS 또는 PhD 소지, 머신러닝의 원리 및 응용에 대한 깊은 학문적 기초.
- AWS Sagemaker, Bedrock 등 최신 AI 관련 클라우드 서비스 활용 경험.
연락처:
- 👤정구열
- ✉️ kyle@cliwant.com
(2) 백엔드 엔지니어
회사 소개:
클라이원트는 AI로 낙후된 입찰시장을 개척합니다. 하루에도 수천건씩 업로드되는 입찰 공고들의 RFP 문서를 AI와 Data로 분석해서 매칭, BI, 제안서 생성 시스템 등 다양한 솔루션을 개발하고 있습니다. 현재 국내 시장에서 입증된 성공을 바탕으로 글로벌 입찰 시장 진출을 목표로 하고 있으며, 이를 실현하기 위해 팀을 확장하고 있습니다.
직무 개요:
클라이원트는 혁신적인 입찰 분석 솔루션을 개발하고 지속적으로 개선하기 위해 경험 많은 개발 팀장을 찾고 있습니다. 이 역할은 AWS를 기반으로 한 백엔드 서버 구축, 빅데이터 DB 설계 및 구축, OpenAI API의 활용, RAG, Regex, Vector DB 등 최신 기술을 활용하여 제품 개발 및 최적화를 주도합니다.
역할 및 책임:
- 다양한 클라우드 인프라 환경(AWS, Azure, GCP)에서의 서비스 설계 및 구축.
- Kubernetes를 통한 효율적인 Microservice 관리 및 배포환경 구축.
- CI/CD 파이프라인을 통한 효율적인 개발 및 배포 프로세스 구현.
- 빅데이터 기반 DB 설계 및 유지 보수.
- RESTful API 개발 및 유지 보수.
- 웹 크롤러 개발 및 관리.
지원 자격:
- 컴퓨터공학 전공 혹은 그에 준하는 전공 및 지식을 보유하신 분.
- 만 5년 이상의 백엔드 개발 경험을 보유하신 분.
- 빅 데이터 기술을 활용한 프로젝트 경험.
- Java/Kotlin/Python 등 하나 이상의 프로그래밍 언어 전문성을 보유하신 분.
- Kubernetes와 같은 컨테이너 오케스트레이션 도구를 사용한 배포 시스템 구축 경험.
- 탁월한 문제 해결 능력, 강력한 팀워크 및 커뮤니케이션 스킬.
우대 사항:
- GCP Big Query를 이용한 빅데이터 분석 및 BI 툴 개발 경험.
- OpenAI 활용 프롬프트 엔지니어링을 통해 문서 내 주요 정보 추출 경험.
- RAG, Regex, Vector Database 등을 활용한 복잡한 데이터 처리 및 검색 엔진 구축 경험.
연락처:
- 👤정구열
- ✉️ kyle@cliwant.com
클라이원트의 CTO 정구열님의 개인 블로그에서 발췌한 글입니다.
개인적으로 큰 도전이었던 이번 프로젝트를 구축하는 과정에서 겪은 여러 기술적 난관을 정리해봅니다. 많은 개발자분께 도움이 되길 바랍니다.
저는 올해로 개발 경력 10년 차가 됩니다. 이번 프로젝트는 제 경력 중 가장 어려웠다고 자신 있게 말할 수 있습니다. 마치 눈을 뜨니 한 달이 지나 있는 듯한 경험이었죠. 먼저 우리가 하는 일에 대해 설명드립니다.
클라이원트의 목표?
클라이원트는 AI를 활용한 RFP 자동 분석 솔루션을 개발하여 낙후된 입찰 시장을 혁신하고자 합니다. 나라장터에는 매일 수천 건의 공고가 올라오며, 많은 회사들이 이를 통해 매출을 올리고 있습니다. 그러나 이 시스템은 20여 년 전에 만들어진 그대로입니다. 이 낙후된 입찰 시장을 개선하는 것이 클라이원트의 목표입니다. 입찰 관련 모든 내용은 RFP(Request For Proposal) 문서에 담겨 있으며, 때로는 100페이지가 넘기도 합니다.
기술적 도전과 해결 과정
※자세한 내용은 정구열 CTO님의 개인 블로그를 참고해주세요.
Fulltext Index와 MySQL의 한계
첫 번째 미션은 나라장터 시스템의 제한을 극복하고, RFP 본문 내 세세한 항목까지 검색 가능한 엔진을 구축하는 것이었습니다. 처음에는 SQL의 LIKE 연산자를 사용하려 했으나, 텍스트 양이 많아 검색 속도가 매우 느렸습니다. Fulltext Index를 사용하면서 수많은 문서에서 입력한 문자열을 빠르게 찾을 수 있게 되었습니다. 하지만 이 과정에서 다양한 필터 조건을 설정하는 것이 문제가 되었습니다.
ElasticSearch를 사용하지 않은 이유
ElasticSearch를 사용하지 않은 이유는 두 가지입니다. 첫째, 제가 이를 처음부터 배워야 했기 때문이고, 둘째, 스타트업의 생명은 속도라고 생각했기 때문입니다. 그래서 우리는 MySQL 기반으로 첫 서비스를 구축했습니다.
AECA DB 도입
고객의 요구가 증가하면서 과거 데이터까지 검색해야 하는 상황이 되었습니다. 이때 AECA라는 검색 DB 솔루션을 알게 되어, 20만 건의 문서를 테스트했는데, 놀랍게도 0.1초 만에 검색되었습니다. AECA는 다양한 필터를 Fulltext와 함께 적용할 수 있어 성능과 정확도를 크게 향상시켰습니다.
데이터 수집과 가공
과거 데이터 수집과 가공은 예상보다 훨씬 복잡했습니다. 서버 부하로 인한 중단, 데이터 정합성 문제 등 다양한 문제가 발생했습니다. 300만 건의 공고와 550만 건의 문서를 수집하고 가공하는 과정에서 많은 시간이 소요되었습니다.
검색 쿼리의 속도 문제
데이터는 잘 올라갔지만, 다양한 필터 조건과 정렬 조건을 충족하는 검색 쿼리의 속도 문제를 해결해야 했습니다. AECA 팀의 도움으로 원하는 필드 값을 기준으로 점수를 매길 수 있게 되면서, 빠르게 정렬하는 검색 시스템을 구축할 수 있었습니다.
마무리하며
이 프로젝트를 진행하면서 찜질방이 집처럼 느껴질 정도로 고생도 했습니다. 고객사께서 이 시스템을 잘 사용해 주시길 바랍니다. 이번 프로젝트를 통해 함께한 동료들과 과거 경험들에 감사함을 느꼈습니다. 앞으로도 많은 도전이 남아있지만, 항상 저를 확신해 주시는 하나님께 감사와 영광을 드립니다.
Written by Kyle, CTO @ Cliwant