2026년 8월 26일, Assistants API로 돌아가던 서비스가 아무 예고 없이 멈춥니다. 지금이 마이그레이션할 마지막 여유 있는 타이밍입니다.
핵심 요약
→ OpenAI Assistants API, 2026년 8월 26일 완전 종료 — 이후 /v1/assistants, /v1/threads 엔드포인트 전면 차단
→ 2025년 8월 26일 deprecation 공지 → 정확히 1년 유예 후 하드 셧다운
→ 연장 없음 — OpenAI 공식 확인: "extension option 없다"
→ Azure OpenAI Assistants API도 동일 날짜 종료 (초기 안전하다는 정보는 이미 번복됨)
→ 공식 마이그레이션 경로: Responses API + Conversations API
→ Responses API가 Assistants API보다 빠르고, MCP·딥리서치·컴퓨터 사용 등 신기능 모두 여기서만 제공
→ 개념 매핑: Assistant 객체 → Prompt, Thread → Conversation, Run 폴링 루프 → 단순 요청-응답
→ Azure 사용자 마이그레이션 경로: Microsoft Foundry Agents 서비스
→ MCP(Model Context Protocol)는 Responses API의 퍼스트클래스 시민 — 툴 연동 방식 자체가 바뀜
→ 지금 당장 해야 할 것: 의존 서비스 파악 → 8월 전 프로토타입 → 6월 중 마이그레이션 시작 권장
실전 1 — 타임라인 완전 정리
2024년 12월 18일 → Assistants API v1 베타 접근 종료 (v2만 유지)
2025년 3월 → Responses API 출시 (Chat Completions 후계자)
2025년 8월 26일 → Assistants API deprecation 공식 공지
2026년 현재 → Assistants API 작동 중이지만 신기능 투자 없음
2026년 8월 26일 → 하드 셧다운 (요청 즉시 실패)
지금 남은 시간: 약 83일
이게 생각보다 짧습니다. 프로덕션 서비스라면 테스트·QA·스테이징 배포까지 포함하면 지금 바로 시작해야 해요.
실전 2 — Assistants API vs Responses API 개념 매핑
가장 헷갈리는 부분입니다. 객체 모델 자체가 바뀌었어요.
Assistants API Responses API 설명
| Assistant 객체 생성 | Prompt (대시보드) 또는 system 파라미터 | 어시스턴트 설정을 객체로 만들던 것 → 요청 파라미터로 |
| Thread 생성 | Conversation 객체 | 대화 히스토리 저장 단위 |
| Message 추가 | input 파라미터 직접 전달 | 메시지를 스레드에 쌓던 것 → 요청에 직접 |
| Run 생성 + 폴링 | 단순 POST /v1/responses | 비동기 폴링 루프 → 동기 요청으로 단순화 |
| Run Step 조회 | output 배열 | 실행 단계 추적 방식 변경 |
| File 업로드 → 어시스턴트 연결 | file_search 툴에 직접 연결 | 파일 관리 방식 변경 |
핵심 변화 한 줄:
→ 서버에 상태를 저장하는 복잡한 객체 모델 → 요청-응답 중심의 단순한 모델
실전 3 — 코드 직접 비교
기존 Assistants API 코드
import openai
client = openai.OpenAI()
# 1. 어시스턴트 생성 (또는 기존 ID 사용)
assistant = client.beta.assistants.create(
name="고객 지원 봇",
instructions="친절한 고객 지원 담당자입니다.",
model="gpt-5.4",
tools=[{"type": "file_search"}]
)
# 2. 스레드 생성
thread = client.beta.threads.create()
# 3. 메시지 추가
client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="환불 정책이 어떻게 되나요?"
)
# 4. Run 생성
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id
)
# 5. 폴링 루프 (Run 완료 대기)
import time
while run.status != "completed":
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
# 6. 메시지 조회
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
print(messages.data[0].content[0].text.value)
→ 객체 6개 생성, 폴링 루프, 복잡한 상태 관리 필요
신규 Responses API 코드
import openai
client = openai.OpenAI()
# 첫 번째 요청
response = client.responses.create(
model="gpt-5.4",
instructions="친절한 고객 지원 담당자입니다.",
input="환불 정책이 어떻게 되나요?",
tools=[{"type": "file_search",
"vector_store_ids": ["vs-abc123"]}]
)
print(response.output_text)
# 이어지는 대화 (Conversations API로 상태 유지)
response2 = client.responses.create(
model="gpt-5.4",
instructions="친절한 고객 지원 담당자입니다.",
conversation_id=response.conversation_id, # 이전 대화 연결
input="그럼 교환은요?"
)
print(response2.output_text)
→ 폴링 루프 없음, 코드 절반으로 줄어듦
실전 4 — MCP 연동이 달라진 것
Responses API에서 MCP는 퍼스트클래스 시민입니다. 기존 Assistants API에서는 function calling으로 툴을 직접 구현해야 했지만, 이제 외부 MCP 서버를 직접 연결할 수 있어요.
# Responses API + MCP 서버 연동
response = client.responses.create(
model="gpt-5.4",
input="우리 회사 Jira에서 이번 주 내 담당 이슈 보여줘",
tools=[
{
"type": "mcp",
"server_label": "jira",
"server_url": "https://your-jira-mcp-server.com/sse",
"allowed_tools": ["get_issues", "create_issue"]
}
]
)
기존 방식 vs 새 방식:
❌ 기존 Assistants API: Jira 연동 → function calling 정의 → 클라이언트에서 실행 → 결과 다시 전달 (수동 루프)
✅ Responses API + MCP: MCP 서버 URL만 넣으면 모델이 직접 호출
OpenAI가 Responses API로 마이그레이션하면서 MCP를 네이티브로 지원하기 시작한 것은, 대형 AI 기업들이 MCP를 에이전트-툴 통신의 기본 프로토콜로 인식하고 있다는 신호입니다. Linux Foundation으로 MCP 거버넌스가 이전됐고 OpenAI·Google·Microsoft·AWS·Cloudflare가 공동 창립사로 참여했습니다.
실전 5 — Azure 사용자 별도 마이그레이션 경로
Azure OpenAI를 쓰는 경우 경로가 다릅니다.
초기에는 Azure OpenAI가 영향을 받지 않는다는 안내가 있었지만, 이는 변경됐습니다. Azure OpenAI Assistants API도 동일하게 2026년 8월 26일 완전 종료됩니다. Azure 기반 솔루션을 운영 중이라면 Microsoft Foundry Agents 서비스로 마이그레이션해야 합니다.
Azure 마이그레이션 경로:
기존: Azure OpenAI Assistants API
↓
신규: Azure AI Foundry → Foundry Agent Service
(Responses API 기반으로 구축됨)
Azure 공식 마이그레이션 가이드: → https://learn.microsoft.com/azure/ai-foundry/openai/concepts/assistants
실전 6 — 단계별 마이그레이션 플랜
남은 83일 분배 권장:
기간 작업
| 6월 1~2주차 (지금) | 의존 서비스 전체 파악, 마이그레이션 규모 산정 |
| 6월 3~4주차 | Responses API 프로토타입, 핵심 워크플로우 하나 먼저 전환 |
| 7월 1~2주차 | 전체 마이그레이션 + 테스트, 스테이징 배포 |
| 7월 3~4주차 | 프로덕션 점진적 전환 (feature flag 활용) |
| 8월 1~2주차 | 완전 전환 완료, 구 Assistants 코드 제거 |
| 8월 26일 | 종료일 (이때는 이미 완료돼 있어야 함) |
Step 1. 의존 서비스 파악
# 코드베이스에서 Assistants API 사용처 찾기
grep -r "beta.assistants\|beta.threads\|beta.runs" ./src
grep -r "v1/assistants\|v1/threads" ./src
# 사용 중인 기능 목록화
# - File search 쓰나?
# - Code interpreter 쓰나?
# - Function calling 쓰나?
# - 대화 히스토리 유지하나?
Step 2. Responses API 프로토타입
# 기존 어시스턴트 설정 확인
old_assistant = client.beta.assistants.retrieve("asst_abc123")
print(old_assistant.instructions)
print(old_assistant.tools)
# → 이 설정을 Responses API 파라미터로 옮김
response = client.responses.create(
model=old_assistant.model,
instructions=old_assistant.instructions,
tools=converted_tools, # 툴 형식 변환 필요
input=user_message
)
Step 3. 대화 히스토리 유지 (Conversations API)
# 새 대화 시작
response = client.responses.create(
model="gpt-5.4",
instructions="...",
input="안녕하세요"
)
conv_id = response.conversation_id # 저장
# 이어지는 대화
response2 = client.responses.create(
model="gpt-5.4",
instructions="...",
conversation_id=conv_id, # 이전 대화 이어받기
input="어제 말한 것 기억해?"
)
실전 7 — 자주 놓치는 함정
마이그레이션 시 검증해야 할 것들: 스트리밍 시맨틱, 런 단계 라이프사이클, 파일 검색 동작, 에러 코드 등이 Assistants와 Responses 사이에서 달라질 수 있습니다.
1. File Search 동작 차이
# 기존: 어시스턴트에 벡터 스토어 연결
assistant = client.beta.assistants.update(
assistant_id="asst_abc",
tool_resources={"file_search": {"vector_store_ids": ["vs-abc"]}}
)
# 신규: 요청마다 직접 지정
response = client.responses.create(
model="gpt-5.4",
tools=[{
"type": "file_search",
"vector_store_ids": ["vs-abc"] # 요청마다 명시
}],
input="..."
)
# 주의: 파일 검색 비용은 별도 과금
2. 비동기 작업 처리 (Background Mode)
# 긴 작업은 Background mode 활용
response = client.responses.create(
model="gpt-5.4",
input="이 1000페이지 문서 전체 분석해줘",
background=True # 비동기 실행
)
job_id = response.id
# 나중에 결과 조회
result = client.responses.retrieve(job_id)
3. 스트리밍
# Responses API 스트리밍
with client.responses.stream(
model="gpt-5.4",
input="긴 답변 생성해줘"
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
✅ 지금 당장 해야 할 것 / ❌ 미루면 안 되는 이유
✅ 지금 해야 할 것 ❌ 미루면 안 되는 이유
| 코드베이스에서 Assistants API 사용처 전수 조사 | 8월 26일 이후 요청 즉시 실패 — 서비스 다운 |
| Responses API 공식 문서 숙지 | 연장 옵션 없음 — OpenAI 공식 확인 |
| 핵심 워크플로우 하나 먼저 프로토타입 | 마이그레이션 + QA + 프로덕션 배포에 최소 4~6주 필요 |
| Azure 사용자라면 Foundry Agents 마이그레이션 가이드 확인 | Azure도 동일 날짜 종료 (초기 안전하다는 정보 번복됨) |
'GPT' 카테고리의 다른 글
| OpenAI Codex 완전가이드 5편 — 가격 구조, CI/CD 자동화, Claude Code vs Codex 최종 비교 (0) | 2026.06.01 |
|---|---|
| OpenAI Codex 완전가이드 4편 — Codex App 설치, Cloud 백그라운드 작업, MCP 서버 연동 실전 (0) | 2026.06.01 |
| OpenAI Codex 완전가이드 3편 — Git Worktree 병렬 에이전트: 기능 3개 동시 구현, 충돌 없이 머지까지 (0) | 2026.06.01 |
| OpenAI Codex 완전가이드 2편 — 승인 모드 3가지, 샌드박스, AGENTS.md 프레임워크별 예시 (0) | 2026.06.01 |
| OpenAI Codex 완전가이드 1편 — Codex 개요, OS별 설치, 첫 세션까지 따라하기 (0) | 2026.06.01 |