1 PAGE / A4인쇄하거나 PDF로 저장해 시험 직전에 보세요.

전체 정리

고급 웹 프로그래밍 · MIDTERM 1–7

중간고사 한 장 요약

LLM API → 스트리밍 → 임베딩 → RAG → 평가. 시험 전 10분, 이 한 장만.

1PAGE ONLY
W01

AI 웹의 지형

  • 결정론 같은 입력 → 같은 출력 / AI 같은 입력도 달라질 수 있음
  • 토큰 출력이 입력보다 비싸고 느림 → 스트리밍으로 체감 개선
  • 컨텍스트 윈도우 입력+출력 한도. 클수록 비용↑, 중간 정보 놓침
  • Stateless LLM은 대화를 기억하지 않음 → 메시지 배열 누적 + DB 저장
  • 할루시네이션 → RAG·출처 표시·도구 호출
  • Supabase: RLS(행 단위 보안), pgvector, Edge Function(키 보호)
W02

LLM API · 프롬프트

  • POST /v1/chat/completions + Authorization: Bearer
  • 역할: system(정체성·규칙) / user / assistant. 응답도 배열에 누적
  • 응답: finish_reason(stop·length), usage(토큰 사용량)
  • temperature 0=일관, ↑=무작위 / top_p 누적확률 / max_tokens 길이 제한
  • 프롬프트: 역할·규칙·제약·형식 + 구분자 + few-shot + 단계적 추론
  • 인젝션 방어=구분자 / Edge: CORS·JWT·환경변수·지수 백오프
W03

스트리밍 UI

  • SSE HTTP 단방향, LLM 응답에 충분 / WebSocket 양방향, 채팅방·게임
  • 조각난 JSON은 버퍼링 후 완성된 줄만 파싱
  • 한글 멀티바이트는 TextDecoder 스트리밍 모드로 합쳐서 디코딩
  • Edge Function은 가공 없이 relay → 지연 최소화
  • fetch + getReader() + stream: true, delta 누적
  • React는 setMessages(prev => ...) / user 즉시 저장, assistant는 완료 후 최종본
W04

임베딩 · 벡터 검색

  • 키워드 검색은 어휘 불일치에 약함 (환불 vs 결제 취소)
  • 임베딩=의미를 벡터로. 각 원소 -1~1, 한 모델은 입력과 무관하게 항상 같은 차원
  • 문서=passage, 질문=query로 구분해 임베딩
  • 코사인 유사도 -1~1, pgvector <=>는 1 - 유사도(거리)
  • Top-K는 무관한 질문에도 K개 반환 → threshold 필수
  • 모델·차원을 바꾸면 기존 벡터는 비교 불가 → 재인덱싱
  • pgvector vector(n) + 원문 저장 + RPC match_documents
W05

RAG 아키텍처

  • LLM의 세 한계: Knowledge Cutoff, Private Data, Hallucination
  • Prompting(토큰·유실) vs Fine-tuning(재학습) vs RAG(관련 부분만 주입)
  • 인덱싱(개념 4단계): 문서 → 청킹 → 임베딩 → 저장
  • 쿼리: 질문 임베딩 → 유사도 검색 → 프롬프트 조립 → 생성
  • 청킹: 고정(간단·문맥 끊김) / 구조(헤더) / 의미(비쌈)
  • 프롬프트 3원칙: 컨텍스트만 근거, 없으면 모른다, 출처 [1]
W06

문서 파이프라인

  • 구현 6단계: 업로드 → 추출 → 정제 → 청킹 → 임베딩 → 적재
  • 원본 보관: 모델 교체 시 재인덱싱해야 하므로 필수
  • Storage(S3 호환·버킷) + DB 메타데이터, 접근은 RLS
  • 객체 키=userID/sourceID (한글·특수문자 회피)
  • PDF: 스캔본은 OCR, 좌표 보정, 머리말·꼬릿말 제거
  • 재귀적 분할(구조·고정의 구현) 문단 → 줄 → 단어 / Source 1 : N Chunk + 위치 메타데이터
  • 메타데이터 필터 + 벡터 검색 / HNSW는 빠르지만 메모리 / 삭제 일관성
W07

평가 · 고도화

  • 오답 진단: 컨텍스트에 정답? → 생성 문제 / 없으면 DB 확인 → 인덱싱 or 검색
  • 평가셋: 질문·정답 근거·기대 답변·질문 유형·답변 가능 여부
  • Hit@K=생성 품질의 천장 / Recall=여러 근거 중 찾은 비율 / Precision@K / MRR
  • 임계값: 오수용(답 없는데 통과) ↔ 잘못된 거부(답 가능한데 차단)
  • 생성 평가: 근거 충실도·관련성·정답 일치·출처 정확도·거부 적절성 / LLM 판정도 사람 검증
  • Hybrid=의미+키워드, RRF로 순위 결합 / Rerank=Bi→Cross, Recall@30→Top-5
  • 쿼리 재작성은 검색에만, 생성엔 원 질문·원 이력 / HyDE도 검색에만
+

비교 한눈에

  • SSE 단방향·간단 ↔ WebSocket 양방향·복잡
  • Bi-Encoder 미리 계산·빠름·부정확 ↔ Cross-Encoder 쌍으로 계산·정확·느림
  • 오수용 임계값↓ → 환각 위험 ↔ 잘못된 거부 임계값↑ → 답 가능한데 거부
  • Hit 하나라도 찾음 ↔ Recall 정답 조각을 얼마나 찾음
  • Prompting 매번 주입 ↔ Fine-tuning 모델 수정 ↔ RAG 검색해서 주입
+

마지막 10분

  • “왜 RAG인가?” → 세 한계를 먼저 말하고, 인덱싱/쿼리로 나눠 설명
  • “왜 스트리밍인가?” → 전체 시간은 같지만 첫 글자까지의 시간이 줄어든다
  • “코사인 거리?” → 1 - 유사도. 유사도는 클수록, 거리는 작을수록 가깝다
  • “오답 진단?” → 컨텍스트 → DB → 인덱싱 → 검색 순서로 좁힌다
  • “쿼리 재작성?” → 검색에만 쓰고 생성에는 원 질문을 넘긴다

주의 HyDE의 가상 답변도 검색에만. 컨텍스트에 넣으면 환각이 된다.

COSINE DISTANCE

distance = 1 - cos(θ)

pgvector <=> 는 거리. 0=같은 방향, 1=직교, 2=반대. 작을수록 유사.

MRR

MRR = (1/rank₁ + … + 1/rankₙ) / n

첫 정답이 1위=1, 2위=0.5, 3위=0.333, 없으면 0. 예: 0.567.

RRF

score(d) = Σ 1/(k + rank)

k=60이 일반적. 두 목록에 모두 나온 문서가 한쪽에만 있는 문서보다 유리.