본문 바로가기

Dev Dialry/Duler

스탬프 스케줄러 개발 후기

드디어 1년 정도의 개발을 거쳐 스탬프 스케줄러 앱을 스토어에 올리게 되었다 !! 👏

그룹 근무표 관리 앱을 만들자는 목적으로 2019년 4월 30일에 서버 레파지토리의 Init 커밋을 시작으로 2020년 11월 6일 v1.0 배포까지 508개의 커밋이 있었으며, 개발 중간에 Flutter 로 앱을 개발하기 위해 2개월간의 Flutter 스터디로 하였다.
앱 레파지토리의 Init 커밋은 2019년 11월 27일 이었으며, 2020년 11월 7일 v1.0 릴리즈까지 953 개의 커밋이 있었다.

GraphQL서버 개발에서 시작하여 Flutter를 공부하여 앱을 만들고 앱스토어에 올리기까지 정말 많은 개발적 이슈와 개인적 이슈, 그리고 귀찮음과의 싸움이었다. 다 만든 지금 이 프로젝트를 통해 내가 만들어 낸 결과물을 정리하기 위해 이 블로그를 작성한다.

앱스토어에 앱 업로드
 

‎Stamp Scheduler

‎Intuitive and simple user interface allows group members to share and request schedules. | Feature | - Add a group and manage members - Separate administrators from normal users - Manage labels (Basic labels are created automatically) - Tap to add a gro

apps.apple.com

 

스탬프 스케줄러: 근무표, 일정, 그룹, 스케쥴, 반복일정, 일정신청 - Google Play 앱

