AI 모델 API는 무엇을 기준으로 골라야 할까?
LangChain에서 OpenAI·Upstage·Ollama를 연결할 때 데이터 경계, 비용, 네트워크와 운영 책임을 어떻게 비교해야 하는지 쉽게 설명합니다.
LangChain으로 사내 문서 RAG 챗봇 만들기 2/9
문서를 준비하는 단계부터 검색, 대화 화면, 배포와 평가까지 하나씩 연결하는 학습 기록
이전 글 — LangChain으로 RAG 챗봇을 만들면 무엇이 연결될까?
학교 축제 안내문을 요약하는 챗봇을 만들기로 했습니다. 이제 “어떤 AI 모델을 연결하지?”라는 질문이 생깁니다. 유명한 모델을 고르면 끝일 것 같지만, 답변 품질만 보고 결정하면 중요한 조건을 놓칠 수 있습니다.
모두에게 가장 좋은 모델 API는 없습니다. 질문과 문서가 어디로 전송되는지, 인터넷이 끊겨도 되는지, 호출 비용과 로컬 하드웨어 중 무엇을 감당할지, 필요한 기능을 지원하는지를 함께 비교해야 합니다.
LangChain은 여러 Chat Model을 비슷한 invoke() 방식으로 호출하게 도와줍니다. 그러나 코드 모양이 비슷하다고 데이터 경계와 운영 책임까지 같아지는 것은 아닙니다. 이번 글에서는 OpenAI, Upstage와 Ollama를 이 기준으로 비교합니다.
이 글은 시리즈 순서에 맞춰 2026년 5월 14일에 배치했습니다. 패키지와 API 설명은 2026년 8월 16일 공식 문서를 기준으로 다시 확인했습니다. 가격과 모델 순위처럼 자주 달라지는 수치는 고정해서 적지 않았습니다.
먼저 골라야 할 것은 모델 이름이 아니다
새 운동화를 살 때 가장 빠른 신발 하나만 고르지는 않습니다. 발에 맞는지, 어디에서 신을지, 가격과 관리 방법도 살핍니다. AI 모델도 비슷합니다.
모델 이름을 보기 전에 다음 질문부터 적어보는 편이 좋습니다.
- Prompt와 검색 문서를 외부 서버로 보내도 되는가?
- 인터넷이 끊기면 서비스도 멈춰도 되는가?
- 동시 사용자는 얼마나 될 것으로 예상하는가?
- API 호출 비용과 직접 운영 비용 중 무엇을 감당할 수 있는가?
- 한국어, 긴 문서, Structured Output이나 Streaming 같은 기능이 필요한가?
- 장애 대응, 모델 업데이트와 하드웨어 관리를 누가 맡을 것인가?
이 질문에 답하면 후보가 줄어듭니다. 모델 점수표는 그다음에 봐도 늦지 않습니다.
OpenAI API를 사용하면 누가 모델을 실행할까?
OpenAI API는 외부 Cloud 서비스입니다. 내 Python 애플리케이션이 인터넷을 통해 질문을 보내면 OpenAI의 서버에서 모델을 실행하고 응답을 돌려줍니다.
LangChain에서는 별도 패키지인 langchain-openai의 ChatOpenAI를 사용합니다. API Key도 필요합니다.
python -m pip install -U langchain-openai
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="<사용 가능한 OpenAI 모델 이름>")
answer = model.invoke("학교 축제 안내문을 세 줄로 요약해줘.")
장점은 모델 서버와 GPU를 직접 운영하지 않아도 된다는 것입니다. 필요에 따라 제공되는 모델과 기능을 선택할 수 있고, 애플리케이션은 API 호출에 집중할 수 있습니다.
그 대신 네트워크, API Key, 사용량 제한과 과금 정책을 관리해야 합니다. Prompt와 RAG가 검색한 문서 조각도 요청에 넣었다면 외부 API로 전달될 수 있습니다. 사용 전 데이터 처리 정책과 보존 범위를 확인해야 합니다.
quota 오류는 코드 문제일까?
Quota는 사용할 수 있는 양의 한도입니다. 짧은 시간에 너무 많은 요청을 보낸 Rate Limit(호출 속도 제한)과 계정의 사용 한도 또는 결제 상태 문제는 원인과 대응이 다릅니다.
요청이 거절됐다고 무조건 코드를 바꾸거나 같은 요청을 빠르게 반복하면 안 됩니다. 사용량과 제한 페이지, 결제 상태, 선택한 모델의 사용 가능 여부를 먼저 확인해야 합니다. Rate Limit에는 간격을 둔 재시도가 도움이 될 수 있지만, 사용할 수 있는 총량이 끝난 상황은 재시도만으로 해결되지 않습니다.
Upstage를 선택하면 무엇이 달라질까?
Upstage도 API를 통해 사용하는 외부 모델 제공자입니다. LangChain 공식 연동은 langchain-upstage 패키지의 ChatUpstage를 사용하고 UPSTAGE_API_KEY 환경 변수를 읽습니다.
python -m pip install -U langchain-upstage
from langchain_upstage import ChatUpstage
model = ChatUpstage()
answer = model.invoke("학교 축제 안내문을 세 줄로 요약해줘.")
공식 LangChain 연동에는 Chat Model뿐 아니라 Embedding, 문서 분석과 답변 근거 확인을 위한 구성 요소도 소개돼 있습니다. 한국어 문서와 RAG를 함께 다룰 때 비교 후보가 될 수 있습니다.
하지만 “한국 회사가 제공한다”는 이유만으로 우리 데이터 정책에 자동으로 맞는 것은 아닙니다. API Endpoint, 데이터 전송 위치, 로그와 보존 정책, 계약 조건은 실제 도입 시점의 공식 안내와 조직 정책을 따로 확인해야 합니다.
특정 제공자가 한국어에서 항상 더 좋다고 단정할 수도 없습니다. 우리가 실제로 받을 질문과 문서로 평가해야 합니다.
Ollama를 사용하면 정말 인터넷이 필요 없을까?
Ollama는 LLM 자체가 아니라 내 컴퓨터에서 모델을 보관하고 실행하며 로컬 API를 제공하는 프로그램입니다. LangChain에서는 langchain-ollama 패키지의 ChatOllama로 연결합니다.
python -m pip install -U langchain-ollama
from langchain_ollama import ChatOllama
model = ChatOllama(model="<미리 내려받은 모델 이름>")
answer = model.invoke("학교 축제 안내문을 세 줄로 요약해줘.")
Ollama의 로컬 API는 기본적으로 http://localhost:11434에서 제공됩니다. 모델을 미리 내려받았고 Cloud 모델, 웹 검색과 외부 Tool을 사용하지 않는다면 대화 요청을 내 컴퓨터 안에서 처리할 수 있습니다.
다만 처음 Ollama와 모델을 내려받을 때는 보통 인터넷이 필요합니다. 모델 파일은 디스크 공간을 차지하고, 실행할 때 RAM과 CPU 또는 GPU를 사용합니다. 작은 모델은 원하는 답변 품질이 나오지 않을 수 있고, GPU가 없는 환경에서는 응답이 느릴 수 있습니다.
이 글을 작성한 Astro 환경에는 Ollama와 모델을 설치하지 않았습니다. 로컬 모델 속도, 메모리 사용량이나 한국어 품질을 실제로 측정한 결과도 아닙니다.
Spring AI의 Ollama 입문 글에서는 로컬 모델과 Ollama의 역할을 더 자세히 설명합니다.
같은 질문도 서로 다른 경계를 지난다
Cloud API에서는 질문과 함께 보낸 Context가 인터넷을 지나 외부 제공자 서버로 이동합니다. Ollama의 로컬 모델에서는 준비가 끝난 뒤의 대화 경로를 같은 컴퓨터 안에 둘 수 있습니다.
내 질문은 어디까지 이동할까?
LangChain에서 같은 질문을 보내도 Cloud API와 로컬 Ollama는 서로 다른 네트워크 경계를 지납니다.
OpenAI API
Cloud API · 외부 네트워크 필요Prompt가 네트워크를 통해 외부 모델 API로 전달됩니다.
Upstage API
Cloud API · 외부 네트워크 필요Prompt가 네트워크를 통해 외부 모델 API로 전달됩니다.
로컬 Ollama
Local API · 모델이 준비된 뒤의 대화미리 받은 모델을 사용하면 대화 요청은 로컬 안에서 처리할 수 있습니다.모델 다운로드·Cloud 기능·외부 Tool 사용 시에는 인터넷이 다시 필요할 수 있습니다.
현재 단계: 사용자가 질문을 입력합니다.
그림에서 로컬 경로가 짧다고 항상 더 빠른 것은 아닙니다. Cloud 서버는 강력한 하드웨어를 사용할 수 있고, 로컬 컴퓨터는 네트워크 왕복이 없는 대신 모델 계산을 직접 담당합니다. 실제 지연시간은 모델 크기, 하드웨어, 입력 길이와 동시 요청에 따라 달라집니다.
세 선택지를 한 표로 비교하면
| 선택지 | 실행 위치 | 장점 | 비용과 한계 |
|---|---|---|---|
| OpenAI API | 외부 Cloud | 모델 서버 운영 부담이 작고 다양한 기능을 사용할 수 있음 | 인터넷, API 비용, 사용량 제한, 데이터 전송 정책 확인 필요 |
| Upstage API | 외부 Cloud | 한국어를 포함한 다국어와 RAG 관련 연동을 함께 비교할 수 있음 | 인터넷, API 비용, 서비스 정책과 실제 업무 평가 필요 |
| Ollama | PC 또는 자체 서버 | 로컬 실행과 데이터 경계 통제가 가능함 | 모델 다운로드, 디스크·메모리·속도·동시성·업데이트를 직접 관리 |
“API 호출 요금이 없다”와 “비용이 없다”도 다른 말입니다. 로컬 실행에는 하드웨어 구입, 전기, 운영 시간과 장애 대응 비용이 들어갑니다.
반대로 Cloud API가 언제나 비싸다고 단정할 수도 없습니다. 사용량이 작다면 직접 GPU 서버를 마련하는 것보다 단순할 수 있습니다. 실제 요청량과 운영 기간을 기준으로 비교해야 합니다.
LangChain의 공통 인터페이스는 어디까지 같게 만들까?
세 클래스는 모두 문자열이나 Message를 받아 invoke()하고 AIMessage를 반환하는 공통 흐름을 제공합니다.
def ask(model, question: str) -> str:
response = model.invoke(question)
return str(response.content)
위 세 연동 코드는 현재 공식 문서의 호출 형태를 비교하기 위한 학습 예제입니다. 이 Astro 블로그 저장소에는 API Key를 설정하지 않았고 OpenAI·Upstage·Ollama 모델을 실제로 호출하지 않았습니다.
이 덕분에 나머지 애플리케이션 코드를 비슷하게 유지할 수 있습니다. 테스트용 모델을 바꾸거나 후보를 비교할 때 유용합니다.
그러나 다음 항목까지 자동으로 같아지는 것은 아닙니다.
- 사용할 수 있는 모델 이름과 Context 길이
- Tool Calling, Structured Output, 이미지와 Streaming 지원 범위
- Token 계산과 응답 metadata
- Timeout과 Retry 동작
- 안전 정책과 데이터 처리 조건
- 모델별 Prompt 반응과 답변 품질
특히 ChatOpenAI는 공식 OpenAI API 사양을 대상으로 합니다. OpenAI와 비슷한 Endpoint라고 해서 제공자 고유 기능까지 모두 같은 방식으로 보존되지는 않습니다. 전용 LangChain 패키지가 있다면 그 문서를 먼저 확인하는 편이 안전합니다.
Chat Model과 Embedding Model은 꼭 같은 회사여야 할까?
RAG에는 답변을 만드는 Chat Model과 문장을 숫자로 바꾸는 Embedding Model이 모두 필요합니다. 두 모델을 반드시 같은 회사에서 선택해야 하는 것은 아닙니다.
예를 들어 Chat Model은 Cloud API를 쓰고 Embedding은 로컬에서 처리하는 구조도 설계할 수 있습니다. 다만 문서 색인을 만든 Embedding Model을 바꾸면 기존 벡터와 질문 벡터의 기준이 달라질 수 있어 문서를 다시 색인해야 합니다.
중요한 것은 회사 이름을 맞추는 일이 아니라 각 데이터가 어느 경계를 지나는지 그리는 것입니다. 질문, 검색된 문서 조각, Embedding 요청과 로그를 각각 확인해야 합니다.
상황별로 출발점을 정해보자
작은 학습 실험
모델 서버 운영보다 RAG 흐름을 빨리 확인하는 것이 목적이라면 Cloud API가 단순할 수 있습니다. 다만 호출 한도와 비용 상한을 먼저 정하고 API Key를 코드에 넣지 않아야 합니다.
한국어 문서 중심 실험
공식적으로 한국어를 지원하는 여러 모델을 같은 질문 세트로 비교합니다. 광고 문구나 공개 순위보다 내 문서의 검색 결과와 답변 근거를 확인하는 편이 중요합니다.
외부 전송이 어려운 환경
로컬 Ollama나 조직이 승인한 자체 호스팅 모델을 검토할 수 있습니다. 하지만 로컬이라는 이름만으로 보안 검토가 끝나지는 않습니다. 포트 노출, 사용자 권한, Prompt 로그, 모델 파일과 운영체제 접근을 통제해야 합니다.
실제 서비스
한 가지 모델에 바로 고정하지 말고 대표 질문을 모아 품질, 첫 응답 시간, 전체 완료 시간, 오류율과 비용을 비교합니다. 장애 시 다른 모델로 전환할지, 안전하게 실패할지도 함께 설계해야 합니다.
자주 생기는 오해
LangChain이면 모델 제공자를 한 줄로 완벽히 바꿀 수 있나요?
호출 인터페이스는 비슷하게 만들 수 있습니다. 하지만 지원 기능과 모델 행동, 인증, 비용과 데이터 정책은 다시 검증해야 합니다.
Cloud 모델은 무조건 품질이 좋고 로컬 모델은 나쁜가요?
모델과 작업에 따라 다릅니다. 복잡한 추론은 큰 Cloud 모델이 유리할 수 있지만, 좁고 반복적인 작업은 작은 모델로도 충분할 수 있습니다. 실제 평가 없이 단정할 수 없습니다.
Ollama를 쓰면 개인정보가 자동으로 안전해지나요?
아닙니다. 로컬 실행은 외부 모델 API로 데이터를 보내지 않는 구조를 만들 수 있게 합니다. 애플리케이션 로그, 운영체제 계정, 포트 노출과 백업을 잘못 관리하면 여전히 정보가 새어 나갈 수 있습니다.
API Key만 있으면 언제나 호출할 수 있나요?
아닙니다. 모델 접근 권한, 사용량 한도, 결제 상태와 Rate Limit도 영향을 줍니다. Key가 유효하다는 사실과 요청을 처리할 여유가 있다는 사실은 다릅니다.
세 줄 요약
- 모델 제공자는 답변 품질뿐 아니라 데이터 경계, 네트워크, 비용과 운영 책임을 함께 보고 선택해야 합니다.
- LangChain은 OpenAI·Upstage·Ollama를 비슷한 방식으로 호출하게 돕지만 제공자별 차이를 없애지는 않습니다.
- 로컬 실행은 통제 범위를 넓히는 대신 하드웨어와 운영을 직접 책임지며, Cloud API는 그 책임 일부를 서비스 제공자에게 맡깁니다.
다음 편 예고
모델을 골랐다고 RAG가 완성되지는 않습니다. 이제 학교 안내문을 검색 가능한 형태로 저장해야 합니다.
다음 편 — Chroma에 문서를 넣으면 AI가 바로 답할 수 있을까?에서는 문서, Embedding과 Vector Store를 실제 코드 흐름으로 연결합니다.