앱에 AI 기능을 추가하는 방법
앱에 AI 기능을 추가하려면 서버에서 대규모 언어 모델(LLM) API를 호출하세요. 명확한 지시와 관련 데이터를 보내고, 돌아온 결과를 사용하면 돼요. 유용한 기능은 대부분 요약, 채팅, 구조화된 데이터 추출, 분류라는 네 가지 패턴 중 하나이며, 각각은 AI 빌더가 몇십 줄 정도의 코드로 만들어 줄 수 있어요. 기능이 쓸만한지를 가르는 것은 호출 주변의 작업이에요. API 키를 서버에 두고, 사용자별 비용을 통제하고, 결과를 신뢰하기 전에 확인하는 것이죠.
대부분의 AI 기능을 이루는 네 가지 패턴
| 패턴 | 하는 일 | 기능 예시 | 일반적인 출력 |
|---|---|---|---|
| 요약 | 긴 텍스트를 짧은 텍스트로 바꿔요 | 회의록 요약, 티켓 요약, 문서의 "변경 사항" 정리 | 문단 또는 글머리 기호 목록 |
| 채팅 | 대화 속에서 질문에 답해요. 종종 여러분의 데이터에 대해 답해요 | 도움말 어시스턴트, "문서에 물어보기", 온보딩 안내 | 스트리밍 텍스트 |
| 추출 | 지저분한 텍스트나 이미지에서 구조화된 필드를 뽑아요 | PDF에서 청구서 정보, 이메일 서명에서 연락처, 채용 공고에서 직무 정보 | 스키마에 맞는 JSON |
| 분류 | 고정된 라벨 집합에서 하나를 골라요 | 고객 지원 티켓 라우팅, 피드백을 주제별로 태깅, 긴급 메시지 표시, 언어 감지 | 라벨 하나(필요하면 신뢰도 메모 포함) |
추출과 분류는 가장 가치가 크지만 가장 눈에 잘 띄지 않는 기능인 경우가 많아요. 레코드 하나마다 몇 분씩 아껴 주고, 출력이 고정된 형태이기 때문에 자동으로 검사할 수 있어요. 채팅은 가장 눈에 띄지만 제대로 만들기 가장 어려워요. 채팅에 대해서는 별도의 가이드인 AI 챗봇 앱을 만드는 방법이 있어요.
앱에 어떻게 들어가는가
모든 패턴은 같은 형태를 가져요:
- 사용자가 행동해요. "요약" 버튼을 누르거나, 파일을 업로드하거나, 메시지를 보내요.
- 프런트엔드가 AI 제공업체가 아니라 여러분의 서버를 호출해요.
- 서버가 요청을 구성해요. 시스템 지시, 사용자의 입력, 그리고 모델에 필요한 데이터베이스 데이터를 담아요. 단, 이 사용자가 볼 수 있는 데이터만 담아요.
- 서버가 환경 변수에 저장된 키로 LLM API를 호출해요.
- 서버가 응답을 검사해요. 올바른 JSON인지, 알려진 라벨인지, 적절한 길이인지 확인한 뒤 저장하거나 반환해요.
- 프런트엔드가 결과를 보여 줘요. 긴 답변은 도착하는 대로 스트리밍해요.
API 키는 4단계에서 서버에 머물고 브라우저에는 절대 전달되지 않아요. API라는 개념이 낯설다면 API란 무엇인가에서 짧게 익힐 수 있고, LLM API 사용 방법에서는 토큰, 모델, 키를 더 깊이 다뤄요.
제공업체와 모델 고르기
OpenAI, Anthropic, Google 등 주요 제공업체는 모두 비슷한 형태의 텍스트 API를 제공해요. 고를 때 유용한 질문은 다음과 같아요:
- 작업에서의 품질. 앱의 실제 예시 몇 개를 두세 개 모델에서 시험해 보세요. 일반적인 벤치마크보다 여러분의 데이터에서 차이가 더 분명하게 드러나는 경우가 많아요.
- 크기와 비용. 제공업체는 더 크고 성능 좋은 모델과, 더 작고 저렴하고 빠른 모델을 함께 제공해요. 분류나 단순한 추출은 작은 모델로도 잘 되는 경우가 많고, 긴 추론이나 섬세한 글쓰기에는 큰 모델이 필요할 수 있어요.
- 구조화된 출력. 추출과 분류에서는 자유 텍스트를 파싱하기보다, 여러분이 제공한 스키마에 맞는 JSON을 모델이 반환하도록 하는 API 기능을 우선 쓰세요.
- 데이터 처리. API 입력이 저장되는지, 학습에 쓰이는지에 대한 제공업체의 약관을 읽고, 사용자가 제공하는 데이터에 맞는지 확인하세요.
- 한도. 새 계정은 속도 제한(rate limit)이 낮은 경우가 많으니, 출시 전에 미리 확인하세요.
모델 이름과 가격은 자주 바뀌니, 코드 여러 곳에 모델 이름을 하드코딩하기보다 설정에서 읽어 오도록 하세요.
단계별로 기능 추가하기
예를 들어 각 연락처에 긴 메모 기록이 있는 작은 CRM을 생각해 볼게요.
1. 키 저장하기. 제공업체 대시보드에서 키를 만들고 OPENAI_API_KEY나 ANTHROPIC_API_KEY 같은 이름으로 서버 측 시크릿에 저장하세요.
2. 범위가 좁은 기능 하나 요청하기:
연락처 페이지에 "요약" 버튼을 추가해 줘. 서버에서 연락처의 최근 메모 20개를 [PROVIDER]에 보내고, 시크릿 [ENV_NAME]을 사용해. 지시는 세 개의 글머리 기호로 현재 상태, 열린 질문, 다음 단계를 쓰도록 해. 로그인한 사용자가 볼 수 있는 메모만 포함해. 로딩 상태를 보여 주고, 요약을 시각과 함께 저장하고, 호출이 실패하면 "지금은 요약할 수 없어요"를 보여 줘. 키는 절대 브라우저로 보내지 마.
3. 입력이 번거로운 곳에 추출 추가하기:
사용자가 "빠른 추가" 상자에 이메일 서명을 붙여 넣으면, 서버에서 [PROVIDER]를 호출해 이름, 회사, 직책, 이메일, 전화번호를 담은 JSON을 반환해. 제공업체의 구조화된 출력 기능을 사용해. 서버에서 JSON을 검증한 뒤 새 연락처 양식을 미리 채우고, 저장하기 전에 사용자가 수정할 수 있게 해. 추측하지 말고 확실하지 않은 필드는 비워 둬.
"저장 전에 사용자가 수정할 수 있게 한다"는 것이 가장 중요한 부분이에요. 모델은 제안하고, 결정은 사람이 해요.
4. 백그라운드에서 분류하기:
새 고객 지원 티켓이 들어오면 정확히 하나를 골라 분류해: 결제, 버그, 기능 요청, 계정 접근, 기타. 작고 저렴한 모델을 사용해. 응답이 이 라벨 중 하나가 아니면 "기타"로 저장해. 라벨은 수정 가능한 태그로 보여 줘.
5. 지저분한 실제 데이터로 테스트하기 — 긴 메모, 빈 메모, 다른 언어, 전화번호가 없는 서명 등을 넣어 보고, 출시 전에 결과 20개를 나란히 놓고 살펴보세요.
잘 작동하는 지시문 쓰기
모든 요청과 함께 보내는 지시(흔히 시스템 프롬프트라고 불러요)에서 품질이 결정돼요.
- 누구를 위한 것이고 무엇이 좋은 결과인지 말하세요. "요약은 영업 담당자가 통화 전 10초 동안 읽어요"라고 하면 모델에 목표가 생겨요.
- 형식을 고정하세요. 글머리 기호 개수, 길이 제한, 필드, 라벨을 정확히 정하세요.
- 확신이 없을 때 할 일을 말하세요. "메모에 다음 단계가 없으면 '기록된 다음 단계 없음'이라고 써"처럼 말하면 지어낸 답이 줄어들어요.
- 추출과 분류에는 좋은 입력과 출력 예시를 두세 개 주세요.
- 지시와 사용자 내용을 분리하고, 사용자 내용에 명확한 표시를 달아서 모델이 둘을 구분할 수 있게 하세요.
프롬프트는 코드베이스의 파일로 보관하세요. 그러면 다른 코드와 마찬가지로 버전 관리하고 검토할 수 있어요.
비용 통제하기
LLM API는 보내는 내용과 돌아오는 내용 모두를 토큰(작은 텍스트 조각) 단위로 과금해요. 비용은 요청당 컨텍스트 양에 실행 횟수를 곱한 만큼 늘어나요. 실용적인 통제 방법은 다음과 같아요:
- 필요한 것만 보내세요. 전체 기록이 아니라 최근 메모 20개만 보내고, 긴 문서는 잘라 내거나 나누세요.
- 일을 해낼 수 있는 가장 작은 모델을 쓰세요. 기본값으로 가장 큰 모델을 쓰기 전에 먼저 시험해 보세요.
- 출력 길이를 제한하세요. API의 최대 토큰 설정을 사용하세요.
- 결과를 캐시하세요. 요약을 저장해 두고, 원본이 바뀔 때만 다시 생성하세요. 페이지를 볼 때마다 생성하지 마세요.
- 사용자별로 제한하세요. 계정별 또는 요금제별 일일 한도를 두면, 한 명의 헤비 사용자나 하나의 스크립트가 요금을 폭증시키지 않아요.
- 엔드포인트에 속도 제한을 거세요. 다른 비싼 라우트와 마찬가지로요.
- 제공업체 대시보드에서 예산이나 알림을 설정하세요. 출시 후에는 사용량을 주 단위로 확인하세요.
- 기능별로 토큰 사용량을 기록하세요. 어떤 기능이 얼마나 드는지 알 수 있어요.
AI 기능이 제품의 핵심이라면, 그 운영 비용을 가격에 반영하세요. 비용을 그냥 떠안지 마세요.
안전성과 신뢰
AI의 출력은 확률에 기반해요. 자신 있게 말하면서도 틀릴 수 있고, 읽어 들인 텍스트에 의해 방향이 바뀔 수도 있어요. 이에 대비해 만드세요:
- 출력을 신뢰할 수 없는 입력으로 다루세요. 구조를 검증하고, HTML로 렌더링하기 전에 이스케이프하고, 코드나 데이터베이스 쿼리로 실행하지 마세요.
- 결과에 영향이 있는 작업에는 사람이 개입하게 하세요. 이메일 발송, 레코드 변경, 환불처럼 중요한 일은 모델이 초안을 만들고 사람이 확정해야 해요.
- 프롬프트 인젝션을 막으세요. 문서나 메시지에 "지시를 무시하라" 같은 문장이 들어 있을 수 있어요. 모델이 볼 수 있는 범위를 현재 사용자가 볼 수 있는 범위로 제한하고, 여러분의 코드가 권한을 확인하기 전에는 민감한 동작을 할 수 있는 도구를 주지 마세요.
- AI 콘텐츠에 표시하세요. 요약이나 제안이 생성된 것이고, 사용자가 확인할 수 있다는 것을 알 수 있게 하세요.
- 실패를 우아하게 처리하세요. 제공업체에는 장애와 속도 제한이 있어요. 시간 초과를 두고, 명확한 메시지를 보여 주고, 나머지 앱은 계속 동작하게 하세요.
- 사용자가 보내는 내용을 살피세요. 자유 입력란이 있다면 모더레이션 단계를 고려하고, 개인정보 처리방침에 콘텐츠가 제3자 AI 제공업체에서 처리된다는 사실을 분명히 적으세요.
더 넓은 점검 항목은 AI로 만든 앱을 위한 보안 체크리스트에 있어요.
흔한 실수
- 범용 챗봇부터 시작하기. 더 많은 사람에게 도움이 되는 것은 "요약"이나 "분류" 버튼 하나인 경우가 많아요.
- 프런트엔드 코드나 공개 저장소에 키 넣기.
- 데이터베이스 전체를 컨텍스트로 보내기. 느리고, 비싸고, 다른 사용자의 데이터가 노출될 위험이 있어요.
- 자유 텍스트 출력을 그대로 믿기. 스키마나 고정된 라벨 집합을 쓰면 검사할 수 있어요.
- 사용자별 한도 없음. 첫 번째 청구서가 도착해서야 문제를 알게 돼요.
Mythex로 AI 기능 추가하기
Mythex에서는 여러분의 제공업체 키를 사용해 채팅에서 요청하는 방식으로 앱 안에 AI를 추가해요. 키는 프로젝트 시크릿으로 저장하세요. 에이전트에게 키가 필요하면 Mythex가 채팅에 시크릿 카드를 보여 주니, 키를 대화에 붙여 넣을 필요가 없어요. 그러면 에이전트가 서버 라우트, 프롬프트, 인터페이스를 작성해요. 앱의 AI 사용량은 여러분의 제공업체에 과금되며, 앱을 만들 때 쓰는 Mythex 크레딧과는 별개예요. 문서에는 내 API 키로 앱에 AI 기능 추가하기라는 시작 프롬프트가 있어요.
자주 묻는 질문
기존 앱에 AI를 어떻게 추가하나요?
LLM 제공업체에서 API 키를 받아 서버 측 시크릿으로 저장하고, 제공업체에 프롬프트와 관련 데이터를 보내 결과를 프런트엔드로 돌려주는 서버 라우트를 추가하세요. 범용 채팅을 만들기 전에 레코드 요약처럼 범위가 좁은 기능 하나부터 시작하세요.
AI 기능을 운영하는 데 비용이 얼마나 드나요?
LLM API는 토큰 단위로 과금해요. 보내고 받는 텍스트 조각 기준이며, 모델에 따라 단가가 크게 달라요. 비용은 요청마다 얼마나 많은 텍스트를 보내는지와 얼마나 자주 실행되는지에 따라 달라지니, 실제 사용량으로 추정하고, 제공업체 대시보드에서 한도를 설정하고, 앱에서 사용자별 사용량을 제한하세요.
OpenAI나 Anthropic 키를 프런트엔드에 넣어도 되나요?
안 돼요. 프런트엔드 코드는 페이지를 여는 누구나 읽을 수 있고, 유출된 키는 낯선 사람이 요금을 쓰게 만들어요. 제공업체 호출은 서버에서 하고, 키는 환경 변수에 두세요.
프롬프트 인젝션이란 무엇인가요?
모델이 읽는 텍스트(사용자 메시지, 업로드된 문서, 웹 페이지 등)에 여러분의 지시를 덮어쓰려는 명령이 들어 있는 경우를 말해요. 모델의 출력은 신뢰할 수 없는 것으로 다루고, 검사 없이 민감한 동작을 일으키지 못하게 하고, 모델이 볼 수 있는 데이터를 해당 사용자가 볼 수 있는 범위로 제한하세요.