본문 바로가기

AI 엔지니어링 스택 3계층: 애플리케이션·모델·인프라 프롬프트 ~ 파인튜닝

728x90

원문 맥락: Chip Huyen, 『AI Engineering』를 기반으로 실무 관점에서 재구성했습니다.
대상: 보안 관점이 강한 서비스 프로바이더(웹호스팅/클라우드/대고객 SaaS) 조직

AI 엔지니어링 3계층 한눈에 보기

1. 애플리케이션 개발 (Application Dev)

  • 핵심: 프롬프트 설계, UX/UI, 피드백 루프, 평가 자동화
  • 산출물: 대화 시나리오, 안전 정책, 평가 대시보드, 로그·메트릭
  • 빠른 시작 코드 (FastAPI + 스트리밍 응답 예시)
    # pip install fastapi uvicorn httpx
    from fastapi import FastAPI
    from fastapi.responses import StreamingResponse
    import httpx, json
    
    app = FastAPI()
    
    SYSTEM = "You are a helpful assistant. Follow company safety rules. Answer in Korean."
    
    async def gen(prompt: str):
        async with httpx.AsyncClient(timeout=30) as c:
            # 사내 프록시/게이트웨이 또는 vLLM/OpenAI 호환 엔드포인트
            async with c.stream("POST", "http://llm-gw/v1/chat/completions",
                                json={"model":"gpt-4o-mini",
                                      "messages":[{"role":"system","content":SYSTEM},
                                                  {"role":"user","content":prompt}],
                                      "stream":True}) as r:
                async for line in r.aiter_lines():
                    if line and line.startswith("data: "):
                        chunk = line.replace("data: ","")
                        if chunk != "[DONE]":
                            yield json.loads(chunk)["choices"][0]["delta"].get("content","")
    
    @app.get("/chat")
    async def chat(q: str):
        return StreamingResponse(gen(q), media_type="text/plain; charset=utf-8")
  • 프롬프트 템플릿 팁
    [역할] 보안 정책을 준수하는 사내 도우미
    [목표] 사용자의 질문에 간결·정확·근거 제시
    [제약] 내부 비밀/PII 금지, 불확실 시 명확히 밝히기
    [출력형식] 번호 매김, 한국어, 코드 시 예시 포함

시간에 따른 카테고리별 누적 Repo 개수의 변화 추이 - blog by ash

2. 모델 개발 (Model Dev)

  • 핵심: 파인튜닝, 추론 최적화, 데이터셋 엔지니어링
  • 전술: LoRA/QLoRA, 양자화(AWQ/GPTQ), Speculative/Medusa, Batching
  • SFT(지도학습) 간단 예시 (TRL)
    pip install transformers datasets peft trl accelerate bitsandbytes
    from trl import SFTTrainer
    from datasets import load_dataset
    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    base="meta-llama/Llama-3-8b-Instruct"
    tok = AutoTokenizer.from_pretrained(base, use_fast=True)
    model = AutoModelForCausalLM.from_pretrained(base, load_in_4bit=True, device_map="auto")
    
    ds = load_dataset("json", data_files="sft.jsonl")  # {"prompt":..,"response":..}
    trainer = SFTTrainer(model=model, tokenizer=tok, train_dataset=ds["train"],
                         dataset_text_field=None,
                         max_seq_length=2048,
                         packing=True)
    trainer.train()
    trainer.model.save_pretrained("./ckpt")
  • 서빙 최적화(vLLM) 예시
    pip install vllm
    python -m vllm.entrypoints.openai.api_server \
      --model ./ckpt --tensor-parallel-size 2 --gpu-memory-utilization 0.9 \
      --max-num-batched-tokens 65536 --enforce-eager

3. 인프라 (Infra)

  • 구성: API 게이트웨이(레이트리밋·A/B), 모델 서버(vLLM/TensorRT-LLM), 벡터DB, 피처스토어, 모니터링(Prometheus/Grafana), 로깅(PII 마스킹)
  • K8s 배치 예시 (요지)
    apiVersion: apps/v1
    kind: Deployment
    metadata: {name: vllm}
    spec:
      replicas: 2
      template:
        spec:
          containers:
          - name: vllm
            image: vllm/vllm-openai:latest
            args: ["--model","/models/ckpt","--max-num-batched-tokens","65536"]
            resources: {limits: {nvidia.com/gpu: "1"}}
    ---
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata: {name: vllm-hpa}
    spec:
      scaleTargetRef: {apiVersion: apps/v1, kind: Deployment, name: vllm}
      minReplicas: 2
      maxReplicas: 8
      metrics:
      - type: Resource
        resource: {name: cpu, target: {type: Utilization, averageUtilization: 70}}

AI 엔지니어링 vs ML 엔지니어링 (그리고 풀스택) 핵심 차이

