0. 소프트웨어 개발 프로세스

 

1. 시스템 구조 분석

: 분석 - 시스템이 어떤 구성요소로 이루어져 있고, 각 요소가 어떤 역할을 하며, 어떻게 동작하는가

더보기

이 프로그램은 크게 4개의 영역으로 나뉜다.

 

(1) 전역 설정 영역

  • 프로그램 전체에서 “공통으로 쓰는 값”을 모아둔 영역
  • 현재 코드에서는 DB_CONFIG
    데이터베이스 접속 정보인 제한적 정보 사용

(2) 데이터 접근 영역(DB)

  • DB와 통신하는 “중간 계층”
  • 현재 코드에서는 DatabaseManager + 전역 DB 객체 

(3) 메인 UI 프레임(프로그램 껍데기)

  • 사이드바/페이지 영역 배치
  • 페이지 전환 제어
  • 현재 코드에서는 LibrarySystem(QMainWindow)

(4) 기능별 페이지(UI + 로직)

  • 실제 기능(회원/도서/대여)을 수행하는 화면 단위 클래스
  • 현재 코드에서는 CirculationPage, BookManagerPage, MemberManagerPage

 

2. 전역 설정 영역과 데이터 접근 영역(DB)

더보기

 

(1) 데이터 접근 영역 개요

  • 데이터 접근 영역(DB Layer)은 GUI 화면과 실제 데이터베이스 사이를 연결하는 중간 계층으로,
    데이터 저장·조회·수정·삭제(CRUD)와 관련된 모든 처리를 담당한다.
  • config(DB_CONFIG)
  • DatabaseManager

 

(2) config(DB_CONFIG) 

  • DB 접속 정보는 반드시 config(DB_CONFIG)에서만 정의한다.
  • 다른 모듈에서는 DB 설정 값을 직접 작성하지 않는다.
  • 설정 변경 시 config 파일만 수정하도록 한다.

 

(3) DatabaseManager

  • DB 연결 생성 및 해제 책임을 가진다.
  • SQL 실행과 결과 조회를 전담한다.
  • UI 계층에서 DB 접근을 직접 수행하지 않도록 차단한다.

 

3. 메인 UI 프레임 영역

ㄴ 3.1 전체 구조

더보기

(1) class LibrarySystem(QMainWindow):

 
 

(2) 역할:

  • 전체 프로그램 창
  • 사이드바 + 페이지 영역 배치
  • LibrarySystem은 "배치 + 전환"만 담당
    • Sidebar UI 구성
    • QStackedWidget에 페이지 넣기
    • 버튼 클릭 시 setCurrentIndex()
  • 실제 CRUD/대 로직은 Page에만 존재

 

 

(3) QMainWindow, QWidget, QStackedWidget 역할 비교:

  • QMainWindow: 앱의 대표 창(메뉴바/툴바/상태바 등 확장에 유리)
  • QStackedWidget: 여러 페이지를 쌓아두고 하나만 보여주는 컨테이너
    장점: 페이지를 미리 만들어 두고 빠르게 전환 가능(구조가 단순)
  • QWidget: 일반 화면 단위(페이지)

 

 

(4) 현재 구조는 LibrarySystem 생성 시 3페이지를 모두 생성합니다.

  • 장점: 전환 즉시 화면이 뜸
  • 단점: 페이지가 많아지면 초기 로딩 비용이 늘 수 있음

ㄴ 3.2 화면 전환 메커니즘

더보기
  • QStackedWidget은 페이지를 여러 페이지를 겹쳐놓고 인덱스로 하나씩 보여주는 방식
    삭제/재생성 하지 않고, 보여주기만  
  • 실제로는 “페이지를 교체”하는 것이 아님
  • 따라서 페이지 내부 상태(입력칸, current_member_id 등)는 페이지가 유지되는 동안 남아 있을 수 있다.

 

4. 기능별 페이지(UI + 로직)

ㄴ 4.1 전체 구조

더보기
페이지  클래스역할
CirculationPage 도서 대여 / 반납 / 연장
BookManagerPage 도서 등록 / 조회 / 삭제
MemberManagerPage 회원 등록 / 조회 / 삭제
  • 각 페이지는 독립적인 QWidget
  • 하나의 책임만 담당

ㄴ 4.2 MemberManagerPage(회원 관리 페이지)

ㄴ 4.3 BookManagerPage(도서 관리 페이지)

ㄴ 4.4 CirculationPage(대여/반납/연장 페이지)

ㄴ 4.4 basepage(공통 패턴)

더보기

 

(1) BasePage 기준으로 각 페이지는 항상 동일한 블록을 가진 GUI 구조입니다.

  1. Title(Label)
  2. 입력 폼(form_layout)
  3. 검색 폼(search_layout)
  4. 테이블(QTableWidget)
  5. 하단 버튼(bottom_layout)

 

(2) 페이지별로 "이벤트-DB-테이블 갱신" 3단 구조로 각 기능은 거의 동일합니다.

  • 이벤트(버튼 클릭)
  • DB 처리(fetch/execute)
  • UI 반영(fill_table / msg)

예)

  • 회원 등록: 클릭 → INSERT → load_members() → 테이블 갱신
  • 도서 조회: 클릭 → SELECT → fill_table()
  • 반납: 클릭 → DELETE issues + UPDATE books → load_loan_list()