MySQL에서 BigQuery로 옮겨 50배 빠른 서비스를 구축한 방법

MySQL에서 BigQuery로 옮겨 50배 빠른 서비스를 구축한 방법

클라이원트에서 성능이 느려 고객 불만이 많았던 빅데이터 기반 통계 기능의 속도를 최근 BigQuery를 활용하여 크게 개선했습니다.

BigQuery는 처음 접하기에 복잡해 보일 수 있지만, 실제로는 진입 장벽이 낮고 사용하기 편리한데요. 물론 비용이 비싸지만 그만큼 장점이 많습니다. 특히 빅데이터 기반 시스템에서 가장 효과적으로 사용할 수 있으며, 일반 DB의 완전한 대체재로 사용하기는 어렵지만 백엔드를 보완할 수 있는 좋은 해결책이 될 수 있습니다.

얼마나 간단한지, 그리고 비용을 어떻게 최적화할 수 있는지 하나씩 알아볼까요?

아울러, 클라이원트는 성장에 목마른 AI Engineer와Backend Engineer를 모시고 있습니다. 관심 있으신 분들은 아래 링크를 확인해 주시거나, 이메일을 보내주세요! 👉 kyle@cliwant.com

(1) AI 엔지니어 채용: 잡코리아, 원티드

직무 개요:

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 관련 클라우드 서비스 활용 경험.

(2) 백엔드 개발자 채용: 잡코리아, 원티드

직무 개요:

클라이원트는 혁신적인 입찰 분석 솔루션을 개발하고 지속적으로 개선하기 위해 경험 많은 개발 팀장을 찾고 있습니다. 이 역할은 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 등을 활용한 복잡한 데이터 처리 및 검색 엔진 구축 경험.

Introduction

BigQuery는 MySQL보다 몇백 배나 빠른 성능을 제공하지만, 쿼리당 비용이 발생합니다. 따라서 빅데이터 셋에 적합하며, BI 성의 통계 기능을 제공할 때 가장 큰 효과를 볼 수 있습니다. 하지만 쿼리 최적화를 하지 않으면 비용이 기하급수적으로 증가할 수 있어 최적화는 필수입니다. 이번 글에서는 클라이원트가 BigQuery로 어떤 문제를 어떻게 해결했는지, 그리고 어떻게 최적화했는지를 상세히 설명합니다.

Problem

일반 SQL DB로 빅데이터를 다룰 때 항상 가장 어려운 부분은 빠른 조회 속도인데요.

특히 대량의 데이터가 담긴 테이블 전체를 특정 조건에 따라 어그리게이션(Aggregation) 하거나 정렬(Ordering)해야하는 니즈가 있다면 인덱스를 전략적으로 잘 설정해야하고, 쿼리 또한 효율적으로 짜야 퍼포먼스가 잘 나옵니다.

하지만 위 방법도 결국 한계가 오는 때가 옵니다. 아무리 최적화를 해도 더 이상 개선할 여지가 없을 때를 맞이하기 마련인데요. 저희도 이 문제를 피해갈 수 없었습니다. 클라이원트의 BI 서비스 중 2020년부터 수집한 최대 750만개의 과거 사업 내용을 실시간으로 검색하고 수요처, 발주 기관 등으로 총 공고 수 및 사업금액 등의 어그리게이션 하여 통계를 매겨야하는 니즈가 있었습니다.

문제는 특정 키워드와 공고일 범위로 검색할 경우 결과가 나오기까지 60초가 넘어가 Timeout 에러까지 발생하는 현상이 있었습니다. API로 데이터를 반환해야하는 상황에서 10초가 넘어가는 것도 서비스에 크리티컬한데 이런 상황은 거의 서비스가 불가능할정도였죠.

아래는 MySQL 기준으로 검색했을 때 Cache Limit 문제로 키워드 검색이 안된 예시입니다.

따라서 검색 쿼리를 뜯어보니 아래와 같은 단계가 있었고, 각 단계별로 최적화가 필요한 것을 발견했습니다.

  1. 입력된 키워드 기준으로 공고명과 다양한 필터로 공고 검색
  2. 기업별, 수요기관별 총 공고 개수 및 금액 어그리게이션
  3. 업로드 날짜, 금액 기준으로 정렬

