[2편] Super Productivity 핵심 기능 & 실전 활용
[기능] '컨텍스트'를 저장한다는 것의 진짜 의미
- 설명 방식: "개발자는 작업을 하다가 다른 급한 이슈가 생기면 지금 하던 일을 멈추고 뇌를 초기화해야 합니다. Super Productivity는 현재 열려 있는 웹 페이지, 로컬 파일 경로, 커맨드 라인 명령어까지 한꺼번에 '작업 상태'로 저장합니다."
- 실전 예시: "예를 들어, '로그인 버그 수정'이라는 작업을 하다가 '메인 페이지 UI 수정' 요청이 들어왔나요? '로그인 버그 수정'을 일시 정지하고 상태를 저장하세요. 나중에 다시 돌아오면 그때 열어뒀던 파일과 관련 티켓이 그대로 복구됩니다."
Super Productivity는 개인 정보 보호를 존중하면서 확장 가능한 생산성 도구를 필요로 하는 개발자 및 지식 근로자를 위해 설계된 포괄적인 시간 추적 및 작업 관리 애플리케이션입니다. 이 페이지에서는 모든 주요 기능 영역을 살펴보고, 내부 작동 방식과 기능 간의 연결 방식을 설명하여 Super Productivity를 본격적으로 사용하기 전에 필요한 개념을 이해할 수 있도록 돕습니다.
1. 작업 관리
작업 관리는 애플리케이션의 핵심입니다. TaskService는 작업을 생성, 업데이트, 이동, 보관 및 예약할 수 있는 모든 기능을 갖춘 API를 제공합니다. 모든 작업은 프로젝트 에 속하며 여러 태그를 지정할 수 있어 다양한 기준에 따라 유연하게 분류할 수 있습니다.
작업은 하위 작업, 예상 소요 시간( <number>m또는 <number>h간략 구문 사용), 마감일, 알림, 첨부 파일 및 이슈 트래커 링크를 포함하는 풍부한 데이터 모델을 지원합니다. 간략 구문 파서를 사용하면 단일 입력 문자열로 모든 주석이 포함된 작업을 생성할 수 있습니다.
예를 들어, Refactor auth module #urgent 2h +Backend Project @fri 5pm"긴급" 태그가 지정되고 예상 소요 시간이 2시간이며 "백엔드 프로젝트"에 할당되고 마감일이 금요일 오후 5시인 작업을 생성할 수 있습니다.
작업 컨텍스트 시스템은 프로젝트와 태그를 상호 교환 가능한 "뷰"로 통합합니다. 프로젝트 또는 태그로 이동하면 자체적인 오늘 작업 목록, 백로그 및 로컬 상태를 포함하는 필터링된 작업 목록이 표시됩니다.
TaskService는 작업을 생성, 업데이트, 이동, 보관 및 예약할 수 있는 모든 기능을 갖춘 API를 제공합니다. 모든 작업은 프로젝트 에 속하며 여러 태그를 지정할 수 있어 다양한 기준에 따라 유연하게 분류할 수 있습니다.<number>m또는 <number>h간략 구문 사용), 마감일, 알림, 첨부 파일 및 이슈 트래커 링크를 포함하는 풍부한 데이터 모델을 지원합니다. 간략 구문 파서를 사용하면 단일 입력 문자열로 모든 주석이 포함된 작업을 생성할 수 있습니다. Refactor auth module #urgent 2h +Backend Project @fri 5pm"긴급" 태그가 지정되고 예상 소요 시간이 2시간이며 "백엔드 프로젝트"에 할당되고 마감일이 금요일 오후 5시인 작업을 생성할 수 있습니다.2. 시간 추적
시간 추적은 전역 틱 시스템을 기반으로 작동합니다. 각 틱에는 duration경과된 실제 시간을 나타내는 필드가 포함됩니다. 한 번에 하나의 작업만 "현재" 상태로 유지될 수 있으며, 틱 지속 시간은 해당 작업의 누적 시간에 자동으로 추가됩니다.
이 기능은 빠른 틱 업데이트를 주기적인 NgRx 스토어 디스패치로 통합함으로써 초 단위 상태 변화로 인한 성능 저하를 방지합니다. 앱이 백그라운드로 전환되거나 종료되기 전에 추적된 모든 시간이 영구 저장되도록 합니다.TimeTrackingService파일은 작업 시작/종료 타임스탬프를 포함하여 작업 컨텍스트별 시간 추적 상태를 관리합니다. 이 파일은 NgRx 저장소와 아카이브 데이터베이스 모두에서 데이터를 읽어와 과거 데이터에 대한 시간 기반 쿼리를 가능하게 합니다.
요소 책임 핵심 방법 GlobalTrackingIntervalService일정한 간격으로 틱 이벤트를 발생시킵니다. tick$주목할 만한TaskService현재 작업에 소요된 시간을 누적합니다. addTimeSpent(),flushAccumulatedTimeSpent()TimeTrackingService컨텍스트별 시간 쿼리 및 정리 getWorkStartEndForWorkContext$()IdleService유휴 시간을 감지하고 보고합니다. isIdle$주목할 만한
duration경과된 실제 시간을 나타내는 필드가 포함됩니다. 한 번에 하나의 작업만 "현재" 상태로 유지될 수 있으며, 틱 지속 시간은 해당 작업의 누적 시간에 자동으로 추가됩니다.TimeTrackingService파일은 작업 시작/종료 타임스탬프를 포함하여 작업 컨텍스트별 시간 추적 상태를 관리합니다. 이 파일은 NgRx 저장소와 아카이브 데이터베이스 모두에서 데이터를 읽어와 과거 데이터에 대한 시간 기반 쿼리를 가능하게 합니다.| 요소 | 책임 | 핵심 방법 |
|---|---|---|
GlobalTrackingIntervalService | 일정한 간격으로 틱 이벤트를 발생시킵니다. | tick$주목할 만한 |
TaskService | 현재 작업에 소요된 시간을 누적합니다. | addTimeSpent(),flushAccumulatedTimeSpent() |
TimeTrackingService | 컨텍스트별 시간 쿼리 및 정리 | getWorkStartEndForWorkContext$() |
IdleService | 유휴 시간을 감지하고 보고합니다. | isIdle$주목할 만한 |
3. 계획 및 일정 관리
플래너는 일별 계획 보기를 제공하여 특정 날짜에 작업을 예약하고, 작업과 함께 통합된 캘린더 이벤트를 확인하고, 반복 작업 예측을 검토할 수 있습니다. 각 보기에는 PlannerDay해당 날짜에 마감되는 작업, 캘린더 이벤트 및 반복 작업이 집계되어 표시됩니다.
플래너는 CalendarIntegrationService외부 캘린더 이벤트와 작업 데이터를 함께 표시하여 일정을 한눈에 파악할 수 있도록 통합되어 있습니다. 작업은 scheduleTask()및 reScheduleTask()메서드를 통해 예약할 수 있으며, 이 메서드는 마감 시간과 선택적으로 미리 알림을 설정할 수 있습니다.
반복 작업 구성은 독립적으로 저장되고 계획 보기로 투영되어 기본 작업 정의를 중복하지 않고 각 발생에 대한 가상 작업 인스턴스를 생성합니다.
플래너는 일별 계획 보기를 제공하여 특정 날짜에 작업을 예약하고, 작업과 함께 통합된 캘린더 이벤트를 확인하고, 반복 작업 예측을 검토할 수 있습니다. 각 보기에는 PlannerDay해당 날짜에 마감되는 작업, 캘린더 이벤트 및 반복 작업이 집계되어 표시됩니다.
플래너는 CalendarIntegrationService외부 캘린더 이벤트와 작업 데이터를 함께 표시하여 일정을 한눈에 파악할 수 있도록 통합되어 있습니다. 작업은 scheduleTask()및 reScheduleTask()메서드를 통해 예약할 수 있으며, 이 메서드는 마감 시간과 선택적으로 미리 알림을 설정할 수 있습니다.
반복 작업 구성은 독립적으로 저장되고 계획 보기로 투영되어 기본 작업 정의를 중복하지 않고 각 발생에 대한 가상 작업 인스턴스를 생성합니다.
4. 집중 모드 및 포모도로 타이머
포커스 모드는 다양한 집중 전략을 지원하는 설정 가능한 포모도로 스타일 타이머를 구현합니다. 이 서비스는 부드러운 카운트다운 UI를 위해 1초 간격으로 업데이트되는 타이머를 유지하며, 전역 추적 간격과 통합되어 집중된 작업에 소요된 시간을 자동으로 추적합니다.
집중 작업 세션이 완료되면 해당 시간이 측정 시스템에 기록되어 logFocusSession()생산성 분석에 필요한 집중 데이터를 활용할 수 있습니다. 집중 모드는 휴식 시간 설정, 작업/휴식 시간 조정, 특정 작업과 세션을 미리 연결하는 작업 선택 기능을 지원합니다.
포커스 모드는 다양한 집중 전략을 지원하는 설정 가능한 포모도로 스타일 타이머를 구현합니다. 이 서비스는 부드러운 카운트다운 UI를 위해 1초 간격으로 업데이트되는 타이머를 유지하며, 전역 추적 간격과 통합되어 집중된 작업에 소요된 시간을 자동으로 추적합니다.
집중 작업 세션이 완료되면 해당 시간이 측정 시스템에 기록되어 logFocusSession()생산성 분석에 필요한 집중 데이터를 활용할 수 있습니다. 집중 모드는 휴식 시간 설정, 작업/휴식 시간 조정, 특정 작업과 세션을 미리 연결하는 작업 선택 기능을 지원합니다.
5. 휴식 알림 및 건강한 업무 습관
TakeABreakService는 누적 작업 시간을 모니터링하는 설정 가능한 휴식 알림 기능을 구현합니다. 이 기능은 글로벌 틱 스트림을 수신하고, 추적된 시간을 누적하며, 설정된 임계값(예: 집중 작업 25분마다)에 따라 알림을 발생시킵니다.
이 서비스는 앱 내 배너, 데스크톱 알림, 잠금 화면 강제 알림(Electron), 강력한 휴식 시간 확보를 위한 전체 화면 차단 등 다양한 알림 채널을 지원합니다. 사용자는 알림을 일시 중지할 수 있으며, 시스템은 실제 휴식 시간과 해제된 알림을 구분 resetTimer()합니다
생산성 향상에 도움이 되는 추가 기능은 다음과 같습니다.
- 유휴 시간 감지 :
IdleService사용자의 활동이 없을 경우 시간 추적을 일시 중지하거나 시간 수정을 요청할 수 있습니다. - 시간 추적 알림 : 시간 추적이 활성화되어 있지 않지만 활성화해야 할 경우 주기적으로 알림을 보냅니다.
- 일일 요약 : "하루 마무리 전" 워크플로를 통한 하루 마무리 검토
TakeABreakService는 누적 작업 시간을 모니터링하는 설정 가능한 휴식 알림 기능을 구현합니다. 이 기능은 글로벌 틱 스트림을 수신하고, 추적된 시간을 누적하며, 설정된 임계값(예: 집중 작업 25분마다)에 따라 알림을 발생시킵니다.
이 서비스는 앱 내 배너, 데스크톱 알림, 잠금 화면 강제 알림(Electron), 강력한 휴식 시간 확보를 위한 전체 화면 차단 등 다양한 알림 채널을 지원합니다. 사용자는 알림을 일시 중지할 수 있으며, 시스템은 실제 휴식 시간과 해제된 알림을 구분 resetTimer()합니다
생산성 향상에 도움이 되는 추가 기능은 다음과 같습니다.
- 유휴 시간 감지 :
IdleService사용자의 활동이 없을 경우 시간 추적을 일시 중지하거나 시간 수정을 요청할 수 있습니다. - 시간 추적 알림 : 시간 추적이 활성화되어 있지 않지만 활성화해야 할 경우 주기적으로 알림을 보냅니다.
- 일일 요약 : "하루 마무리 전" 워크플로를 통한 하루 마무리 검토
6. 작업 로그 및 시간표 내보내기
WorklogService는 완료된 작업과 시간 추적 데이터를 집계하여 주 단위 및 일 단위로 구성된 구조화된 작업 로그 보기를 제공합니다. 활성 저장소와 아카이브 모두에서 데이터를 가져와 완전한 이력 기록을 제공합니다.
작업 로그 내보내기 하위 시스템은 내보낼 수 있는 시간표를 생성합니다. 이 시스템은 WorklogExportComponent날짜 범위와 내보내기 형식을 선택할 수 있는 사용자 인터페이스를 제공하며, 내보내기 유틸리티는 데이터 변환 및 서식 지정을 처리합니다.
WorklogService는 완료된 작업과 시간 추적 데이터를 집계하여 주 단위 및 일 단위로 구성된 구조화된 작업 로그 보기를 제공합니다. 활성 저장소와 아카이브 모두에서 데이터를 가져와 완전한 이력 기록을 제공합니다.
작업 로그 내보내기 하위 시스템은 내보낼 수 있는 시간표를 생성합니다. 이 시스템은 WorklogExportComponent날짜 범위와 내보내기 형식을 선택할 수 있는 사용자 인터페이스를 제공하며, 내보내기 유틸리티는 데이터 변환 및 서식 지정을 처리합니다.
7. 지표 및 생산성 분석
측정 시스템은 사용자가 직접 보고하거나 도출한 생산성 데이터를 일 단위로 수집합니다. 각 Metric항목에는 생산성 점수(1~10점), 영향도 평가, 에너지 상태 확인, 간단한 카운터 클릭, 스톱워치 측정값 등이 포함될 수 있습니다.
이 서비스는 강력한 분석 방법을 제공합니다.
활동 히트맵은 GitHub 스타일의 기여 시각화를 제공하고, 평가 시트는 구조화된 자기 성찰 질문을 제공합니다.
Metric항목에는 생산성 점수(1~10점), 영향도 평가, 에너지 상태 확인, 간단한 카운터 클릭, 스톱워치 측정값 등이 포함될 수 있습니다.8. 이슈 트래커 연동
Super Productivity는 12개의 외부 이슈 트래커 와 통합되며, 각 트래커는에 전용 프로바이더 모듈로 구현되어 있습니다 .
Provider Module Sync Direction Jira jira/Two-way GitHub gitea/ (via Git provider pattern)Two-way GitLab gitlab/Two-way Gitea gitea/Two-way Trello trello/Two-way Linear linear/Two-way Azure DevOps azure-devops/Two-way OpenProject open-project/Two-way ClickUp (via provider pattern) Two-way Redmine redmine/Two-way Nextcloud Deck nextcloud-deck/Two-way CalDAV caldav/Import Calendar calendar/Import
jira/gitea/ (via Git provider pattern)gitlab/gitea/trello/linear/azure-devops/open-project/redmine/nextcloud-deck/caldav/calendar/9. 메모, 첨부 파일 및 맥락
노트 시스템( note.service.ts )은 프로젝트별로 서식 있는 텍스트 노트를 제공하며, 핸들러를 통해 드래그 앤 드롭 방식으로 이미지를 삽입할 수 있습니다 createFromDrop(). 노트는 해당 프로젝트 컨텍스트에 따라 범위가 지정되며, 순서를 변경하거나 프로젝트 간에 이동하거나 제자리에서 업데이트할 수 있습니다.
프로젝트 수준 북마크를 사용하면 링크, 파일, 심지어 셸 명령까지 특정 프로젝트에 대한 빠른 액세스 컨텍스트로 저장할 수 있습니다. 이를 통해 관련 리소스에 한 번의 클릭으로 접근할 수 있으므로 컨텍스트 전환에 따른 오버헤드를 줄일 수 있습니다.
노트 시스템( note.service.ts )은 프로젝트별로 서식 있는 텍스트 노트를 제공하며, 핸들러를 통해 드래그 앤 드롭 방식으로 이미지를 삽입할 수 있습니다 createFromDrop(). 노트는 해당 프로젝트 컨텍스트에 따라 범위가 지정되며, 순서를 변경하거나 프로젝트 간에 이동하거나 제자리에서 업데이트할 수 있습니다.
프로젝트 수준 북마크를 사용하면 링크, 파일, 심지어 셸 명령까지 특정 프로젝트에 대한 빠른 액세스 컨텍스트로 저장할 수 있습니다. 이를 통해 관련 리소스에 한 번의 클릭으로 접근할 수 있으므로 컨텍스트 전환에 따른 오버헤드를 줄일 수 있습니다.
10. 보드(칸반 보기)
보드 기능은 칸반 스타일의 작업 보드 보기를 제공합니다. 각 보드에는 구성 가능한 열이 있으며, 카드를 열 사이로 드래그하여 시각적으로 작업을 정리할 수 있습니다. 보드 상태는 프로젝트 데이터와 함께 저장되므로 세션 간에 계속 사용할 수 있습니다.
11. 데이터 관리: 가져오기, 내보내기, 백업 및 동기화
Super Productivity는 로컬 우선 방식을 채택 하여 모든 데이터가 사용자의 기기에 저장됩니다. 모듈은 포괄적인 데이터 관리 기능을 제공합니다.
- 파일 가져오기/내보내기 : JSON 내보내기/가져오기를 통한 완벽한 데이터 이동성
- 로컬 백업 : Dropbox 또는 WebDAV로의 자동 및 수동 백업
- 동기화 : Super Sync 서버 또는 WebDAV를 통한 다중 장치 동기화
개인정보 보호는 핵심 설계 원칙입니다. 사용자 계정도 없고, 데이터 수집도 없으며, 분석 기능도 없습니다. 데이터 저장 위치는 사용자가 직접 결정합니다.
Super Productivity는 로컬 우선 방식을 채택 하여 모든 데이터가 사용자의 기기에 저장됩니다. 모듈은 포괄적인 데이터 관리 기능을 제공합니다.
- 파일 가져오기/내보내기 : JSON 내보내기/가져오기를 통한 완벽한 데이터 이동성
- 로컬 백업 : Dropbox 또는 WebDAV로의 자동 및 수동 백업
- 동기화 : Super Sync 서버 또는 WebDAV를 통한 다중 장치 동기화
개인정보 보호는 핵심 설계 원칙입니다. 사용자 계정도 없고, 데이터 수집도 없으며, 분석 기능도 없습니다. 데이터 저장 위치는 사용자가 직접 결정합니다.
대화 참여하기