AI 서비스는 왜 기존 웹과 다른가
AI는 같은 입력에도 다른 답을 낸다. 이 차이가 아키텍처 전체를 바꾼다.
기존 웹은 사용자에서 프론트엔드, 백엔드, 데이터베이스로 이어지는 고정된 흐름을 가진다. 각 단계의 로직이 코드로 정해져 있어 결과를 예측할 수 있다. 같은 입력이면 항상 같은 출력이 나온다.
AI 에이전트 방식은 이 구조에 AI 영역(Agent)이 하나 더 붙는다. 사용자의 자연어를 이해하고 그에 맞는 행동을 수행한다. ChatGPT, Claude, Gemini는 대화형이고 GitHub Copilot은 코딩 에이전트다. 모델은 확률로 다음 토큰을 골라 같은 입력에도 출력이 달라질 수 있고, 이를 비결정론적(Probabilistic)이라 부른다.
- 결정론적 시스템
- 입력과 로직이 같으면 출력이 항상 같은 구조다. 기존 웹 개발의 기본 전제다.
- 확률적 시스템
- 같은 입력에도 출력이 달라질 수 있는 구조다. 비결정론적이라고도 부른다.
- AI 에이전트
- 자연어를 이해하고 행동을 수행하는 AI 영역이다. 기존 흐름에 층 하나가 추가된다.
기존 웹
- 고정된 로직
- 같은 입력이면 같은 출력
- 결과를 예측할 수 있음
AI 에이전트
- 확률로 다음 토큰 선택
- 같은 입력도 출력이 달라짐
- 자연어 이해와 행동 수행
예측 가능한 로직에서 확률적 시스템으로의 전환이 1주차의 출발점이다.
토큰은 돈과 시간의 단위다
LLM은 글자가 아니라 토큰을 세고, 그 수가 비용과 속도를 정한다.
LLM은 텍스트를 토큰(Token)이라는 최소 단위로 나누어 처리한다. 토큰 수가 곧 연산량이고 비용이며, 같은 내용이라도 한글은 영어보다 토큰을 더 많이 쓴다. 출력 토큰은 하나씩 생성될 때마다 연산이 필요하다. 그래서 입력보다 응답이 느리고, 비용도 일반적으로 출력이 더 비싸다.
지연을 줄이려면 답이 완성될 때까지 기다리지 않고 글자 단위로 흘려보낸다. 이 방식이 스트리밍(Streaming)이며, 체감 대기 시간을 줄이는 수단이다.
- 토큰
- LLM이 텍스트를 처리하는 최소 단위다. 비용과 속도를 재는 기준이 된다.
- 출력 토큰 비용
- 입력 토큰보다 일반적으로 비싸다. 생성 연산이 더 많이 들기 때문이다.
- 스트리밍
- 생성되는 대로 글자를 흘려보내는 응답 방식이다. 지연을 체감상 줄인다.
| 구분 | 연산 | 비용·속도 |
|---|---|---|
| 입력 토큰 | 프롬프트를 읽는 단계 | 상대적으로 저렴 |
| 출력 토큰 | 토큰을 하나씩 생성 | 더 비싸고 느림 |
| 한글 텍스트 | 영어보다 많은 토큰 소모 | 같은 내용도 비용 증가 |
많이 넣는다고 좋아지지는 않는다
모델이 한 번에 볼 수 있는 양에는 한계가 있고, 그 한계가 비용과 정확도를 좌우한다.
컨텍스트 윈도우(Context Window)는 모델이 한 번에 처리할 수 있는 최대 입력+출력 토큰 용량이다. 이 범위를 넘는 내용은 한 번에 다룰 수 없다. 용량이 커지면 비용이 늘고 응답이 느려지며, 긴 문맥의 중간 정보를 놓치는 경향도 생긴다. 그래서 불필요한 정보를 덜어내는 압축이 중요하고, 이 관리는 에이전트 레벨에서 이루어진다.
LLM은 Stateless라서 이전 대화를 스스로 기억하지 않는다. 멀티턴(Multi-turn) 대화는 개발자가 이전 대화 기록을 매번 다시 입력에 넣어 구현한다. 대화가 길어질수록 입력 토큰은 계속 늘어난다. 최근 메시지만 보내거나 요약해 압축하는 관리가 개발자의 역량이다.
- 컨텍스트 윈도우
- 한 번에 처리 가능한 최대 입력+출력 토큰이다. 비용·속도·정확도의 상한을 만든다.
- Stateless
- 모델이 이전 대화 상태를 저장하지 않는 성질이다. 이전 대화는 개발자가 입력으로 다시 넣어야 한다.
- 멀티턴
- 이전 대화를 다시 입력해 문맥을 이어가는 방식이다.
- 컨텍스트 압축
- 불필요한 정보를 제거해 토큰을 줄이는 작업이다. 비용과 지연을 함께 줄인다.
시스템 프롬프트가 답의 품질을 정한다
모델의 역할과 규칙을 정하는 것이 시스템 프롬프트이고, 그 한계가 할루시네이션이다.
시스템 프롬프트는 모델의 역할, 말투, 규칙, 제약 조건을 지정하는 지시문이다. 같은 모델도 시스템 프롬프트에 따라 답의 질이 크게 달라진다. 할루시네이션(Hallucination)은 사실이 아닌 내용을 사실인 것처럼 자신 있게 말하는 현상이다. 모델이 검색기가 아니라 다음 토큰을 예측하는 확률 모델이기 때문에 생긴다.
해결책은 모델 밖의 지식을 붙이는 것이다. RAG(Retrieval-Augmented Generation)로 근거 문서를 검색해 입력에 넣고, 출처를 표시하며, 도구 호출(Tool Calling)로 실제 데이터를 다루게 한다.
- 시스템 프롬프트
- 역할·말투·규칙·제약을 지정하는 지시문이다. 응답 품질을 결정하는 핵심 요소다.
- 할루시네이션
- 사실이 아닌 내용을 자신 있게 말하는 현상이다. 확률적 생성의 부작용이다.
- RAG
- 외부 문서를 검색해 입력에 넣는 방식이다. 근거 없는 생성을 줄인다.
- Tool Calling
- 모델이 외부 도구를 호출해 실제 데이터를 얻는 방식이다.
Supabase는 백엔드를 조립해 준다
BaaS로 인증·DB·스토리지를 빌리고, 보안은 RLS와 Edge Function으로 채운다.
BaaS(Backend as a Service)는 인증, DB, 스토리지 같은 백엔드 기능을 서비스로 제공한다. 서버를 직접 세우지 않아도 되어 구현 시간이 줄어들고, 이번 학기에는 Supabase를 사용한다. Supabase는 PostgreSQL을 기반으로 한다. RLS(Row Level Security)는 클라이언트가 DB에 직접 접근할 때 사용자별 읽기·쓰기 범위를 DB 레벨에서 강제한다.
pgvector는 PostgreSQL에 벡터 유사도 검색을 추가하는 확장이다. RAG에서 문서 조각을 의미로 찾을 때 필수다. Edge Function은 서버리스 형태로 실행되는 함수다. API 키나 클라이언트에 노출되면 안 되는 로직을 여기에 둔다.
- BaaS
- 인증·DB·스토리지를 서비스로 제공하는 방식이다. 백엔드 구축 시간을 줄인다.
- RLS
- 행 단위로 읽기·쓰기 권한을 DB에서 강제하는 보안 기능이다. 클라이언트 직접 접근을 전제로 한다.
- pgvector
- PostgreSQL의 벡터 유사도 검색 확장이다. RAG 구현에 필수다.
- Edge Function
- 서버리스로 실행되는 함수다. API 키와 민감한 로직을 보호한다.
클라이언트는 BaaS에 직접 붙고, 민감한 로직만 Edge Function을 거친다.
시험 직전 체크
EXAM POINTS- 기존 웹은 결정론적이고, AI 에이전트는 확률적이라 같은 입력에도 출력이 달라진다.
- 토큰이 비용·속도의 단위이며, 출력 토큰은 입력보다 비싸고 느려 스트리밍을 쓴다.
- 컨텍스트 윈도우가 커지면 비용·지연·중간 정보 누락이 늘어 압축이 필요하다.
- LLM은 Stateless이므로 멀티턴은 이전 기록을 다시 입력해 구현한다.
- 시스템 프롬프트가 역할·말투·규칙·제약을 정하고, 할루시네이션은 RAG·출처 표시·Tool Calling으로 보완한다.
- Supabase에서 RLS는 DB 레벨 접근 제어, Edge Function은 키 보호, pgvector는 RAG용 벡터 검색을 맡는다.
헷갈리는 것만
COMMON TRAPS아니다. 비용과 지연이 늘고 중간 정보를 놓칠 수 있어 압축이 필요하다.
아니다. Stateless이므로 이전 메시지를 개발자가 다시 보내야 한다.
아니다. 다음 토큰 확률을 예측하는 구조에서 나오는 한계다. RAG·출처 표시·Tool Calling으로 보완한다.
아니다. 클라이언트가 DB에 직접 붙는 구조에서 DB가 강제하는 행 단위 보안이다.
반대다. 생성 연산이 필요해 일반적으로 출력이 더 비싸고 느리다.
KEYWORDS
- 결정론적 시스템
- 확률적 시스템
- 토큰
- 스트리밍
- 컨텍스트 윈도우
- Stateless
- 시스템 프롬프트
- 할루시네이션
- RAG
- RLS
연결해서 기억하기
- 1주차의 토큰·컨텍스트 개념은 2주차의 메시지 배열 누적과 토큰 관리로 이어진다.
- Stateless 특성은 2주차에서 대화 기록의 DB 저장과 멀티턴 구현의 근거가 된다.
- 1주차의 Edge Function은 2주차에서 CORS·JWT·환경변수 구현으로 구체화된다.