josee2
josee2 Devlog
josee2
전체 방문자
오늘
어제
  • 분류 전체보기 (54)
    • Swift (33)
      • 문법 (33)
    • iOS (13)
    • Algorithm (3)
      • 프로그래머스 (1)
      • BOJ (0)
      • 기타 (2)
    • 일상 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Async
  • 동기
  • 쓰레드
  • 비동기
  • serial
  • GCD
  • 스위프트
  • 문자열 템플릿
  • Sync
  • concurrent
  • 동시
  • 동시큐
  • 멀티쓰레드
  • Swift
  • 프로세스
  • SeSAC
  • 직렬
  • IOS
  • 동시성프로그래밍
  • 서울청년취업사관학교

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
josee2

josee2 Devlog

카테고리 없음

미모(MIMO) 출시를 돌아보며

2022. 10. 4. 16:18

 

약 한 달간의 치열한... 사투 끝에 드디어!!! 앱을 출시하게 되었습니다.

 

처음으로 기획부터 출시까지 모든걸 혼자 해야하다보니 하나부터 열까지 정말... 쉬운게 없었습니다.

 

아직 많이 부족한 부분이 많지만 만들었던 과정 중에 배우고 느꼈던 점들을 글로 남기고자 합니다 : )

 


1. 기획이 절반?이다!!! 아니 전부 일지도?...

 

미모(MIMO)를 기획하게 된 계기는 '아침 일찍 일어나서 열심히 살아보고 싶다!' 라는 저의 개인적인 바램이었습니다. 새벽에 공부하는 것도 좋지만... 아침이 주는 기운? 같은게 참 좋다라고 평소에 생각했기에...

 

그래서 요즘 흔히들 이야기하는 미라클 모닝(Miracle Morning)를 가져와서 이를 보다 쉽게 도전하고 확인할 수 있는 앱을 만들고자 했죠.

 

스스로의 의지로 아침일찍 일어나서 무언가를 한다는게 정말 쉽지 않다는 것을 다들 알고 계실겁니다...

 

그래서 다른 유저들과 소통하고 앱 안에서 모여 도전하고 인증하고 하는 기능을 만들고 싶었지만 그러면 서버 개발이 필요하기 때문에... 이 부분은 후에 가능하면 도전해보려 합니다.

 

때문에 혼자서 아침에 일어나 스케쥴을 수행하고 관리하고 확인할 수 있는 앱을 만들어보자!!! 방향을 바꿨습니다.

 

1-1. 초기 디자인 

 

초기 디자인

 

처음 제가 디자인한 UI는 다음과 같았습니다.(왜 이렇게 했을까 ^^;;)

 

미적감각이 1도 없던 저에겐 그래도 당시엔 최선?을 다 했다고 생각했습니다... 그런데 지금보니 좀 너무했었네요 하하...

 

당시엔 그냥 틀만 짜고 개발하면서 다듬어가면 되지~ 라고 생각했는데... 이게 정말 잘못된 생각이었습니다.

 

✅ 디자인은 기획 할 때 완벽하게!

 

하면서 다듬어 가려고하니 빌드하면서 색감이 맞는지? 조화가 잘 되는지 계속 확인을 해야해서 시간이 배로 들었습니다.

 

다음엔 초기에 UI를 디자인할 때 좀 걸리더라도 최대한 완벽하게 해야겠다... 반성했습니다...😂😂

 

아직... 부족하지만 현재 디자인은 다음과 같습니다.(초기보단 훨씬 낫죠??...)

 

출시 디자인

 

1-2.  개발공수

 

개발공수에는 일요일 빼고 매일 6시간씩 개발 시간을 계획했습니다. 

 

하지만 오류나 부족한 부분을 보충해야 하기 때문에 실제는 10 ~ 12시간 정도를 썼던거 같습니다.

 

그리고 실제로 그렇게 해도 부족했습니다.(차트가 이렇게 어려울줄은 몰랐죠🥲🥲🥲)

 

초기엔 2주 정도면 기능구현을 마무리하고 코드를 리팩토링하면서 마무리하려 했는데 정말 어림없는 소리였습니다.

 

거의 한 달 꽉채워서 겨우 마무리 했네요...

 

 📅 이터레이션 1 (9/8 ~ 9/11)

9/8(목) 9/9(금) 9/10(토) 9/11(일)
휴식 휴식 휴식 1P탭바(1시간)
      1P UI(2시간)
      헤더뷰(1시간)
      좌측상단시간(2시간)

 

 📅 이터레이션 2 (9/12 ~ 9/14)

