개발 환경 및 기술 스택
본 시스템은 Vue.js를 프론트엔드 코어 프레임워크로 사용하고, Django/Flask를 백엔드 프레임워크로 채택했습니다. 주요 기술로는 HTML, JavaScript, CSS3, Python, MySQL이 사용되었습니다. Python 언어로 개발되었으며, 코드 작업은 주로 PyCharm에서 이루어집니다. 시스템에서 사용되는 모든 테이블과 데이터는 MySQL 데이터베이스에 저장되어 데이터 관리를 용이하게 합니다. 본 프로젝트는 WEB 기반 플랫폼에서 개발되었습니다.
- 개발 언어: Python
- 프레임워크: Flask 또는 Django
- Python 버전: 3.7.7
- 데이터베이스: MySQL
- 데이터베이스 도구: Navicat
- 개발 도구: PyCharm
- 브라우저: Google Chrome
Python 언어의 특징
Python은 확장성이 뛰어나며, C 언어로 작성된 모듈을 컴파일하여 인터프리터에 연결함으로써 Python에서 C 모듈의 인터페이스를 호출할 수 있습니다. 반대로, C 언어에서도 Python 인터프리터를 연결하여 C 코드 내에서 Python을 호출할 수 있습니다. Python은 해석형, 컴파일형, 상호작용형, 객체 지향적인 특성을 결합한 고수준 스크립트 언어로, 가독성이 매우 뛰어납니다. 다른 언어들이 종종 특수 기호를 사용하는 반면, Python은 영어 키워드를 주로 사용하여 더 직관적인 문법 구조를 제공합니다.
문제 해결 접근 방식
프론트엔드 데이터 수집 및 시각화 연구를 수행하고, Django 프레임워크와 Python 프로그래밍 문법에 익숙해졌습니다. 해결하고자 한 주요 과제는 간단하면서도 사용하기 쉬운 프론트엔드 페이지를 설계하고, 데이터 간의 관계를 명확히 하며, 데이터베이스 테이블 구조를 최적화하는 것이었습니다. 시스템은 객체 지향 설계 방법론을 기반으로 개발되었으며, 이는 구조 분석에 기반하여 데이터를 중심으로 한 설계 방식입니다. 핵심 아이디어는 데이터와 이를 처리하는 연산을 '클래스'라는 데이터 구조로 캡슐화하는 것입니다. 이러한 접근 방식은 현실 세계의 모델을 더 자연스럽고 합리적으로 표현하여 인간의 인지 방식을 더 잘 반영합니다.
프레임워크 소개
Flask는 현재 매우 인기 있는 웹 프레임워크로, Python 프로그래밍 언어를 사용하여 구현됩니다. Flask의 주요 특징은 핵심 구조가 단순하면서도 확장성과 호환성이 뛰어나다는 점입니다. 개발자는 Python 언어를 사용하여 웹사이트나 웹 서비스를 빠르게 구축할 수 있습니다. 일반적으로 Flask는 데이터베이스나 템플릿 엔진과 같은 구성 요소를 강제하지 않으므로, 사용자는 필요에 따라 다양한 데이터베이스와 템플릿 엔진을 자유롭게 선택할 수 있습니다.
Django는 MVC(Model-View-Controller) 패턴을 따르지만, Django에서는 컨트롤러 역할을 프레임워크 자체에서 처리합니다. 따라서 Django는 Model(모델), Template(템플릿), View(뷰)에 더 중점을 두며, 이를 MTV 패턴이라고 부릅니다.
- M (Model): 데이터 접근 계층으로, 데이터 저장, 유효성 검증, 데이터 간의 관계 등 데이터와 관련된 모든 작업을 처리합니다.
- T (Template): 표현 계층으로, 페이지나 다른 문서 유형에서 데이터를 표시하는 방법을 결정합니다.
- V (View): 비즈니스 로직 계층으로, 모델에 접근하고 적절한 템플릿을 호출하는 로직을 포함합니다. View는 Model과 Template 사이의 다리 역할을 합니다.
기술 로드맵
- 프론트엔드: Vue
- 백엔드: Python (Django/Flask)
- 데이터베이스: MySQL
- 개발 도구: PyCharm, Navicat for MySQL
사용자 요구사항을 반영하여, 본 시스템은 널리 사용되는 Python 언어, Django 프레임워크, Vue 등 핵심 기술을 활용하여 PyCharm 개발 환경에서 설계 및 개발되었습니다. MySQL 데이터베이스를 사용하여 엔터티-관계 다이어그램과 데이터 테이블을 설계하였으며, 이는 데이터 저장 및 관리를 위한 효율적인 데이터 웨어하우스 역할을 합니다. 핵심 기술을 활용하여 시스템을 개발하고, 요구사항 분석을 통해 주요 사용자 요구를 파악한 후 기능 모듈을 설계 및 구현했습니다. 마지막으로 기능 테스트를 포함한 시스템 테스트를 통해 오류를 수정하고 시스템을 개선하여 최종 시스템이 사용자 요구사항을 더 잘 충족할 수 있도록 했습니다.
운영 용이성
운영 용이성은 시스템 설계 시 다양한 사용자 유형이 각 작업 절차를 명확하게 이해할 수 있는지 고려해야 함을 의미합니다. 관리자 측면에서는 작업의 편의성과 데이터 입력의 단순성도 고려해야 하며, 관리 시스템이 사용자에게 추가적인 부담을 주지 않아야 합니다. 또한, 시스템 입력 시 사용자에게 적절한 안내나 경고를 제공해야 합니다. 예를 들어, 특정 양식 항목에 대해 사용자에게 입력이 필요한지 친절하게 안내하고, 다양한 유형의 데이터를 올바르게 입력하는 방법을 알려주어 사용자가 최대한 쉽게 시스템을 조작할 수 있도록 해야 합니다.
성능, 보안, 부하 관리
시스템 설계 시 예상되는 최대 동시 사용자 수를 고려하여 이에 맞는 하드웨어 서버, 네트워크 대역폭, 업로드/다운로드 속도 등을 선택했습니다. 시스템의 쿼리 응답 시간은 2초 이내로 유지되도록 최적화되었으며, 높은 동시 요청이 발생하는 상황에서도 쿼리 시간이 크게 증가하지 않도록 설계되었습니다. 보안 측면에서는 모든 관리 시스템에서 데이터 보안이 매우 중요하므로, 데이터 유출 및 악의적인 접근을 방지하기 위해 엄격한 접근 권한을 설정하고, 데이터베이스 암호화 및 접근 제어를 강화했습니다. 또한, 정기적인 데이터 유지보수 및 백업을 수행하여 데이터의 안전성을 보장합니다.
Python-Flask 핵심 코드 예시
import os
from flask import Blueprint
from utils.py_file_check import pyFileCheck
# 메인 블루프린트 생성
main_bp = Blueprint('main', __name__, static_folder='static')
import_str = 'from . import '
view_modules = set()
exclude_modules = [
# "common.py",
"__init__.py"
]
# API 모듈 디렉토리 경로 확인
module_dir = os.path.join(os.getcwd(), "api/main")
module_dir = module_dir.replace("unit_test/", '') if "unit_test/" in module_dir else module_dir
# 디렉토리 내 모든 파일을 검사하여 제외 목록에 없는 파이썬 파일을 동적으로 임포트
for filename in os.listdir(module_dir):
if filename not in exclude_modules and pyFileCheck(filename) == True:
module_name = filename.split(".", 1)[0]
view_modules.add(module_name)
import_str += ','.join(view_modules)
print(import_str)
exec(import_str)
Python-Django 핵심 코드 예시 (로그인 및 회원가입)
# coding:utf-8
__author__ = "ila"
from django.http import JsonResponse
from .users_model import users
from util.codes import *
from util.auth import Auth
import util.message as mes
def user_login(request):
"""사용자 로그인 처리"""
if request.method in ["POST", "GET"]:
response_msg = {'code': normal_code, "msg": mes.normal_code}
request_data = request.session.get("req_dict")
# 역할 정보가 있으면 제거
if request_data.get('role') is not None:
del request_data['role']
# 사용자 정보 조회
matched_users = users.getbyparams(users, users, request_data)
if not matched_users:
response_msg['code'] = password_error_code
response_msg['msg'] = mes.password_error_code
return JsonResponse(response_msg)
# 인증 정보 설정
request_data['id'] = matched_users[0].get('id')
return Auth.authenticate(Auth, users, request_data)
def user_register(request):
"""사용자 회원가입 처리"""
if request.method in ["POST", "GET"]:
response_msg = {'code': normal_code, "msg": mes.normal_code}
request_data = request.session.get("req_dict")
# 사용자 생성
creation_error = users.createbyreq(users, users, request_data)
if creation_error is not None:
response_msg['code'] = crud_error_code
response_msg['msg'] = creation_error
return JsonResponse(response_msg)
시스템 구현 화면 예시
프로젝트의 구체적인 UI 및 기능 구현 화면은 첨부된 스크린샷을 통해 확인할 수 있습니다.