Chapter 25. DB 연동 GUI

IT 지식 / Python·2026.08.27
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를 구성하고 사용자 입력을 처리한다.

프로그램·홈페이지·강의가 필요하신가요?

프로그램 판매, 무료 다운로드, 홈페이지 제작, IT 강의 상담을 도와드립니다.

상담 신청하기