SpringBoot와 Vue를 활용한 대학 식당 주문 시스템 설계 및 구현

기술 스택 구성

백엔드 구성 요소

  • 기반 프레임워크: SpringBoot 2.7 기반, 데이터 접근을 위해 MyBatis-Plus 사용
  • 보안 처리: 인증 및 권한 관리를 위한 Spring Security + JWT 토큰 방식 적용
  • 데이터 저장: 관계형 데이터베이스 MySQL 8.0 활용
  • 성능 최적화: Redis 6을 이용한 캐시 처리로 빈번한 조회 성능 개선
  • 비동기 처리: RabbitMQ를 통한 주문 이벤트 큐잉으로 응답 지연 감소
  • 파일 저장: 정적 리소스(예: 메뉴 이미지)는 알리바바 클라우드 OSS에 업로드

프론트엔드 구성 요소

  • 핵심 프레임워크: Vue 3와 TypeScript 조합으로 타입 안정성 확보
  • UI 라이브러리: Element Plus를 통해 반응형 관리자 인터페이스 구현
  • 상태 관리: Pinia를 활용해 전역 상태를 효율적으로 제어
  • 라우팅: Vue Router 4로 역할 기반 페이지 분기 처리
  • API 통신: Axios를 사용해 백엔드 REST API와 JSON 기반 데이터 교환

주요 기능 모듈

사용자 기능 (학생)

  • 다중 역할 로그인 지원 (학생/점주/관리자)
  • 카테고리별 메뉴 목록 제공 및 키워드 검색 기능
  • 실시간 장바구니 금액 계산 및 결제 시뮬레이션 (WeChat Pay/Alipay 흉내)
  • 이미지 첨부 가능한 리뷰 작성 및 평점 노출

점주 기능 (매장 운영자)

  • 메뉴 CRUD 작업 및 Excel 형식의 일괄 등록/다운로드
  • 접수된 주문 목록 확인 및 상태 업데이트 (접수 완료, 조리 중, 완료 등)
  • 판매 실적 대시보드 제공 (일일 매출 추이, 인기 상품 순위)

관리자 기능

  • 사용자 계정 활성화 및 역할 수정
  • 식당 내 점포 정보 관리 (이름, 위치, 영업 시간)
  • 시스템 로그 조회 및 오류 발생 시 알림 수신

핵심 데이터베이스 테이블 설계

-- 사용자 정보 테이블
CREATE TABLE app_user (
  user_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  login_id VARCHAR(50) UNIQUE NOT NULL,
  encrypted_password VARCHAR(100) NOT NULL,
  role_type ENUM('student', 'vendor', 'admin') NOT NULL,
  profile_image_url VARCHAR(255)
);

-- 메뉴 항목 테이블
CREATE TABLE menu_item (
  item_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  vendor_id BIGINT NOT NULL,
  item_name VARCHAR(100) NOT NULL,
  unit_price DECIMAL(10,2) NOT NULL,
  current_stock INT DEFAULT 0,
  food_category VARCHAR(20),
  FOREIGN KEY (vendor_id) REFERENCES app_user(user_id)
);

-- 주문 정보 테이블
CREATE TABLE order_header (
  order_id BIGINT PRIMARY KEY AUTO_INCREMENT,
  customer_id BIGINT NOT NULL,
  final_price DECIMAL(10,2) NOT NULL,
  order_status ENUM('waiting', 'paid', 'delivered', 'canceled') DEFAULT 'waiting',
  created_at DATETIME NOT NULL,
  FOREIGN KEY (customer_id) REFERENCES app_user(user_id)
);

테스트 전략

API 통합 테스트

  • Postman을 사용하여 각 엔드포인트의 요청/응답 검증
  • 결제 요청 중복 방지를 위한 멱등성(idempotency) 테스트 수행
  • JWT 만료 후 리프레시 토큰으로 재발급되는 흐름 검증

성능 부하 테스트

  • JMeter로 점심 피크 시간대 동시 접속 시나리오 시뮬레이션
  • Redis에서의 캐시 스래싱(Cache Stampede) 방어 로직 테스트
  • RabbitMQ 큐의 메시지 처리 지연 시간 모니터링

보안 취약점 점검

  • OWASP ZAP 도구를 이용한 XSS 및 SQL 인젝션 자동 스캔
  • 권한 상승 공격 테스트 (예: 학생 계정이 관리자 API 호출 시도)
  • 비밀번호 해시 저장 여부 및 민감 정보 암호화 적용 확인

프로젝트 디렉터리 구조 예시

server-modules/
  ├── order-processing-service   # 주문 생성 및 상태 관리
  ├── payment-integration-module # 결제 연동 모듈
  └── api-gateway                # 게이트웨이 및 인증 프록시
client-apps/
  ├── student-portal             # 학생용 주문 웹앱
  └── vendor-dashboard           # 점주용 운영 대시보드

태그: SpringBoot Vue.js MyBatis-Plus jwt Redis

6월 3일 23:30에 게시됨