9/12(월) 9/13(화) 9/14(수)
3P UI + Circular ProgressBar(5시간) 3P 노티피케이션(2시간) 4P UI(6시간)
2P 버튼 선택(2시간) 2P 얼럿 + 데이트피커(3시간)  
2P 미션 텍스트필드(1시간) 2P 예외처리(1시간  

 

 📅 이터레이션 3 (9/15 ~ 9/18)

9/15(목) 9/16(금) 9/17(토) 9/18(일)
DB(Realm 설계) 4시간 캘린더 점 찍기(3시간) 캘린더 선택시 해당 날짜 스케쥴
보여주기(6시간)
휴식
요일 선택 기능구현(2시간) 캘린더 점 찍기 오류수정(3시간)    

 

 📅 이터레이션 4 (9/19 ~ 9/21)

9/19(월) 9/20(화) 9/21(수)
컬렉션뷰(동그라미)에 데이터 띄우기(4시간) 2Page 테이블뷰에 캘린더에서 선택한 날의
스케쥴 제대로 띄워주기(6시간)
FSCalendar 깜빡거림 오류 해결(3시간)
테이블 뷰 시간 범위 재지정(2시간)   타이머 부분 코드개선 + 중단기능(3시간)

 

 📅 이터레이션 5 (9/22 ~ 9/25)

9/22(목) 9/23(금) 9/24(토) 9/25(일)
캘린더 스와이프시 컬렉션뷰 데이터 보여주기(3시간) 스케쥴 삭제(2시간) 스케쥴 수행정도에 따라 캘린더에 표시되는 색 바꿔 나타내주기(3시간) -> 실패 휴식
캘린더 스와이프시 테이블뷰 예외처리(1시간) 스케쥴 수정(4시간) 캘린더 날짜 밑에 점으로 스케쥴 수행정도 표시(3시간)  
달력 UI 수정(2시간)      

 

 📅 이터레이션 6 (9/26 ~ 9/28)

9/26(월) 9/27(화) 9/28(수)
캘린더 스와이프시 생기는 오류해결(6시간) 4Page 알림설정(6시간) 1Page 스케쥴 수행시 배경색 변경반영(4시간)
    1Page + 2Page 색감 조절

 

 📅 이터레이션 7 (9/29 ~ 10/2)

9/29(목) 9/30(금) 10/1(토) 10/2(일)
차트 디자인(6시간) 차트에 데이터 뿌려주기(6시간) 차트에 데이터 뿌려주기(6시간) 4Page 기능 + UI구현(6시간)

 

 📅 이터레이션 8 (10/3 ~ 10/5)

10/3(월) 10/4(화) 10/5(수)
차트 오류수정(6시간) 앱스토어에 등록 성공!!!  

 

 

✅ 잘 지켜지지 않더라도 개발공수는 꼭! 작성하자

 

처음에 만들었던 개발공수 어디갔니???.... 계획은 정말 그럴싸했지만 저의 실력이 많이 부족하여... 제대로 시간내에 했던 것은 아무것도 없었습니다.

 

그래도 계획을 세워놓고 하는거랑 무계획으로 하는 것은 큰 차이가 있는 거같습니다.

 

잘 못지켰더라도 나중에 확인해보면 어디가 부족한지 자신의 실력을 점검할 수 있는 지표가될 수도 있기에...(나의 실력은... 하하....)

 

 

1-3. 개인피드백( about 기획 )

 

프로젝트를 진행하면서 뼈저리게 후회한 것이 기획을 제대로 안하고 시작한 것 이었습ㄴ디ㅏ.

 

기획을 한 번에 재대로해두지 않으면 개발을 해놓고 갈아엎는 불상사가 발생하게됩니다...(2번정도 있었네요 전...)

 

마냥 추상적으로 아침에 일어나서 쓰는 스케쥴러앱을 만들어보자하고 기획하고 UI도 그냥 틀만 잡았었습니다.

 

그래서 나중에 시간은 어떻게 설정하게 할 것인지? 예외처리? 차트는 어떻게 UI를 구성할건지? 톤은 어떻게 맞출 것인지? 등등 개발만 하기에도 부족한 시간에 다시 기획을 하고 디자인을 하고... 굉장히 비효율적으로 프로젝트를 진행하게 됐습니다.

 

다음엔 꼭 제대로 기획과 디자인을하고 시작해야겠다 다짐했던... 시간이였습니다

 

 

 

2. 부족한 개발실력(feat. dirty code...)

 

코드를 어떻게 더 깔끔하게 짤 수 있을지? 어떻게하면 유지보수 하기 쉬울지?에 대한 부분은 거의 고려하지 못했습니다.

 

기능 구현을 하는데에만 급급해서 그랬지만... 조금 심한거 같아서 앞으로 업데이트 하면서 나누고 분리시켜보고 할 생각입니다.

 

특히 차트부분에선... 받아온 데이터를 배열에 저장하고 배열을 비워주고 띄워주고... 대환장 파티 ㅠㅠ...

 

평소에 다른 분들의 코드를 잘 보지 않았는데 잘 하는 분들의 코드를 보면서 어떻게 구조화 시키는지를 공부해야 할 거 같습니다 : )

 

 

2-1. DB설계(Realm)

 

Realm을 사용해서 다음과 같이 DB를 설계했습니다. 

 

ObjectID(PK) 시작시간(string) 종료시간(string) Date(date) 스케쥴(string) 수행여부(bool)
abcd1234 오전 04:00 오전 09:00 2022-09-22T01:53:51.50 조깅 true

 

date를 사용해 몇 일에 스케쥴이 등록되게 할지 정했습니다.

 

