LLM 앱 테스트 방법: Promptfoo 완벽 가이드 (2026년)

Ashley Innocent

Ashley Innocent

19 March 2026

LLM 앱 테스트 방법: Promptfoo 완벽 가이드 (2026년)

TL;DR

Promptfoo는 개발자들이 AI 애플리케이션을 체계적으로 테스트할 수 있도록 돕는 오픈소스 LLM 평가 및 레드팀 프레임워크입니다. 90개 이상의 모델 제공업체를 지원하고, 67개 이상의 보안 공격 플러그인을 제공하며, 개인 정보 보호를 위해 100% 로컬에서 실행됩니다. 160만 건의 npm 다운로드를 기록하고 1천만 명 이상의 사용자에게 서비스를 제공하는 기업에서 프로덕션 용도로 사용되면서, LLM 테스트의 표준으로 자리 잡았습니다. npm install -g promptfoopromptfoo init --example getting-started 명령어로 시작할 수 있습니다.

소개

몇 주 동안 AI 기반 고객 지원 챗봇을 만들었습니다. 개발 중에는 질문에 완벽하게 답변했습니다. 그러다 사용자들이 민감한 데이터를 유출시키고, 안전 가이드라인을 우회하며, 일관성 없는 답변을 하게 만드는 방법을 찾아내기 시작했습니다.

이러한 시나리오는 매일 발생합니다. 팀들은 직감과 수동 테스트에 의존하여 LLM 애플리케이션을 출시하지만, 결국 프로덕션에서 취약점과 품질 문제를 발견하게 됩니다. 출시 후에 이러한 문제를 해결하는 비용은 개발 중에 발견하는 것보다 100배 더 높습니다.

Promptfoo는 LLM 애플리케이션에 체계적이고 자동화된 테스트를 도입하여 이 문제를 해결합니다. 이를 통해 여러 모델에서 프롬프트를 평가하고, 보안 레드팀 평가를 실행하며, 사용자에게 도달하기 전에 회귀를 잡아낼 수 있습니다.

저는 promptfoo 코드베이스(버전 0.121.2)를 분석하고 핵심 기능을 테스트하여 이 종합 가이드를 제공합니다. 평가를 설정하고, 보안 검사를 실행하며, CI/CD와 통합하고, 흔한 함정을 피하는 방법을 배우게 될 것입니다.

이 가이드가 끝날 때쯤에는 LLM 애플리케이션을 위한 작동하는 테스트 스위트를 갖게 될 것이며, 자신감을 가지고 출시하는 방법을 알게 될 것입니다.

💡
API 테스트 작업을 하거나 LLM 테스트와 함께 API 동작을 검증해야 하는 경우, Apidog는 API 설계, 테스트 및 문서를 위한 통합 플랫폼을 제공합니다. LLM 평가에는 promptfoo를, API 계층 검증에는 Apidog를 함께 사용할 수 있습니다.
button

Promptfoo는 무엇이며 왜 필요한가요?

Promptfoo는 LLM 애플리케이션을 평가하고 레드팀을 수행하기 위한 명령줄 도구이자 Node.js 라이브러리입니다. AI 개발의 특성을 위해 특별히 제작된 테스트 프레임워크라고 생각하면 됩니다.

기존 테스트 도구는 LLM에서 출력이 비결정적이기 때문에 실패합니다. 동일한 프롬프트가 매번 다른 응답을 생성할 때 정확한 문자열 일치를 주장할 수 없습니다. Promptfoo는 다음을 통해 이 문제를 해결합니다.

이 도구는 사용자의 컴퓨터에서 로컬로 실행됩니다. 클라우드 기능을 선택하지 않는 한 프롬프트와 테스트 데이터는 사용자의 환경을 벗어나지 않습니다. 이 개인 정보 보호 우선 설계는 민감한 데이터를 사용한 테스트에 적합합니다.

Promptfoo가 해결하는 문제

