on
Tutoring Board
앱 스토어
App Store에서 제공하는 튜터링보드 - 과외일정 관리 (apple.com)
소개
학생 정보와 수업 일정 입력 시 기간 동안의 일정을 캘린더로 확인할 수 있습니다.
앱 기능
- 캘린더: Monthly / Weekly 원하는 타입으로 그날의 일정을 확인할 수 있습니다.
- 수업 등록: 수업 정보(수업명, 수업 장소, 과외 기간, 수업 요일 및 시간, 학생)을 저장할 수 있습니다.
- 수업 관리: 저장된 수업 리스트와, 수업 추가 및 수정, 삭제가 가능합니다
- 학생 등록: 학생 정보(이름, 학생 연락처, 학부모 연락처, 주소, 메모)를 저장할 수 있습니다
- 학생 관리: 저장된 학생 리스트와 학생 추가 및 수정, 삭제가 가능 합니다
개발
기간: 2023.09.27 ~ 2023.10.25 최소 지원 버전: iOS 15 다국어 대응 O
기술
Architecture : MVVM
| DB : Realm
UI : UIKit
CodeBaseUI
SnapKit
UITableView
UISwipeGestureRecognizer
UITabGestureRecognizer
Etc : FSCalendar
TextFieldEffects
Toast
FireBase Crashlytics
, FireBase Analytics
기능 구현
MVVM Architecture
: 구조화로 코드의 가독성과 유지 보수성 향상Realm
을 통해 앱 내부의 데이터를 효율적으로 관리filter
메서드로 조건에 맞춘 데이터 추출 및 필터링FSCalendar
: 필요에 따라 달력의 스타일 변경- Firebase
Crashlytics
,Analytics
로 앱의 안정성 모니터링 및 크래시 추적 SnapKit
을 통한CodeBaseUI
구현TableView
,scrollView
로 데이터 시각적 렌더링
트러블 슈팅
1. 데이터베이스 구조 변경에 대응한 마이그레이션 관리
- 문제 상황: 개발 중 데이터베이스의 스키마를 변경해야 할 때 데이터 손실과 충돌을 최소화해야 합니다.
- 해결 방법: 스키마 버전 관리를 통해 업데이트 항목을 추적하고, 새로운 스키마를 관리하며 이전 버전과의 호환성을 유지합니다.
2. 중첩된 레이블 문제 해결
- 문제 상황: 테스트 중에 캘린더에서 Label이 중첩되어 나타나는 문제를 발견했습니다.
- 해결 방법: willDisplay 메서드 내에서 셀의 서브 뷰를 살펴보았습니다. 그 과정에서 중첩된 레이블 중에서도 UILabel 타입의 항목을 탐지하고 이를 제거하는 작업을 추가했습니다.
3. 데이터베이스 작업 시 에러 핸들링
- 문제 상황: Realm을 활용한 데이터베이스 작업 중에 예상치 못한 에러 상황이 발생했습니다.
- 해결 방법: do-catch 블록을 활용하여 에러를 처리했습니다. 에러는 미리 정의한 enum 형태의 error 타입으로 분류되며, 사용자에게 적절한 안내 메시지를 표시하도록 구현했습니다
회고
이번 프로젝트를 진행하면서 기획부터 출시까지의 모든 단계를 경험할 수 있었습니다. 중간에는 화면 흐름, 디자인, DB Schema 등이 자주 변경되는 상황을 마주쳤습니다. 그럼에도 불구하고 사용자의 편의성을 최우선으로 두어 완성된 기능을 개선하고 다양한 테스트를 반복하여 더 나은 사용자 경험을 제공하기 위해 노력했습니다.
꾸준히 개발 일지를 작성하며 현실적인 시간 계획을 세우는 법과 개발 공수 산정 능력이 향상된 것을 느낄 수 있었습니다. 예상보다 많은 시간이 소요되는 부분도 있었지만, 이러한 경험을 통해 왜 예상보다 더 많은 시간이 소요되었는지를 분석하고 부족한 부분을 보완하기 위해 노력했습니다.
가장 많은 시간을 할애한 만큼 코드 개선에 만족스러운 결과가 나왔다고 생각합니다. 멘토님의 코드 리뷰를 통해 가독성과 유지 보수성을 높이는 작업에 집중했고, 프로젝트의 확장성과 지속적인 유지 보수의 중요성을 다시 한번 깨닫게 되었습니다.
추후 RXSwift를 도입하여 데이터의 명확한 흐름과 비동기 작업을 추상화하는 작업을 계획하고 있습니다. 이를 통해 다음 업데이트에서는 더 나은 성과를 이룰 수 있을 것으로 기대합니다.
버전 정보
- 1.0.0 (2023/10/26) → 출시
- 1.0.1 (2023/10/29) → bug FIx
피드백 반영
- 직관적인 아이콘 변경
- 수업등록 - 요일 시간(24:00) 선택시 라벨이 변경되지 않는 문제 해결
- 수업등록 - 학생 스크롤뷰 이름 잘림 해결(button sizeToFit)
- 데이터 유효성 검사 로직 구현
- 앱 번들 네임 변경
- 캘린더 - 리스트 상단 디자인 변경
- 1.1.0 (2023/11/20) → 기능 추가
- 최신 버전 체크 - 업데이트 유도
- 캘린더 week / Month 기능 추가
- 캘린더 리스트 Cell 디자인 변경
- Analytics 코드 수정
- Localizable: AppVersionCheck 추가
- Localizable: English - button text 잘림 해결
작업일지
- 09.27
- 프로젝트 기본 세팅 (1시간 → 15분)
- 다국어 지원 및 탭바 컨트롤러 추가 (1시간 → 38분)
- 메인 캘린더 생성 (3시간 → 4시간)
- 09.28
- 메인 캘린더 수정 (3시간 → 1시간 40분)
- 검색 화면 완성 (2시간 → 2시간 20분)
- 10.01
- 학생관리 화면 생성 (1시간 → 30분)
- 학생 등록 화면 생성 (1시간 → 1시간 30분)
- Realm 구조 잡기 (1시간 → 30분)
- 학생 등록 데이터 생성 (1시간 → 21분)
- 10.03
- 일정 등록 화면, 수업 등록 화면 디자인 합침 (2시간 → 3시간 30분)
- Sheet Presentation Controller 사용 (1시간 → 1시간 20분)
- 10.05
- 코드 정리 (1시간 → 2시간 30분)
- 수업등록 디자인 변경 (40분 → 30분)
- 학생 목록 Sheet 생성 (30분 → 30분)
- 10.08
- 학생 관리 / 일정 등록 리스트, 추가화면 - 뷰, 컨트롤러 구분 (1시간 → 1시간 30분)
- 학생관리 리스트 삭제 (30분 → 30분)
- 리스트 정렬 (30분 → 15분)
- 추가 화면 구현 (30분 → 45분)
- 10.09
- 연락처 가져오기 및 학생 관리 리스트 수정화면 구현 (3시간 → 1시간 50분)
- 10.10
- 학생 관리 테스트+데이터 완성 (2시간 → 2시간)
- 개발 범위 줄이기 (30분 → 15분)
- Realm Schema Version 생성 (30분 → 30분)
- 10.11
- 학생 등록 및 수업 등록 코드 합침 (1시간 → 1시간 40분)
- 10.18
- 캘린더 및 Realm 구조 변경 (2시간 → 2시간 10분)
- 10.21
- MVC → MVVM 구조 변경 작업 (5시간 → 4시간 40분)
- 10.23
- 에러 처리 및 다국어 지원 완성 (5시간 → 3시간 20분)
- 10.25
- 앱 테스트, 로고 제작, 심사 제출 (2시간 → 8시간)
- 10.26
- 출시 완료