그리고 유저가 스케쥴을 등록할 때 스케쥴, 시작시간, 종료시간을 등록해야하니 이를 설정해주었고 마지막으로 수행했는지 안했는지를 보여줘야하기 때문에 수행여부를 bool로 잡았습니다.

 

오직 아침시간이라는 제한된 시간 안에서 앱의 사용이 일어나기 때문에 생각보다 고려해야할 지점이 적었습니다.

 

하지만 멘토님이 주신 피드백 중에서 계획은 계획대로 잘 이루어지지 않는 경우가 많으니 스톱워치 처럼 자기가 수행한 스케쥴을 자율적으로 등록할 수 있는건 어떻냐고 하셔서 후에 마이그레이션을 통해 수정할 생각입니다.

 

 

2-2. Charts

 

실력이 부족한데 괜히 또 도전해보고 싶은 욕심은 있어서 제 기준으로 도전적인 것들을 좀 시도했습니다.

 

권한설정+노티피케이션, 타이머(BezierPath), FSCalendar, DB필터링해서 뷰에 잘 보여주기 등등... 하지만 그 중 저를 가장 힘들게했던 녀석은 바로 Charts입니다. 

 

주변에서 워낙 어렵다 어렵다 해서... 이 기능을 추후에 넣을까?라는 고민을 수백번은 했던 거 같습니다.

 

하지만 정말 귀신같이... 중간발표 때  '한 눈에 알아볼 수 있는 차트 같은 것이 있으면 좋겠어요!' 라는 정말 너무 감사한.. 피드백?을 받게 되었고 결국 만들게 됩니다...

 

Charts는 오픈소스 라이브러리로 보다 쉽게 개발자가 차트를 그릴 수 있도록 도와주는 좋은 녀석입니다...

 

하지만 단점은 이 것을 커스텀하게 사용하려고 했을 때 참고할 자료가 정말 부족하다는 것이었습니다.

 

기본적으로 데이터를 선언하고 넣어주면 보여주는 형식은 크게 어렵지 않았습니다.

 

하지만 저는 넣어주는 데이터를 동적으로 넣어주어야 했습니다.

 

유저가 스케쥴을 성공하면 그대로 반영해주고 이를 월별로 나눠서 보여주고... 데이터가 추가되는 시점에 대한 이슈도 있었고 데이터가 없는 경우엔 또 어떻게 해줄지 등등에 대한... 어려움이 많았습니다.

 

특히 Piechart라 그런지 자료가 좀 부족하더라구요... 어떻게 메소드 하나씩 찾아보고 뜯어보면서 결국 구현을 다음과 같이 하긴했습니다.

 

UI는 좀 더 고민해보고 괜찮은 방향으로 수정하려고 합니다.

 

조금 재밌었던 것은 표 밑에 명각?이라고 하나요 저것을 영어로 legend라고 하더라구요?... legend를 커스텀해서 스케쥴을 몇 번, 몇 분 했는지 확인할 수 있도록 했습니다.

 

올 해 swift 자체에서 Swfit Charts를 만들었는데 이걸로 수정을 한 번 해볼지? 좀 고민이 되고... Charts특히 piechart부분은 한국어로 소개된 것이 별로 없는 거 같아서 나중에 한 번 포스팅을 꼭!!! 해보겠습니다.

 

항상 라이브러리랑 싸우면 지는건 저였지만 이 정도면 Charts랑 싸워서 이겼다고 해도되지 않을까.... ^_^ ( %가 작을 경우 숫자가 겹치는 것은 불가능? 한 거 같더라구요...)

 

2-3. 개인 피드백(about 코드)

 

말했다시피 부끄럽지만 코드가 정말 더럽습니다... 기능 구현을 하는데에 급급한 나머지 코드 퀄리티를 신경쓰지 못했어요...

 

계속 리팩토링 하면서 다듬을 예정이고 조금 정리를 해서 팀원들이나 주변분들에게 코드리뷰?도 좀 받아보고 잘 하는 분들 코드도 보고 하면서 좀 배우려고 합니다.

 

그래서 코드를 짤 때 조금 더 좋은 코드를 짜고자 고민하는 것을 습관화시켜 보려합니다!!!

 

 

3. 앞으로의 미모(MIMO)는?

 

아직 부족한 부분이 많습니다... 통계 부분 UI, 백업 복구(손도 못댐), monthPicker 부자연스러움, 초기화면, 스케쥴 일괄수정, 스케쥴 일괄삭제 등 다 구현을 해보려고 합니다!!!

 

뭔가 제가만든 앱이 앱스토어에 올라왔다는게 참 신기하고 감동적이고 그러네요 ㅎㅎ... 하지만 여기서 안주하지 않고 제 이름을 걸고 만든 앱이기 때문에 좀 더 좋은 앱이 될 수 있도록 꾸준히 관리해야겠다 생각했습니다.

 

긴 글 읽어주셔서 감사하고 개발하는데 도움주신 팀원분들, 새싹 학우?분들, 멘토님들 정말 감사했습니다!!! 😊😊

 

 

저작자표시 비영리 변경금지
    josee2
    josee2
    iOS 개발자 지망생의 공부기록입니다.

    티스토리툴바