1. DB 연동 개요

1. 간략 비교
| MySQL 연동 방법 | 설명 | 실제 동작 위치 |
| MySQL Connector/Python | Python 에서 MySQL 서버와 직접 통신에 필요한 기능을제공하는 범용 연결 도구 | Python 가상 환경 (pip로 설치) |
| QSqlDatabase(PySide6/QtSql) | (Qt GUI 전용) Qt에서 제공하는 DB 연결 도구 Qt GUI와 데이터 바인딩 가능한 Model 제공 |
Qt PySide6 런타임 내부 |
| AWS RDS(MySQL) | AWS 가 제공하는 클라우드형 MySQL 서버 MySQL 서버 자체가 클라우드에 존재하는 형태 |
AWS 클라우드 상 (EC2와 별도) |
2. 로컬 MySQL + MySQL Connector/Python 예제
2.1 라이브러리 설치
pip install mysql-connector-python
2.2 간단 사용 예제
import mysql.connector
conn = mysql.connector.connect( # (1) MySQL 서버에 연결
host="127.0.0.1",
user="root",
password="1234",
database="testdb"
)
cursor = conn.cursor() # (2) Cursor 생성 (SQL 실행에 필요한 도구)
cursor.execute("SELECT 'Hello MySQL!'") # (3) SQL 실행 요청 → MySQL 서버에서 처리
result = cursor.fetchone() # (4) 서버가 반환한 결과(한 행) 가져오기
print(result) # (5) Python에서 결과 사용
cursor.close() # (6) Cursor 종료
conn.close() # (7) MySQL 서버 연결 종료
단, 이 코드는 testdb가 반드시 존재해야만 실행됩니다.
3. AWS RDS(MySQL) + MySQL Connector/Python 예제
import mysql.connector
# (1) AWS RDS MySQL 서버에 연결
conn = mysql.connector.connect(
host="mydb.abcd1234.ap-northeast-2.rds.amazonaws.com", # RDS Endpoint
port=3306, # 기본 포트
user="admin", # 계정명
password="mypassword", # 비밀번호
database="testdb" # 사용할 DB
)
cursor = conn.cursor() # (2) Cursor 생성
cursor.execute("SELECT 'Hello from AWS RDS MySQL!'") # (3) SQL 실행
result = cursor.fetchone() # (4) 결과 1행 가져오기
print(result) # (5) 결과 출력
cursor.close() # (6) Cursor 종료
conn.close() # (7) DB 연결 종료
4. 로컬 MySQL + QSqlDatabase 예제
from PySide6.QtSql import QSqlDatabase, QSqlQuery
db = QSqlDatabase.addDatabase("QMYSQL") # (1) QSqlDatabase 생성 + MySQL 드라이버 선택
db.setHostName("127.0.0.1") # (2) MySQL 서버 주소 설정
db.setUserName("root") # (3) 사용자 계정 설정
db.setPassword("1234") # (4) 비밀번호 설정
db.setDatabaseName("testdb") # (5) 사용할 데이터베이스 선택
db_open = db.open() # (6) MySQL 서버 연결 시도
if not db_open:
print("DB 연결 실패:", db.lastError().text())
else:
print("DB 연결 성공")
query = QSqlQuery() # (7) SQL 실행 객체 생성 (Cursor 역할)
query.exec("SELECT 'Hello MySQL from QSqlDatabase!'") # (8) SQL 실행 요청
query.next() # (9) 결과 집합의 첫 행(row)으로 이동
result = query.value(0) # (10) 첫 번째 컬럼 값 가져오기
print(result) # (11) Python에서 결과 사용
db.close() # (12) MySQL 서버 연결 종료
DB 연결 실패: Driver not loaded Driver not loaded PySide6 안에 QMYSQL 드라이버가 없어서, MySQL을 Qt 방식으로 쓸 수 없는 상태입니다.
즉, 코드가 틀린 게 아니라 MYSQL 환경(플러그인)이 없는 것입니다.
Qt & MySQL 라이센스 문제
Qt/PySide6
- LGPL 라이센스
- 라이브러리를 사용하는 애플리케이션은 소스 공개 의무 없음
- 소스 공개 없이 상업 배포 가능
- 예시) 나의 개인 유튜브 강의 채널
MySQL
- GPL 라이센스
- 코드를 포함하거나 연결하면 해당 소프트웨어 전체를 GPL로 공개 배포해야 함
- 상업적 사용 가능하지만 소스 전체 공개 필요
- 예시) 유명 스타 강사의 공개 강의 영상
예시) Qt/PySide6 가 개인 유투브 강의 채널로, MySQL(유명 스타 강사의 공개 강의 영상)을 사용하려면
내 채널의 수익을 포기하거나 나의 강의도 공짜로 보이게 해야 하는 리스크가 존재합니다.
해결방법 - MySQL( 유명 스타 강사의 공개 강의 영상)을 보는 방법, 즉 Qt/PySide6 플러그인으로 MySQL 연결하는 기능과사용 방법은 알려줄께, 하고 싶으면 사용자(개발자)가 직접 해라.
기술·의존성 관점: OS마다 설치방식이 전부 다르다
1) MySQL Client는 OS·버전에 따라 설치 방식이 다름
- Windows:
- MySQL Server 설치 위치, Connector/C 설치 위치, PATH 설정, 32/64bit 구분…
- Linux:
- libmysqlclient.so 패키지가 배포판마다 이름이 다르고,
심지어 MariaDB 라이브러리로 대체되어 있는 경우도 많습니다.
- libmysqlclient.so 패키지가 배포판마다 이름이 다르고,
- macOS:
- Homebrew, MacPorts, DMG 설치 등 설치 루트가 제각각.
만약 Qt/PySide6가 “모든 플랫폼에서 MySQL Client까지 포함”하려면:
- 각 OS별 MySQL 라이브러리 바이너리를 모아서
- Qt/PySide6 내부 빌드와 ABI를 맞추고
- 배포할 때 설치 환경, PATH, 충돌 여부까지 책임져야 합니다.
이건 현실적으로 유지보수 지옥입니다.
그래서 이와 같은 이유로, Qt 쪽 기본 정책은 간단합니다
필요한 사람은 당신 환경에 맞게 빌드해서 qsqlmysql.dll을 만들어 써라”라는 구조입니다
설정 방법은,
1. MySQL C/C++ Client 라이브러리(libmysql) 설치
2. Qt의 QMYSQL 플러그인(qsqlmysql.dll)을 빌드
3. 빌드 결과 파일 위치 PySide6 프로젝트 가상환경으로 복사
(4. 테스트 순서)