기술 스택 구성
백엔드 구성 요소
- 기반 프레임워크: 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 # 점주용 운영 대시보드