Flask 기반 마트 관리 시스템 개발

시스템 설계

Flask를 사용하여 백엔드를 구축하고 SQLAlchemy로 데이터베이스 작업을 수행하며, 프론트엔드는 HTML/CSS/JavaScript와 Bootstrap을 활용합니다. 시스템은 다음과 같은 모듈로 구성됩니다: 회원 관리, 상품 관리, 재고 관리, 주문 처리 및 통계 보고서.

데이터베이스 설계

다음과 같은 주요 테이블을 생성합니다:

  • 회원 테이블 (members): 사용자 정보(아이디, 비밀번호, 권한 - 관리자/일반회원) 저장
  • 상품 테이블 (items): 상품ID, 이름, 카테고리, 가격, 설명 등록
  • 재고 테이블 (stocks): 상품 재고 수량, 최소 재고 경고값 추적
  • 주문 테이블 (orders): 주문ID, 회원ID, 상태, 총액 기록
  • 주문 상세 테이블 (order_items): 각 주문의 상품 세부사항 저장

핵심 기능 구현

회원 인증 모듈 Flask-Security 패키지를 통해 로그인 및 권한 관리를 구현합니다. 관리자는 상품 관리 및 보고서 접근 권한을 가지며, 일반 회원은 쇼핑만 가능합니다.

from flask_security import Security, UserMixin

security = Security()

class Member(UserMixin, db.Model):
    __tablename__ = 'members'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    password = db.Column(db.String(120))
    role = db.Column(db.String(20))

상품 관리 모듈 상품에 대한 CRUD 작업을 지원하며, 이미지 업로드 기능도 포함합니다. Flask-WTF를 사용하여 폼 검증을 수행합니다.

class ItemForm(FlaskForm):
    title = StringField('상품명', validators=[DataRequired()])
    cost = FloatField('가격', validators=[DataRequired()])
    type = SelectField('분류', choices=[('grocery','식료품'),('home','생활용품')])
    info = TextAreaField('설명')
    photo = FileField('상품 사진')
    submit = SubmitField('등록')

장바구니 기능 세션을 활용하여 임시 장바구니 데이터를 관리하며, 상품 추가, 수량 변경, 삭제 등의 작업을 지원합니다.

@app.route('/cart/add/<int:item_id>')
def add_item_to_cart(item_id):
    if 'basket' not in session:
        session['basket'] = {}
    basket = session['basket']
    basket[str(item_id)] = basket.get(str(item_id), 0) + 1
    session['basket'] = basket
    return redirect(url_for('show_basket'))

재고 관리 재고 부족 알림 기능을 제공하며, 주기적으로 재고 상태를 점검하는 배치 작업을 설정합니다.

def monitor_stock():
    insufficient_items = Stock.query.filter(
        Stock.amount < Stock.alert_threshold
    ).all()
    if insufficient_items:
        notify_admin(insufficient_items)

주문 처리 절차

  1. 사용자가 주문 시 재고가 충분한지 확인
  2. 재고 차감 후 주문 기록 생성
  3. 주문 상태 업데이트 (결제 대기/완료/배송 중)
  4. 사용자가 과거 주문 내역을 조회할 수 있는 API 제공

통계 분석 기능

Matplotlib 또는 Chart.js를 사용하여 판매 현황을 시각화합니다:

  • 일별/주간/월간 판매 추이 그래프
  • 상품 판매 순위
  • 재고 회전율 분석
  • 수익률 보고서

배포 전략

Gunicorn+Nginx 기반 배포를 권장합니다:

  1. Gunicorn을 WSGI 서버로 사용
  2. Nginx를 리버스 프록시 및 정적 파일 서버로 설정
  3. Supervisor를 이용해 프로세스 관리
  4. Redis를 캐싱 및 세션 저장소로 활용

테스트 계획

핵심 기능을 커버하는 단위 테스트 작성:

  • 회원 인증 테스트
  • 상품 관리 테스트
  • 주문 처리 테스트
  • 재고 변경 테스트
  • API 인터페이스 테스트

Flask-Testing 확장을 사용하여 각 모듈의 정상 동작 여부를 확인합니다.

프로젝트 기술 스택

프론트엔드: Vue.js 데이터베이스: MySQL (버전 제한 없음) 데이터베이스 도구: Navicat, SQLyog, MySQL Workbench 등 사용 가능

태그: flask sqlalchemy Vue.js

6월 26일 20:01에 게시됨