Python/Database

[Python MySQL] MySQL을 활용한 단어장 프로그램 만들기

sdesign416 2026. 6. 9. 19:36
 

[Python MySQL] Python에서 MySQL 연결하고 데이터 조회, 추가하기

Python 설치부터 VSCode, Jupyter, venv설정까지파이썬을 시작하기 앞서가장 중요한 것은 개발환경 설정이다. Python 설치, VSCode 확장 프로그램, venv 가상환경까지 한 번에 등장하다보니각 역할이 무엇인

sdesign416.tistory.com

 프로그램을 만들 기 전,
SQL 데이터베이스에 voca테이블을 만들고 시작한다.

create table voca(
    eng varchar(50) primary key,
    kor varchar(50) not null,
    lev int default 1
);

MySQL을 활용한 단어장_최종.ipynb
0.01MB


프로그램 설명

프로그램 전체 코드는 MySQL을 활용한 단어장_최종.iptnb 파일을 확인!
아래 실행 흐름 설명도 파일 보면서 확인하기!!
 

a) 클래스를 역할별로 분리하여 생성

  • Word → 단어 데이터 관리
  • WordsDAO → 데이터베이스 처리
  • WordService → 프로그램 핵심 동작 담당
  • Menu → 사용자 인터페이스

 

b) MySQL 연동

Python에서 MySQL에 접속하여 데이터를 관리한다.
CRUD 기능을 모두 구현하여 프로그램을 만든다.
 

c) 구현 기능

  • 새로운 단어 등록
  • 단어장 단어 출력
  • 단어 검색
  • 단어 수정
  • 단어 삭제
  • 종료

 

d) 프로그램 동작 흐름

  1. 프로그램 시작
  2. [4]ui용 클래스로 메뉴 출력
  3. 메뉴 선택
  4. [3]WordService메서드 호출
  5. [2]DAO 메서드 호출
  6. MySQL 실행
  7. 결과 반환
  8. 출력

 

e) 프로그램 제작 순서

[3] WordService 클래스를 중심으로 만든다.
[4] 메뉴에서 [a] 단어 등록 기능을 만들고
WordService.insert_word() 생성 → WordsDAO.insert() 생성 순서로 만들었다.


[1] 단어장 클래스 (class Word)

영어단어(eng), 뜻(kor), 레벨(lev) 정보를 하나의 객체로 묶어 관리한다.

🔎 사용하는 이유 보러가기 
 

생성자를 사용해 단어 객체 생성

def __init__(self, eng, kor, lev=1):
    self.eng = eng
    self.kor = kor
    self.lev = lev

 

Property를 사용해 데이터 검증 (eng만 예시로 사용)

객체지향을 사용하여
객체 내부의 데이터를 외부에선 변경하지 못하도록 직접 접근을 막는다.

@property
def eng(self):
    return self.__eng
    
@eng.setter
def eng(self, eng):
    # 만약 사용자가 빈 문자열 입력 시 raise 에러 발생시킴
    if not eng:
        raise ValueError("영어 단어는 비워둘 수 없습니다")
    self.__eng = eng

※ 레벨의 경우 1이상을 입력받도록 if문을 설정한다.


[2] DAO 클래스 (class WordsDAO)

WordsDAO 클래스는 데이터베이스와 직접 통신하는 역할을 담당한다.
 
만약 DAO가 없다면, 사용자가 단어를 등록해달라 요청했을 때 
프로그램의 핵심 기능을 하는  WordService가 직접 DB에 연결을 하고
SQL문을 쓰고, 예외 처리를 하는 너무 많은 일을 해야하기 때문에
역할을 분리하여 프로그램을 구성한다.

  • WordServic (핵심 기능) : 단어 객체를 줄 테니 DB에 저장해 줘
  • WordsDAO (데이터 접근) : 그래, 내가 DB에 접속해서 INSERT문 실행할게

데이터베이스연결, 연결해제

데이터베이스 연결 메서드와 연결해제 메서드를 생성하여
메서드만 호출하여 데이터베이스 연결과 연결해제를 쉽게 한다. (코드 길어짐 방지)

# 데이터베이스 연결
def connect(self):
    self.db = MySQLdb.connect(host='localhost', user='apple', password='1111', db='ai', charset='utf8')

# 데이터베이스 연결해제
def disconnect(self):
    if self.db:
        self.db.close()

 

CRUD  기능 구현

생성 메서드 기능
insert() 단어 등록
select_all() 전체 조회
update() 수정
delete() 삭제
# 예시코드
sql = "insert into voca (eng, kor, lev) values (%s, %s, %s)"

▶ word 객체의 데이터를 받아 데이터베이스에 저장한다.


[3] 실질적으로 작동하는 알고리즘 (class WordService)

WordService는 프로그램의 실제 동작을 담당하고 있는 클래스이다.
사용자에게 데이터를  입력을 받아 word객체를 생성하고 DAO를 통해 데이터베이스에 저장하는 방식이다.

실행순서

eng = input("단어를 입력하세요: ")
kor = input("뜻을 입력하세요: ")
	  ↓
word = Word(eng, kor, lev)
	  ↓
self.dao.insert(word)

 

✅ 수정 + 삭제하기 전 데이터 확인

수정과 삭제 기능에선 해당 단어가 존재하는지 확인할 수 있는 기능을 추가하였다.
존재하지 않는 데이터를 수정하거나 삭제하는 상황을 방지하고자 해당 기능을 추가하였다.

# 예시 코드
word = self.dao.search(eng)

if not word:
    print("수정할 단어가 없습니다")

[4] ui용 클래스 (class Menu)

Menu 클래스는 사용자에게 보여줄 ui를 담당하는 클래스이다.
사용자에게 ui를 보여주고 사용자가 메뉴를 입력하면
입력받은 데이터를 WordService에 뿌려 기능을 작동하게 한다.
 

반복문 사용

반복문을 사용해서 프로그램이 종료될 때까지 메뉴를 계속 출력하도록 만든다.

while True:

 

선택한 메뉴에 따라 기능 호출

사용자가 선택한 메뉴에 따라 WordService의 기능을 호출하도록 만든다.

if menu == 1:
    self.service.insert_word()