시스템 개요
호텔 예약 관리 시스템은 관리자와 사용자 두 가지 역할을 지원하는 완전한 솔루션입니다. 관리자는 객실 관리, 객실 유형 관리, 예약 관리, 상품 관리, 예약 취소 및 체크인 관리를 수행할 수 있습니다. 사용자는 로그인 및 회원가입, 호텔 예약, 상품 구매, 예약 취소 등의 기능을 이용할 수 있습니다.
시스템 배경
전통적인 호텔 운영 방식은 수기 기록과 수동 처리에 의존하여 예약 혼선 및 고객 정보 관리의 부정확성 문제가 발생하기 쉽습니다. 호텔 관리 시스템은 이러한 문제를 해결하기 위해 설계되었습니다. 시스템은 객실 관리, 예약 관리, 고객 관리, 주문 관리 기능을 제공하여 실시간으로 객실 예약 상황을 기록하고 관리할 수 있으며, 호텔 직원의 객실 배치 및 고객 조회를 용이하게 합니다. 또한, 호텔의 객실 자원 관리와 비즈니스 통계를 지원하여 운영 효율성을 향상시킵니다.
기술 스택
백엔드 프레임워크
SSM(Spring, SpringMVC, MyBatis)은 현재 주류를 이루는 Java EE 기업용 프레임워크로, 다양한 대규모 기업 애플리케이션 시스템 구축에 적합합니다. Spring은 프로젝트 전체의 접착제 역할을 하며, 빈을 조립하고 라이프사이클을 관리하며 제어 반전(IoC) 기능을 구현합니다. SpringMVC는 사용자 요청을 가로채 DispatcherServlet을 통해 해당 Controller와 매칭하여 실행합니다. MyBatis는 JDBC를 캡슐화하여 데이터베이스 하위 작업을 투명하게 만들고, 설정 파일을 통해 각 엔티티 클래스의 Mapper 파일과 연결하여 SQL 문 매핑을 구현합니다.
데이터베이스
MySQL은 관계형 데이터베이스 관리 시스템(RDBMS)으로, 작은 크기와 빠른 속도, 오픈소스 특성으로 인해 현재 가장 인기 있는 RDBMS 중 하나입니다. Oracle, DB2 등 다른 데이터베이스에 비해 비용 효율적이며, 본 프로젝트의 실제 환경에 적합한 선택입니다.
프론트엔드 기술
Vue.js와 HTML을 사용하여 사용자 인터페이스를 구축합니다. Vue.js는 반응적이고 컴포넌트 기반의 프레임워크로, 동적인 사용자 인터페이스 개발에 효과적입니다.
개발 환경
- Java 버전: JDK 1.8 (권장)
- IDE: IntelliJ IDEA, Eclipse 모두 호환
- 데이터베이스: MySQL (5.7, 8.x 버전 모두 지원)
- Tomcat 버전: Tomcat 7-10 모두 지원
- Maven 버전: 제한 없음
- 하드웨어 환경: Windows
핵심 기능
- 관리자 기능:
- 객실 관리
- 객실 유형 관리
- 예약 관리
- 호텔 상품 관리
- 예약 취소 관리
- 체크인 관리
- 사용자 기능:
- 로그인 및 회원가입
- 호텔 예약
- 상품 구매
- 예약 취소
핵심 코드 구현
데이터베이스 설정
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://localhost:3306/hotel_reservation?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
jdbc_username=admin
jdbc_password=securePassword123
인증 인터셉터
package com.security;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import com.annotation.SkipAuth;
import com.entity.AuthToken;
import com.service.AuthService;
import com.utils.ResponseResult;
/**
* 인증 토큰 검증 인터셉터
*/
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
public static final String AUTH_TOKEN_HEADER = "Authorization";
@Autowired
private AuthService authService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// CORS 요청 지원
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Authorization, Origin,Content-Type, cache-control");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
SkipAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(SkipAuth.class);
} else {
return true;
}
// 헤더에서 토큰 가져오기
String token = request.getHeader(AUTH_TOKEN_HEADER);
// 인증이 필요 없는 메소드는 통과
if(annotation != null) {
return true;
}
AuthToken authToken = null;
if(StringUtils.isNotBlank(token)) {
authToken = authService.validateToken(token);
}
if(authToken != null) {
request.getSession().setAttribute("userId", authToken.getUserId());
request.getSession().setAttribute("userRole", authToken.getRole());
request.getSession().setAttribute("userTable", authToken.getTableName());
request.getSession().setAttribute("userName", authToken.getUsername());
return true;
}
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(ResponseResult.error(401, "로그인이 필요합니다")));
} finally {
if(writer != null){
writer.close();
}
}
return false;
}
}
시스템 설정 및 실행
- 데이터베이스에 SQL 스크립트 실행
- 프로젝트 IDE에서 열기
- 데이터베이스 연결 정보 설정
- 의존성 설치 (Maven)
- Tomcat 서버에 배포
- 시스템 접속 및 테스트
프로젝트 구조
- controller: 요청 처리 컨트롤러
- service: 비즈니스 로직 서비스
- dao: 데이터 접근 객체
- entity: 데이터베이스 엔티티
- utils: 유틸리티 클래스
- config: 설정 파일
- frontend: 프론트엔드 파일