업무 시스템 · 2025
개발 프로젝트 일정 관리 시스템
여러 개발 프로젝트의 일정을 하나의 간트 차트로 보는 사내 데스크톱 앱과 API 서버
제조업체의 개발 프로젝트 일정을 프로젝트별 파일이 아니라 한 화면의 간트 차트에서 비교하도록, 데스크톱 클라이언트와 API 서버를 함께 만들었습니다.
- 고객
- 비공개 고객
- 분야
- 업무 시스템

개요
제조업체의 개발 조직에서 쓰는 프로젝트 일정 관리 프로그램입니다. 하나의 개발 프로젝트는 설계 검토, 금형 제작, 시작품 생산, 시험, 승인처럼 순서가 있는 태스크로 이어지고, 이런 프로젝트가 동시에 여러 건 진행됩니다.
엔지니어는 데스크톱 앱으로 로그인해 자신이 참여하는 프로젝트와 다른 프로젝트의 일정을 같은 시간축 위에서 봅니다. 프로젝트와 태스크, 담당자, 코멘트는 API 서버가 데이터베이스에 보관하므로, 파일을 주고받지 않고 각자의 화면에서 같은 자료를 봅니다.
과제
프로젝트마다 일정 파일을 따로 두면 한 프로젝트 안의 순서는 보이지만, 여러 프로젝트를 겹쳐 놓고 보기는 어렵습니다. 이 시스템은 다음을 전제로 만들었습니다.
- 수십 건의 프로젝트와 프로젝트마다 수십 개의 태스크를 한 화면에서 비교해야 한다
- 몇 주 단위로 자세히 보는 때와 수개월 전체를 훑는 때가 번갈아 필요하다
- 계정과 권한이 나뉘어야 한다. 계정 생성과 프로젝트 삭제는 관리자만 할 수 있어야 한다
- 일정 변경의 배경을 프로젝트에 메모로 남겨야 한다
해결 방법
메인 화면은 왼쪽에 프로젝트 목록, 오른쪽에 날짜 축을 둔 간트 차트입니다. 한 행이 한 프로젝트이고, 그 프로젝트의 태스크가 색이 다른 막대로 같은 행에 놓입니다. 프로젝트 이름 옆에는 표시 우선순위와 본인 참여 여부를 함께 표시합니다.
- 슬라이더로 하루의 표시 폭을 조절해, 날짜 단위로 자세히 보거나 수개월을 한 화면에 넣습니다
- 날짜 눈금은 표시 폭에 맞춰 간격을 자동으로 정하고, 토요일과 일요일은 다른 색으로 구분합니다
- 가로·세로 스크롤과 휠, 방향키로 이동하며 왼쪽 프로젝트 영역과 위쪽 날짜 머리글은 고정됩니다
- 상단에는 기간, 거래처, 공장지, 태그 같은 검색 조건 패널과 표시 옵션을 두었습니다
프로젝트 이름을 누르면 상세 화면이 열립니다. 상세 화면에서는 프로젝트 속성과 코멘트 이력을 보고, 태스크를 한 행씩 펼친 간트 차트에서 태스크 막대의 양 끝을 끌어 기간을 조정합니다.

시스템 구조
구성
- 데스크톱 클라이언트: Python과 wxPython. 화면 구성과 간트 차트 렌더링을 맡습니다
- API 서버: FastAPI. 인증, 계정, 프로젝트, 태스크, 코멘트 엔드포인트를 제공합니다
- 데이터베이스: SQLAlchemy ORM으로 다루며, 개발 단계에서는 SQLite를 씁니다
데이터 흐름
- 클라이언트가 아이디와 비밀번호로 로그인하면 서버가 JWT 토큰을 발급합니다
- 이후 모든 요청은 토큰을 헤더에 실어 보내고, 서버가 토큰에서 사용자와 권한을 확인합니다
- 서버는 Pydantic 모델로 응답을 정리하고, 클라이언트는 같은 모양의 모델로 받아 화면에 올립니다
데이터 모델
- 엔지니어: 관리자와 팀장 여부를 함께 가집니다
- 프로젝트: 공장, 핏먼트, 사이즈, 상태와 생성·수정 일시를 가집니다
- 프로젝트-엔지니어: 한 프로젝트에 여러 담당자를 연결하는 다대다 관계입니다
- 태스크: 시작일, 종료일, 상태와 선행 태스크 참조를 가집니다
- 코멘트: 작성자와 작성 일시를 남겨 프로젝트별로 쌓입니다
구현
간트 차트는 기성 위젯 대신 직접 그렸습니다. 프로젝트 행과 태스크 막대, 날짜 머리글, 고정 영역, 스크롤바의 동작을 요구에 맞춰 제어해야 했기 때문입니다.
- 더블 버퍼링으로 다시 그릴 때의 깜빡임을 없애고, 화면에 보이는 행만 그립니다
- 스크롤바도 직접 그려, 막대 끌기와 트랙 클릭을 처리하면서 왼쪽 프로젝트 영역과 날짜 머리글을 고정합니다
- 하루 폭이 좁아지면 눈금 간격을 다시 계산해, 날짜 글자가 겹치지 않도록 일정 간격마다만 표시합니다
- 태스크 막대 색의 밝기에 따라 막대 위 글자색을 검정과 흰색 중에서 고릅니다
- 상세 화면의 태스크 막대는 양 끝 몇 픽셀 안을 누르면 기간 조정으로, 가운데를 누르면 선택으로 구분합니다
서버는 권한을 의존성으로 분리했습니다. 로그인 사용자 확인과 관리자 확인을 각각 함수로 두고 엔드포인트에 붙여, 계정 생성·삭제와 프로젝트 삭제는 관리자만 호출할 수 있습니다. 비밀번호는 bcrypt로 해시해 저장하고, 발급한 토큰에는 만료 시각을 넣습니다. 클라이언트도 로그인 결과의 권한에 따라 관리자 메뉴를 보이거나 감춥니다.

결과
여러 프로젝트의 태스크 일정을 같은 시간축 위에서 비교할 수 있게 되었습니다. 표시 폭을 바꾸면 같은 화면에서 며칠 단위의 흐름과 수개월 전체를 오가며 볼 수 있습니다.
프로젝트 속성과 담당자, 코멘트가 서버 한 곳에 모여, 일정 파일을 따로 주고받지 않고 각자의 화면에서 확인합니다. 일정이 바뀐 배경은 프로젝트 코멘트로 남습니다.
계정과 권한은 관리자 화면에서 관리하고, 관리자만 할 수 있는 동작은 서버에서도 다시 확인합니다.
사용 기술
- Python
- wxPython
- FastAPI
- SQLAlchemy
- Pydantic
- SQLite
- JWT
화면


진행하려는 프로젝트가 있으신가요?
해결하려는 문제와 지금 상황을 알려 주시면, 어떤 방식이 맞을지 함께 검토합니다.
프로젝트 문의하기