대부분의 팀은 LLM 애플리케이션을 수동으로 테스트합니다. 몇 가지 프롬프트를 보내고 출력을 읽은 다음 문제가 없는지 결정합니다. 이 접근 방식에는 세 가지 치명적인 결함이 있습니다.

  1. 회귀 감지 불가 - 모델 업데이트가 기존 기능을 손상시켰는지 알 수 없습니다.
  2. 커버리지 격차 - 수동 테스트는 엣지 케이스와 적대적 입력을 놓칩니다.
  3. 메트릭 없음 - 개선 사항을 추적하거나 모델을 객관적으로 비교할 수 없습니다.

Promptfoo는 모든 변경 사항에 대해 실행되는 자동화된 평가로 이를 대체합니다. 테스트 케이스를 한 번 정의하고 모든 모델에 대해 실행합니다. 결과에는 합격/불합격률, 비용 비교 및 지연 시간 메트릭이 포함됩니다.

Promptfoo를 사용하는 사람

이 프로젝트는 160만 건의 npm 다운로드를 기록했으며, 1천만 명 이상의 최종 사용자에게 서비스를 제공하는 LLM 애플리케이션을 지원합니다. 기업들은 다음을 위해 이를 사용합니다.

2026년 3월, Promptfoo는 OpenAI에 합류했습니다. 이 프로젝트는 새로운 소유권 아래에서도 오픈 소스 및 MIT 라이선스로 유지되며 지속적으로 개발되고 있습니다.

시작하기: 첫 번째 평가 설치 및 실행

promptfoo를 전역으로 설치하거나 npx를 사용하여 설치 없이 실행할 수 있습니다.

설치

# 전역 설치 (권장)
npm install -g promptfoo

# 또는 설치 없이 실행
npx promptfoo@latest

# macOS 사용자는 Homebrew도 사용할 수 있습니다.
brew install promptfoo

# Python 사용자도 pip를 사용할 수 있습니다.
pip install promptfoo

API 키를 환경 변수로 설정하세요.

export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx

첫 번째 평가 생성

예제 프로젝트를 초기화합니다.

promptfoo init --example getting-started
cd getting-started

이렇게 하면 샘플 프롬프트, 제공업체 및 테스트 케이스가 포함된 promptfooconfig.yaml 파일이 생성됩니다.

평가를 실행합니다.

promptfoo eval

웹 UI에서 결과를 확인합니다.

promptfoo view

UI는 localhost:3000에서 열리며 각 모델의 출력을 나란히 비교하고 각 단언에 대한 합격/불합격 상태를 보여줍니다.

구성 파일 이해하기

promptfooconfig.yaml 파일은 평가 스위트를 정의합니다.

description: "My First Eval Suite"

prompts:
  - prompts/greeting.txt
  - prompts/farewell.txt

providers:
  - openai:gpt-4o
  - anthropic:claude-sonnet-4-5

tests:
  - vars:
      input: "Hello"
    assert:
      - type: contains
        value: "Hi"
      - type: latency
        threshold: 3000

이를 수백 개의 테스트 케이스로 확장할 수 있습니다. 많은 팀이 평가 구성을 버전 제어 시스템에 보관하고 모든 풀 리퀘스트에서 CI로 실행합니다.

핵심 기능: Promptfoo가 할 수 있는 것

1. 자동화된 평가

자동화된 평가는 promptfoo의 기반입니다. 예상 결과와 함께 테스트 케이스를 정의하면 도구가 선택한 모델에 대해 이를 실행합니다.

단언 유형

Promptfoo에는 30개 이상의 내장 단언 유형이 포함되어 있습니다.

단언 목적
contains 출력에 부분 문자열이 포함됨
equals 정확한 문자열 일치
regex 정규식 패턴과 일치
json-schema JSON 구조 유효성 검사
javascript 사용자 정의 JS 함수가 합격/불합격 반환
python 사용자 정의 Python 함수
llm-rubric LLM을 사용하여 출력 등급 지정
similar 의미론적 유사성 점수
latency 응답 시간이 임계값 미만
cost 요청당 비용이 임계값 미만

