애플의 시대착오적 앱스토어 규칙과 AI 코딩의 충돌
애플이 AI 코드 생성 앱에 대해 앱 내에서 외부 코드를 실행하거나 기능을 변경할 수 없다는 기존 앱스토어 규정(2.5.2항)을 내세워 업데이트를 차단하고 있다. 검토 시점의 정적인 소프트웨어를 전제로 하는 기존 규정이, 런타임에 AI 모델을 통해 동적으로 변화하는 새로운 패러다임의 소프트웨어와 충돌하는 현상이다. 이는 단순한 애플의 규제 문제를 넘어, 현대의 모든 소프트웨어 배포 및 버전 관리 시스템이 '출시된 소프트웨어는 고정되어 있다'는 근본적인 전제 위에 세워져 있음을 보여준다.
래퍼(Wrapper)와 코드: 애플의 바이브 코딩(vibe coding) 단속이 고정되지 않는 소프트웨어와 어떻게 충돌하는가 Iris, 2026년 5월 5일
1 공유
1월 이후, Replit의 iOS 앱은 동일한 버전에 머물러 있다. 순위는 계속 하락하고 있다. 애플의 무료 개발자 도구 카테고리에서 1위에서 2위로, 그리고 3위로 밀려났다. 3월, The Information은 현재 상황이 어떻게 진행되고 있는지 보도했다. 애플은 Replit과 Vibecode를 포함한 여러 AI 코딩 앱의 업데이트를 차단했다. 인용된 규칙은 앱스토어 심사 지침 2.5.2항이었다. 앱은 번들 내에 자체적으로 포함되어야 하며, "기능이나 특성을 도입하거나 변경하는 코드를 실행"해서는 안 된다는 내용이다. 이 규칙은 수년간 존재해 왔다. 즉, 지금 적용되고 있는 소프트웨어 카테고리보다 그 역사가 더 오래된 규칙이다.
구독하기
보도에 따르면, 애플은 Replit이 iOS 클라이언트 내에서 생성된 앱을 미리 보는 기능을 중단하고 대신 사파리(Safari)에서 열도록 한다면 Replit의 업데이트를 승인할 준비가 되어 있었다. 해결책은 "코드 생성을 중단하라"는 것이 아니었다. 그것은 "심사받은 앱 내부에 생성된 결과물을 보여주지 마라"는 것이었다. 일주일 후, 애플의 단속은 한층 더 강화되었다. 3월 26일, 애플은 동일한 규칙을 들며 'Anything'이라는 앱을 앱스토어에서 완전히 퇴출시켰다. Anything의 공동 창립자인 Dhruv Amin은 애플의 피드백에 응하여 네 가지 다른 기술적 수정 버전을 제출하며 지난 3개월 동안 규정을 준수하기 위해 노력했다. 마지막 시도는 애플이 Replit에 제안했던 것과 정확히 일치했다. 즉, 생성된 앱 미리보기를 인앱 웹뷰 대신 외부 웹 브라우저를 통해 라우팅하는 것이었다. 그럼에도 불구하고 애플은 업데이트를 거부하고 기존 버전을 삭제해 버렸다.
몇 달이 지났지만, 이 교착 상태는 여전히 해결되지 않고 있다. 이 규칙이 실제로 어떤 역할을 하는지 이해하려면, 애플의 입장을 최대한 호의적으로 받아들이는 것이 도움이 된다. 앱스토어의 전제는 제출 시 심사된 결과물이 사용자의 기기에서 실행되는 결과물과 동일하다는 것이다. Replit이 내장된 웹뷰 내에서 생성된 앱을 표시할 때, 심사받은 Replit 바이너리는 사실상 무수히 많은 심사받지 않은 앱을 포함하게 된다. 래퍼(포장지)는 심사받았지만, 그 안의 콘텐츠는 그렇지 않다. 애플의 관점에서 볼 때, 심사는 아무것도 심사하지 않은 것이나 다름없다.
앱스토어가 존재해 온 기간 동안 애플은 인터프리터, 다운로드 가능한 코드, 브라우저 안의 브라우저, 그리고 JavaScript에 크게 의존하는 앱들에 대해 복잡한 규칙을 적용해 왔다. 매번 런타임이 유연해졌고, 플랫폼 소유자는 새로운 선을 그었다. 선은 움직였지만, 그 이면에 있는 전제는 변하지 않았다. 즉, 소프트웨어란 충분히 오래 멈춰 서서 검사할 수 있는 것이라는 믿음이다.
숨겨진 의도라는 질문 아래에는 진정한 인식론적 문제가 존재한다. 애플의 심사관들은 모델에 의해 런타임에 동작이 결정되는 소프트웨어를 평가할 방법이 없다. 기존의 심사 프로세스는 들여다볼 대상조차 없다. 래퍼는 심사할 수 있다. 하지만 심사관이 결코 보지 못한 프롬프트를 사용자가 입력한 후, 새벽 3시에 사용자의 휴대폰에서 그 래퍼가 하는 일은 심사할 수 없다. 심사 가능한 결과물과 실행되는 결과물은 더 이상 같은 종류의 것이 아니다.
이는 심사만의 문제가 아니다. 현대 소프트웨어 배포 스택의 거의 모든 계층이 동일한 전제 위에 구축되었다. 버전 번호는 명확한 계보를 가진 하나의 표준화된 결과물이 있다고 가정한다. 릴리스 노트는 '릴리스'가 있다고 가정한다. "최신 버전을 사용 중인가요?"라는 질문은 '최신 버전'이 존재한다고 가정한다. 버그 리포트는 두 사용자가 동일한 소프트웨어를 보고 있다고 가정한다. 문서는 스크린샷이 일치할 것이라고 가정한다. 재현 가능성은 여러분이 지켜보는 동안 바이너리가 변하지 않는다고 가정한다. 스택의 모든 것은 일단 출시된 소프트웨어는 고정되어 있다는 가정에 기반하고 있다. 앱스토어, 패키지 관리자, 버전 관리, CI/CD 파이프라인, 지원 도구, JIRA 티켓, Stack Overflow 답변, 그리고 "우리는 버전 Y에 X를 출시했습니다"라는 모든 문법이 그러하다.
적응형 소프트웨어(Adaptive software)는 고정되어 있지 않다. 각 사용자의 버전은 다른 사용자의 버전으로부터 즉시, 혹은 몇 주에 걸쳐 서서히 틀어진다. 그 소프트웨어가 더 이상 존재하지 않기 때문에 버그를 재현할 수 없다. 버전 자체가 없기 때문에 "최신 버전"도 존재하지 않는다. 두 사용자는 기능에 대해 의견을 나눌 수 없는데, 왜냐하면