
Python


Project Workplan2는 약 10년간 사용해 온 기존 Workplan을 현재 업무 환경에 맞게 전면 재설계한 Django 기반 사내 업무 관리 Web Application이다.
기존 시스템의 이름을 이어 Workplan2라고 명명했지만, 단순 기능 추가나 화면 리뉴얼이 아니라 업무 프로세스 분석부터 Database 설계, 화면 구조, 주요 기능까지 새롭게 구성했기 때문에 사실상 신규 시스템에 가깝다.
개발 기간 : 10월 2일 ~ 11월 22일
| Project | 업무 · 근태 · 보고 통합 관리 시스템 |
| Role | 업무 분석 · 기획 · DB 설계 · UI/UX · Backend · Frontend · 배포 |
| Backend | Python 3.11 · Django · MariaDB |
| Frontend | Django Template · HTML · CSS · JavaScript · CKEditor 5 |
| Data / Integration | MariaDB · Excel · openpyxl · Outlook 연동 |
| Deployment | IIS · wfastcgi |
| Result | 업무 기록 통합 · 근태 공유 · 주간 보고 자동화 · 반복 관리 업무 감소 |
기존 Workplan은 약 10년 동안 실제 업무에 사용되어 온 시스템이었다.
오랜 기간 업무 방식과 관리 항목이 변화하면서 현재 사용 방식과 맞지 않는 기능이 생겼고, 반대로 근태 공유, 업무 보고 자동화, 개인별 설정처럼 새롭게 필요한 기능도 늘어났다.
기존 프로그램을 계속 부분 수정하기보다 현재 업무 프로세스를 다시 분석한 뒤 필요한 기능을 중심으로 구조를 재설계하는 것이 유지보수와 확장성 측면에서 더 적합하다고 판단했다.
기존 Workplan
↓
약 10년간 운영
↓
업무 방식 및 요구사항 변화
↓
기존 구조 부분 수정의 한계
↓
업무 프로세스 재분석
↓
Database / UI / 기능 전면 재설계
↓
Workplan2개발을 시작하기 전에 사용자 개인 영역, 팀 공통 영역, 업무 보고, 근태, 설정 기능을 먼저 나누고 각 메뉴에서 어떤 데이터를 조회하고 수정할 것인지 Storyboard 형태로 정리했다.
화면 단위 기능과 Django Application의 역할도 함께 구분해, 이후 구현 단계에서 기능별 책임이 섞이지 않도록 구성했다.
Workplan2
├─ My Page
│ └─ 개인 주간 업무 기록
│
├─ 근태
│ ├─ 개인 근태
│ ├─ 휴가
│ ├─ 연장 근무
│ └─ 남은 연차
│
├─ 팀 근태
│ ├─ 팀원별 근태
│ ├─ 휴가 현황
│ └─ OT 집계
│
├─ 업무 보고
│ ├─ 고객사
│ ├─ 프로젝트
│ ├─ 작업 내용
│ └─ 상 / 하반기 요약
│
├─ 업무 현황
│ ├─ 주간 팀 업무
│ ├─ 작성 완료 상태
│ └─ Excel Export
│
├─ 정보
│ └─ 팀 공통 정보
│
└─ 설정
├─ 고객사
├─ 프로젝트
├─ 작업명
├─ 작업 구분
└─ 개인별 주요 설정기능 구현부터 시작하기보다 메뉴 구조 → 데이터 범위 → 사용자 동작 → Database 구조를 먼저 정리한 뒤 개발을 진행했다.
기존 기능을 그대로 다시 구현하는 것보다 실제 사용자가 반복적으로 수행하던 업무를 줄이고 개인 업무와 팀 공통 업무를 명확하게 구분하는 것을 중요한 설계 기준으로 잡았다.
개인 영역 ├─ 개인 근태 ├─ 업무 기록 ├─ 업무 보고 ├─ 개인별 표시 순서 └─ 개인 설정 팀 영역 ├─ 팀 근태 현황 ├─ 프로젝트 공유 ├─ 업무 진행 현황 ├─ 보고 완료 여부 └─ 팀 정보 공유 관리 영역 ├─ 사용자 / 조직 관리 ├─ 공통 기준 데이터 ├─ Excel 보고서 └─ 기록 및 상태 관리
같은 데이터를 사용하더라도 모든 사용자가 공유해야 하는 정보와 개인에게만 적용되는 설정을 구분하고, 반복적인 확인·집계·보고 업무는 가능한 한 시스템이 처리하도록 설계했다.
업무용 시스템이지만 기능만 구현하는 데 그치지 않고, 사용자가 매일 반복적으로 사용하는 화면이라는 점을 고려해 UI Concept도 별도로 정리했다.
기존에 자주 사용하던 Gray 중심의 화면에서 벗어나 White Background와 Dark Navigation을 기본으로 하고, Green과 Blue 계열을 주요 Action Color로 사용하는 방향으로 디자인했다.
Background #FFFFFF Navigation #333B3F Primary #00B894 Primary Hover #00A67D Secondary #0A84FF Secondary Hover#006FDB Accent #FF5A5F
근태 Calendar와 상태값처럼 빠르게 구분해야 하는 정보에는 색상과 Icon을 활용하고, 주요 Menu는 화면 왼쪽 Navigation에 고정해 업무 간 이동을 단순화했다.
py -3.11 -m venv vWorkplan2 cd D:\Develop\D_workplan2\vWorkplan2\Scripts activate cd../.. python.exe -m pip install --upgrade pip
pip install django pip install pymysql pip install django-cors-headers pip install Pillow pip install holidays pip install openpyxl pip install pywin32 pip install wfastcgi pip install django-ckeditor-5 django-admin startproject back .
holidays는 공휴일 및 근태 처리에 사용했고, openpyxl은 업무 및 근태 데이터를 Excel 형태로 출력하는 기능에 활용했다. pywin32는 사내 환경과 연계되는 일부 기능에 사용했다.
Database는 MariaDB를 사용했으며 기존 Workplan의 Database를 그대로 이전하지 않고 Workplan2의 새로운 업무 구조에 맞춰 다시 설계했다.
MariaDB 설치와 Django 연동 과정은 별도의 문서로 정리했다.
[python/setting] Python – Django 설치 + 셋팅
CREATE DATABASE workplan2; USE workplan2; SHOW DATABASES;
python manage.py makemigrations python manage.py migrate python manage.py createsuperuser
하나의 Django Application에 모든 기능을 넣기보다는 업무 영역에 따라 기능을 나눠 관리하도록 구성했다.
python manage.py startapp org python manage.py startapp web python manage.py startapp work python manage.py startapp check python manage.py startapp task python manage.py startapp status python manage.py startapp record python manage.py startapp setting python manage.py startapp info python manage.py startapp utils
org └─ 사용자 / 조직 정보 web └─ Index / My Page / Login work └─ 개인 업무 기록 check └─ 근태 / 업무 상태 확인 task └─ 프로젝트 / 세부 작업 status └─ 팀 주간 현황 record └─ 주요 업무 / 보고 기록 setting └─ 고객사 / 프로젝트 / 작업 기준 정보 info └─ 팀 공통 정보 utils └─ 공통 기능
초기 Storyboard 단계에서부터 메뉴와 Django App의 역할을 연결해 두고, 사용자·업무·상태·설정과 같이 성격이 다른 데이터를 분리해 관리하도록 했다.
업무 시스템이라는 특성상 사용자와 조직 정보는 근태, 업무 보고, 프로젝트 관리 등 여러 기능에서 공통으로 사용하는 핵심 데이터였다.
Django의 기본 Username 대신 Email을 로그인 ID로 사용하는 Custom User Model을 구성하고 사용자와 조직, 근무 여부, 입사 정보 등을 연결했다.
from django.contrib.auth.models import (
AbstractBaseUser,
BaseUserManager,
PermissionsMixin,
)
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
if not email:
raise ValueError('이메일은 필수입니다.')
email = self.normalize_email(email)
user = self.model(
email=email,
**extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
user_code = models.AutoField(primary_key=True)
email = models.EmailField(unique=True)
user_name = models.CharField(max_length=100)
user_department = models.ForeignKey(
Department,
on_delete=models.CASCADE,
null=True,
blank=True
)
user_team = models.ForeignKey(
Team,
on_delete=models.CASCADE,
null=True,
blank=True
)
user_start = models.DateField(
null=True,
blank=True
)
is_manager = models.BooleanField(default=False)
is_working = models.BooleanField(default=True)
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = 'email'
def __str__(self):
return self.user_name사용자 정보는 단순 로그인에만 사용하는 것이 아니라 근태 기록, 개인 업무 기록, 팀 현황, 개인 설정 등의 기준 데이터로 활용했다.
Workplan2에서 많은 시간이 필요했던 부분은 Django 자체의 구현보다 업무 데이터가 누구에게 어떻게 보여야 하는지를 설계하는 과정이었다.
같은 데이터를 사용하더라도 팀 전체가 공유해야 하는 기준 정보와 각 사용자에게만 적용되어야 하는 설정을 구분해야 했다.
예를 들어 고객사, 프로젝트, 작업명과 같은 기준 데이터는 팀에서 함께 사용하지만, 개인이 자주 사용하는 의뢰자나 화면에서 보고 싶은 항목의 순서처럼 개인화할 필요가 있는 데이터는 별도로 관리하도록 설계했다.
팀 공통 기준 데이터 ├─ 고객사 ├─ 프로젝트 ├─ 작업명 └─ 작업 구분 개인 설정 ├─ 주요 의뢰자 ├─ 개인별 표시 순서 └─ 개인별 View 설정
동일한 Project 데이터를 여러 사용자가 공유하면서도 개인별 View와 Preference는 독립적으로 유지하는 구조가 필요했다.
이처럼 데이터의 소유 범위와 공유 범위를 구분하고 이를 Database와 UI에 함께 반영하는 것이 프로젝트에서 가장 많은 설계가 필요했던 부분 중 하나였다.
개인 근태는 월 단위 Calendar에서 출석, 휴가, 연장 근무 및 남은 연차를 한 번에 확인할 수 있도록 구성했다.
날짜를 선택하면 해당 날짜의 근태 정보를 입력할 수 있도록 하고, 연차뿐 아니라 반차, 출장, Conference, 기타 휴가와 연장 근무 시간을 하나의 화면에서 관리하도록 했다.
월간 Calendar
↓
날짜 선택
↓
근태 정보 입력
├─ 출석
├─ 연차
├─ 오전 / 오후 반차
├─ 기타 휴가
├─ 출장 / Conference
└─ 연장 근무
↓
잔여 연차 및 월별 상태 반영근태 데이터를 별도의 문서나 메신저에서 다시 공유하지 않고 시스템 데이터로 관리하도록 하는 것이 목적이었다.
개인의 근태 정보 중 팀에서 공유할 필요가 있는 데이터는 팀 현황 화면에서 함께 확인할 수 있도록 했다.
팀 전체의 휴가와 연장 근무 현황을 확인하고, 필요한 경우 특정 구성원을 선택해 개인별 상세 근태를 조회하도록 구성했다.
연장 근무 데이터는 별도의 집계표로 출력할 수 있도록 해 관리자가 다시 수작업으로 데이터를 모으는 과정을 줄였다.
업무 기록은 고객사 → 프로젝트 → 작업 내용의 구조를 기준으로 작성하도록 구성했다.
고객사 ↓ 프로젝트 ↓ 작업명 ↓ 일별 업무 기록 ↓ 주간 / 월간 / 반기 단위 집계
동일한 업무 내용이 여러 번 등록된 경우에는 집계 시 업무 시간을 합산할 수 있도록 해, 업무 기록을 다시 정리하지 않고도 기간별 업무량을 확인할 수 있도록 했다.
업무 데이터는 단순 일일 기록으로 끝나지 않고 주간 현황과 상·하반기 업무 요약에도 다시 활용되도록 설계했다.
My Page에서는 사용자가 자신의 일주일 업무 기록을 한 화면에서 확인하고, 각 날짜에 작성된 프로젝트와 업무 내용을 다시 열어볼 수 있도록 했다.
업무 작성이 끝나면 완료 상태를 등록하고, 팀 현황에서는 전체 구성원의 작성 여부를 확인할 수 있도록 구성했다.
사용자 일일 업무 기록
↓
주간 업무 구성
↓
작성 완료 상태 등록
↓
팀 주간 현황
├─ 구성원별 업무 확인
└─ 보고 작성 완료 여부 확인
↓
Excel 보고서 자동 생성
↓
확인 및 제출기존에는 구성원의 업무 내용을 확인한 뒤 보고서를 수동으로 다시 작성해야 했지만, Workplan2에서는 입력되어 있는 업무 데이터를 이용해 업무 보고와 세부 작업 현황을 Excel 형태로 출력할 수 있도록 했다.
실제 사용 과정에서는 이 기능을 통해 주 단위로 몇 시간씩 소요되던 반복적인 보고 작업을 줄일 수 있었다는 피드백을 받을 수 있었다.
일상적으로 작성한 업무 기록을 나중에 다시 활용할 수 있도록 고객사와 프로젝트 기준으로 업무 데이터를 분류하고, 상·하반기 단위의 업무 내용을 조회할 수 있도록 구성했다.
사용자가 평소 입력한 업무 기록이 주간 보고에서 끝나는 것이 아니라 장기간의 업무 기록과 프로젝트별 작업 이력으로 다시 활용될 수 있도록 한 것이 목적이었다.
일일 업무 기록
↓
주간 업무
↓
월별 업무
↓
Project별 집계
↓
상 / 하반기 업무 요약개발 기간 : 10월 2일 ~ 11월 22일
Workplan2는 기존 시스템의 화면만 변경한 프로젝트가 아니라 업무 프로세스를 다시 분석하고 Database와 화면 구조를 현재 사용 방식에 맞게 재설계한 업무 시스템이었다.
개인 업무 기록과 근태를 한 곳에서 관리하고, 필요한 데이터를 팀과 공유하며, 주간 업무 현황과 보고서를 동일한 원본 데이터에서 자동으로 구성할 수 있도록 했다.
또한 고객사·프로젝트·작업과 같은 공통 기준 데이터와 개인별 설정을 분리하고, 일상적으로 작성한 업무 데이터를 주간·월간·반기 단위로 다시 활용할 수 있도록 했다.








Workplan2를 실제 업무에 배포한 이후, 현재 범위를 넘어 더 큰 조직 단위의 근태·업무 보고·휴가 관리 시스템으로 확대할 수 있는지 검토해 달라는 추가 요청도 받았다.
초기 목적은 기존 Workplan을 현재 업무 방식에 맞게 개선하는 것이었지만, 실제 사용 이후 다른 범위의 업무 시스템으로 확장 가능성을 검토하게 되었다는 점에서도 의미가 있었다.
Workplan2를 개발하면서 가장 크게 느낀 점은 업무 시스템에서는 단순히 화면과 기능을 구현하는 것보다 실제 업무가 어떤 데이터 흐름을 가지고 있는지 먼저 이해하는 것이 중요하다는 점이었다.
사용자, 조직, 근태, 고객사, 프로젝트, 작업, 업무 기록, 보고 데이터가 서로 연결되기 때문에 Database 설계 단계에서 현재 기능뿐 아니라 이후의 조회와 집계 방식까지 함께 고려해야 했다.
특히 같은 데이터를 개인 화면, 팀 현황, 주간 보고, 반기 업무 요약 등 여러 목적으로 다시 사용하면서 하나의 업무 데이터를 반복 입력하지 않고 여러 기능에서 재활용할 수 있도록 만드는 것이 중요한 설계 목표였다.
또한 개발 시작 단계에서 메뉴와 데이터 구조, 화면 흐름을 먼저 Storyboard로 정리하면서 기능을 구현하기 전에 업무 범위와 데이터 관계를 정의하는 과정의 중요성도 확인할 수 있었다.
기존 시스템 분석
↓
업무 프로세스 분석
↓
Storyboard / 화면 흐름 설계
↓
공통 데이터와 개인 데이터 구분
↓
Database 재설계
↓
UI / Backend / Frontend 구현
↓
업무 기록 · 근태 · 보고 통합
↓
Excel / 기간별 집계 자동화
↓
실제 업무 배포
↓
사용자 피드백 및 확장 요구Project Workplan2는 기존 업무 시스템 분석 → 요구사항 정의 → 화면 및 업무 흐름 설계 → Database 재설계 → Full-stack 구현 → 실제 배포 → 사용자 피드백까지 하나의 업무 시스템을 처음부터 다시 설계하고 운영한 프로젝트라는 점에서 의미가 있다.
기타 프로젝트 : Project 전체 보기