여러 단언을 사용한 예시:

tests:
  - vars:
      question: "프랑스의 수도는 어디인가요?"
    assert:
      - type: contains
        value: "파리"
      - type: javascript
        value: output.length < 100
      - type: latency
        threshold: 2000
      - type: cost
        threshold: 0.001

이 테스트는 답변에 파리가 언급되고, 100자 미만이며, 2초 이내에 응답하고, 비용이 $0.001 미만인지 확인합니다.

LLM-평가된 평가

llm-rubric 단언은 하나의 LLM을 사용하여 다른 LLM의 출력을 평가합니다. 이는 어조나 유용성과 같은 주관적인 기준에 강력합니다.

assert:
  - type: llm-rubric
    value: "응답은 도움이 되고, 무해하며, 정직해야 합니다."

평가자 LLM은 출력을 읽고 사용자 정의 루브릭에 따라 점수를 매깁니다. 비용을 줄이기 위해 더 저렴한 모델을 평가에 사용할 수 있습니다.

2. 레드팀 및 보안 테스트

Promptfoo는 레드팀 모듈을 통해 포괄적인 보안 테스트를 포함합니다. 취약점을 탐색하기 위해 적대적 입력을 자동으로 생성합니다.

지원되는 공격 벡터

레드팀 시스템에는 카테고리별로 구성된 67개 이상의 플러그인이 포함되어 있습니다.

카테고리 테스트 내용
프롬프트 주입 직접, 간접 및 컨텍스트 주입 공격
탈옥 (Jailbreaks) DAN, 페르소나 전환, 역할극 우회
데이터 유출 SSRF, 시스템 프롬프트 추출, 프롬프트 유출
유해 콘텐츠 혐오 발언, 위험한 활동, 자해 요청
규정 준수 개인 식별 정보(PII) 유출, HIPAA 위반, 금융 데이터 노출
오디오/비주얼 오디오 주입 및 이미지 기반 공격

레드팀 스캔 실행

레드팀 구성을 초기화합니다.

promptfoo redteam init

보안 스캔을 실행합니다.

promptfoo redteam run

보고서를 확인합니다.

promptfoo redteam report [directory]

redteam run 명령은 두 가지 단계를 수행합니다.

  1. 애플리케이션에 맞춤화된 동적 공격 프로브 생성
  2. 대상에 대한 프로브 평가 및 취약점 점수화

결과에는 심각도 등급 (Critical, High, Medium, Low), 악용 가능한 테스트 케이스 및 개선 권장 사항이 포함됩니다.

레드팀 출력 예시

취약점 요약:
- Critical: 2 (개인 식별 정보 유출, 프롬프트 추출)
- High: 5 (탈옥, 주입 공격)
- Medium: 12 (편향, 일관성 없는 응답)
- Low: 23 (경미한 정책 위반)

배포 전에 중요한 문제를 해결하세요. 변경 후 다시 스캔을 실행하여 수정 사항을 확인하세요.

3. 풀 리퀘스트에 대한 코드 스캔

Promptfoo는 GitHub Actions와 통합되어 풀 리퀘스트에 대한 LLM 관련 보안 문제를 스캔합니다.

# .github/workflows/promptfoo-scan.yml
name: Promptfoo 코드 스캔
on: [pull_request]
jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: promptfoo/promptfoo/code-scan-action@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}

이것은 다음을 감지합니다.

4. 모델 비교

여러 모델의 출력을 나란히 비교하여 사용 사례에 가장 적합한 모델을 선택하세요.

# 여러 제공업체로 평가 실행
promptfoo eval

# 웹 UI에서 비교 보기
promptfoo view

웹 UI는 다음을 표시합니다.

이러한 데이터 기반 접근 방식은 익숙한 모델에 대한 편향을 방지합니다. 더 저렴한 모델이 특정 평가에서 GPT-4보다 우수하다는 것을 발견할 수도 있습니다.

지원되는 제공업체: 90개 이상의 LLM 통합

