All Pages
5. GUI 베이스 레이아웃 구현
5. GUI 베이스 레이아웃 구현
2025.12.171. 목표더보기이번 단계는 DB/CRUD 로직을 연결하지 않고, 프로그램의 전체적인 외관(뼈대)을 만듭니다.사용자가 메뉴를 선택할 수 있는 왼쪽 사이드바와 실제 기능 화면이 표시될 오른쪽 콘텐츠 영역을 나누고,왼쪽 사이드바 메뉴 버튼 클릭 시 화면이 전환되는 기본 구조를 완성합니다. QMainWindow 기반의 메인 창을 만든다.좌측 "사이드바(내비게이션)"와 우측 "페이지 영역"을 2열 레이아웃으로 구성한다.QHBoxLayout(container)로 좌(사이드바) / 우(페이지 영역) 분할하는 레이아웃 전략을 익힙니다.QStackedWidget으로 여러 페이지를 "쌓아두고", 버튼 클릭으로 setCurrentIndex()로 여러 페이지를 전환하는 네비게이션 기능을 구현합니다.이후 6~9단계에서 페이지별..
4. DB 로직 구현
4. DB 로직 구현
2025.12.171. 목표더보기도서관리 프로그램과 MySQL(DB)간에 통신하기 위한 "DatabaseManager" 클래스를 구현합니다. DatabaseManager 클래스 구현 목적은UI와 DB 사이에 "중간 계층(DatabaseManager)"을 두고, 모든 SQL 실행/조회 흐름을 표준화 입니다.*UI 코드에서 DB 코드를 분리(SRP) 그리고 다음 3가지를 안정적으로 제공합니다.DB 연결(connect)데이터 변경 쿼리 실행(execute_query: INSERT/UPDATE/DELETE)데이터 조회(fetch_data: SELECT)구현 후에는 DB 연결, 실행, 조회를 하나의 공통 클래스(DatabaseManager)로 분리하여 "재사용" 관점에서 이해합니다.또한 UI(PySide6)가 없어도 Databas..
3. 데이터 분석과 설계
3. 데이터 분석과 설계
2025.12.171. 테이블 구조 및 ERD더보기 이 프로젝트는 3개의 핵심 테이블로 구성됩니다.books : 도서(책) 기본 정보 + 대출 가능 여부members : 회원 기본 정보issues : "누가 어떤 책을 언제 빌렸는지" 기록(대출 이력/현재 대출 상태)핵심 관계는 아래와 같습니다.books (1) —— (N) issuesmembers (1) —— (N) issues즉, 한 권의 책(book_id) 은 여러 번 대출될 수 있고, 한 명의 회원(member_id) 도 여러 권(또는 여러 번) 대출할 수 있습니다. 이 관계를 실제로 표현하는 테이블이 issues 입니다. 1-1. members - 회원 테이블더보기CREATE TABLE IF NOT EXISTS members ( member_id VARCHA..
2. 시스템 분석과 설계
2. 시스템 분석과 설계
2025.12.171. 시스템 전체 구조 더보기이 프로그램은 크게 4개의 영역으로 나뉜다. (1) 전역 설정 영역프로그램 전체에서 “공통으로 쓰는 값”을 모아둔 영역현재 코드에서는 DB_CONFIG(2) 데이터 접근 영역(DB)DB와 통신하는 “중간 계층”현재 코드에서는 DatabaseManager + 전역 객체 db(3) 메인 UI 프레임(프로그램 껍데기)사이드바/페이지 영역 배치페이지 전환 제어현재 코드에서는 LibrarySystem(QMainWindow)(4) 기능별 페이지(UI + 로직)실제 기능(회원/도서/대출)을 수행하는 화면 단위 클래스현재 코드에서는 CirculationPage, BookManagerPage, MemberManagerPage 2. (3) 메인 UI 프레임더보기class LibrarySyste..
1. 환경 설정 및 주의사항
1. 환경 설정 및 주의사항
2025.12.171. 프로젝트 환경 설정더보기1.1 Python 가상환경 구성(venv) 파이참에서 프로젝트 생성하기1. 일반 프로젝트 생성하기더보기 2. 새 프로젝트 시작하기더보기Case A. 새 프로젝트 생성 Case B. 새 프로젝트 생성 Case C. 새 프로젝트 생성 3. 커스텀 가상환경으로 프로젝트 시작하기 더보기basiclike.tistory.com 1.2 필수 패키지 설치 파이참에서 라이브러리 설치하기1. 파이참 UI 에서 라이브러리 설치: 가상환경과 패키지 설치 경로 확인하기더보기 설치 확인(1) 설치 확인(2) pip list 설치 확인(3) 라이브러리가 설치된 가상환경의 위치 확인하기 2. 파이참 콘솔에basiclike.tistory.com 필수 라이브러리PySide6→ Qt 기반 GUI 애플리케..
포폴용 프로젝트 산출물 가이드
포폴용 프로젝트 산출물 가이드
2025.12.160. SW 개발 표준 산출물 가이드더보기 0 기획 의도, 문제 파악더보기 1 요구사항 명세서더보기 한글 양식워드 양식2 순서도더보기방법 1. Draw.io 에서 수동으로 직접 작성 draw.io 활용법 방법 2. 플로우차트 만들기 - 무료 순서도 그리기 | Canva(캔바) 방법 3. Eraser Eraser – AI co-pilot for technical designDeliver accurate, consistent designs faster.app.eraser.io 코드 기반 Flow Chart 생성 사용 순서1) 요구사항 분석2) GPT 에 요구사항 기반으로 eraser.io 사이트의 Flow Chart 코드 생성해줘3) eraser.io 붙여넣기 3 화면 구성도 (= 메..
8. 로그인
8. 로그인
2025.12.151. 목표더보기이 단계의 학습 목표기존 1~6단계 통합 예제에 로그인 확인 기능을 자연스럽게 확장해서 붙이기QLineEdit 비밀번호 모드와 QPushButton을 활용해 로그인 UI 만들기SELECT ... WHERE 조건문으로 사용자 아이디/비밀번호를 검사하는 로직 구현로그인 성공/실패를 QLabel, QMessageBox로 사용자에게 명확하게 피드백하기이미 구현한 MySQL 연결 예외 처리, 로그 기록 함수(handle_mysql_error, write_log_with_qt)를 재사용해 일관된 구조 유지이제 최종 통합 GUI는 다음 기능을 한 창에서 모두 처리합니다.1단계: MySQL 서버 연결 테스트2단계: 데이터베이스 생성3단계: users 테이블 생성4단계: 사용자 추가(INSERT)5단계: ..
7. Data 검색
7. Data 검색
2025.12.151. 목표더보기WHERE 조건문을 사용해 특정 사용자만 골라서 조회하는 방법을 익힌다.LIKE 연산자를 사용해 부분 검색 기능을 구현한다.검색어를 입력하는 QLineEdit와 검색 버튼(QPushButton)으로 검색 UI를 구성한다.검색 결과를 기존 QTableWidget에 다시 채워 넣어, 전체 조회와 검색 조회를 모두 지원한다.검색 실패, 접속 실패 등 예외 상황에서 적절한 메시지를 띄우고 로그를 남기는 흐름을 이해한다. 2. 전체 로직더보기import sysfrom PySide6.QtWidgets import ( QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, ..
6. Data 조회
6. Data 조회
2025.12.151. 목표더보기PySide6 폼에서 SELECT 문으로 users 데이터를 조회한 뒤, QTableWidget에 행 단위로 표시한다.QAbstractItemView 열거형을 사용해서 행 단위 선택, 읽기 전용 테이블을 설정하는 방법을 익힌다.오류 발생 시 QMessageBox와 QLabel, QFile + QTextStream으로 사용자 메시지와 로그를 남기는 흐름을 이해한다. 2. 전체 로직더보기1단계: 연결 테스트2단계: 데이터베이스 생성3단계: users 테이블 생성import sysfrom PySide6.QtWidgets import ( QApplication, QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, Q..
5. Data 삽입
5. Data 삽입
2025.12.151. 목표더보기이 단계의 학습 목표QLineEdit, QPushButton을 사용해 간단한 입력 폼을 구성할 수 있다.MySQL INSERT SQL 문을 이해하고 직접 작성할 수 있다.파라미터 바인딩을 사용해 SQL Injection을 방지할 수 있다.PySide6의 QMessageBox로 성공, 실패 메시지를 표시할 수 있다.QFile, QTextStream을 사용해 삽입 로그를 파일로 남길 수 있다.전제 조건데이터베이스 pyqtdb가 이미 생성되어 있다.pyqtdb 안에 users 테이블이 이미 생성되어 있다.(id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(150), password VARCHAR(150)) 2. 전체 로직더보기import sysfrom ..
4. Table 생성
4. Table 생성
2025.12.151. 목표더보기데이터베이스와 테이블의 차이를 구분할 수 있다.MySQL 클라이언트에서 USE, CREATE TABLE, SHOW TABLES, DESCRIBE 기본 명령을 사용할 수 있다.users 테이블 구조를 설계한다.id, username, password 컬럼과 타입 의미를 이해한다.PySide6 애플리케이션에서 버튼 클릭으로 users 테이블을 생성하는 코드를 작성하고,MySQL 수업에서 사용한 모델링과 비교하여 학습한다.QFile, QTextStream으로 테이블 생성 로그를 남겨 보고, MySQL 클라이언트로 테이블이 생성되었는지 확인한다.이후 단계인 데이터 INSERT, SELECT에서 이 users 테이블을 재사용할 수 있는 기반을 만든다. 2. 전체 로직더보기1단계: 연결 테스트2단계:..
7. Linux, GCC, MinGW
7. Linux, GCC, MinGW
2025.12.13GNU 1971년 리차드 스톨만이 MIT에서 직업 연구활동을 시작했던 시절은상업적인 컴퓨터 회사들 조차도 자유 소프트웨어를 배포하던 때였으므로프로그래머들은 아무런 제약없이 서로 협력할 수 있었다 1983년그러나 1980년대에 소프트웨어들은 소유와 독점에 관한 법률에 의해서 제한되었으며,소유권자들은 소프트웨어의 자유로운 이용을 통한 사용자들의 상호 협력을 그들의 권리를 내세워서 금지시켰다. 바로 이것이 GNU 프로젝트가 시작된 이유였다.GNU "GNU is Not Unix" 는 유닉스와 같은 운영체제를 만들되, 유닉스와 달리 소유권이 없는 GNU 를 만들겠다는 것을 의미한 것이다. 1985년GNU 프로젝트를 지원하기 위해 자유소프트웨어재단(FSF : Free Software Foundation)을 설립..