문제는 첫번째 단계를 해결 하는데서부터 막혔다는 것입니다. 750만개 문서 중 자주 발생하는 키워드를 입력했을 경우 탐색하는 데이터량 자체가 너무 많아서 조회 자체가 오래걸렸습니다.

Solution

1. Bigquery 의 효과

다양한 방법을 고민해보았습니다.

  • 미리 데이터를 추출해놓는 방법은 없을까? → 유저가 어떤 키워드랑 필터 조건을 걸지 모른다
  • ElasticSearch를 활용해볼까? → 처음부터 배우고 PoC진행하기까지 너무 오래걸린다. 샤딩 방법이랑 쿼리 문법 등을 다 처음부터 배워야했다
  • 쿼리를 최적화 해볼까? → 빅데이터를 다루다보면 쿼리로 최적화로 개선할 수 있는데 한계가 있더라

고민에 빠져있던 와중에 GCP BigQuery가 빅데이터 기반 쿼리를 작성하는데 빠르다는 이야기를 들었지만, 사실 반신반의했습니다. 같은 SQL 기반인데 얼마나 빠를 수 있을까? 그래도 테이블만 그대로 옮기고 쿼리도 MySQL 기반과 거의 유사해서 주요 테이블 하나만 마이그레이션해서 테스트해보았습니다.

깜짝 놀랐습니다. 아무런 인덱스도 걸지 않았는데 타임아웃이 걸리던 쿼리가 1초 만에 돌아가는 것이었습니다. 심지어 GROUP BY로 통계를 매기는 쿼리도, ORDER BY로 전체 데이터를 정렬하는 쿼리도 똑같이 빠르게 실행되었습니다.

1초 걸렸습니다

2. 작동 원리

MySQL같은경우 하나의 엔진에서 처리하지만 BigQuery는 여러개의 Compute Engine에서 병렬로 쿼리를 실행시킨 후 결과를 조합해서 보여주는 원리라 가능하다고 합니다.

하지만 병렬로 처리하는 만큼 쿼리 하나하나에 컴퓨팅 자원이 많이 소모되기 때문에 BigQuery는 속도가 빠른 대신에 쿼리 한번 날릴때마다 비용이 발생합니다.

비용은 쿼리 실행 시 데이터를 조회한 양에 비례해서 발생하고, 1TB 당 대략 8500원정도의 비용입니다. 따라서 위 쿼리 한번 실행 시 400MB 데이터를 조회하는데 3.4원의 비용이 발생했습니다. 300번의 쿼리를 날리면 1000원정도의 비용이 발생한다고 봤을 때 비용이 비싼편은 맞습니다.

추가로 조회하는 컬럼을 늘리거나 조건을 추가할 경우, 더 많은 데이터를 조회하기 때문에 총 조회하는 데이터량이 늘어나서 쿼리 비용이 더 비싸집니다.

조건 & 반환되는 컬럼 추가 (대략 34 → 40원)

3. 그러면 비용 최적화는 어떤식으로 해야하는가?

BigQuery 테이블 생성 시 파티셔닝 옵션을 날짜 or 숫자 필드에 걸 수 있습니다.

테이블 자체를 해당 필드 기준으로 분해해서, 쿼리 시 해당 필드에 조건을 거는 방법으로 조회되는 데이터 범위를 좁힐 수 있게 됩니다. 예를들어 RGST_DT (업로드 날짜) 기준으로 1달씩 테이블을 파티셔닝 했을 때, 5월치 데이터에 대한 조건을 걸면 5월에 해당하는 데이터에만 비용이 발생하게 됩니다.

아래 스크린샷을 보시면 조회된 데이터가 12MB밖에 되지 않아 33배정도 비용을 절감한 것을 보실 수 있습니다.

추가로 서비스에서 1달 기준으로 기본 날짜 범위를 설정해두어 전체 조회하는 빈도수를 줄인다면 비용을 더 절감할 수 있겠죠. 🙂

Conclusion

BigQuery는 말그대로 Big 데이터를 조회할 때 가장 효과적입니다. 생각보다 셋업하는것도 쉽고, 쿼리도 SQL 문법 그대로 사용할 수 있기 때문에 진입장벽이 높지도 않습니다. (역시 갓구글 🙏)

