SMART LOTTO 개발기 8편 — Claude Code로 앱을 다시 태어나게 하다

계획은 단순했다
앱은 실행된다. 화면이 보인다. 기능이 뭔지 알고 있다.
그러면 다시 만들 수 있다.
다만 이번엔 방법을 바꾸기로 했습니다.
왜 Flutter였나
기존 앱은 Swift UIKit으로 만든 iOS 전용이었습니다. 이걸 다시 Swift로 만들어도 됐지만, 이왕 처음부터 다시 시작하는 거라면 Android도 함께 지원하고 싶었습니다.
크로스 플랫폼 선택지는 Flutter와 React Native가 대표적입니다. 둘 다 경험이 있었지만, 이 앱의 성격—차트, 애니메이션, 커스텀 UI—에는 Flutter가 더 맞다고 판단했습니다. Flutter는 렌더링을 직접 처리하기 때문에 플랫폼 간 일관된 UI를 만들기 쉽습니다.
그리고 결정적으로: 이번에는 코드 작성 방식도 바꾸고 싶었습니다.
Claude Code와 함께
처음에 방대한 기능을 혼자 다 구현하려면 오래 걸립니다. 특히 로또 통계 로직 같은 경우, 데이터 구조 설계부터 알고리즘까지 꼼꼼하게 짜야 합니다.
Claude Code를 이 프로젝트에 적극적으로 활용하기로 했습니다.
방식은 이랬습니다. 기존 앱을 실행하면서 화면과 기능을 하나씩 확인합니다. 그리고 그 내용을 Claude Code에 설명하고, 함께 코드를 작성합니다. 단순히 코드를 생성시키는 게 아니라, 알고리즘을 논의하고 데이터 흐름을 설계하는 과정에서 같이 생각하는 파트너로 활용했습니다.
예를 들어 조건 기반 번호 생성 로직.
"고정수, 제외수, 홀짝 비율, 합계 범위, 끝수 조건을 전부 만족하는 6개 번호를 뽑는 알고리즘을 어떻게 짜면 좋을까?"
이런 질문에 Claude Code는 여러 접근 방식을 제안해주고, 각각의 트레이드오프를 설명해줬습니다. 저는 그 중에서 판단하고 선택했습니다.
새 API 연동
기존 앱의 버그 원인이었던 동행복권 API 문제도 이번에 해결했습니다.
동행복권 사이트가 개편되면서 새로운 데이터 접근 방식이 생겼습니다. 이를 찾아서 적용했고, 매주 새 회차가 안정적으로 반영되는지 충분히 테스트한 뒤 배포했습니다.

2026년 6월 11일 오전 1시 51분
버전 1.2.0. 새로운 UI/UX와 함께 앱이 다시 세상에 나왔습니다.
소스코드를 잃은 날로부터 몇 달 만에 더 나은 앱으로 돌아온 겁니다.
이전 버전의 모든 기능이 그대로 있습니다. 통계, 조건 기반 번호 생성, 명당 판매점. 여기에 UI를 전면 개선하고, 성능도 다듬었습니다.
소스코드 분실이 오히려 기회였다
아이러니하게도, 소스코드를 잃은 게 앱을 더 좋게 만드는 계기가 됐습니다.
기존 코드가 있었다면 거기서 부분 수정을 했을 겁니다. 하지만 처음부터 다시 짜면서 예전 코드에서 어설프게 만들었던 부분들을 제대로 다시 설계할 수 있었습니다.
실패한 상황을 기회로 전환한 케이스입니다. 언제나 그렇게 되는 건 아니지만, 이번엔 그랬습니다.
다음 편에서는 이 앱을 Android에 출시하면서 마주친 예상치 못한 벽을 이야기해보겠습니다.