호텔 관리 시스템(PMS) 개발 프로젝트 구성 정리
이번 프로젝트는 Python, PySide6, MySQL을 활용해서 호텔 PMS(Property Management System)를 구현한 프로젝트이다. 프로젝트 파일은 역할별로 크게 DB, View, Window, Model 구조로 나누어 정리하였다.

1. DB 설계 및 더미 데이터 구성
가장 먼저 진행한 작업은 MySQL 데이터베이스 설계였다. 호텔 PMS는 고객 정보, 예약 정보, 객실 정보가 서로 연결되어 있기 때문에 데이터베이스 구조를 먼저 잡아야 했다.
hotel_schema_dummy_data.sql
구성한 주요 테이블은 다음과 같다.
users- 로그인 계정 정보customers- 고객 정보bookings- 예약 정보rooms- 객실 정보room_types- 객실 타입 정보
실제 PMS처럼 고객, 예약, 객실 정보가 서로 연결될 수 있도록 관계를 구성하였다. 이후 기능 테스트를 위해 더미 데이터를 추가하여 화면 출력과 기능 동작을 확인하였다.
이 과정에서 배운 내용은 다음과 같다.
- PK, FK 관계 이해
- 테이블 간 데이터 연결
- SQL JOIN 사용
- 예약 정보와 고객 정보 연결
- 객실 상태 관리 구조
2. View 폴더 - PySide6 UI 구성
View 폴더는 화면을 담당하는 파일들로 구성하였다. Qt Designer로 만든 UI를 Python 코드로 변환한 파일들이며, 화면 배치와 위젯 구성을 담당한다.
view/
├── login_view.py
├── main_view.py
├── booking_view.py
├── addroom_view.py
구성한 주요 화면은 다음과 같다.
- 로그인 화면
- 메인 대시보드
- 고객관리 화면
- 예약관리 화면
- 객실관리 화면
- 업그레이드 추천 화면
- 계정정보 화면
- 예약 등록 팝업
- 객실 등록 팝업
이 프로젝트를 진행하면서 UI 파일의 객체명 관리가 중요하다는 것을 알게 되었다. Qt Designer에서 만든 객체명을 Python 로직에서 그대로 사용하기 때문에 객체명이 바뀌면 실행 오류가 발생할 수 있다.
이 과정에서 배운 내용은 다음과 같다.
- Qt Designer 활용
- PySide6 UI 구성
- 위젯 객체명 관리
- UI와 로직 분리
- 탭 기반 화면 구성
3. Window 폴더 - 기능 구현 및 이벤트 처리
Window 폴더는 실제 기능이 동작하는 부분이다. 사용자가 버튼을 클릭하거나 데이터를 입력했을 때 실행되는 로직을 담당한다.
window/
├── login_window.py
├── main_window.py
├── customer_popup_window.py
├── booking_popup_window.py
├── addroom_window.py
로그인 기능
- 아이디 입력
- 비밀번호 입력
- 로그인 검증
- 비밀번호 마스킹 처리
- 관리자 / 스태프 권한 구분
고객관리 기능
- 고객 조회
- 고객 검색
- 고객 등록 팝업 연결
- 고객 정보 수정
- 고객 정보 삭제
- 고객 상세정보 출력
예약관리 기능
- 예약 조회
- 예약 검색
- 예약 등록 팝업 연결
- 예약 수정
- 예약 취소
- 예약 삭제
- 체크인 / 체크아웃 날짜 출력
- 예약금액 수정
객실관리 기능
- 객실 조회
- 객실번호 검색
- 객실 등록 팝업 연결
- 객실 정보 수정
- 객실 상태 변경
업그레이드 추천 기능
- 체크인 당일 예약 고객 조회
- 추천 조건 필터 적용
- 추천 계산 버튼 연결
- 추천 상세정보 출력
계정정보 기능
- 현재 로그인 계정 정보 조회
- 계정 정보 수정
- 비밀번호 확인 검증
- 권한 확인
이 과정에서 배운 내용은 다음과 같다.
- 버튼 클릭 이벤트 연결
- Signal & Slot 구조 이해
- 팝업 창 연결
- 테이블 더블클릭 이벤트 처리
- 권한별 기능 제한
- 오류 메시지 출력
4. Model 폴더 - MySQL 연동 및 데이터 처리
Model 폴더는 데이터베이스와 직접 연결되는 부분이다. 각 기능별로 Model 파일을 나누어 MySQL과 데이터를 주고받도록 구성하였다.
model/
├── db_model.py
├── customer_model.py
├── booking_model.py
├── room_model.py
├── dashboard_model.py
├── upgrade_model.py
├── user_model.py
db_model.py
MySQL 연결 정보를 관리하는 파일이다. 각 Model 파일에서 DB 연결이 필요할 때 이 파일을 통해 연결하도록 구성하였다.
- DB 연결
- 공통 connect 함수 관리
customer_model.py
고객 정보와 관련된 SQL을 관리하는 파일이다.
- 고객 전체 조회
- 고객 검색
- 고객 등록
- 고객 수정
- 고객 삭제
- 마지막 방문일 조회
- 방문 횟수 계산
booking_model.py
예약 정보와 관련된 SQL을 관리하는 파일이다. 고객 정보와 예약 정보가 함께 연결되기 때문에 JOIN 구문을 많이 사용하였다.
- 예약 전체 조회
- 예약 검색
- 예약 등록
- 예약 수정
- 예약 취소
- 예약 삭제
- 체크인 / 체크아웃 날짜 관리
- 예약금액 수정
room_model.py
객실 정보와 관련된 SQL을 관리하는 파일이다.
- 객실 전체 조회
- 객실번호 검색
- 객실 등록
- 객실 수정
- 객실 상태 변경
dashboard_model.py
메인 대시보드에 필요한 데이터를 조회하는 파일이다.
- 사용 가능 객실 수 조회
- 체크인 예정 수 조회
- 체크아웃 예정 수 조회
- 업그레이드 대상 수 조회
- 객실 상태별 개수 조회
upgrade_model.py
업그레이드 추천 기능을 담당하는 파일이다. 이번 프로젝트에서 가장 많이 고민했던 기능 중 하나이다.
- 체크인 당일 예약 고객 조회
- 예약금액 기준 추천
- 장기 투숙 기준 추천
- 방문 횟수 기준 추천
- 상위 객실 여유 여부 확인
- 추천 사유 출력
처음에는 같은 예약번호가 여러 번 출력되는 문제가 있었다. 이유는 한 예약 건에 대해 가능한 상위 객실이 여러 개 조회되었기 때문이었다. 이후 예약번호 기준으로 한 건만 출력되도록 SQL을 수정하여 해결하였다.
user_model.py
사용자 계정 정보를 관리하는 파일이다.
- 로그인 계정 조회
- 현재 로그인 계정 정보 조회
- 계정 정보 수정
- 비밀번호 변경
- 권한 정보 관리
이 과정에서 배운 내용은 다음과 같다.
- Python과 MySQL 연동
- PyMySQL 사용
- CRUD 기능 구현
- SQL JOIN
- 조건 검색
- 데이터 수정 및 삭제 처리
- Model / View / Window 구조 이해
5. 프로젝트 구조 정리
이번 프로젝트는 기능을 역할별로 나누어 구성하였다.
Hotel/
├── main.py
├── view/
│ ├── login_view.py
│ ├── main_view.py
│ ├── booking_view.py
│ └── addroom_view.py
├── window/
│ ├── login_window.py
│ ├── main_window.py
│ ├── customer_popup_window.py
│ ├── booking_popup_window.py
│ └── addroom_window.py
├── model/
│ ├── db_model.py
│ ├── customer_model.py
│ ├── booking_model.py
│ ├── room_model.py
│ ├── dashboard_model.py
│ ├── upgrade_model.py
│ └── user_model.py
└── hotel_schema_dummy_data.sql
처음에는 파일이 많아지면서 구조가 복잡하게 느껴졌지만, 역할별로 나누고 나니 수정해야 할 위치를 찾기 쉬워졌다.
- view - 화면 구성
- window - 버튼 이벤트 및 화면 동작
- model - DB 연결 및 SQL 처리
- sql - 테이블 생성 및 더미 데이터
6. 마무리
이번 프로젝트를 통해 단순히 화면을 만드는 것보다 데이터베이스와 화면을 연결하는 과정이 훨씬 중요하다는 것을 느꼈다. 특히 호텔 PMS는 고객, 예약, 객실 데이터가 서로 연결되어 있기 때문에 DB 구조를 잘 잡는 것이 중요했다.
또한 View, Window, Model 구조를 나누면서 하나의 프로그램이 어떤 방식으로 구성되는지 이해할 수 있었다. 처음에는 오류도 많고 수정할 부분도 많았지만, 기능별로 파일을 분리하면서 점점 구조가 보이기 시작했다.
아직 부족한 부분도 있지만 이번 프로젝트를 기반으로 SQL과 PySide6를 더 공부해서 나중에는 더 완성도 높은 PMS 프로그램으로 발전시켜보고 싶다.
'개발일지' 카테고리의 다른 글
| [팀프로젝트] 채팅앱 프로그램 개발 프로젝트 (0) | 2026.07.06 |
|---|---|
| 팀 프로젝트를 진행하며 느낀 점과 앞으로의 개발 방향 (0) | 2026.06.17 |
| 호텔 관리 시스템(PMS) 개발 프로젝트 - 06/10~06/16 (0) | 2026.06.16 |
| 호텔 관리 시스템(PMS) 개발 프로젝트 - 기능 구현 및 화면 소개 (0) | 2026.06.16 |
| PySide6 Model/View 기반 회원관리 프로그램 구현 (0) | 2026.06.08 |