Promptfoo는 90개 이상의 LLM 제공업체를 기본적으로 지원합니다. 코드를 변경하지 않고 OpenAI, Anthropic, Google, Amazon 및 로컬 모델에서 동일한 프롬프트를 테스트할 수 있습니다.

주요 제공업체

제공업체 모델
OpenAI GPT-4, GPT-4o, GPT-4o-mini, o1, o3
Anthropic Claude 3.5/3.7/4.5/4.6, Thinking models
Google Gemini 1.5/2.0, Vertex AI
Microsoft Azure OpenAI, Phi
Amazon Bedrock (Claude, Llama, Titan)
Meta Llama 3, 3.1, 3.2 (여러 제공업체 경유)
Ollama 로컬 모델 (Llama, Mistral, Phi)

사용자 정의 제공업체

모델이 지원되지 않는 경우 Python 또는 JavaScript로 사용자 정의 제공업체를 작성할 수 있습니다.

Python 예시:

# custom_provider.py
from typing import Any

class CustomProvider:
    async def call_api(self, prompt: str, options: dict, context: dict) -> dict:
        response = await my_async_api.generate(prompt)
        return {
            "output": response.text,
            "tokenUsage": {
                "total": response.usage.total_tokens,
                "prompt": response.usage.prompt_tokens,
                "completion": response.usage.completion_tokens
            }
        }

JavaScript 예시:

// customProvider.js
export default class CustomProvider {
  async callApi(prompt) {
    return {
      output: await myApi.generate(prompt),
      tokenUsage: { total: 50, prompt: 20, completion: 30 }
    };
  }
}

구성에서 사용자 정의 제공업체를 등록합니다.

providers:
  - id: file://custom_provider.py
    config:
      api_key: ${MY_API_KEY}

명령줄 인터페이스: 필수 명령

Promptfoo의 CLI는 일상적인 워크플로우에 필요한 모든 기능을 제공합니다.

핵심 명령

# 평가 실행
promptfoo eval -c promptfooconfig.yaml

# 웹 UI 열기
promptfoo view

# 온라인으로 결과 공유
promptfoo share

# 레드팀 테스트
promptfoo redteam init
promptfoo redteam run

# 구성
promptfoo init
promptfoo validate [config]

# 결과 관리
promptfoo list
promptfoo show 
promptfoo delete 
promptfoo export 

# 유틸리티
promptfoo cache clear
promptfoo retry 

유용한 플래그

--no-cache              # 새로운 결과를 위해 캐싱 비활성화
--max-concurrency    # 병렬 API 호출 제한
--output          # 결과를 JSON 파일로 작성
--verbose               # 디버그 로깅 활성화
--env-file        # 파일에서 환경 변수 로드
--filter       # 특정 테스트 케이스 실행

예시: 사용자 정의 설정으로 평가 실행

promptfoo eval \
  -c promptfooconfig.yaml \
  --no-cache \
  --max-concurrency 3 \
  --output results.json \
  --env-file .env

이것은 평가를 새로 실행하고 (캐시 없음), 동시성을 3개의 병렬 호출로 제한하며, 결과를 JSON에 저장하고, .env에서 API 키를 로드합니다.

CI/CD 통합: LLM 테스트 자동화

배포 전에 회귀를 잡아내기 위해 promptfoo를 CI/CD 파이프라인에 통합합니다.

GitHub Actions 예시

name: LLM 테스트
on: [push, pull_request]
jobs:
  eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm install -g promptfoo
      - run: promptfoo eval -c promptfooconfig.yaml
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

품질 게이트

구성에서 합격/불합격 임계값을 설정합니다.

commandLineOptions:
  threshold: 0.8  # 80% 합격률 요구

이렇게 하면 평가가 임계값을 충족하지 못하면 CI가 실패하여 회귀 병합을 방지합니다.

CI에서 캐싱

CI 실행 속도를 높이기 위해 캐싱을 활성화합니다.