1. 모델 활용 방식

  • 과거 ML: 모델을 직접 학습(특화된 피처·알고리즘)
  • 현재 AI: 사전학습 대형모델 호출/RAG/경량 미세조정이 주류
    평가·데이터 품질이 경쟁력의 중심으로 이동

2. 자원·스킬

  • 수백~수천 GPU 클러스터·스케일링·비용 최적화 역량 중요
  • 제품화: 지연·성능·안정성·비용/요금제를 함께 설계

3. 평가 트랜지션

  • 닫힌 정답 → 오픈형 출력 품질(사실성·안전성·형식성)
  • 자동·반자동 평가 파이프라인(LLM-judge, Ragas/DeepEval, 휴먼 라벨 루프)

4. 풀스택과의 경계 해체

  • 프론트/모바일/웹 풀스택 개발자가 AI 인터페이스+도구 연결로 제품 빠르게 론칭
  • 서버 없는(서버리스/게이트웨이) + 플러그인/MCP/함수 콜로 백엔드 간소화

모델 맞춤화: 프롬프트 vs 파인튜닝 선택 기준

  • 먼저 프롬프트+컨텍스트(RAG) → 요구 품질·규모 증가 시 파인튜닝 병행
  • 의사결정 체크리스트
    1. 데이터가 사내에 충분? (수만~수십만 고품질 페어) → 파인튜닝 유리
    2. 응답 형식 일관성·속도·비용이 중요? → 파인튜닝
    3. 도메인 지식이 사내 문서에 분산? → RAG 우선
    4. 보안·비식별화가 필수? → RAG+권한 필터, 필요 시 도메인 SFT

“학습”의 세분화 (용어 정리)

  • 사전학습(Pre-training): 초대형 코퍼스 기반, 일부 대형 기관만 가능
  • 파인튜닝(Fine-tuning): 도메인/업무 맞춤 가중치 조정(SFT→DPO/RLHF)
  • 후속학습(Post-training): 광의로 SFT·지속적 업데이트·안전 강화를 포함
300x250

데이터셋 엔지니어링 (라벨·윤리·품질)

1. 스키마(권장 JSONL)

{"prompt":"고객 A의 환불 규정은?","context":["문서링크1", "FAQ#12"],"response":"...","metadata":{"pii":false,"policy":"refund_v3"}}

2. 품질 파이프라인

  • 수집→정제(중복/노이즈 제거)→PII 마스킹→라벨 가이드→다중 검수→골든셋 분리
  • 간단 PII 마스킹 예시 (Python)
    import re
    def mask_pii(text):
        text = re.sub(r'\b\d{3}-\d{4}-\d{4}\b', '[PHONE]', text)
        text = re.sub(r'[0-9a-zA-Z._%+-]+@[0-9a-zA-Z.-]+\.[a-zA-Z]{2,}', '[EMAIL]', text)
        return text

3. 윤리·프라이버시

  • 최소 수집·목적 제한·보관 기간·접근권한(ACL)·감사로그
  • 라벨 지침 문서화: 허용/금지 응답, 레퍼런스 근거 표기, 사례·엣지케이스 포함

AI 앱 개발 트렌드 & 패턴

1. Product-first

  • “빨리 만들고(프로토타입) → 자동평가/로그로 개선 → 필요시 데이터/모델 투자”
  • UX 포인트: 즉답성(LLM 캐시·스니펫 답변), 출처표시, 편집/피드백 버튼

2. 경량화/엣지

  • llama.cpp 기반 온디바이스 체험
    # gguf 양자화 & 실행 예시
    ./quantize ./llama-f16.gguf ./llama-q4.gguf Q4_K_M
    ./server -m ./llama-q4.gguf --port 8000 --n-gpu-layers 20 --mlock

AI vs 풀스택 엔지니어링 협업 모델

  • FE/모바일: 스트리밍·토큰 단위 UI, 대화 기록·편집·재평가 UX
  • BE: 게이트웨이(감사·요금·레이트리밋), RAG 권한 필터, 모델 셀렉터(비용/품질 라우팅)
  • 예시: Next.js API Route
    // /api/chat/route.ts
    export async function POST(req: Request) {
      const {messages} = await req.json();
      const r = await fetch(process.env.LLM_GW!, {
        method:"POST",
        headers:{"content-type":"application/json","authorization":`Bearer ${process.env.TOKEN}`},
        body: JSON.stringify({model:"auto", messages, stream:true})
      });
      return new Response(r.body, { headers: { "Content-Type":"text/event-stream" }});
    }

