바이브 코딩을 하는 가장 큰 이유는 아마도 개발 생산성 향상 일 것이다. 그래서인지 바이브 코딩을 하면서 자연스럽게 "어떻게 하면 효율을 더 높일 수 있을까?"를 고민하게 된다. 직접 코드를 작성하지 않으니, 그만큼 남는 시간을 프로세스 개선에 투자하게 되는 셈이다. 지난 포스팅에서 앱과 서버를 함께 개발할 때 명세 문서를 작성하고, 이를 기반으로 AI 에이전트에게 개발을 지시하는 방식을 소개했었다. 오늘은 이 방식을 실제로 사용하면서 겪었던 불편함과, 그것을 어떻게 개선했는지 이야기해보려 한다. 기존 개발 환경 앱에 기능을 추가하다 보니 서비스가 하나가 아니라 여러 개가 되었다. 당시 내 개발 환경을 간단히 그려보면 이런 구조였다. 개발 Macbook └─ 앱 프로젝트/ ├─ docs/ └─ src/ Ubuntu 서버 ├─ server1 프로젝트/ │ ├─ docs/ │ └─ src/ └─ server2 프로젝트/ ├─ docs/ └─ src/ iOS 앱 개발은 어쩔 수 없이 Mac에서 해야 했다. 서버는 DB도 돌려야 하고, 실제 운영 환경과 동일한 조건에서 개발하는 게 나을 것 같아 Ubuntu에서 진행했다. Macbook 용량도 부족한데 DB 서버를 계속 띄워놓기도 부담스러웠고, 초기에 API 서버가 PHP + Apache 조합이었던 것도 분리한 이유 중 하나였다. 기존 개발 프로세스 새로운 기능을 추가하거나 수정할 때는 이런 순서로 작업했다. VS Code에서 앱 프로젝트를 열고, Claude를 이용해 명세를 작성 한다. 작성된 명세를 구현이 필요한 각 프로젝트의 docs 폴더에 복사 한다. VS Code에서 각 프로젝트를 연다. 서버의 경우 VS Code의 원격 연결을 이용한다. 각 프로젝트에서 Claude를 실행하고, docs 폴더의 명세를 기반으로 개발을 지시 한다. 문제점 문제...
flutter로 개발중인 앱을 앱스토어 배포를 위해서 준비중에 아래와 같은 오류를 접하게 되었습니다. App Store Connect Operation Error ITMS-90205: Invalid Bundle. The bundle at 'App.app/PlugIns/AppExtension.appex' contains disallowed nested bundles. App Store Connect Operation Error ITMS-90206: Invalid Bundle. The bundle at 'App.app/PlugIns/AppExtension.appex' contains disallowed file 'Frameworks'. App Extension 모듈이 Frameworks 폴더를 내포하고 있는 경우에 발생하는 오류 입니다. App Extension 모듈에서 내포하고 있는 Frameworks를 살펴보니 Flutter.framework와 App.framework 였습니다. 두 개의 framework을 참조하는 이유는 App Extension의 구현 자체는 swift로 구현되어 있기는 하지만, flutter를 이용해서 구현된 App과 리소스를 공유하는 부분이 있는데 이 리소스가 flutter의 assets에 포함되어 있어서 참조가 발생했습니다. App Extension에서 flutter의 assets에 등록된 파일을 읽기 위해서 아래와 같은 방식으로 구현되었습니다. 참고 : https://docs.flutter.dev/development/ui/assets-and-images#loading-flutter-assets-in-ios let flutterEngine = FlutterEngine(name: "WidgetViewController") flutterEngine.run() let flutterViewCont...