본문 바로가기
Project/네모진 투두

[Flutter] 일정 관리 앱 개발 후기 - 네모진 투두

by NAIMJAE 2025. 3. 26.

Ⅰ 앱 소개

  • 네모진 투두’는 일정을 효과적으로 관리할 수 있도록 도와주는 기본형 투두앱입니다.
  • 날짜 중심으로 일정을 생성하고, 반복되는 일정도 손쉽게 등록하고 관리할 수 있습니다.
  • 깔끔한 UI와 직관적인 UX로 누구나 빠르게 사용할 수 있도록 설계했습니다.

 

Ⅱ 왜 이 앱을 만들었나?

Flutter를 배운 지 약 3개월쯤 되었을 무렵, 지금까지 익힌 내용을 점검하고 한 단계 더 실력을 끌어올리고 싶다는 생각이 들었다. 그래서 다양한 기본형 앱들을 만들어보자는 목표를 세웠고, 그 첫 프로젝트로 가장 대표적인 Todo 앱을 선택하게 되었다. 단순히 일정의 CRUD 기능만 구현하는 것은 너무 기본적인 수준이라 느껴졌기에, 반복 일정 관리 기능을 추가해 보기로 했다. 이 앱을 통해 지금까지 학습했던 Flutter의 개념들을 실제로 적용해보며 점검할 수 있었고, 결과적으로, 이 앱은 단순한 투두앱을 넘어 내가 배우고 성장하는 데 중요한 이정표가 되었다.

 

Ⅲ 기획과 초기 구상 과정

 

사실 Todo 앱은 개발 공부를 하면서 여러 번 접했던 익숙한 주제였다.

그래서 개발 초기 단계에서는 복잡한 기획 없이 간단한 디자인 시안과 테이블 설계 정도만 하고 바로 개발을 시작했다. 정말 어렵지 않을 거라 생각해서, 그림판으로 대충 UI를 그려두고 바로 코딩을 시작했을 정도였다.

 

처음에는 큰 어려움 없이 빠르게 완성할 수 있을 거라 예상했지만, 반복 일정 기능이 발목을 잡았다. 반복 일정 기능을 구현하기 위해 CRUD 로직이 복잡해졌고, 서비스 로직 전반에 걸쳐 반복 일정에 대한 조건 처리를 따로 넣어야 했다.

Flutter 역시 아직은 익숙하지 않은 도구였기 때문에 시행착오가 있었지만, 개발 속도를 늦춘 가장 큰 이유는 “기능 완성도가 높은 앱을 만들고 싶다”는 욕심 때문이었다.

 

초기 기획 단계에서는 사용자의 프로필 관리 기능도 포함할 계획이었지만, 전체 흐름을 고려했을 때 Todo 앱이라는 특성과 잘 맞지 않는다고 판단해 개발 과정 중 제거했다.

 

Ⅳ 일정 분류 및 반복 일정 구조 설계

앱에서는 일정을 효율적으로 관리하고 데이터 중복을 줄이기 위해 비정기 일정반복 일정으로 나눈다.

 

비정기 일정

  • 비정기 일정은 하루에만 발생하는 단일 일정
  • tasks 테이블에 기본 정보가, task_detail 테이블에 세부 정보가 저장

반복 일정

  • 반복 일정은 매일, 매주, 매월 중 하나의 주기로 반복되는 일정
  • 이를 위해 별도의 repeat_task 테이블을 생성
  • 사용자가 반복 일정을 등록하면 tasks 테이블이 아닌 repeat_task 테이블에만 저장
  • 사용자가 반복 일정을 완료하면, 해당 날짜 기준으로 tasks 테이블에 실제 일정이 생성되는 구조로 설계

 

Ⅴ 개발 환경 및 사용 기술 스택

🛠 개발 환경

  • Flutter (3.24.3)
  • Dart (3.5.3)

🛠 주요 패키지 및 라이브러리

  • flutter_riverpod (2.6.1) → 전역 상태 관리 및 UI 반응성 처리
  • shared_preferences (2.2.2) → 로컬 저장소를 통한 홈 화면 위젯과 데이터 연동
  • home_widget (0.7.0) → 홈 화면 위젯 연동 기능 구현
  • dotted_border (2.1.0) → 점선 테두리 효과 적용
  • sqflite (2.4.1) → SQLite 기반 로컬 데이터베이스 저장소 구성
  • path (1.9.0) → 데이터베이스 경로 설정 및 파일 경로 관리
  • logger (2.5.0) → 로그 출력 및 디버깅
  • intl (0.18.1) → 날짜 및 시간 포맷 처리
  • uuid (4.5.1) → 각 일정/반복 일정 식별을 위한 고유 ID 생성

 

Ⅵ 개발 과정에서의 아쉬움

🎞 애니메이션 구현의 어려움

아직 Flutter를 완벽하게 다루지 못하는 단계이다 보니, 앱에 내가 원하던 다양한 애니메이션 효과를 충분히 적용하지 못한 점이 가장 아쉬웠다. 애니메이션에 대한 이해가 부족해서, 인터넷에서 참고한 가장 기본적인 효과들만 일부 적용하는 수준에 그쳤다. 향후 애니메이션 개념에 대한 이해가 깊어지면, 앱 전반에 자연스러운 전환과 인터랙션을 더할 수 있도록 리팩토링할 계획이다.

 

📲 홈 화면 위젯 구현의 복잡함

이번 프로젝트에서 홈 화면 위젯을 처음으로 시도해봤는데, Flutter는 크로스 플랫폼이다 보니 Flutter 코드만으로는 위젯 구현이 불가능했고, 플랫폼별 네이티브 코드를 직접 다루어야 했다. 홈 화면 위젯의 개념을 이해하고 실제로 앱에 연동하는 데 많은 시간이 걸렸고, 현재까지도 완성도에 100% 만족하진 못하고 있다. 하지만 이번 시도를 통해 네이티브 연동 방식에 대한 감을 잡을 수 있었고, 추후에는 더 나은 형태로 개선해보고 싶다.

 

Ⅶ  개발 후 느낀점

Flutter를 배울 때 모듈화의 중요성을 여러 번 강조해서 들었던 기억이 있다.

 

이전 연습 프로젝트에서는 그 부분이 다소 부족했지만, 이번 프로젝트에서는 최대한 구조화하고, 기능별로 분리해서 관리하려고 노력했다는 점에서 만족스럽다. 또한, 반복되는 코드를 줄이기 위해 노력했지만, 완전히 없애진 못한 부분들도 있었다. 물론 더 숙련된 개발자였다면 더 간결하고 효율적인 구조를 만들었을지도 모른다.

 

그럼에도 이번 프로젝트를 통해 Flutter 앱 개발 전반에 대한 감을 확실히 잡을 수 있었고, 실력도 한 단계 성장했다고 느낀다. 처음 Flutter를 공부하는 사람이라면, 나처럼 Todo 앱을 직접 만들어보는 것을 꼭 추천하고 싶다. 기능 하나하나에 대해 직접 설계하고 구현하면서 많은 걸 체득할 수 있었기 때문이다. 무엇보다도, 이 프로젝트 덕분에 다음에는 더 복잡한 앱도 도전해볼 수 있겠다는 자신감과 동기를 얻었다.