다만 성능이 좋은만큼 비용이 많이 발생하는 것도 사실이니 조회하는 데이터를 줄이고, 파티셔닝도 자주 사용되는 필드 기준으로 설정해두어서 서비스에 활용하려면 비용 최적화는 꼭 신경써야 하는 부분입니다.

BigQuery가 MySQL같은 일반 DB를 대체로 사용하기에는 효과적이지 않다고 여겨집니다. 가벼운 쿼리도 실행할 때마다 비용이 발생하고, 가벼울수록 MySQL 이 더 빠르기 때문입니다. 따라서 BigQuery가 꼭 필요한 기능들 위주로 일반 DB와 같이 사용하는게 효과적입니다.


  • 550만 개 문서를 1초 안에 검색하는 DB를 구축한 썰: 블로그
  • OpenAI는 왜 Cliwant를 선택했나: 블로그
  • 창업 후 첫 워크샵: 블로그

(1) AI 엔지니어 채용: 잡코리아, 원티드

직무 개요:

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 관련 클라우드 서비스 활용 경험.

(2) 백엔드 개발자 채용: 잡코리아, 원티드

직무 개요:

클라이원트는 혁신적인 입찰 분석 솔루션을 개발하고 지속적으로 개선하기 위해 경험 많은 개발 팀장을 찾고 있습니다. 이 역할은 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 등을 활용한 복잡한 데이터 처리 및 검색 엔진 구축 경험.

Written by Kyle, CTO @ Cliwant

Read more

클라이원트의 첫 퇴사자, 입사 2주 만에 떠난 이유는?

클라이원트의 첫 퇴사자, 입사 2주 만에 떠난 이유는?

클라이원트에 첫 퇴사자가 나왔습니다. 그것도 합류한 지 단 2주 만에요. 사람은 오고 가는 법입니다. 친구 관계도 그러할진대, 회사는 더 말할 나위 없겠죠. 하지만 10명 남짓한 작은 팀에서 한 사람의 빈자리는 더욱 크게 느껴졌습니다. 어떻게든 수습하려 했지만, 사무실에 스며든 냉기는 쉽게 사라지지 않았습니다. 일반적으로 조직은 3명, 10명 단위로 변화가 찾아온다죠. 저희는

경쟁사의 입찰 실적 파헤치기 🔍

경쟁사의 입찰 실적 파헤치기 🔍

공공 입찰의 큰 장점은 모든 입찰 데이터가 공개된다는 점이지만, 데이터가 여기저기 흩어져 있어 일일이 모으고 정리하기는 쉽지 않죠. 클라이원트는 조달청에 등록된 50만 개 기업의 입찰 실적 데이터를 대시보드 형태로 한눈에 확인할 수 있도록 제공합니다. 제안 금액, 계약 및 낙찰 내역, 입찰 평가 점수 등 핵심 정보를 자동으로 추출하여 누구나 쉽게

미국, 싱가포르 입찰 기능: 11월 18일 출시 안내 🎉

미국, 싱가포르 입찰 기능: 11월 18일 출시 안내 🎉

안녕하세요, 입찰 분석 솔루션 클라이원트입니다. 클라이원트는 국내를 넘어 글로벌 입찰을 한곳에서 검색하고 분석할 수 있는 플랫폼을 목표로 개발해왔습니다. 그 첫 단계로, 미국과 싱가포르 입찰 기능 출시 소식을 상세히 안내드립니다. 클라이원트, 글로벌 입찰 문의하기 🌎 글로벌 입찰 기능 안내 * 📅 출시일: 11월 18일, 월요일 * ⚙️ 도입 방식: 기존 웹사이트에 통합 (외부 웹사이트로 이동 없이

🇺🇸 클라이원트, 미국 진출을 향한 첫 걸음

🇺🇸 클라이원트, 미국 진출을 향한 첫 걸음

추석 연휴였던 9월 17일에 한국을 떠나 시카고, 앤아버, 시애틀, LA, 버지니아, 메릴랜드, 워싱턴 D.C., 뉴욕까지 총 7개 도시를 방문하며 25개의 미팅을 소화했습니다. 마치 월드 투어를 다녀온 느낌이네요. 우선 운이 좋게 정말 다양한 분야와 규모의 기업인들을 만날 수 있었으며, 이해관계가 전혀 없음에도 어떻게든 도와주려는 한인 동포분들께 많은 신세를 졌습니다. 미국