호텔 관리 시스템(PMS) 개발 프로젝트 - 06/10~06/16
Python + PySide6 + MySQL 호텔 PMS 프로젝트 개발일지
이번 프로젝트는 Python, PySide6, MySQL을 활용해서 호텔 PMS(Property Management System)를 직접 구현해보는 프로젝트였다. 호텔에서 실제로 근무하면서 사용했던 PMS 프로그램을 바탕으로 고객관리, 예약관리, 객실관리, 업그레이드 추천, 계정 권한 관리 기능을 구현하는 것을 목표로 진행했다.
06/10 - 프로젝트 주제 선정 및 기획
처음에는 어떤 프로젝트를 만들지 고민하다가 내가 실제로 호텔에서 근무하면서 사용해봤던 PMS 시스템을 만들어보기로 했다. 호텔 PMS는 단순히 예약만 관리하는 프로그램이 아니라 고객 정보, 예약 정보, 객실 상태, 직원 권한까지 함께 관리하는 시스템이라서 프로젝트 주제로 적합하다고 생각했다.
- 고객 관리
- 예약 관리
- 객실 관리
- 객실 상태 변경
- 업그레이드 추천
- 계정 권한 관리
처음 계획할 때는 체크인, 체크아웃 처리 기능까지 넣고 싶었지만 프로젝트 기간을 고려해서 예약 생성과 객실 관리 중심으로 방향을 잡았다.
06/11 ~ 06/14 - UI 설계
PySide6와 Qt Designer를 사용해서 전체 화면을 구성했다. 처음에는 창을 여러 개로 나눌지 고민했는데, 하나의 메인 화면 안에서 탭을 나누는 방식으로 구성했다.
- 로그인 화면
- 메인 대시보드
- 고객관리
- 예약관리
- 객실관리
- 업그레이드 추천
- 계정정보
UI 작업을 하면서 가장 어려웠던 부분은 객체 이름을 관리하는 것이었다. Qt Designer에서 만든 객체명을 Python 코드에서 그대로 사용해야 했기 때문에 이름이 조금만 달라도 오류가 발생했다.
특히 나중에 기능을 연결하면서 view 파일의 class명이나 객체명이 바뀌면 실행이 안 되는 오류가 발생했다. 이번 프로젝트를 진행하면서 UI 파일 구조를 함부로 바꾸면 안 된다는 점을 확실하게 알게 되었다.
그래서 꼭 객체마다 지정하는 이름을 꼭... 지정해야한다는 사실을 뼈저리게 깨닳았다
06/15 ~ 06/16 - MySQL 데이터베이스 구축
UI 구성이 끝난 후에는 MySQL을 사용해서 데이터베이스를 구성했다. 처음에는 단순히 데이터를 저장하고 불러오는 정도라고 생각했는데, 실제로는 고객, 예약, 객실 정보가 서로 연결되어 있어서 생각보다 복잡했다.
구성한 주요 테이블은 다음과 같다.
- users - 로그인 계정 정보
- customers - 고객 정보
- bookings - 예약 정보
- rooms - 객실 정보
- room_types - 객실 타입 정보
이 과정에서 외래키, JOIN, 데이터 수정, 삭제 처리 등을 다뤄야 했다. 특히 예약 정보는 고객 정보와 객실 정보가 함께 연결되어야 했기 때문에 SQL 작성이 가장 어려웠다.
고객관리 기능 구현
먼저 고객관리 기능을 구현했다. 고객 목록을 조회하고, 검색하고, 상세 정보를 불러오는 기능부터 만들었다.
- 고객 전체 조회
- 고객번호, 고객명, 연락처 검색
- 고객 등록
- 고객 정보 수정
- 고객 정보 삭제
- 마지막 방문일 조회
- 방문 횟수 조회
고객 목록에서 특정 고객을 선택하면 하단의 고객 상세 정보 영역에 자동으로 값이 들어오도록 구현했다. 그리고 수정 버튼을 누르면 변경된 정보가 DB에 반영되도록 연결했다.
또한 일반 직원 계정으로는 고객 삭제가 불가능하도록 권한 제한도 추가했다. 권한이 없는 기능을 실행하면 아래와 같은 경고창이 뜨도록 구현했다.
권한이 없습니다.
관리자에게 문의해주세요.
예약관리 기능 구현
다음으로 예약관리 기능을 구현했다. 예약은 고객 정보, 객실 타입, 체크인 날짜, 체크아웃 날짜, 숙박일수, 예약금액, 메모가 함께 연결되는 구조라서 가장 많은 수정이 있었던 부분이다.
- 예약 전체 조회
- 예약 검색
- 예약 등록
- 예약 수정
- 예약 취소
- 예약 삭제
- 객실 타입 변경
- 예약 금액 수정
- 숙박일수 조회
예약 등록 팝업에서는 고객번호를 입력하고 고객조회 버튼을 누르면 고객명, 연락처, 이메일이 자동으로 불러와지도록 만들었다. 그 후 객실타입, 체크인 날짜, 체크아웃 날짜, 숙박일수, 예약금액, 메모를 입력해서 예약을 생성할 수 있게 했다.
중간에 예약금액을 수정했는데 리스트에 반영되지 않는 오류와 체크인/체크아웃 날짜가 상세정보에 제대로 표시되지 않는 오류가 있었다. 이 부분은 예약 상세 정보를 불러오는 함수와 DB 업데이트 함수를 수정해서 해결했다.
예약 취소 기능은 데이터를 삭제하는 것이 아니라 예약 상태를 cancelled로 변경하는 방식으로 구현했다.
객실관리 기능 구현
객실관리에서는 객실 정보를 조회하고, 객실번호로 검색하고, 객실 상태를 변경하는 기능을 구현했다.
- 객실 전체 조회
- 객실번호 검색
- 객실 정보 수정
- 객실 등록
- 객실 상태 변경
객실 상태는 실제 호텔 PMS에서 사용하는 상태를 참고해서 구성했다.
- VC - Vacant Clean
- VD - Vacant Dirty
- OC - Occupied Clean
- OOO - Out Of Order
상태변경 버튼을 누르면 선택한 객실의 상태를 콤보박스에서 선택할 수 있도록 만들었다. 처음에는 특정 객실번호로만 고정되는 문제가 있었는데, 선택된 테이블 행에서 객실번호를 가져오는 방식으로 수정했다.
객실 등록 기능에서는 객실번호, 객실타입, 침대구성, 객단가를 입력해서 새로운 객실을 추가할 수 있도록 구현했다.
업그레이드 추천 및 계정정보 기능 구현
마지막으로 업그레이드 추천 기능과 계정정보 기능을 구현했다.
업그레이드 추천 기능
업그레이드 추천 기능은 체크인 당일 예약 고객을 기준으로 추천 대상자를 조회하도록 만들었다. 추천 기준은 예약금액, 숙박일수, 방문횟수, 상위 객실 여유 여부를 기준으로 잡았다.
- 체크인 당일 예약 고객 조회
- 예약금액 기준 필터
- 장기 투숙 기준 필터
- 방문횟수 기준 필터
- 추천 객실 조회
- 추천 사유 출력
처음에는 같은 예약번호가 여러 개의 추천 객실로 반복 표시되는 문제가 있었다. 이유는 한 예약 건에 대해 가능한 상위 객실이 여러 개 조회되었기 때문이었다. 이 부분은 예약번호 기준으로 한 건만 나오도록 SQL을 수정해서 해결했다.
계정정보 기능
계정정보 탭에서는 현재 로그인한 계정의 정보를 확인하고 수정할 수 있도록 구현했다.
- 현재 로그인 계정 정보 조회
- 이름, 연락처, 이메일 확인
- 비밀번호 변경
- 비밀번호 확인 검증
- 권한 확인
비밀번호와 비밀번호 확인 값이 일치하지 않으면 경고창이 뜨도록 처리했다.
비밀번호가 일치하지 않습니다.
프로젝트를 진행하면서 어려웠던 점
처음에는 GUI 작업이 제일 어려울 줄 알았는데 실제로는 DB와 SQL 부분이 가장 어려웠다. 고객, 예약, 객실 정보가 서로 연결되어 있다 보니 하나를 수정하면 다른 기능에도 영향을 주는 경우가 많았다.
체감상으로는 로직 구성 20%, GUI 작업 30%, DB 관련 작업이 50% 정도였던 것 같다.
호텔에서 실제로 PMS를 사용해본 경험이 있어서 최대한 현실적으로 만들고 싶었지만, 실제 시스템처럼 구현하기에는 시간과 실력의 한계가 있었다. 그래도 직접 만들어보면서 왜 실제 PMS가 쉽게 바뀌지 않는지 조금은 이해할 수 있었다.
마무리
이번 프로젝트는 내가 실제로 경험했던 호텔 업무를 개발 프로젝트로 연결해볼 수 있어서 의미가 있었다. 단순히 화면만 만드는 것이 아니라 데이터베이스를 연결하고, 고객과 예약과 객실 정보가 함께 움직이도록 만드는 과정에서 하나의 시스템을 개발하는 흐름을 경험할 수 있었다.
아직 부족한 부분도 많지만, 나중에 MySQL과 SQL을 더 공부해서 이 프로젝트를 더 발전시켜보고 싶다. 기능을 추가하고 구조를 정리해서 포트폴리오로도 활용할 수 있는 프로젝트로 디벨롭해보고 싶다.
https://yegi1929.tistory.com/56
'개발일지' 카테고리의 다른 글
| 팀 프로젝트를 진행하며 느낀 점과 앞으로의 개발 방향 (0) | 2026.06.17 |
|---|---|
| 호텔 관리 시스템(PMS) 개발 프로젝트 구성 정리 (0) | 2026.06.16 |
| 호텔 관리 시스템(PMS) 개발 프로젝트 - 기능 구현 및 화면 소개 (0) | 2026.06.16 |
| PySide6 Model/View 기반 회원관리 프로그램 구현 (0) | 2026.06.08 |
| 스마트 객실 관리 시스템 프로젝트 완성 (0) | 2026.06.08 |