스펙주도개발로 xib프로젝트를 swiftui 프로젝트로 리뉴얼하기

#SDD#스펙주도개발#xib#swiftui

앱 소개페이지에 있는 소리성경은 무척 오래된 프로젝트다.

첫 개발은 objective-c 였다.

어떻게든 회사에서 만든 앱이 아닌 내 이름으로 된 내 앱을 갖고 싶었다.

산 지 5년이 넘어가던 맥북에어로 간신히 간신히 만들어냈다.

그 때의 희열이란.

그리고 나서 날 위한 보상으로 맥북프로를 샀더랬다.


이후 swift와 rxswift를 기반으로 한 프로젝트를 진행한후 swift와 react에 좀 더 적응하고 싶어서

소리성경을 swift로 리뉴얼했다.

그러면서 rxflow도 접목해 어설픈 MVC프로젝트를 멋지게 MVVM-C 아키텍쳐로 구성했다.

그러면서 잠언 구독 기능도 추가했다.

유료 기능을 넣으려면 사업자등록과 통신매매 등록이 필수라 그 때 처음 사업자등록을 했다.

홍보를 안하니 아무도 안써서... 나와 내 친구 둘이서 읽고 있는 정도의 수익이다.

유지하는 것도 마이너스인데, 인앱결제조차 마이너스란 이야기다.

그래도 좋았다. 내 첫 앱이고, 남들이 잘 못하는 objective-c 프로젝트를 swift로 바꾸는 작업을, 작은 프로젝트지만 수행해 냈으니까.


이후 회사 업무에 집중하다 보니 swiftui가 점점 발전해왔다.

회사 앱은 xib와 rxswift 기반이었고, 뷰가 훨씬 많아서 바꿀 엄두를 내지 못했다.

그리고 퇴사하기도 했고.

그러면서 자연스럽게 다시 소리성경 앱에 눈을 돌렸다.

이걸 다시 리뉴얼해보자.

[올해의 말씀] 기능이 번뜩 떠올라서 먼저 추가했다.

그리고 swiftui를 탐구하다가, TCA를 보게 되었다.

재작년 초에 시작했나 그랬던 것 같은데.

mvvm 변환도 해봤으니, 이것도 쉬울거라 생각하고 호기롭게 시작했지만, 생각보다 TCA의 벽은 높았다.

머리를 싸매고 매일 매일 짧게 작업했지만, 며칠 작업을 건너뛰면 이전 작업과 TCA의 내용을 다 잊어먹기 일쑤였다.

너무 복잡했다.

1년간 질질 끌다가, 다시 맘 잡고 시작해보려던 그 때, chatgpt가 나와버렸다.

그냥 하루종이 가지고 놀아도 재미있었다.

다시 소리성경은 뒷전이 되었고, 그 사이 여러 프로젝트를 진행했다.

제일 처음 ai와 만들었던 프로젝트는 meta api를 사용하는 프로젝트였는데, 심사제출까지 했으나, meta쪽에 api access 관련한 추가권한신청이 필요했고,

거기서 막히는 바람에 짜증이 확 밀려와 잠정 중단했다.

메타 놈들.. 부들부들..

그 다음 만든게, 찰칵캘린더.

그리고 두세가지 프로젝트를 진행하다가 갑자기 뚝딱하고 Snow Focus와 주식자동매매 프로젝트를 만들어버렸다.

지금도 내 모니터에는 찬찬히 눈이 내리고 있고, 주식자동매매도 곧 시작할 예정이다.


그러면서 익힌게 SDD, Spec Driven Development다.

그 흔한(?) TDD조차 해보지 못했던 내가 처음으로 성공한 주도개발론.

제미나이: SDD로 개발한건 나지, 니가 아니야

라고 할 것만 같지만... 하하하.

주식 자동 매매를 SDD로 개발했다.

그리고 이걸로 방치해두었던 소리성경을 xib에서 swiftui로 바꾸는, 기존 프로젝트를 수정하는 작업을 SDD룰 사용했다.

그 전에 gemini나 claude를 사용해서 안해본게 아니다.

그래도 10개가 넘는 뷰가 있고, 그 뷰들이 xib이다 보니, ai가 완벽하게 읽어내지 못했다.

엉망으로 UI가 만들어지기 일쑤고, UI 작업은 오래전에 지인에게 부탁해 만들었다보니 다시 부탁하기 어려웠다.

결국 오늘에 이르러서야, 스펙주도개발을 사용하여, 스펙을 정의하고, 문제 정의와 플랜을 세운뒤 테스크로 순차적으로 실행하여

모든 UI를 완벽하게...

아, 잠깐. 버그가 좀 많네?



크흠.

약간의 버그가 있었지만 그것들은 ai에게 조금 자세히 설명해서 모두 수정되었다.

아직 speckit.implement 실행 후 버그 수정해달라고 요청했을 떄, spec를 읽어가며 수정했는지 로그를 보지 않아 알 수는 없지만,

내가 요청한 대로 UI 버그, UX 버그를 수정해주었다.

xib와 viewcontroller들은 이제 안녕~


물론 다 끝난건 아니다.

rxswift와 rxcocoa의 잔재가 남아있고, @main 어노테이션도 AppDelegate에 걸려있다.

main이 무엇이든 상관은 없다만, 그래도 최신 방식으로 수정하고 싶다.

이게 끝나고 나면 계획해두었던 다른 기능들을 순차적으로 붙여나갈 수 있을 것 같다.

AI를 활용하고, vibe coding으로 개발해 나간다면, 정말로 개인 앱 100개는 꿈이 아닐지도 모르겠다.

Discussion

Loading comments...