2020. 11. 6. 06:10ㆍAPP/함쓰가계부
배경
지난 8월 말경 Flutter 로 습작앱을 만들었습니다.
저는 네이티브 개발을 해본적이 없습니다.
그런데 또 성격은 급해서 결과물을 빨리 보고 싶었드랬죠. 그래서 찾은게 Flutter 였습니다.
첫번째 앱은 그래.. 얼마나 빠르게 되니? 라는 생각으로 DB나 서버도 없이 파이어베이스만 활용하여 간단한 구구단 학습앱을 만들었습니다. 실제 몇일 안걸렸지요.
이번에는 서비스를 만들어 보고 싶었습니다.
좀 제대로 된 앱을 만들어 보고 싶었어요
계획수립
아내와 함께 생활하면서 몇가지 가계부를 사용해봤습니다. 우리 부부는 제가 메인으로 돈관리를 하면서 각자 카드를 가지고 크게 부담없이 알아서 개인 지출과 공용지출을 관리하고 있습니다. 용돈 개념을 나중에야 도입을 했기 때문에 한참동안 공동관리를 한 셈이지요.
그런데 이게 참 불편했습니다. 같은 예산을 서로 어떻게 돈을 쓰는지를 몰라서지요. 그래서 몇가지 어플을 사용했습니다.
저는 안드로이드, 아내는 아이폰.. 같이 사용할 수 있는 어플이 거의 없었습니다. 있는 것 몇개는 허접했구요.
그러던 뱅크샐러드가 출시하여 사용하기 시작했습니다. 두가지 플랫폼을 모두 지원하고 부부 모두 귀찮은거 싫어하는데 이넘은 정말 대단하더군요. 아무것도 안해도 다 기록해주니까요. 제 계정을 와이프 핸드폰에 인증해주고 같이 사용했습니다.
그러던 중 문제가 생긴것이.. 뱅크셀러드가 멀티 인증을 막았습니다. 금융권 연동을 하다보니 어쩔 수 없었나 봅니다. 문의를 해봤는데 개선 계획중이다라고 하더라구요. 1년동안 기다려봤는데 아직도 안되더군요.
그래서 "함쓰" 를 만들게 되었습니다.
내가 하고 싶은데 만들어보자.
가계부 기능들
목표는 정했고 어떤 기능들을 만들어볼까 고민했습니다. 이기적이게도 너무 많은 기능은 내가 쓰지도 못하고 복잡하니 내가 쓰는 기능만 일단 만들자는게 목표였습니다.
- 소셜 로그인을 지원할 것
- 서로 가계부를 등록하면 바로 알 수 있듯이 푸시를 지원할 것
- 반복되는 고정금액을 관리 할 수 있을것
- 예산 설정 기능? 난 그런거 안써봤으니 제외
- 시작일자 관리? 그런게 왜 필요할까? 역시 내가 안썼으니 제외
- 앱 시작시 귀찮으니 인증은 한번만 받을 것
- 개인정보 처리 귀찮으니 개인정보는 없애고 최소한의 정보만으로 인증을 관리할 것
- 가계부 분류 등록 선택하는 것도 일인데.. 그냥 해시태그마냥 1개씩 입력해서 나중에 내가 자주 입력한 것들을 보여줘서 선택을 쉽게 할것
- 검색 기능이 있을 것
- 서로 공유를 하는 기능을 넣되 나중에 확장을 고려하여 1:1 공유가 아닌 N:N 으로 설계할것
- 한명이 가계부 여러개를 쓰면 혹시 모를 오류를 고려하여 5개로 제한할것
- 광고를 붙여서 수익을 창출할 것. (인앱구매나 판매는 고려하지 않음)
이정도의 두서없는 생각들을 정리해서 구상을 하기 시작했습니다.
시스템 구성
전체적은 시스템 구성은 아래와 같습니다.
-
백앤드
- Python FastApi 라는 프레임워크를 사용했습니다. 사실 이것도 해본적 없는데 최근 파이썬을 해보니 그 단순함에 매료되어 너무 맘에 들더군요. 깊게 공부하지 않아도 결과물이 빠르게 나오니 생산성에 이만한게 없다 싶었습니다. 저는 성격이 급하니까요.ㅋ
- FastAPI 는 이름에서 알수 있듯이 기본적으로 RestApi 기반입니다. 새롭게 만드는 앱인만큼 좋은 구조를 처음부터 가져가고 싶었습니다. 그래서 찾아봤더니 DB는 sqlalchemy 라는 ORM 을 쓰더군요. 좀 해보니 저는 너는 어렵네요. 익숙하지 않은것이지요. 그래서 그냥 쿼리 날리기로 했습니다.
-
DB
- Postgresql 을 사용했습니다. 역시 처음입니다. 학창시절 mysql 좀 써보고 회사에서는 msqql 위주였는데 nosql 은 못쓰겠고 무료RDB중에 오라클과 유사하면서 괜찮다는 평이 많아서 골랐습니다. 특별한 이유는 없습니다만 실제 많은 레퍼런스들이 그 성능과 신뢰성을 검증해 준다고 생각합니다.
-
프론트
- 앱은 당연히 플러터를 사용했습니다.
기술적으로는 이런것들을 고민했습니다.
- 인증은 어떻게 할것인가?
- 고민하다가 카카오 인증을 붙였습니다. 카카오의 토큰으로 매게체로 진행했구요
- 하다보니 애플은 소셜로그인을 사용할때 무조건 자기들 인증도 넣으라는 가이드가 있더군요. 개발 막바지에 부랴부랴 집어넣었습니다.
- 서버는 어떻게 할까?
- 일단 개발 시작은 집에 있는 홈서버로 했습니다. EXSI 를 사용하고 있기 때문에 리눅스를 사양좋게 띄우고 Docker로 구성했지요. 그런데 운영서버를 홈서버로 하기에는 무리가 있다고 생각했습니다.
- 그래서 생각한것이 클라우드 서버입니다. 다양한 서버들이 있는데 최근에 핫하게 보이는 거싱 오라클이었습니다. 낮은 수준의 서버 VM 2개를 무료로 풀고 있더라구요. 서울리전도 있고 평도 나쁘지 않은듯 했습니다.
- 하나 문제는 저는 이러한 서비스를 만들어 본적이 없기 때문에 사양을 어느정도로 할까 였습니다. 결론은 나 외 얼마나 많은 사람들이 사용할지 모르니 일단 무료 수준으로 하고 나중에 업그레이드 하자는 것이었습니다.
- 오라클 서버 한대는 Native 로 DB 를 설치하고 나머지 한대는 Docker 로 api 서버, fcm (푸시) 발송 agent, 배치 프로그램 이렇게 3가지를 올렸습니다. 개발하는 동안에는 나쁘지 않은 속도였지만 실제 프러뎍선으로 올라가면 모르겠습니다. 결과는 열어봐야겠지요
개발 진행
개발은... 좀 힘들었습니다. 9월 초부터 시작했나? 아. 지금 확인해보니 최초 파일 생성일 20년 9월 8일이네요. 현재 앱 심사를 들어가있는 지금 기준으로 총 2달이 약간 안되는 군요. 약 2달이라고 하겠습니다. 저는 일반 회사원입니다. IT 업종이긴 하나 모바일 개발을 하는 부서도 아니고 퇴근후에 공부를 하면서 개발해야 했습니다. 그것도 경험이 별로 없는 Dart, Python, Postgresql 이 세가지를 혼자서 해야 했으니까 시작할때 무척 힘들었습니다. 급한 성격 탓인지 결과를 빨리 보고 싶었습니다. 그런데 나오는게 없으니까 좀 답답하더군요.
시간 투자는 이렇게 했습니다. 처음에는 퇴근후에 9~12시 사이 시간 날때마다 했어요. 필 받으면 1시정도 까지도 했구요. 그렇게 몇일 하다보니 아내가 눈치를 주더군요. 아이들도 좀 챙겨라. 요즘 너무 몰입하고 있는것 같다. 이러면서요.
모든 일이 그렇지만 특히 개발은 집중해서 빠져서 하게 되고 지금 막 쓰던 코드를 마무리 해야 다음 진행이 원활하고 아이디어가 막 나오는데 중간에 멈추기가 너무 비효율적입니다. 필 받을 때 막 치고 나가야지요.
그래도 한 가정의 부모로서 그렇게만 빠져 있을 수 없어서 저녁시간에 하는 시간을 줄이고 새벽에 일어나기 시작했습니다. 5시에 일어나서 딱 1시간씩 하고 출근을 하였지요.
그렇다고 평일 저녁 온전히 안한것은 아니고 아이들이 자는 시간이나 주말등을 이용해서 최대한 시간 투자를 하였습니다.
전혀 개발을 못한 날도 있고 하니 대략 여유있게 하루에 3시간씩 잡아볼까요?
60일가량 걸렸으니 180시간정도 투자한 셈이네요. 약 22일이니 1M/M 가 조금 넘네요.
흠.. 엄청난 결과인것 같네요. 안드로이드와 아이폰 두가지 모두를 지원하는 서비스를 만드는데 1M/M 밖에 안들다니요...
회사에서 진행하는 프로젝트들을 생각해보니... 개발 업체 사장도 해볼만한 것 같네요.
개발 중
개발은 재밌게 하였습니다. 그런데 이런점이 힘들더군요. 백, 프론트를 왔다갔다 해야하고 서버까지 혼자 해야하니 집중이 잘 안되더군요. 그런데 초기에 고생하고 자리 잡히니까 어느정도 적응이 되었습니다. 저는 처음부터 api 서버는 데이터의 이동 창구로만 계획했습니다. 부족한 서버 성능으로 비지니스 로직을 넣는것도 무리라고 생각했고 요즘 핸드폰 성능이 좋으니 사용자에게 부담을 주자는 생각이었지요. 그리고 최근의 개발 트랜드가 마이크로 서비스라면서요? 잘은 모르겠지만 최소단위로 서비스를 쪼개고 의존성을 최소화 하면서 경량으로 만들어야 한다고 생각했습니다. 말은 이렇게 했지만 먼지는 잘 모르겠고 입출력 창구정도가 되었습니다.
리액트 네이티브는 안드로이드가 아이폰 이 같은 코드를 사용하면 디자인이 다르게 나온다고 들었습니다. 각 플랫폼에 맞게 자동으로 나온다더군요? 저는 동일하게 나오는 플러터가 더 좋다고 느꼈습니다. 똑같이 나와야 정확한 결과물을 예측 가능하고 제가 코드로 제어를 할 수 있으니까요. 그점에서는 매우 좋았습니다.
한가지 .. 아쉬운 것은 제가 네이티브 개발자가 아니었다는 것입니다. 네이티브를 모르니 100% 플러터에만 의존하고 pub.dev 의 플러그인들에만 의지해야만 했고 각종 오류가 나타날때도 검색만 하루종일 하게 되더라구요. 네이티브 경험이 있었다면 훨씬 이해가 빠르고 좀 더 나은 방향으로 개발을 했겠다 싶습니다.
그리고 플러터는 카카오 오픈 채팅방이 있습니다. 채팅방이 많이 도움이 되었습니다. 사실 게시판 형식의 커뮤니티가 아니라서 질문 검색도 힘들고 사람들이 답변을 아주 성실히 해주지는 않습니다. 글들이 막 올라가는 채팅방이라서 그런듯 싶습니다. 그러나 늦게라도 질문을 보고 답변 해주시는 분들도 많고 이런저런 대화들도 하다보니 듣는정보도 생기구요. 남들 질문 답변 보다보면 저도 얻는것이 있더군요.
게시판 형식이었다면 일부러 게시물 하나씩 찾아봐야 했겠지만 채팅방이다보니 대화다 생각하고 읽게 되더라구요. 꽤 큰 도움이 되었습니다.
앱 제출
개발을 마무리 하고 어제, 오늘 심사 제출을 했습니다. 참..이것도 일이군요.
스크린샷을 37개를 만들었구요. 스크린샷을 만들어주는 사이트를 이용하여 하긴 했으나 너무너무 귀찮은 일이었습니다.
그래도 어쩌겠어요. 해야죠.ㅋ 스크린샷 만들어 주는 사이트가 해외라 폰트도 맘에 들진 않았지만 그냥 했습니다. 그래도 편하게 만들어주니까요.
일단 올려두고 나중에 버전업 할때 보완해야겠다는 생각입니다.
아이폰과 안드로이드 심사가 일단 까다롭지만 안드로이드는 상대적으로 쉽다고들 하더군요.
어제 둘다 모두 제출을 하고 오늘 아침에 보니 아이폰은 로그인 버튼이 자기네들 디자인과 안맞다고 해서 다시 올렸습니다.
이제 기다려봐야 겠네요.
두서 없이 경험을 정리해 봤는데 글재주가 없어서 정신없네요. 자세한 내용은 본 블로그를 통해서 하나씩 기술적으로 풀어보려고 합니다.
애드몹 얘기도 좀 풀어봐야 겠고 저를 고생시킨 코드들도 정리 차원에서 적어보려 합니다.
아직 심사중이지만 스크린샷 몇개 올려봅니다.
-- 추가 --
아이폰 심사는 통과했군요. 링크추가합니다.
apps.apple.com/kr/app/%ED%95%A8%EC%93%B0/id1538510805
함쓰
함께 쓰는 가계부 - 심플한 수입 / 지출 관리 가계부 어플 - 소셜 로그인 기능 제공 - 카테고리를 선택하는 형식이 아닌 태그 처럼 입력하는 방식 (자주 쓰는 태그를 카태고리처럼 제공) - 가계
apps.apple.com
'APP > 함쓰가계부' 카테고리의 다른 글
카드 문자 인식 추가 - 신한카드 (0) | 2020.11.29 |
---|---|
기능 개선 요청은 언제나 환영합니다. (0) | 2020.11.29 |
함쓰 엑셀 데이터 업로드 (2) | 2020.11.18 |
함께 쓰는 가계부 "함쓰" 안드로이드 플레이스토어 출시 (0) | 2020.11.18 |
함께 쓰는 가계부 "함쓰" 아이폰 앱스토어 등록 완료 (0) | 2020.11.12 |