VEDA 프로젝트 기록
[5주차] 일정관리 앱 프로젝트
이번 프로젝트를 한 문장으로 정리하면: Qt 기반 일정관리 앱을 설계하고, 달력 중심 UI와 일정 CRUD, 검색, 입출력 기능을 하나의 데스크톱 앱으로 구현하는 과정
작성일: 2026.04.22
프로젝트 목표
- 사용자가 달력 화면을 중심으로 일정을 직관적으로 등록하고 확인할 수 있는 데스크톱 앱 만들기
- 일정 추가, 수정, 삭제, 검색 같은 핵심 기능을 하나의 흐름 안에서 자연스럽게 연결하기
- JSON/CSV 입출력과 설정 저장 기능까지 포함해 실제로 사용할 수 있는 일정관리 도구 형태로 완성하기
프로젝트 구조
이번 프로젝트는 Qt Widgets 기반으로 구성했고, 화면 구성 요소와 데이터 처리 책임을 파일 단위로 나누어 관리했다. 메인 윈도우가 전체 흐름을 조정하고, 달력/목록/설정 다이얼로그가 각각의 역할을 맡는 구조다.
| 파일 | 역할 |
|---|---|
main.cpp |
애플리케이션 진입점. QApplication 생성, 스타일시트 적용, 로케일 설정, 메타타입 등록 후 메인 윈도우를 실행한다. |
mainwindow.h / .cpp |
이벤트 핸들러, 메인 로직, 메인 창 UI 셋업, 메뉴바 UI 셋업을 담당한다. 일정 추가/수정/삭제, 검색, 파일 저장/불러오기, 설정 반영까지 전체 흐름을 조정하는 중심 파일이다. |
calendarwidget.h / .cpp |
월 단위 달력 UI와 검색 입력창을 제공한다. 선택 날짜 변경, 일정 있는 날짜 강조, 날짜별 일정 요약 렌더링을 담당한다. |
schedulelistwidget.h / .cpp |
선택된 날짜 또는 검색 결과에 해당하는 일정 목록을 카드 형태로 보여준다. 일정 추가 다이얼로그, 수정 다이얼로그, 상세 확인 UI도 함께 처리한다. |
scheduleitem.h |
일정 데이터 모델 정의 파일. 일정 ID, 날짜, 시간, 종료 일시, 제목, 메모를 하나의 구조체로 묶어 앱 전체에서 공통으로 사용한다. |
settingsdialog.h / .cpp |
설정 다이얼로그. 달력 셀당 표시 개수나 경고 표시 여부 같은 앱 환경설정을 입력받는다. |
style.qss |
앱 전역 스타일 정의 파일. 카드, 버튼, 제목, 배경 등 위젯 시각 요소를 통일감 있게 꾸민다. |
resources.qrc |
아이콘과 이미지 같은 리소스를 Qt 리소스 시스템으로 묶어 앱 내부에서 안정적으로 참조할 수 있게 한다. |
코딩 컨벤션
이번 프로젝트에서 지키려고 한 기준
- 클래스마다 책임을 분리하고, UI 위젯 단위로 파일을 나누어 유지보수성을 높이기
- 멤버 변수는
m_접두사를 사용해 지역 변수와 쉽게 구분하기 - 이벤트 처리 함수는
handle..., UI 초기화 함수는setup...형태로 이름을 통일하기 - 공용 데이터 구조는
ScheduleItem으로 통일해 위젯 간 데이터 전달 형식을 단순하게 유지하기 - 파일 저장/불러오기, 검색, 정렬 등은 메인 윈도우에 모아 흐름을 한곳에서 추적할 수 있게 하기
아직 완벽한 팀 단위 컨벤션 수준까지 다듬은 것은 아니지만, 함수 이름과 역할 분리, 멤버 변수 표기, UI/데이터 흐름 구분 같은 기본 원칙은 계속 의식하면서 구현했다.
기능 요구사항
| ID | 기능 분류 | 기능 설명 | 우선순위 |
|---|---|---|---|
| F-01 | 캘린더 뷰 | 월 단위 달력 표시, 이전/다음 달 이동, 연/월 표시 | 상 |
| F-02 | 날짜 선택 | 특정 날짜 클릭 시 해당 날짜 일정 목록 로드 | 상 |
| F-03 | 일정 표시 | 일정이 있는 날짜 강조 표시, 카드형 리스트 뷰 제공 | 상 |
| F-04 | 일정 추가 | 날짜, 시각(시작/종료), 제목, 메모 입력을 통한 일정 생성 | 상 |
| F-05 | 일정 수정/삭제 | 기존 일정의 정보 수정 및 삭제 기능 제공 | 상 |
| F-06 | 일정 검색 | 제목 또는 메모 키워드 기반 검색 기능 | 중 |
| F-07 | 데이터 입출력 | JSON 저장/불러오기(백업), CSV 내보내기(공유) | 중 |
| F-08 | 설정 저장 | QSettings를 이용한 앱 설정(경고 여부 등) 저장 | 하 |
시현 영상
크로뮴 기반 브라우저(엣지, 크롬 등)에서는 동영상이 재생되지 않을 수 있습니다.
이 경우 파이어폭스 또는 사파리로 다시 방문하거나, MOV 영상 재생을 지원하는 확장자를 설치하거나, 영상을 저장한 뒤 로컬에서 실행해 주세요.
사실 크롬을 삭제하고 파이어폭스로 갈아타는 것을 추천합니다.
프로젝트 결과
정리
- 사용자가 복잡한 설정, 로그인 과정 없이 즉시 일정을 기록하고 확인할 수 있는 효율적인 도구를 제공할 수 있게 되었다.
- 달력 뷰와 카드형 일정 목록을 연결해 날짜 선택부터 일정 확인까지의 흐름을 자연스럽게 만들었다.
- 데이터 내보내기 기능을 통해 개인 정보 관리의 투명성을 확보했다. 내 데이터는 내가 직접 보관하고 옮길 수 있다는 점이 중요했다.
이번 프로젝트는 단순히 UI만 만든 것이 아니라, 사용자 이벤트 처리, 일정 데이터 구조 설계, 파일 입출력, 설정 저장까지 한 번에 묶어 보면서 작은 데스크톱 앱 하나가 어떻게 구성되는지 체감할 수 있었던 작업이었다.