보안·컴플라이언스 체크리스트 (서비스 프로바이더 관점)

  1. 데이터 거버넌스
  • 분류/등급: 고객콘텐츠·계정·결제·내부문서 구분, 벡터DB에 ACL 반영
  • 로깅·샘플링 시 PII 마스킹(위 예시), 정책 기반 보존/삭제
  1. 프롬프트 보안
  • 시스템 프롬프트 고정(서버 보관), 사용자 프롬프트 정제(HTML/SQL/명령 차단)
  • 프롬프트 인젝션 테스트(“무시하고 비밀 출력”류 패턴/리그)
  1. 툴 사용 제한
  • 함수 호출/플러그인은 허용 목록만, 출력 검증(스키마·레귤라)
    {"tool":"sql_query","args":{"query":"SELECT ... WHERE tenant_id = :uid"}}
  1. 서빙·공급망
  • 모델/컨테이너 해시 고정, SBOM, 이미지 스캔
    trivy image registry/llm-gw:1.2.3
    cosign verify registry/llm-gw@sha256:...
  1. 비밀 관리
  • Prompt/로그에 토큰 금지, HashiCorp Vault/KMS 사용, 단기 토큰·스코프 최소화
  1. 네트워크·격리
  • 사설망/프록시, egress 제한, 멀티테넌트 격리(네임스페이스·RLS)
  1. 레이틀리밋/청구
  • 사용자/테넌트별 토큰·QPS 제한, 코스트 대시보드
  1. 안전 평가/레드팀
  • 욕설/증오/자해/민감주제/저작권 시나리오 테스트셋 운영
  • 인시던트 대응 플로우: 차단→경보→샘플 수집→모델/프롬프트 패치

평가(Automatic/Hybrid) 플레이북

1. 지표 설계

  • 오픈형: 사실성(Fact), 근거성(Groundedness), 유용성(Helpfulness), 형식성(Structure), 안전성(Safety)
  • 운영 지표: 응답시간, 토큰/원가, 수정율, 재질의율, NPS

2. 예시 코드 (RAG 품질: Ragas)

pip install ragas datasets evaluate
from ragas import evaluate
from ragas.metrics import answer_relevancy, faithfulness
result = evaluate(
  dataset=rag_dataset,  # question, contexts, answer, ground_truth
  metrics=[answer_relevancy, faithfulness]
)
print(result)

3. 페어와이즈/LLM-judge (DeepEval 스타일)

pip install deepeval
from deepeval import assert_test
from deepeval.metrics import PairwiseMetric
metric = PairwiseMetric(criteria="정확성/간결성/안전성 각 1~5점", judge_model="gpt-4o-mini")
assert_test(candidate_a=resp_a, candidate_b=resp_b, metric=metric)

참조 아키텍처 & 활용 사례

1. 사내 지식 어시스턴트 (RAG)

  • 파이프라인: 문서 수집 → PII 마스킹 → 임베딩(테넌트별 인덱스) → 검색 → 권한 필터 → 답변
  • 벡터 검색 쿼리 예시
    query = f"{user_query} [tenant:{tenant_id}]"
    results = vectordb.search(query, filter={"tenant_id": tenant_id, "doc_acl":{"$in":[user_id, "public"]}})

2. 보안 이벤트 트리아지

  • 입력: EDR/IDS 로그 → 요약/우선순위/추천 액션 → 티켓 시스템 연동
  • 가드레일: IOC·명령 제안은 근거 출처 필수, 차단·삭제 명령은 사람 승인

3. 호스팅 고객지원 자동화

  • 결제/환불/도메인/SSL/DB/FTP 등 FAQ → 스니펫/양식 자동 생성
  • 정책 변경 시 골든셋 업데이트 → 야간 자동 재평가 → 회귀 감지 시 롤백

성능·비용 최적화 팁

  • Batching + KV 캐시(vLLM), 요청 길이 제한, 함수 호출로 짧은 답변 설계
  • 모델 라우팅(쉬운 질문=소형, 어려운 질문=중형, 법적/결제=대형)
  • 캐시: 프롬프트·검색결과 캐시, 템플릿화로 토큰 절약

도입 로드맵(4단계)

  1. PoC: RAG+평가 대시보드, 보안·PII 마스킹 포함
  2. Pilot: 테넌트·권한 모델, 레이트리밋·코스트 모니터
  3. Scale: 파인튜닝 병행, A/B, 자동 회귀테스트
  4. 운영 고도화: 안전 레드팀, 모델 라우팅, SLO/SLA 체계

핵심요약

  • 스택은 3계층(앱·모델·인프라), 경쟁력은 평가 자동화와 데이터 품질
  • 프롬프트/RAG 먼저, 임계점에서 파인튜닝으로 속도·일관성·비용 개선
  • 보안은 기본 설계요소: PII 마스킹, 권한 필터, 툴 허용목록, 공급망 검증, 레이트리밋
  • 풀스택 협업으로 빠른 론칭 → 자동평가/로그 기반 반복 개선
728x90
그리드형(광고전용)

댓글