Chapter 25. DB 연동 GUI
DB 연동 GUI
Chapter 25. DB 연동 GUI
데이터베이스와 GUI를 연결하여 데이터를 관리하는 프로그램을 배웁니다.
25.1 DB 연동 GUI란?
DB 연동 GUI(Database GUI Application)는 GUI 화면과 데이터베이스를 연결하여 데이터를 관리하는 프로그램입니다.
지금까지는
- Tkinter로 화면을 만들고
- SQLite(MySQL, Oracle)로 데이터를 저장하는 방법을 각각 배웠습니다.
이번 장에서는 GUI와 데이터베이스를 연결하여 실제 프로그램을 만드는 방법을 학습합니다.
대표적인 예는 다음과 같습니다.
- 회원관리 프로그램
- 게시판 프로그램
- 재고관리 프로그램
- 학생관리 프로그램
프로그램 구조는 다음과 같습니다.
- 사용자
- Tkinter GUI
- Python
- SQLite / MySQL / Oracle
- 데이터베이스
GUI에서 입력한 데이터를 Python이 처리하여 데이터베이스에 저장하거나 조회합니다.
CRUD 흐름은 다음과 같습니다.
- 등록 → INSERT
- 조회 → SELECT
- 수정 → UPDATE
- 삭제 → DELETE
25.2 회원관리 프로그램
회원관리 프로그램은 데이터베이스와 GUI를 연결하는 가장 대표적인 예제입니다.
회원 테이블 생성
CREATE TABLE IF NOT EXISTS member (
emp_id TEXT PRIMARY KEY,
name TEXT,
phone TEXT,
address TEXT
)
화면 구성은 다음과 같습니다.

데이터베이스 연결은 다음과 같이 합니다.
데이터베이스 연결 코드
import sqlite3 # sqlite3 모듈 임포트 conn = sqlite3.connect("member.db") # 데이터베이스 연결 cursor = conn.cursor() # 커서 객체 생성
삽입(회원등록) 기능은 사용자가 입력한 정보를 데이터베이스에 저장합니다.
회원등록 함수
def insert_member(): # 회원 정보를 삽입하는 함수 emp_id, name, phone, address = get_inputs() # 입력값을 가져옴 if not emp_id: # 사번이 입력되지 않았는지 확인 messagebox.showwarning("입력 오류", "사번을 입력하세요.") # 경고 메시지 표시 return # 함수 종료 try: # 예외 처리를 시작 cur.execute( # SQL 쿼리 실행 "INSERT INTO member (emp_id, name, phone, address) VALUES (?, ?, ?, ?)", # 회원 정보를 삽입하는 쿼리 (emp_id, name, phone, address), # 삽입할 값들 ) conn.commit() # 변경 사항을 커밋 except sqlite3.IntegrityError: # 무결성 오류 처리 messagebox.showwarning("중복", "이미 등록된 사번입니다.") # 중복 경고 메시지 return # 함수 종료 refresh_tree(emp_id) # 트리 뷰 갱신 clear_inputs() # 입력 필드 초기화
검색(회원조회) 기능은 다음과 같이 구현합니다.
회원조회 함수
def search_member(): # 회원 검색 함수 정의 emp_id = entry_id.get().strip() # 입력된 사번 가져오기 name = entry_name.get().strip() # 입력된 이름 가져오기 if not emp_id and not name: # 사번과 이름이 모두 없으면 messagebox.showwarning("검색", "사번 또는 이름을 입력하세요.") # 경고 메시지 표시 return # 함수 종료 if emp_id: # 사번이 입력된 경우 row = cur.execute( # 데이터베이스 쿼리 실행 "SELECT emp_id, name, phone, address FROM member WHERE emp_id = ?", # 사번으로 회원 검색 (emp_id,), ).fetchone() # 첫 번째 결과 가져오기 else: # 이름이 입력된 경우 row = cur.execute( # 데이터베이스 쿼리 실행 "SELECT emp_id, name, phone, address FROM member WHERE name = ?", # 이름으로 회원 검색 (name,), ).fetchone() # 첫 번째 결과 가져오기 if not row: # 결과가 없는 경우 messagebox.showinfo("검색", "일치하는 회원이 없습니다.") # 정보 메시지 표시 return # 함수 종료 fill_inputs(*row) # 입력 필드에 결과 채우기 refresh_tree(row[0]) # 트리 뷰 새로 고침
조회 결과가 Treeview에 출력됩니다.
수정(회원수정) 기능은 다음과 같이 구현합니다.
회원수정 함수
def update_member():
emp_id, name, phone, address = get_inputs()
if not emp_id:
messagebox.showwarning("입력 오류", "수정할 사번을 입력하세요.")
return
cur.execute(
"UPDATE member SET name = ?, phone = ?, address = ?
WHERE emp_id = ?",
(name, phone, address, emp_id),
)
conn.commit()
if cur.rowcount == 0:
messagebox.showinfo("수정", "수정할 회원을 찾을 수 없습니다.")
return
refresh_tree(emp_id)
삭제(회원삭제) 기능은 다음과 같이 구현합니다.
회원삭제 함수
def delete_member():
emp_id = entry_id.get().strip()
if not emp_id:
selected = tree.selection()
if selected:
emp_id = str(tree.item(selected[0])["values"][0])
if not emp_id:
messagebox.showinfo("삭제", "삭제할 회원을 선택하세요.")
return
cur.execute("DELETE FROM member WHERE emp_id = ?", (emp_id,))
conn.commit()
if cur.rowcount == 0:
messagebox.showinfo("삭제", "삭제할 회원을 찾을 수 없습니다.")
return
refresh_tree()
clear_inputs()
Treeview에 출력하는 코드는 다음과 같습니다.
Treeview 출력 코드
tree_box = Frame(window) # 프레임 생성 tree_box.pack(fill=BOTH, expand=True, padx=24, pady=(4, 16)) # 프레임 배치 columns = ("사번", "이름", "전화번호", "주소") # 열 이름 정의 tree = ttk.Treeview(tree_box, columns=columns, show="headings", height=8) # 트리뷰 생성 tree.heading("사번", text="사번") # 사번 열 제목 설정 tree.heading("이름", text="이름") # 이름 열 제목 설정 tree.heading("전화번호", text="전화번호") # 전화번호 열 제목 설정 tree.heading("주소", text="주소") # 주소 열 제목 설정 tree.column("사번", width=80, anchor="center") # 사번 열 너비 설정 tree.column("이름", width=90, anchor="center") # 이름 열 너비 설정 tree.column("전화번호", width=130, anchor="center") # 전화번호 열 너비 설정 tree.column("주소", width=180, anchor="w") # 주소 열 너비 설정 scroll = Scrollbar(tree_box, orient="vertical", command=tree.yview) # 세로 스크롤바 생성 tree.configure(yscrollcommand=scroll.set) # 트리뷰에 스크롤바 연결 tree.pack(side=LEFT, fill=BOTH, expand=True) # 트리뷰 배치 scroll.pack(side=RIGHT, fill=Y) # 스크롤바 배치 tree.bind("<<TreeviewSelect>>", on_tree_select) # 선택 이벤트 바인딩
실행 화면은 다음과 같습니다.

📌 Chapter 25 핵심 정리
- DB 연동 GUI는 GUI와 데이터베이스를 연결하여 데이터를 관리하는 프로그램이다.
- 회원관리 프로그램은 DB 연동 GUI의 대표적인 예제이다.
- SQLite를 사용하여 데이터베이스를 연결하고 데이터를 CRUD 방식으로 처리한다.
- Tkinter를 사용하여 GUI를 구성하고 사용자 입력을 처리한다.