직관적이고 간단한 사용을 통해 그룹원 간의 일정을 공유하고 신청할 수 있습니다. ---- | 주요 기능 | - 그룹 추가 및 그룹원 관리 - 관리자 및 일반 그룹원 권한 분리 - 라벨 관리 (초기 기본 라벨

play.google.com

위 두개의 스토어에 앱이 올라가있으며, 다운로드가 가능하다.

(다만, AWS Free Tier가 끝이나는 1년 후에..사용자들의 사용량이 없다면, 앱의 존폐는 장담할 수 없다...👀)

Github 1일 1커밋

https://github.com/chicrock

이직을 하고 적응 한다는 핑계와 시간이 없다는 핑계로 인해 서버 개발 후 지지부진하던 앱 개발에 동기를 부여하기 위해 시작한 Github 잔디심기.. 그 결과 앱을 런칭하는 시점에 1년을 채웠으며 내 Github 계정이 푸른색 잔디로 색칠된 것을 볼 수 있었다. 정말 단 하루도 빠지지 않고 노트북을 켰으며, 기능 하나라도 더 넣으려고 했고, 버그 하나라도 더 고치려고 했다.
이 과정에서 내일 할일이 무엇인지, 어떤 기능을 추가해야 하는지, 등을 정리하게 되었다. 이는 개발을 하며 무엇이 필요한지를 다시 생각해볼 수 있는 계기가 되었다.

GraphQL 을 이용한 서버를 개발

서버 개발은 PickMovie 앱 개발을 하면서 사용한 GraphQL 을 사용하였다. 그래도 한번 사용한 경험이 있어서 그런지 좀더 쉽게 개발을 진행할수 있었다. 각 Entity 들을 만들어주고, 이에 따르는 기능별로 Resolver 들을 만들어 주었다. 추가적으로 기존에는 사용하지 않았던 Passport 를 미들웨어에 붙여서 사용자 인증을 하였으며, 이를 이용하여 권한 체크들을 진행해 주었다.
또한 기존에는 필요치 않았던 FCM 기능의 이용을 위해 Firebase 연동도 진행하였다.
배포 시스템으로는 Github Actions를 사용하였다. 서버 구성을 AWS Elastic Beanstalk 으로 하다 보니 beanstalk-deploy 을 사용하여 쉽게 할 수 있었다.

서버 개발을 통해 총 14개의 Query resolver 를 생성하였으며, 42개의 Mutation resolver 를 생성하였다. 개발 과정에서 GraphQLTypescript 의 궁합은 정말 환상이라는것을 다시 한번 느낄수 있었다. 거기에 이어서 클라이언트까지 정적 타입언어를 사용한다면 서버에서 만들어둔 타입을 서버에서 클라이언트까지 같이 공유할 수 있다는 큰 이점이 있었다.

Flutter 를 이용한 앱 개발

클라이언트 개발은 기존에 React Native를 사용하려고 하다가, 이왕이면 새롭게 부상하고 있는것을 사용하자는 생각으로 Udemy 강의를 이용하여 Flutter를 공부하기 시작하였다. 처음 Flutter 개발 방식이나 코드를 보고 쉽게 생각했고, 쉽게 개발할수 있을것 같다는 막연한 생각을 가지고 있었는데, 막상 사용해보니 역시나 클라이언트 화면 개발에 특화되어 있어서 그런지 더 쉽게 개발할 수 있었다. mobx 를 사용하여 상태관리를 해주었으며, graphql_flutter 를 사용하여 서버와의 통신을 해주었다. 물론 이 외에도 많은 라이브러리들을 사용해 주었다. 아직까지는 기존에 React Native 만큼 많은 모듈들을 사용해보진 못하였지만, 앱을 개발하기 위해 필요한 필수적인 모듈들은 어느정도 제공이 되고있는 상태로 확인이 되었다.
다만 개인적으로 제대로 찾아보지 못하였을 수는 있지만, 서버의 GraphQL 스키마를 받아와서 자동으로 Dart 클래스로 변환해주는 부분이 보이지 않아 커스텀하게 개발한 부분이 조금은 께름칙한 부분으로 남아있다.


개발을 하면서 최고 중점을 둔 부분은 가장 기본이 되는 기능을 개발하여 우선 앱스토어에 오픈하자 였다.
하지만 실제 개발을 하다 보니, 이것도 필요하고 저것도 필요하고, 그로 인해 서버 스키마를 몇 번 수정하게 되었으며, 이 과정에서 클라이언트 앱의 많은 부분이 변경되기도 하였다. 또한 비즈니스 변경 이외에 Flutter를 사용한 경험이 없다보니 실제 개발을 하면서 아키텍쳐의 변경이라던가 메인 상태 관리를 Provider에서 mobx로 변경하는 등의 꽤나 많은 변경을 접하게 되었다. Flutter 를 사용한 첫 개발 프로젝트였기에 많은 것을 배울수 있는 계기였다고 생각한다.
더불어 Apple Developer도 이번 기회에 등록하게 되었고, iOS 앱 개발을 하여 스토어에 등록하기까지 많은 과정을 직접 겪을수 있는 기회가 되었다.(Apple 검수에서 Reject이 많이 된다는데 가능이 간단하여 그런지 한번 Reject되고 통과되었다는 것은 자랑..?)
개발을 하며 디자이너의 필요성을 다시 한번 느끼게 되었다. 우선 오픈하자를 주 목표로 잡다보니, 화면 구성이나 사용자 편의성 등에 대해서는 많이 고려 하지 않았던 것 같다. 단지 사용할 수 있게 하자는 생각으로 만들다 보니, 대학생들 과제 수준의 화면이 나온것이 아닌가 하는 아쉬움이 있다. 이에 대한 부분은 사용자들의 반응을 확인한 후 다음 업데이트에 좀 더 고민하여 수정해볼 예정이다.

개인적으로는 1년이 걸린 그럴듯한 앱을 개발하게 되어 만족스럽게 생각하고 있으며, 이번 개발을 계기로 더 많은 발전을 할 수 있었다고 생각하게 되었다. 이번 삽질이 다음번에 개발 능력 향상으로 이어질수 있길....

TODO
  • 결제 모듈 붙이기
  • 디자인 바꾸기
  • 기타 기능 수정 사항들