Joonmook 프로필 사진

@Joonmook

Blog

Sora API가 꺼졌다: 남의 API 위에 서비스를 올린다는 것

Sora API가 꺼졌다: 남의 API 위에 서비스를 올린다는 것 썸네일

9월 24일, OpenAI의 Sora API가 꺼졌다. Videos API와 sora-2, sora-2-pro, 그리고 날짜가 붙은 스냅샷까지 전부 API에서 빠졌다. 공지는 3월 24일에 나왔고, 앱과 웹은 그보다 먼저 4월 26일에 닫혔다. 그리고 닷새 뒤인 9월 29일 DevDay에서 OpenAI가 무대에 올린 건 영상이 아니라 "상시 실행 에이전트" Dots였다. 회사의 관심이 어디로 옮겨갔는지 꽤 선명하게 보이는 한 주였다.

나는 Sora를 쓰지 않았다. 그래도 이 소식이 남 일 같지 않았던 건, 혼자 만드는 서비스는 거의 전부 남의 API 위에 서 있기 때문이다. 결제, 메일, 지도, 그리고 요즘은 LLM. 그래서 이번 일을 보면서 정리한 생각을 적어둔다.

6개월은 짧지 않았다. 문제는 갈 곳이 없었다는 것

공지부터 종료까지 6개월이면 넉넉한 편이다. 그런데 보통의 지원 중단은 "v1을 내리니 v2로 옮겨라"다. 마이그레이션 가이드가 있고, 고생스러워도 길이 있다. 이번엔 공식 후속 모델이 없었다. 지원 중단 페이지에도 대체 모델이 적혀 있지 않다. 버전 교체가 아니라 기능 자체가 사라진 것이다.

이 차이가 크다. 버전 교체는 코드를 고치면 되지만, 기능 소멸은 제품을 고쳐야 한다. 다른 업체의 영상 모델로 옮기면 프롬프트 감각, 결과물 품질, 가격, 속도가 전부 달라진다. 사용자가 보는 결과가 바뀌니 사실상 기능을 다시 만드는 일이다.

그래서 미리 해둘 수 있는 것들

거창한 멀티 벤더 아키텍처 얘기가 아니다. 혼자서도 하루 이틀이면 해둘 수 있는 것들이다.

1. 외부 API 호출은 한 파일에 모은다

SDK 호출이 컨트롤러 여기저기 흩어져 있으면, 교체할 때 그걸 찾는 데만 반나절이 간다. 내 코드가 원하는 동작을 이름으로 정하고, 업체 SDK는 그 뒤에 숨긴다.

// services/video.js — 앱은 이 함수만 안다
async function generateVideo({ prompt, seconds }) {
if (!features.video) throw new FeatureDisabledError('video');
return provider.generate({ prompt, seconds }); // 업체가 바뀌면 여기만
}

이렇게 해두면 업체를 바꿀 때 고칠 곳이 한 군데고, 뭘 바꿔야 하는지 목록이 바로 나온다.

2. 끄는 스위치를 먼저 만든다

대체재를 당장 못 찾을 수도 있다. 그때 필요한 건 우아한 실패다. 기능 플래그 하나로 버튼을 숨기고 "잠시 제공하지 않는 기능"이라고 안내하는 것과, 종료일 아침에 500이 쏟아지는 것은 사용자 입장에서 전혀 다른 경험이다. 플래그는 환경변수 하나로도 충분하다.

3. 만들어진 결과물은 내 저장소에 둔다

생성형 API의 결과물을 업체가 준 URL 그대로 DB에 저장하는 경우가 많다. 그 URL은 만료되거나, 서비스가 닫히면 같이 사라진다. 사용자가 만든 결과물은 받자마자 내 스토리지로 옮겨야 서비스가 닫혀도 남는다.

4. 공지가 나한테 오는 길을 확인한다

지원 중단 공지는 보통 계정 이메일로 온다. 그 계정이 가입할 때 쓴 옛 메일이면 공지를 못 보고 지나간다. 쓰는 API마다 알림 받는 주소가 지금 읽는 메일인지, 지원 중단(deprecations) 페이지가 어디 있는지 한 번 확인해 두면 된다. 혼자 운영하면 "그거 곧 내려간대" 하고 알려줄 동료가 없다.

5. 대체 후보를 한 번은 실제로 돌려본다

"여차하면 B로 옮기면 되지"는 B를 한 번도 호출해 보지 않았다면 계획이 아니라 희망이다. 키를 발급받고, 같은 입력으로 결과와 응답 시간, 비용을 한 번 비교해 두는 것만으로도 위기 때 판단이 훨씬 빨라진다.

Dots를 보며 든 생각

같은 주에 발표된 Dots는 각자 클라우드 컴퓨터와 브라우저를 갖고 계속 돌아가는 에이전트다. 수천 개 앱에 연결해서 일을 맡기는 구조라고 한다. 편해 보인다. 동시에, 내 업무 흐름이 통째로 한 회사의 제품 위에 올라간다는 뜻이기도 하다. Sora가 반년 만에 정리되는 걸 본 직후라 더 그렇게 보였다.

새 도구를 쓰지 말자는 얘기가 아니다. 나도 쓸 거다. 다만 붙일 때 "이게 내일 사라지면 뭐가 멈추나"를 한 줄 적어두는 습관이면 충분하다고 생각한다.

그래서

지난 글에서 혼자 운영할수록 스크립트가 리뷰어 역할을 해야 한다고 썼다. 외부 API도 비슷하다. 알려줄 사람이 없으니 구조가 대신 버텨줘야 한다. 호출은 한 곳에, 끄는 스위치는 미리, 결과물은 내 쪽에. 이번 주에 이 세 가지만 점검해 볼 생각이다.

Comments 0

No comments yet. Be the first!

← Back to Blog