AI 문서 Q&A 시스템 구축을 위한 개발자 가이드
요약
초보 개발자의 시각에서 RAG(검색 증강 생성) 시스템의 작동 원리와 다양한 AI 모델의 비용 효율성을 다룬 가이드입니다. 문서를 청크 단위로 나누어 처리하는 RAG의 기본 개념과 모델별 토큰 가격 차이를 설명합니다.
핵심 포인트
- RAG는 문서를 조각(chunk)으로 나누어 모델에 전달하는 방식임
- OpenAI 외에도 수많은 저렴한 대안 모델이 존재함
- 모델별 토큰당 비용 차이가 매우 크므로 경제적 선택이 중요함
- 단순한 구조를 이해하면 초보자도 AI 시스템 구축이 가능함
AI 문서 Q&A 시스템 구축을 위한 개발자 가이드
3개월 전 저는 코딩 부트캠프(coding bootcamp)를 졸업했습니다. React 앱을 실행하고, REST API를 구축하며, 아마 자면서도 CORS 문제를 디버깅할 수 있을 정도였죠. 하지만 AI요? 그건 시니어 개발자들이 낮은 목소리로 이야기하는 무서운 분야였습니다. 어디서부터 시작해야 할지조차 몰랐죠.
그러다 사이드 프로젝트를 하나 맡게 되었습니다. 사람들이 PDF를 업로드하고 그에 대해 질문할 수 있는 무언가를 만드는 것이었죠. 제 첫 생각은 "멋지네, 아마 코드 몇 줄이면 되겠지?"였습니다. 스포일러를 하자면, 몇 줄보다는 훨씬 많았지만, 제가 상상했던 것보다 훨씬 달성 가능한 일이었습니다. 그리고 솔직히 말해서, 이 모든 과정은 제 마음을 완전히 뒤흔들어 놓았습니다.
제가 배운 것들을 여러분께 안내해 드릴게요. 부트캠프 졸업생인 저도 해낼 수 있었다면, 여러분도 분명히 할 수 있습니다.
깨달음을 얻었을 때
저를 놀라게 했던 첫 번째는 "AI가 당신의 문서에 대해 질문에 답하는" 방식이 실제로 내부에서 어떻게 작동하는가였습니다. 저는 그것이 어떤 마법 같은 블랙박스(black box)라고 생각했습니다. 하지만 나누어서 살펴보니 그렇게 복잡하지 않았습니다.
기본적으로 문서를 가져와서 더 작은 조각(chunk)으로 나누고, 그 조각들을 사용자의 질문과 함께 언어 모델(language model)로 보내서, 오직 당신이 제공한 정보에만 기반하여 답변하도록 요청하는 것입니다. 그게 전부입니다. 멋진 용어로는 "검색 증강 생성 (Retrieval Augmented Generation, RAG)"이라고 하지만, 저는 그 용어를 부르기를 거부합니다. 왜냐하면 그 용어 때문에 너무 오랫동안 제가 바보처럼 느껴졌기 때문입니다.
하지만 저를 정말 놀라게 했던 부분은 얼마나 다양한 AI 모델들이 존재하는지를 발견했을 때였습니다. 저는 항상 "AI"가 "OpenAI"를 의미하고, 그것이 "ChatGPT"를 의미하며, 결과적으로 "매우 비싸다"는 것을 의미한다고 가정했습니다. 하지만 하나의 연결 지점을 통해 184개의 서로 다른 모델에 접근할 수 있는 Global API라는 것이 있다는 것을 알게 되었을 때 충격을 받았습니다. 184개나 말이죠. 그것이 실제 숫자라는 사실이 여전히 믿기지 않습니다.
가격 책정의 미궁
여기서부터 흥미로워졌습니다. 저는 준비되지 않은 상태에서 가격 책정의 미궁(pricing rabbit hole)에 빠져들었습니다. 제가 발견한 것 중 일부를 공유해 드릴게요. 왜냐하면 이 숫자들은 AI로 무언가를 구축하는 것에 대한 제 생각을 진심으로 바꾸어 놓았기 때문입니다.
가장 저렴한 모델들은 100만 토큰 (tokens)당 약 0.01달러부터 시작합니다. 100만. 토큰입니다. 저는 토큰이 무엇인지조차 구글에 검색해봐야 했지만, 이제는 그것이 대략 단어의 한 조각이라는 것을 압니다. 따라서 100만 토큰은 엄청난 양의 텍스트입니다. 가장 비싼 모델들은 100만 토큰당 3.50달러까지 올라갑니다. 여전히 범위가 넓긴 하지만, 제가 처음에 예상했던 것과 비교하면? 정말 엄청납니다.
저를 정말 깜짝 놀라게 했던 비교 수치를 보여드릴게요. 제 메모 앱에 작은 표를 만들었는데, 그 차이가 너무나 극명해서 여기에 공유하려고 합니다.
| 모델 (Model) | 입력 ($/M tokens) | 출력 ($/M tokens) | 컨텍스트 윈도우 (Context Window) |
|---|---|---|---|
| DeepSeek V4 Flash | 0.27 | 1.10 | 128K |
| ... |
마지막 행을 보세요. GPT-4o는 출력 100만 토큰당 10.00달러가 듭니다. 이 목록에서 가장 저렴한 모델(GLM-4 Plus)은 0.80달러입니다. 정확히 동일한 종류의 작업임에도 불구하고 12배 이상 저렴합니다.
전혀 몰랐습니다. 저는 진심으로 GPT-4o만이 유일하고 진지한 선택지라고 생각했습니다. 저도 모르는 사이에 "브랜드 이름값(name brand tax)"을 지불하고 있었던 것입니다.
더 깊이 파고들수록, 특히 문서 Q&A (document Q&A)의 경우 모든 것에 GPT-4o를 투입하는 것과 비교했을 때 40~65%의 비용 절감을 기대할 수 있다는 사실을 발견했습니다. 품질은 대등하며, 때로는 더 낫기도 합니다. 다시 한번 말씀드리겠습니다. 말 그대로 절반(또는 그 이하)의 가격으로 대등하거나 더 나은 품질을 얻을 수 있습니다. 부트캠프 시절의 저라면 절대 믿지 못했을 것입니다.
나의 첫 번째 작동하는 프로토타입 (My First Working Prototype)
자, 가격에 대한 깨달음을 얻은 후에는 실제로 그것을 구축해야 했습니다. 여기서 Global API가 결정적인 역할을 해주었습니다. 저는 테스트하고 싶은 모든 모델마다 별도의 계정, 별도의 API 키, 별도의 SDK가 필요할 것이라고 예상했습니다. 하지만 아니었습니다. 하나의 엔드포인트 (endpoint), 하나의 키로 184개의 모델을 사용할 수 있었습니다.
다음은 제가 첫 번째 성공적인 테스트를 위해 사용한 실제 코드입니다. 오류 없이 이 코드가 실행되었을 때 얼마나 기분이 좋았는지 기억합니다.
import openai
import os
...
그게 전부입니다. 정말 이게 끝이에요. 저는 OpenAI Python 라이브러리를 사용하면서 단순히 Base URL(기본 URL)만 다른 곳으로 지정했을 뿐인데, 갑자기 완전히 다른 모델과 대화하고 있었습니다. 처음에는 제대로 작동한다는 사실이 믿기지 않을 정도였습니다. 현실을 받아들이기 전까지 세 번이나 다시 실행해 보았습니다.
저의 문서 Q&A 시스템을 위해, 저는 프롬프트(Prompt)에 문서 청크(Chunk)를 포함하는 조금 더 복잡한 버전을 구축했습니다.
import openai
import os
...
대부분의 쿼리(Query)에는 deepseek-ai/DeepSeek-V4-Flash 모델을 선택했습니다. 이 모델은 입력 토큰(Input Token) 100만 개당 $0.27, 출력 토큰(Output Token) 100만 개당 $1.10의 비용이 들며, 128K 컨텍스트 윈도우(Context Window)를 제공합니다. 문서 Q&A의 경우, 이 정도의 컨텍스트 윈도우라면 대부분의 문서에 충분합니다. 200K 버전(DeepSeek V4 Pro)은 제가 구축하고 있는 것에는 과했습니다만, 그런 옵션이 있다는 것을 아는 것만으로도 좋습니다.
미리 누군가 말해줬으면 좋았을 것들
몇 주 동안 구축하고, 테스트하고, 망가뜨리고, 다시 구축하는 과정을 거친 후, 제 시간을 엄청나게 아껴줄 수 있었을 팁들을 정리해 보았습니다. 이것들은 제가 이제 어떤 AI 기반 시스템을 구축하더라도 타협할 수 없는 필수 사항들입니다.
공격적인 캐싱 (Cache Aggressively)
이것은 저에게 있어 단일 항목 중 가장 큰 비용 절감 요소였습니다. 캐싱(Caching)을 추가하자 일반적인 질문에 대해 40%의 히트율(Hit Rate)이 나타났습니다. 제 API 호출의 40%가 그냥... 사라졌습니다. 대신 캐싱된 응답을 제공한 것이죠. 이는 단점 없이 비용을 40% 절감한 것입니다.
이 과정이 얼마나 간단한지 보고 깜짝 놀랐습니다. 그저 Redis 인스턴스와 질문의 해시(Hash) 값만 있으면, 반복되는 쿼리에 대해 무료로 답변을 제공할 수 있었습니다.
응답 스트리밍 (Stream Your Responses)
솔직히 말씀드리면, 스트리밍(Streaming)을 추가한 것은 비용 이득 때문이 아니라, 스트리밍이 없으면 사용자 경험(UX)이 너무 나빴기 때문입니다. 모델이 "생각"하는 동안 5초 동안 로딩 스피너(Loading Spinner)를 바라보고 있는 것은 시스템이 고장 난 것처럼 느껴집니다. 스트리밍을 사용하면 단어들이 생성되는 즉시 나타나기 때문에, 전체 소요 시간은 동일하더라도 훨씬 더 반응성이 좋게 느껴집니다.
제가 확인한 처리량(throughput) 수치는 초당 약 320 토큰(tokens per second)이었으며, 평균 지연 시간(latency)은 약 1.2초였습니다. 이는 빠른 편이지만, 스트리밍(streaming)을 사용하지 않는다면 그 1.2초가 영겁의 시간처럼 느껴질 수 있습니다.
단순한 작업에는 더 저렴한 모델을 사용하세요
모든 질문에 가장 강력한 모델이 필요하지는 않습니다. "이 단락을 요약해줘" 또는 "이 텍스트에서 이름들을 추출해줘"와 같은 작업의 경우, 저는 GA-Economy 티어 모델을 사용하기 시작했고, 이를 통해 비용을 추가로 50% 절감했습니다. 비싼 모델을 사용하는 것은 동네 편의점에 가기 위해 페라리를 타는 것과 같습니다. 때로는 자전거만 있으면 충분하며, 그 자전거가 실제로 완벽할 때가 있습니다.
매의 눈으로 품질을 모니터링하세요
이 부분은 제가 고생하며 배운 교훈입니다. 시스템이 잘 작동한다고 생각하여 배포했더니, 답변이 가끔 "이상하다"는 피드백이 쏟아졌습니다. 알고 보니 저렴한 모델들은 잘 작동하다가도 어느 순간 갑자기 문제가 생기는데, 그 실패 양상(failure mode)이 매우 미묘했습니다. 사용자 만족도 점수를 추적하고 패턴을 관찰해야 합니다.
저는 이제 모든 상호작용을 로그(log)로 남기고 있으며, 프론트엔드(frontend)에 간단한 따봉(thumbs up/thumbs down) 기능을 두었습니다. 화려하지는 않지만, 무언가 잘못되었을 때 이를 알려줍니다.
항상 폴백(Fallback)을 마련해 두세요
운영 환경에서 처음으로 속도 제한(rate limit)에 걸렸을 때, 제 앱 전체가 다운되었습니다. 정말 당혹스러웠습니다. 이제 저는 폴백(fallback) 모델을 설정해 두었습니다. 기본 모델이 실패하거나 속도 제한에 걸리면, 시스템은 다른 모델로 우아하게 전환됩니다. 사용자는 눈치채지도 못합니다.
이것은 30분 만에 해결할 수 있는 작업이었지만, 아마도 제가 해고되는 것을 막아주었을 것입니다.
저를 확신하게 만든 수치들
제가 조사하면서 확인한 몇 가지 벤치마크(benchmarks)를 공유하겠습니다. 표준 Q&A 벤치마크에서 이 모델들의 품질 점수는 평균 약 84.6%였습니다. 이는 단순히 "충분히 괜찮은" 수준이 아니라, 진정으로 훌륭한 수준입니다. 그리고 기억하세요, 이것은 저렴한 모델들의 점수입니다. 비싼 모델들은 점수가 조금 더 높을 수 있지만, 특히 문서 Q&A의 경우에는 그 차이가 비용을 들일 만큼의 가치는 없습니다.
설정 시간 또한 또 다른 큰 놀라움이었습니다. 저는 "내가 무엇을 하고 있는지 전혀 모르겠다"는 상태에서 10분도 채 되지 않아 "작동하는 프로토타입(Prototype)"을 가진 상태로 변했습니다. 제가 시간을 재보았습니다. 그 시간의 대부분은 pip install이 완료되기를 기다리는 시간이었습니다. 실제 코드는 아마 20줄 정도였을 것입니다.
과거의 나에게 해주고 싶은 말
만약 제가 AI로 무언가를 구축하는 것을 두려워하던 과거의 저에게 돌아갈 수 있다면, 몇 가지를 말해주고 싶습니다.
첫째: 이것은 마법이 아닙니다. 그저 API (Application Programming Interface)일 뿐입니다. REST 엔드포인트 (REST endpoint)를 호출할 수 있다면, AI로 무언가를 구축할 수 있습니다. 현재의 추상화 (Abstractions) 수준은 매우 훌륭합니다.
둘째: 가장 비싼 옵션이 최고일 것이라고 가정하는 것을 멈추세요. 그렇지 않습니다. 특히 작업이 명확하게 정의되어 있고 모델들이 전반적으로 매우 뛰어나진 문서 Q&A의 경우에는 더욱 그렇습니다.
셋째: 가격이 생각보다 훨씬 합리적입니다. 대부분의 경우 쿼리(Query)당 1센트의 아주 작은 부분에 불과합니다. 파산 걱정 없이 무언가를 구축하고, 실제 사용자들에게 선보이고, 반복적으로 개선(Iterate)할 수 있습니다.
넷째: 설정이 매우 빠릅니다. 이 점을 아무리 강조해도 지나치지 않습니다. 저는 실제 AI 통합 (Integration)에 들인 시간보다 업로드 양식을 위한 HTML을 만드는 데 더 많은 시간을 썼습니다.
현재 나의 설정
제가 실제로 무엇을 출시했는지 궁금한 분들을 위해 요점을 정리해 드립니다. 저는 대부분의 문서 Q&A 작업을 위한 기본 모델로 DeepSeek V4 Flash를 사용하고 있습니다. 이 모델은 입력 토큰(Input token) 100만 개당 $0.27, 출력 토큰(Output token) 100만 개당 $1.10의 비용으로 실행됩니다. 매우 단순한 쿼리의 경우에는 GA-Economy 모델로 전환합니다. 128K 컨텍스트 윈도우 (Context window)를 초과하는 문서의 경우에는 200K 컨텍스트를 지원하는 DeepSeek V4 Pro를 사용합니다.
전체 과정은 Global API의 통합 엔드포인트 (Unified endpoint)를 통해 라우팅됩니다. 하나의 기본 URL (https://global-apis.com/v1)과 하나의 API 키 (API key)만 있으면, 통합 코드를 단 한 줄도 다시 작성하지 않고도 원할 때마다 모델을 교체할 수 있습니다. 마지막 이 부분이 저를 확신하게 만든 결정적인 요소였습니다. 저는 특정 제공업체에 종속(Lock-in)되지 않습니다. 만약 다음 주에 더 나은 모델이 나온다면, 저는 오후 한나절 만에 그것을 테스트할 수 있습니다.
마치며
부트캠프 졸업생으로서 이것을 구축한 것은 저에게 전환점이 되었습니다. 불과 몇 주 만에 저는 "AI는 나에게 너무 복잡해"라는 생각에서 "AI는 내 도구 상자에 있는 또 다른 도구일 뿐이야"라는 생각으로 바뀌었습니다. 진입 장벽은 제가 생각했던 것보다 훨씬 낮고, 비용은 제가 생각했던 것보다 훨씬 저렴합니다.
만약 여러분이 AI를 구축하는 것이 비싸 보이거나 두렵게 느껴져서 미뤄왔던 비슷한 상황에 처해 있다면, 저는 그냥 시작하라고 말씀드리고 싶습니다. 유스케이스 (Use case)를 하나 정하세요. 코드를 작성하세요. API 엔드포인트 (Endpoint)를 호출하고 어떤 일이 일어나는지 확인해 보세요. 저는 이 조각들이 얼마나 빠르게 하나로 합쳐지는지 보고 충격을 받았으며, 여러분도 마찬가지일 것이라고 생각합니다.
Global API를 탐색하고 184개의 모델이 어떤 느낌인지 확인하고 싶다면 global-apis.com에서 확인해 보세요. 그들은 제가 위에서 설명한 모든 과정을 여기서 보여드린 것보다 훨씬 더 쉽게 만들어주는 통합 SDK (Unified SDK)를 제공합니다. 그리고 시작할 수 있도록 약간의 무료 크레딧을 제공하는 것 같으니, 돈을 들이지 않고도 실험해 볼 수 있습니다.
이상입니다. 즐겁게 빌딩하시길 바라며, AI 관련 기술들이 여러분을 겁주게 두지 마세요. 우리 모두는 그저 나아가면서 배워가는 중일 뿐입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기