- uses: actions/cache@v4
  with:
    path: ~/.cache/promptfoo
    key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}

캐시된 결과는 변경되지 않은 테스트에 대한 API 호출을 건너뛰어 CI 시간과 비용을 절감합니다.

웹 UI: 결과 시각화 및 공유

내장 웹 UI (promptfoo view)는 평가를 검토하기 위한 대화형 인터페이스를 제공합니다.

기능

액세스 및 보안

UI는 기본적으로 localhost:3000에서 실행됩니다. 신뢰할 수 없는 출처의 교차 사이트 요청을 차단하기 위해 Sec-Fetch-SiteOrigin 헤더를 사용하는 CSRF 보호 기능을 포함합니다.

로컬 웹 서버를 신뢰할 수 없는 네트워크에 노출하지 마십시오. 팀 액세스의 경우 promptfoo share 명령을 사용하여 결과를 클라우드에 업로드하거나 인증을 통해 자체 호스팅하세요.

데이터베이스 및 캐싱

캐시 위치

캐시는 반복 실행 속도를 높이기 위해 평가 결과를 저장합니다. 개발 중에 새로운 결과를 보장하려면 --no-cache를 사용하십시오.

데이터베이스 위치

데이터베이스는 비교 및 추세 분석을 위해 과거 평가 실행을 저장합니다. 과거 데이터를 잃고 싶지 않다면 이 파일을 삭제하지 마십시오.

보안 모델: 무엇을 신뢰할 수 있는가

Promptfoo는 구성에 의한 신뢰 모델에서 작동합니다. 이를 이해하면 보안 문제를 예방할 수 있습니다.

신뢰할 수 있는 입력 (코드로 처리됨)

이러한 입력은 코드로 실행되며 신뢰할 수 있는 출처에서만 와야 합니다.

신뢰할 수 없는 입력 (데이터 전용)

이러한 입력은 데이터로 처리되며 코드 실행을 유발해서는 안 됩니다.

강화 권장 사항

높은 보안 환경의 경우:

  1. 최소 권한을 가진 컨테이너 또는 VM 내에서 실행
  2. 전용 최소 권한 API 키 사용
  3. 프롬프트나 구성 파일에 비밀 정보를 배치하지 않음
  4. 타사 코드에 대한 네트워크 이그레스 제한
  5. 로컬 웹 서버를 신뢰할 수 없는 네트워크에 노출하지 않음

성능: 평가 최적화

최적화 팁

  1. 캐싱 사용 - 기본 동작은 반복 실행 속도를 높입니다.
  2. 동시성 튜닝 - --max-concurrency는 속도와 속도 제한의 균형을 맞춥니다.
  3. 테스트 필터링 - 개발 중에 --filter를 사용하여 특정 테스트 케이스를 실행합니다.
  4. 데이터셋 샘플링 - 전체 실행 전에 반복을 위해 하위 집합과 함께 --repeat을 사용합니다.

대규모 평가를 위한 확장

수천 개의 테스트 케이스를 포함하는 대규모 평가의 경우:

확장성: 사용자 정의 기능 구축

사용자 정의 단언

도메인별 검사를 위한 사용자 정의 단언을 작성합니다.

// assertions/customCheck.js
export default function customCheck(output, context) {
  const pass = output.includes('expected');
  return {
    pass,
    score: pass ? 1 : 0,
    reason: pass ? 'Output matched' : 'Missing expected content'
  };
}

구성에서 사용:

assert:
  - type: file://assertions/customCheck.js

MCP 서버

Promptfoo는 Claude Code와 같은 AI 비서와의 통합을 위한 Model Context Protocol (MCP) 서버를 포함합니다.

promptfoo mcp

이것은 AI 에이전트가 다음을 수행할 수 있도록 합니다.

실제 사용 사례

고객 지원 챗봇

SaaS 회사는 매 배포 전에 promptfoo를 사용하여 고객 지원 챗봇을 테스트합니다.

결과: 자동화된 평가 구현 후 고객 보고 문제 90% 감소.

