"메모리 상에서만 동작하던 내 빌딩, 이제 진짜 데이터베이스에 영구 저장하자!"
안녕하세요! 지난 1편에서는 파이썬의 dataclass와 객체지향(OOP) 스타일을 활용해 빌딩 관리 프로그램의 기본 데이터 구조를 설계해 보았습니다.
하지만 프로그램을 종료하면 입력했던 입주사 데이터가 싹 사라져 버린다면 진짜 '빌딩 관리'라고 할 수 없겠죠?
그래서 이번 2편에서는 파이썬 기본 내장 데이터베이스인 SQLite를 연동하여, 데이터를 영구적으로 저장하고 관리(Create, Read, Update, Delete - CRUD)하는 로직을 만들어 보겠습니다!
💡 왜 SQLite인가요?
- 별도 설치 불필요: Python 설치 시 기본으로 제공되는 sqlite3 모듈을 사용합니다.
- 가볍고 빠름: 파일 하나(.db)로 모든 데이터베이스를 관리할 수 있어 토이 프로젝트나 소규모 앱에 최적입니다.
- 표준 SQL 지원: 데이터베이스 표준 언어인 SQL을 학습하고 실습하기에 매우 적합합니다.
🗄️ 데이터베이스 테이블 설계
우리가 관리할 tenants (입주사/호수) 테이블 구조입니다.
| 컬럼명 (Column) | 데이터 타입 | 설명 |
| room_number | INTEGER (PRIMARY KEY) | 호수 (예: 101, 202) |
| tenant_name | TEXT | 입주사/임차인 이름 |
| deposit | INTEGER | 보증금 (원) |
| monthly_rent | INTEGER | 월세 (원) |
| is_occupied | INTEGER (0 또는 1) | 입주 여부 (0: 공실, 1: 입주) |
💻 Step 2. SQLite 연동 및 CRUD 코드 작성
파이썬의 sqlite3 모듈을 활용하여 데이터베이스 생성, 입주사 등록, 조회, 수정, 삭제 기능을 클래스 형태로 구현해 봅시다.
import sqlite3
from typing import Optional, List, Dict
class BuildingDB:
def __init__(self, db_name: str = "building_manager.db"):
self.db_name = db_name
self.init_db()
def get_connection(self):
"""데이터베이스 연결 객체 반환"""
return sqlite3.connect(self.db_name)
def init_db(self):
"""테이블이 없으면 자동으로 생성"""
with self.get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS tenants (
room_number INTEGER PRIMARY KEY,
tenant_name TEXT,
deposit INTEGER NOT NULL,
monthly_rent INTEGER NOT NULL,
is_occupied INTEGER DEFAULT 0
)
""")
conn.commit()
print("📁 DB 및 테이블 초기화 완료!")
# 1. CREATE: 입주사 및 호실 정보 등록
def add_room(self, room_number: int, deposit: int, monthly_rent: int,
tenant_name: Optional[str] = None, is_occupied: bool = False):
with self.get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
INSERT OR REPLACE INTO tenants (room_number, tenant_name, deposit, monthly_rent, is_occupied)
VALUES (?, ?, ?, ?, ?)
""", (room_number, tenant_name, deposit, monthly_rent, 1 if is_occupied else 0))
conn.commit()
print(f"✅ {room_number}호 정보 저장 완료!")
# 2. READ: 전체 호실/입주사 목록 조회
def get_all_rooms(self) -> List[Dict]:
with self.get_connection() as conn:
conn.row_factory = sqlite3.Row # 컬럼명으로 접근 가능하도록 설정
cursor = conn.cursor()
cursor.execute("SELECT * FROM tenants ORDER BY room_number ASC")
rows = cursor.fetchall()
return [dict(row) for row in rows]
# 3. UPDATE: 입주 상태 및 계약 변경
def update_tenant(self, room_number: int, tenant_name: str, is_occupied: bool = True):
with self.get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
UPDATE tenants
SET tenant_name = ?, is_occupied = ?
WHERE room_number = ?
""", (tenant_name, 1 if is_occupied else 0, room_number))
conn.commit()
print(f"🔄 {room_number}호 입주 정보가 수정되었습니다.")
# 4. DELETE: 퇴거 처리 (데이터 삭제 또는 공실 전환)
def vacate_room(self, room_number: int):
with self.get_connection() as conn:
cursor = conn.cursor()
cursor.execute("""
UPDATE tenants
SET tenant_name = NULL, is_occupied = 0
WHERE room_number = ?
""", (room_number,))
conn.commit()
print(f"🚪 {room_number}호 퇴거 처리가 완료되었습니다 (공실 전환).")
# 🧪 실행 및 테스트 예시
if __name__ == "__main__":
db = BuildingDB()
# 1. 샘플 호실 데이터 등록
db.add_room(101, deposit=10000000, monthly_rent=850000, tenant_name="망고 소프트", is_occupied=True)
db.add_room(102, deposit=15000000, monthly_rent=1000000, is_occupied=False)
db.add_room(201, deposit=20000000, monthly_rent=1500000, tenant_name="코드 카페", is_occupied=True)
# 2. 조회 및 출력
print("\n--- 🏢 현재 건물 입주 현황 ---")
rooms = db.get_all_rooms()
for r in rooms:
status = f"입주중 ({r['tenant_name']})" if r['is_occupied'] else "빈 방 (공실)"
print(f"• {r['room_number']}호 | 보증금: {r['deposit']:,}원 | 월세: {r['monthly_rent']:,}원 | 상태: {status}")
# 3. 102호 입주 계약 진행 (UPDATE)
print("\n--- 102호 신규 입주 계약 ---")
db.update_tenant(102, tenant_name="파이썬 스튜디오")
# 4. 101호 퇴거 처리 (VACATE)
print("\n--- 101호 퇴거 처리 ---")
db.vacate_room(101)
🔍 실행 결과 확인하기
위 코드를 실행해 보면 프로젝트 폴더에 building_manager.db 파일이 새로 생성되는 것을 확인할 수 있습니다!
이제 프로그램을 몇 번을 다시 실행하거나 컴퓨터를 껐다 켜도, 우리가 입력한 호실 정보와 입주사 데이터가 데이터베이스 안에 안전하게 보관됩니다.
🚀 다음 편 예고
데이터베이스 구축까지 완료했으니, 다음 3편에서는 Pandas 라이브러리를 연동하여:
- 이번 달 총 예상 임대 수입 및 공실률 자동 분석
- 입주 기간별 관리비/공과금 합산 계산기
를 구현해 보겠습니다!
질문이나 개선 아이디어가 있으시다면 댓글로 자유롭게 남겨주세요! 💬
'Programming > Python' 카테고리의 다른 글
| [파이썬/프로젝트] "내 꿈은 건물주!" 4편: Streamlit으로 10분 만에 웹 대시보드 완성하기 (완결) (0) | 2026.08.14 |
|---|---|
| [파이썬/프로젝트] "내 꿈은 건물주!" 3편: Pandas로 관리비·공과금 자동 계산 및 임대 수익 분석하기 (0) | 2026.08.14 |
| [파이썬/프로젝트] "내 꿈은 건물주!" Python으로 내 손으로 만드는 빌딩 관리 시스템 구축 가이드 (0) | 2026.08.14 |
| [Python] 기초 소스 (0) | 2026.05.14 |
| Python Tkinter - GUI 라이브러리 (0) | 2025.11.22 |