OpenAI API 가이드
OpenAI API는 ChatGPT를 구동하는 GPT 모델을 프로그래밍 방식으로 사용할 수 있게 해주는 RESTful API입니다. GPT-5.5(2026-04-23 출시) 등 최신 플래그십 모델과 Chat Completions API 및 Responses API를 제공하여 강력한 AI 애플리케이션을 구축할 수 있습니다.
핵심 포인트
- GPT-5.5: 최신 플래그십 모델 (2026-04-23), 1M 컨텍스트, SWE-bench 88.7%
- GPT-5.4 시리즈: 안정적인 이전 세대 플래그십, 멀티모달
- o3/o4-mini: 고급 추론 모델, 복잡한 문제 해결
- Chat Completions API + Responses API 이중 지원
- Function Calling, Vision, Audio 등 다양한 기능
- 배치 API로 50% 비용 절감
OpenAI API 개요
다음 다이어그램은 OpenAI API의 전체 요청-응답 흐름을 보여줍니다.
모델 라인업
모델
★ GPT-5.5 시리즈 (최신 플래그십, 2026-04-23 출시):
┌──────────────────┬──────────┬──────────┬─────────────────────────────────────────┐
│ 모델 │ 입력 │ 출력 │ 특징 │
├──────────────────┼──────────┼──────────┼─────────────────────────────────────────┤
│ gpt-5.5 │ $5/1M │ $30/1M │ 최신 플래그십, 에이전트 코딩 특화 │
│ gpt-5.5-pro │ $30/1M │ $180/1M │ 최고 정확도 (Responses API only) │
└──────────────────┴──────────┴──────────┴─────────────────────────────────────────┘
GPT-5.5 벤치마크:
• SWE-bench: 88.7% | MMLU: 92.4%
• SWE-Bench Pro: 58.6% | Terminal-Bench 2.0: 82.7%
• FrontierMath Tier 4 (Pro): 39.6%
• 환각 오류: GPT-5.4 대비 60% 감소
• GPT-4.5 이후 첫 완전 재훈련 기반 모델
GPT-5.4 시리즈 (이전 플래그십, 2026-04-11 가격 기준):
┌──────────────────┬──────────┬──────────┬─────────────────────────┐
│ 모델 │ 입력 │ 출력 │ 특징 │
├──────────────────┼──────────┼──────────┼─────────────────────────┤
│ gpt-5.4 │ $2.50/1M │ $15.00/1M│ 안정적 추론/코딩 │
│ gpt-5.4-mini │ $0.75/1M │ $4.50/1M │ 경량, 저비용 │
│ gpt-5.4-nano │ $0.20/1M │ $1.25/1M │ 초경량 │
│ gpt-5.4-pro │ $30/1M │ $180/1M │ 최고 성능 (Responses API only) │
└──────────────────┴──────────┴──────────┴─────────────────────────┘
참고:
• 위 표는 Standard short context 가격입니다.
• Batch/Flex는 Standard 대비 50%, Priority는 2.5× 가격입니다.
• gpt-5.5와 gpt-5.5-pro의 컨텍스트 윈도우: 1M tokens
코딩 특화:
┌──────────────────┬──────────┬──────────┬─────────────────────────┐
│ gpt-5.3-codex │ $1.75/1M│ $14.00/1M │ 코딩 에이전트 특화 │
└──────────────────┴──────────┴──────────┴─────────────────────────┘
추론 모델 (o 시리즈):
┌──────────────────┬──────────┬──────────┬─────────────────────────┐
│ o3 │ 변동/1M │ 변동/1M │ 최고 추론, 200K context │
│ o4-mini │ 변동/1M │ 변동/1M │ 경량 추론, 200K context │
└──────────────────┴──────────┴──────────┴─────────────────────────┘
딥 리서치:
┌──────────────────────────┬──────────┬──────────┬─────────────────┐
│ o3-deep-research │ 변동/1M │ 변동/1M │ 심층 조사 특화 │
│ o4-mini-deep-research │ 변동/1M │ 변동/1M │ 경량 심층 조사 │
└──────────────────────────┴──────────┴──────────┴─────────────────┘
이전 세대:
┌──────────────────┬──────────┬──────────┬─────────────────────────┐
│ gpt-4.1 │ 변동/1M │ 변동/1M │ 1M context, 안정적 │
│ gpt-5.2 │ 변동/1M │ 변동/1M │ Thinking/Instant 변형 │
└──────────────────┴──────────┴──────────┴─────────────────────────┘
레거시/퇴역:
┌──────────────────┬──────────┬──────────┬─────────────────────────┐
│ gpt-4o │ 변동/1M │ 변동/1M │ ChatGPT 2026-02-13 퇴역 │
│ o1 │ 변동/1M │ 변동/1M │ 레거시 │
│ gpt-3.5-turbo │ - │ - │ 지원 종료 │
└──────────────────┴──────────┴──────────┴─────────────────────────┘
컨텍스트 윈도우:
• GPT-5.5 / GPT-5.5 Pro: 1M tokens
• GPT-5.4: 1M+ (short/long context 가격 구분)
• GPT-5.3-Codex: 400K tokens
• o3 / o4-mini: 200K tokens
주요 기능
기능
// GPT-5.5 에이전트 기능 (2026-04-23 신규)
• 복잡한 다단계 작업 계획 수립 → 도구 사용 → 완료까지 자율 실행
• Terminal-Bench 2.0: 82.7% (복잡한 CLI 워크플로우 자동화)
• SWE-Bench Pro: 58.6% (실제 GitHub 이슈 자동 해결)
• Codex 통합: 구현, 리팩토링, 디버깅, 테스트, 검증 전 과정 처리
• 과학·기술 연구 워크플로우 성능 대폭 향상
// Chat Completions API (대화형 AI)
• 다중 턴 대화
• 시스템 메시지로 행동 제어
• 스트리밍 지원
// Responses API (차세대 API)
• Chat Completions의 후속 API
• 내장 도구 (web search, file search, code interpreter)
• gpt-5.5-pro / gpt-5.4-pro 등 일부 모델은 Responses API 전용
• 기존 Chat Completions API도 계속 지원
// Function Calling
• 외부 API/함수 호출
• 구조화된 데이터 추출
• 병렬 함수 호출 지원
// Vision (이미지 입력)
• 이미지 분석 및 설명
• OCR, 차트 해석
• URL 또는 Base64 지원
// Audio
• 음성 입력 (Whisper API)
• 텍스트→음성 (TTS API)
• 다국어 지원
// JSON Mode
• 항상 유효한 JSON 반환
• 구조화된 데이터 추출
// 배치 API
• 비동기 대량 처리
• 50% 비용 절감
• 24시간 이내 완료
시작하기
API 키 발급
절차
1. OpenAI 플랫폼 접속
https://platform.openai.com
2. 계정 생성 또는 로그인
3. API Keys 메뉴 (왼쪽 사이드바)
4. "Create new secret key" 클릭
5. 키 이름 입력 (선택사항)
6. 생성된 키 복사 (한 번만 표시)
sk-proj-...
7. 안전하게 보관
신규 가입 크레딧
- 신규 가입 시 변동 크레딧 제공 (3개월 유효)
- 결제 수단 등록 후 추가 크레딧 사용 가능
- 사용량 제한(Rate Limit)은 티어에 따라 다름
빠른 시작
Python
# 설치
$ pip install openai
# 사용
from openai import OpenAI
client = OpenAI(api_key="sk-proj-...")
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{"role": "user", "content": "안녕하세요!"}
]
)
print(response.choices[0].message.content)
Node.js
// 설치
$ npm install openai
// 사용
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const response = await client.chat.completions.create({
model: 'gpt-5.4',
messages: [
{ role: 'user', content: '안녕하세요!' }
],
});
console.log(response.choices[0].message.content);
Chat Completions API
기본 사용법
Python
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "system",
"content": "당신은 도움이 되는 AI 어시스턴트입니다."
},
{
"role": "user",
"content": "Python으로 퀵소트를 구현해줘."
}
],
temperature=0.7, # 0.0 ~ 2.0
max_tokens=1000,
top_p=1.0,
frequency_penalty=0.0, # -2.0 ~ 2.0
presence_penalty=0.0, # -2.0 ~ 2.0
)
print(response.choices[0].message.content)
# 토큰 사용량 확인
print(f"\n입력: {response.usage.prompt_tokens}")
print(f"출력: {response.usage.completion_tokens}")
print(f"총합: {response.usage.total_tokens}")
다중 턴 대화
Python
from openai import OpenAI
client = OpenAI()
messages = [
{"role": "system", "content": "당신은 친절한 선생님입니다."},
]
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-5.4",
messages=messages
)
assistant_message = response.choices[0].message.content
print(f"Assistant: {assistant_message}\n")
messages.append({"role": "assistant", "content": assistant_message})
JSON Mode
Python
import json
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "system",
"content": "당신은 데이터를 JSON 형식으로 추출하는 도구입니다."
},
{
"role": "user",
"content": """다음 텍스트에서 이름, 나이, 직업을 JSON으로 추출해주세요:
"철수는 28살이고 소프트웨어 엔지니어입니다."
JSON 형식으로만 답변하세요."""
}
],
response_format={"type": "json_object"} # JSON 모드 활성화
)
data = json.loads(response.choices[0].message.content)
print(data)
# {'name': '철수', 'age': 28, 'job': '소프트웨어 엔지니어'}
스트리밍
기본 스트리밍
Python
from openai import OpenAI
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "긴 이야기를 들려줘."}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
Node.js 스트리밍
TypeScript
const stream = await client.chat.completions.create({
model: 'gpt-5.4',
messages: [{ role: 'user', content: '긴 이야기를 들려줘.' }],
stream: true,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content || '';
process.stdout.write(content);
}
console.log();
Function Calling
함수 정의
Python
import json
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "특정 위치의 날씨를 가져옵니다",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "도시 이름 (예: Seoul)"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
]
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "서울 날씨 알려줘"}],
tools=tools,
tool_choice="auto" # "auto", "none", {"type": "function", "function": {"name": "..."}}
)
print(json.dumps(response.model_dump(), indent=2, ensure_ascii=False))
함수 실행 루프
Python
import json
def get_weather(location: str, unit: str = "celsius"):
# 실제 API 호출 대신 더미 데이터
return json.dumps({
"location": location,
"temperature": 22,
"unit": unit,
"forecast": "맑음"
})
messages = [{"role": "user", "content": "서울과 부산의 날씨를 비교해줘"}]
while True:
response = client.chat.completions.create(
model="gpt-5.4",
messages=messages,
tools=tools
)
choice = response.choices[0]
if choice.finish_reason == "tool_calls":
messages.append(choice.message)
for tool_call in choice.message.tool_calls:
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"Calling {function_name} with {arguments}")
if function_name == "get_weather":
result = get_weather(**arguments)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"name": function_name,
"content": result
})
else:
print(choice.message.content)
break
병렬 함수 호출
Python
# GPT-5.4는 여러 함수를 동시에 호출 가능
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{
"role": "user",
"content": "서울, 부산, 제주의 날씨를 알려줘"
}],
tools=tools
)
# response.choices[0].message.tool_calls에 3개의 함수 호출이 포함됨
for tool_call in response.choices[0].message.tool_calls:
print(f"Function: {tool_call.function.name}")
print(f"Arguments: {tool_call.function.arguments}")
Vision (이미지 입력)
URL 이미지
Python
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "이 이미지에 무엇이 있나요?"},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg",
"detail": "high" # "low", "high", "auto"
}
}
]
}
]
)
print(response.choices[0].message.content)
Base64 이미지
Python
import base64
def encode_image(image_path):
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
image_base64 = encode_image("chart.png")
response = client.chat.completions.create(
model="gpt-5.4",
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "이 차트를 분석해주세요."},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{image_base64}"
}
}
]
}
]
)
print(response.choices[0].message.content)
o 시리즈 추론 모델
o3 사용법
Python
# o 시리즈 추론 모델 사용 방식
response = client.chat.completions.create(
model="o3", # 또는 "o4-mini"
messages=[
{
"role": "user",
"content": """다음 수학 문제를 풀어주세요:
한 농부가 닭과 토끼를 키우고 있습니다.
머리가 총 20개이고, 다리가 총 56개일 때,
닭과 토끼는 각각 몇 마리일까요?"""
}
]
# 주의: o 시리즈는 temperature, top_p 미지원 (reasoning_effort 사용)
# 참고: o3, o4-mini는 스트리밍 지원
)
print(response.choices[0].message.content)
o 시리즈 추론 모델 특징
- 내부적으로 Chain-of-Thought 추론 수행
- 복잡한 수학, 과학, 프로그래밍 문제에 강함
- reasoning_effort 파라미터로 추론 깊이 조절 (low/medium/high)
- temperature, top_p 등 샘플링 파라미터 미지원
- o3/o4-mini: 스트리밍, Function Calling, 구조화된 출력 지원
- o1: 레거시, 스트리밍/Function Calling 미지원
- 응답 시간이 GPT-5.4보다 길 수 있음
배치 API
배치 생성
Python
import json
# 1. 배치 요청 파일 생성 (JSONL)
batch_requests = [
{
"custom_id": "request-1",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-5.4",
"messages": [{"role": "user", "content": "안녕하세요"}]
}
},
{
"custom_id": "request-2",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-5.4",
"messages": [{"role": "user", "content": "날씨 어때?"}]
}
}
]
with open("batch_input.jsonl", "w") as f:
for req in batch_requests:
f.write(json.dumps(req) + "\n")
# 2. 파일 업로드
batch_file = client.files.create(
file=open("batch_input.jsonl", "rb"),
purpose="batch"
)
# 3. 배치 생성
batch = client.batches.create(
input_file_id=batch_file.id,
endpoint="/v1/chat/completions",
completion_window="24h"
)
print(f"Batch ID: {batch.id}")
print(f"Status: {batch.status}") # validating, in_progress, completed, failed
배치 결과 가져오기
Python
# 배치 상태 확인
batch = client.batches.retrieve(batch.id)
print(f"Status: {batch.status}")
if batch.status == "completed":
# 결과 파일 다운로드
result_file_id = batch.output_file_id
result = client.files.content(result_file_id)
# 결과 파싱
for line in result.text.strip().split("\n"):
result_obj = json.loads(line)
custom_id = result_obj["custom_id"]
response = result_obj["response"]["body"]["choices"][0]["message"]["content"]
print(f"{custom_id}: {response}")
배치 API 장점
- 50% 비용 절감 (일반 API 대비)
- 대량 처리에 적합
- 24시간 이내 완료
- Rate Limit에 영향 없음
GPT-5.5 (2026-04-23)
GPT-5.5는 OpenAI가 2026년 4월 23일 출시한 최신 플래그십 모델입니다. GPT-4.5 이후 첫 완전 재훈련(fully retrained) 기반 모델로, 에이전트 코딩·과학 연구·복잡한 다단계 작업에 특화되어 있습니다.
GPT-5.5 핵심 특징
- SWE-bench 88.7% — 코딩 벤치마크 최고 수준
- MMLU 92.4% — 종합 지식 평가 우위
- Terminal-Bench 2.0: 82.7% — 복잡한 CLI 워크플로우 자동화
- 환각 60% 감소 — GPT-5.4 대비
- 1M 토큰 컨텍스트 — gpt-5.5 / gpt-5.5-pro 공통
- GPT-5.4와 동일한 지연 시간 — 성능 향상 + 속도 유지
- Thinking 변형 지원 (
reasoning.effort조절)
모델 변형
모델 변형
┌─────────────────┬──────────────────────────────────────────────────────┐
│ 변형 │ 설명 │
├─────────────────┼──────────────────────────────────────────────────────┤
│ gpt-5.5 │ 표준 플래그십, Chat Completions / Responses API │
│ gpt-5.5 Thinking│ 동일 모델 ID, reasoning.effort=high → 심층 추론 │
│ gpt-5.5-pro │ 최고 정확도, Responses API 전용 │
└─────────────────┴──────────────────────────────────────────────────────┘
이용 가능 채널:
• API: Responses API / Chat Completions API
• ChatGPT: Plus / Pro / Business / Enterprise (gpt-5.5-pro는 Pro·Business·Enterprise)
• Codex: gpt-5.5 기반으로 자율 엔지니어링 작업 처리
GPT-5.5 사용 예시
Python (gpt-5.5 기본)
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-5.5",
messages=[{
"role": "user",
"content": "이 파이썬 함수의 버그를 찾고 수정해줘"
}]
)
print(response.choices[0].message.content)
Python (gpt-5.5 Thinking 모드)
# Thinking 모드: reasoning.effort를 높여 심층 추론 활성화
response = client.chat.completions.create(
model="gpt-5.5",
reasoning_effort="high",
messages=[{
"role": "user",
"content": "복잡한 알고리즘 설계 문제를 단계별로 해결해줘"
}]
)
Python (gpt-5.5-pro, Responses API)
# gpt-5.5-pro는 Responses API 전용
response = client.responses.create(
model="gpt-5.5-pro",
input="GitHub 이슈를 분석하고 자동으로 PR을 작성해줘",
tools=[{"type": "code_interpreter"}]
)
GPT-5.5 vs Claude Opus 4.7 비교:
- SWE-bench 전체: GPT-5.5 88.7% > Claude Opus 4.7
- SWE-Bench Pro (실제 이슈 해결): Claude Opus 4.7 64.3% > GPT-5.5 58.6%
- 가격: GPT-5.5 $5/$30 vs Claude Opus 4.7 $5/$25 (유사)
- 컨텍스트: 동일 1M 토큰
비용 관리
가격 개요
가격
실시간 API (2026-04-23 기준):
┌──────────────────┬──────────┬──────────┬──────────────┐
│ 모델 │ 입력 │ 출력 │ 비고 │
├──────────────────┼──────────┼──────────┼──────────────┤
│ gpt-5.5 ★ │ $5.00/1M │ $30.00/1M│ 최신 플래그십│
│ gpt-5.5-pro ★ │ $30.00/1M│ $180.00/1M│ 최고 정확도 │
│ gpt-5.4 │ $2.50/1M │ $15.00/1M│ 이전 플래그십│
│ gpt-5.4-mini │ $0.75/1M │ $4.50/1M │ Standard │
│ gpt-4.1 │ 변동/1M │ 변동/1M │ 변동 │
│ o3 │ 변동/1M │ 변동/1M │ 변동 │
│ o4-mini │ 변동/1M │ 변동/1M │ 변동 │
└──────────────────┴──────────┴──────────┴──────────────┘
예시: 2K input + 500 output
배치 API (50% 할인):
┌──────────────────┬──────────┬──────────┐
│ gpt-5.5 │ $2.50/1M │ $15.00/1M │
│ gpt-5.4 │ $1.25/1M │ $7.50/1M │
│ gpt-5.4-mini │ $0.375/1M│ $2.25/1M │
│ gpt-4.1 │ 변동/1M │ 변동/1M │
└──────────────────┴──────────┴──────────┘
비용 추적
Python
class CostTracker:
PRICING = {
"gpt-5.5": (5.00, 30.0),
"gpt-5.5-pro": (30.0, 180.0),
"gpt-5.4": (2.50, 15.0),
"gpt-5.4-mini": (0.75, 4.50),
"gpt-4.1": (2.0, 8.0),
"o3": (2.0, 8.0),
"o4-mini": (1.10, 4.40),
}
def __init__(self):
self.total_cost = 0.0
def track(self, response):
model = response.model
input_tokens = response.usage.prompt_tokens
output_tokens = response.usage.completion_tokens
input_price, output_price = self.PRICING.get(model, (0, 0))
cost = (input_tokens * input_price + output_tokens * output_price) / 1_000_000
self.total_cost += cost
print(f"Request cost: ${cost:.6f}")
print(f"Total cost: ${self.total_cost:.6f}")
return cost
# 사용
tracker = CostTracker()
response = client.chat.completions.create(
model="gpt-5.4",
messages=[{"role": "user", "content": "안녕"}]
)
tracker.track(response)
비용 최적화 팁
최적화
// 1. 올바른 모델 선택
간단한 작업 → gpt-5.4-nano / gpt-4.1-nano
일반 작업 → gpt-5.4-mini / gpt-4.1
복잡한 추론 → o3 / gpt-5.4
// 2. 배치 API 활용
대량 처리 시 50% 절감
// 3. max_tokens 제한
response = client.chat.completions.create(
model="gpt-5.4",
max_tokens=500, # 출력 제한
...
)
// 4. 불필요한 컨텍스트 제거
• 오래된 대화 내역 삭제
• 요약 후 긴 컨텍스트 제거
// 5. 사용량 제한 설정
OpenAI 대시보드에서 월간 예산 제한 설정
// 6. Semantic Caching (외부)
동일/유사 쿼리 캐싱 (Redis, Pinecone 등)
모범 사례
권장사항
// 1. 에러 처리
from openai import OpenAI, APIError, RateLimitError
import time
def call_with_retry(client, **kwargs):
max_retries = 3
for i in range(max_retries):
try:
return client.chat.completions.create(**kwargs)
except RateLimitError:
if i < max_retries - 1:
time.sleep(2 ** i) # 지수 백오프
else:
raise
except APIError as e:
print(f"API Error: {e}")
raise
// 2. 타임아웃 설정
client = OpenAI(timeout=30.0) # 30초
// 3. API 키 보안
import os
api_key = os.getenv("OPENAI_API_KEY")
// 4. 프롬프트 최적화
• 명확하고 구체적인 지시
• Few-shot 예시 활용
• 출력 형식 명시
// 5. 모니터링
• 사용량 대시보드 정기 확인
• 비정상 패턴 감지
• 예산 알림 설정
Codex 연계
OpenAI API를 활용해 Codex와 같은 코딩 에이전트 워크플로우를 구성할 수 있습니다. Codex의 개요와 보안 흐름은 전용 가이드를 참고하세요.
Codex는 코드 작성/수정/테스트를 수행하는 코딩 에이전트이며, 클라우드 샌드박스에서 병렬 작업을 수행하거나 CLI/IDE에서 로컬로 작업할 수 있습니다.
다중 LLM 전략: OpenAI API를 Claude, Ollama와 함께 사용하면 비용, 성능, 가용성을 동시에 최적화할 수 있습니다.
- 다중 LLM 라우팅 전략 — 3-Tier 라우팅으로 자동 분기
- LiteLLM 하이브리드 설정 — 하나의 엔드포인트로 통합 운영
핵심 정리
- OpenAI API 가이드의 핵심 개념과 흐름을 정리합니다.
- OpenAI API 개요를 단계별로 이해합니다.
- 실전 적용 시 기준과 주의점을 확인합니다.
실무 팁
- 입력/출력 예시를 고정해 재현성을 확보하세요.
- OpenAI API 가이드 범위를 작게 잡고 단계적으로 확장하세요.
- OpenAI API 개요 조건을 문서화해 대응 시간을 줄이세요.