콘텐츠 생성 파이프라인

마케팅 팀은 브랜드 보이스를 위해 AI 생성 콘텐츠의 유효성을 검사합니다.

결과: 모든 콘텐츠에서 일관된 브랜드 보이스 유지 및 API 비용 40% 절감.

헬스케어 애플리케이션

헬스케어 스타트업은 엄격한 테스트를 통해 규정 준수를 보장합니다.

결과: promptfoo 평가를 증거로 SOC 2 감사 통과.

결론

Promptfoo는 LLM 애플리케이션에 체계적인 테스트를 제공합니다. 수동적이고 오류가 발생하기 쉬운 프로세스를 배포 전에 회귀, 보안 문제 및 품질 문제를 잡아내는 자동화된 평가로 대체합니다.

주요 시사점:

AI 개발의 미래는 데이터 기반입니다. promptfoo를 사용하면 LLM 애플리케이션을 대규모로 구축, 테스트 및 보호할 수 있는 도구를 갖게 됩니다.

button

API 작업도 하는 경우 promptfoo와 함께 Apidog를 사용하는 것을 고려해 보세요. Apidog는 API 설계, 테스트 및 문서를 처리하고, promptfoo는 LLM 평가에 중점을 둡니다. 이 둘은 현대 애플리케이션 테스트의 전체 스택을 함께 다룹니다.

FAQ

promptfoo는 무엇에 사용되나요?

Promptfoo는 LLM 애플리케이션을 테스트하고 평가하는 데 사용됩니다. 프롬프트에 대한 자동화된 테스트를 실행하고, 여러 모델에서 출력을 비교하며, 취약점을 찾기 위한 보안 레드팀 평가를 수행합니다.

promptfoo는 무료인가요?

예, promptfoo는 오픈 소스이며 MIT 라이선스입니다. 개인 및 상업 프로젝트에서 무료로 사용할 수 있습니다. 클라우드 기능 및 엔터프라이즈 지원에는 유료 요금제가 필요할 수 있습니다.

promptfoo는 어떻게 설치하나요?

전역 설치를 위해 npm install -g promptfoo를 실행합니다. 설치 없이 npx promptfoo@latest를 사용하거나, macOS에서는 brew install promptfoo, Python의 경우 pip install promptfoo를 통해 설치할 수도 있습니다.

promptfoo는 어떤 모델을 지원하나요?

Promptfoo는 OpenAI (GPT-4, GPT-4o, o1), Anthropic (Claude 3.5/4/4.5), Google (Gemini), Microsoft (Azure OpenAI), Amazon Bedrock 및 Ollama를 통한 로컬 모델을 포함한 90개 이상의 LLM 제공업체를 지원합니다.

레드팀 스캔은 어떻게 실행하나요?

구성을 생성하려면 promptfoo redteam init을 실행하고, 보안 스캔을 실행하려면 promptfoo redteam run을 실행합니다. promptfoo redteam report로 결과를 확인하세요.

CI/CD에서 promptfoo를 사용할 수 있나요?

예. CI 파이프라인에 promptfoo를 설치하고 구성 파일과 함께 promptfoo eval을 실행합니다. 통과율을 충족하지 못하면 CI를 실패시키기 위해 threshold 옵션으로 품질 게이트를 설정합니다.

promptfoo는 내 데이터를 외부 서버로 보내나요?

아니요. Promptfoo는 기본적으로 100% 로컬에서 실행됩니다. 클라우드 기능을 명시적으로 선택하지 않는 한 프롬프트와 테스트 데이터는 사용자의 컴퓨터를 벗어나지 않습니다. 캐시 및 데이터베이스 파일은 로컬에 저장됩니다.

promptfoo로 모델을 어떻게 비교하나요?

구성 파일에 여러 제공업체를 나열한 다음 promptfoo eval을 실행합니다. promptfoo view로 웹 UI에서 비교를 확인하면 각 모델의 합격/불합격률, 비용 및 지연 시간이 표시됩니다.

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요