시간 추정 능력 향상을 위한 시간 관리 훈련 앱
"작업에 소요될 시간을 직접 예상해보고 실제 경과 시간과 비교하는" 시간 추정(Time Estimation) 훈련을 통해 시간 관리 능력을 향상시킬 수 있는 iOS 앱입니다.
- 제작 기간: 2018년 10월 30일 ~ 2018년 12월 15일 (약 1개월 17일)
- 개발: 100% 1인 기획 및 개발
- App Store: 다운로드 링크 (현재 다운로드 불가)
다양한 자기계발서에서 알게 된 '시간 추정' 기법을 실천하면서 확실히 효과를 체감했지만, 노트에 손으로 적거나 엑셀로 관리하기에는 번거로워 습관화 하기가 어렵다고 생각했습니다. 그래서 "간편하게 시간 추정 훈련을 할 수 있는 앱"을 직접 만들기로 결심했습니다.
핵심 동기:
- 내가 쓰기 위한 앱
- 시중에 동일한 컨셉의 앱이 없음
- 기능적으로 효과가 검증됨 (개인 경험)
- 초보 개발자가 만들기에 적절한 난이도
목표 사용자:
- 공부 시간 관리가 필요한 학생/수험생
- 여가 시간을 효율적으로 사용하고 싶은 직장인
- 시간 개념이 부족하여 시간 관리 훈련이 필요한 모든 사람
- 작업 생성 (제목, 아이콘, 예상 소요 시간 설정)
- 작업 목록 조회
- 작업 정보 수정 (제목, 아이콘, 예상 시간)
- 작업 삭제 및 정렬
- 예상 시간 설정 - 작업에 소요될 시간을 직접 예상
- 실시간 타이머 - 남은 시간 표시 및 완료 예상 시간 계산
- 중단/재개 - 작업 중단 시 완료 예상 시간 자동 조정
- 조기 완료 방지 - 최소 작업 시간 강제 (예상 시간의 1/10)
- 목표 달성/실패 여부 - 예상 시간 내 완료 여부 표시
- 연속 달성 기록 - 현재 연속 달성 및 최고 기록 관리
- 작업 통계
- 총 작업 횟수
- 목표 달성/실패 횟수
- 성공률 계산
- 평균 소요 시간
- 평균 남은 시간
- 월별로 구분된 작업 기록 조회
- 필터 기능 (전체 보기 / 특정 작업만 보기)
- 각 작업별 상세 정보
- 소요 시간
- 진행 일시
- 달성/실패 여부
- 연속 목표 달성
- 예상 vs 실제 완료 시간
- 다크 모드 지원
- 다양한 아이콘 - 600개 이상의 아이콘 선택 가능
- 알림 - 작업 예상시간 경과, 작업 완료 시 알림
- 사운드 및 진동 - 작업 완료 시 원하는 종류의 효과음 및 햅틱 피드백 선택 가능
- 화면 켜짐 유지, 도움말, 피드백 전송, 앱스토어 리뷰 남기기, 업데이트 예정사항 표기, 저작권 정보 표기
- Swift 4
- UIKit - UI 구현
- Core Data - 로컬 데이터 영속성 관리
- CloudKit - iCloud 백업 및 복원
- StoreKit - 인앱 결제 및 앱스토어 리뷰 요청
- MarqueeLabel - 텍스트 스크롤 애니메이션
- NightNight - 다크 모드 구현
- SwiftIcons - 600개 이상의 아이콘 제공
- MVC 패턴
- Core Data Entity Relationship
- WorkInfo (작업 정보)
- TimeMeasurementInfo (시간 측정 정보)
Hourglass/
├── ViewControllers/
│ ├── MainViewController.swift # 작업 목록 메인 화면
│ ├── NewWorkViewController.swift # 새 작업 생성
│ ├── NewIconCollectionViewController.swift # 아이콘 선택
│ ├── WorkingViewController.swift # 작업 진행 중 타이머
│ ├── WorkResultViewController.swift # 작업 완료 결과
│ ├── WorkInfoTableViewController.swift # 작업 상세 정보 및 통계
│ ├── RecordTableViewController.swift # 작업 기록 목록
│ ├── SettingViewController.swift # 설정
│ ├── BackupViewController.swift # iCloud 백업
│ ├── MoreTableViewController.swift # 더보기 메뉴
│ └── HelpViewController.swift # 도움말
├── Model/
│ ├── WorkInfo+CoreDataClass.swift # 작업 정보 Entity
│ └── TimeMeasurementInfo+CoreDataClass.swift # 시간 측정 Entity
├── Custom Views/
│ ├── GradientView.swift # 그라데이션 뷰
│ ├── WorkTimePicker.swift # 커스텀 시간 피커
│ └── IconCell.swift # 아이콘 셀
├── Storyboards/
│ └── Main.storyboard # UI 레이아웃
└── Resources/
├── CustomFonts/ # 커스텀 폰트
└── Assets.xcassets # 이미지 및 색상 리소스
작업의 핵심 기능으로, 사용자가 설정한 예상 시간을 카운트다운하면서 실제 소요 시간을 측정합니다.
주요 로직:
- 예상 작업 시간 설정
- 실시간 남은 시간 표시
- 완료 예상 시간 계산 (시작 시간 + 예상 시간)
- 중단 시 완료 예상 시간 자동 연장
- 최소 작업 시간 강제 (조기 완료 방지)
WorkInfo (작업 정보)
- workID, workName, iconNumber
- estimatedWorkTime (예상 작업 시간)
- currentSuccessiveAchievementWhether (현재 연속 달성)
- successiveAchievementHighestRecord (연속 달성 최고 기록)
- totalWork, goalSuccess, goalFail (통계)
- successRate, averageElapsedTime, averageRemainingTime
- Relationship: To-Many → TimeMeasurementInfo
TimeMeasurementInfo (시간 측정 정보)
- workStart, actualCompletion (시작/완료 시간)
- goalSuccessOrFailWhether (목표 달성 여부)
- successiveGoalAchievement (연속 목표 달성)
- elapsedTime, remainingTime (소요/남은 시간)
- Relationship: To-One → WorkInfo
GradientView
class GradientView: UIView {
override class var layerClass: AnyClass {
return CAGradientLayer.self
}
var toColor: UIColor {
didSet {
// CABasicAnimation을 통한 색상 전환 애니메이션
}
}
}WorkTimePicker
- UIPickerView를 활용한 커스텀 시간 선택기
- 무한 스크롤 효과 (400개 row 반복)
- 0~59분 단위 선택
게임의 보상 확인 화면처럼 성취감을 느낄 수 있도록 화면 전체에 플래시 효과 구현
작업 기록 화면에서 셀을 탭하면 상세 정보가 펼쳐지는 기능
var isCellsHeightExpanded: [Bool] = [] {
didSet {
tableView.beginUpdates()
tableView.endUpdates()
}
}카카오 Oven을 사용하여 프로토타입 제작
주요 색상:
- Sunshade:
#F99E48(오렌지) - Mine Shaft:
#333333(다크 그레이)
폰트:
- GodoSoft & YoonDesign Inc. (커스텀 폰트)
아이콘:
- SwiftIcons 라이브러리 활용
- 600개 이상의 아이콘 제공
- macOS: High Sierra 10.13.6
- Xcode: 9.4.1
- Swift: 4.0
- 형상 관리: GitHub
무료 버전:
- 작업 3개까지만 등록 가능
프리미엄 버전:
- 무제한 작업 등록
- 작업마다 아이콘 설정 가능
- 메인 화면 우측 상단의
+버튼 클릭 - 작업 제목 입력
- 아이콘 선택 (600개 이상 제공)
- 예상 작업 시간 설정 (기본값: 30분)
완료버튼 클릭
- 메인 화면에서 작업 선택
- 타이머 자동 시작
- 예상한 시간보다 빠르게 완료하도록 노력!
중단버튼: 남은 시간 정지, 완료 예상 시간 연장재개버튼: 타이머 재시작
완료버튼 클릭- 결과 화면에서 목표 달성/실패 확인
- 연속 달성 기록 확인
- 결과 공유 (선택)
이 프로젝트는 2018년 App Store에 출시된 후 더 이상 업데이트되지 않았습니다. 만약 다시 개발한다면 다음과 같은 개선을 하고 싶습니다:
- SwiftUI로 전면 리뉴얼
- Combine 프레임워크 적용
- Widget 지원 (홈 화면에서 바로 작업 시작)
- Apple Watch 앱
- CloudKit을 통한 데이터 백업 및 복원
- SiriKit 통합
- "시리야, 모래시계에서 '운동하기' 시작"
- "시리야, 모래시계에서 '운동하기' 완료"
- 통계 차트 시각화
- 작업 카테고리 기능
- 목표 시간 자동 조정 기능 (학습 기반)
- 완성도 높은 첫 개인 앱 - 기획부터 출시까지 혼자 완성
- 실용적인 앱 - 실제 사용 가능하고 효과가 있는 기능
- App Store 출시 경험 - 심사 과정 및 운영 경험
- 체계적인 문서화 - 요구사항 정의서 및 기술 문서 작성
- 마케팅 부재 - 출시 후 홍보 부족
- 사용자 피드백 수집 미흡 - 실제 사용자의 의견을 듣지 못함
- 지속적인 업데이트 부족 - 출시 후 추가 기능 개발 중단
- iOS 앱 전체 개발 사이클 경험
- Core Data를 활용한 데이터 관계 설계
- App Store 심사 및 출시 프로세스
- 1인 개발의 어려움과 한계
- 기획의 중요성 (프로토타입, 요구사항 정의)
이 프로젝트는 다음 오픈소스 라이브러리를 사용합니다:
- MarqueeLabel - Copyright (c) 2011-2017 Charles Powell (MIT License)
- NightNight - Copyright (c) 2016 Draveness (MIT License)
- SwiftIcons - Copyright © 2017 Saurabh Rane (MIT License)
- 커스텀 폰트: Copyright © 2012 GodoSoft & YoonDesign Inc.
- 사운드 파일: CC BY 3.0, CC BY-ND 3.0
- 아이콘: CC BY 4.0
Munok Kim
- GitHub: @MunokKim
- App Store: 모래시계 다운로드
- 프로토타입: Oven 프로토타입 보기
Made in 2018 | Published on App Store








