지난 SQL 수업에서 오라클 클라우드 데이터베이스를 생성하고, 접속하여, 파이썬과 연동하는 방법을 배웠다. [ORACLE CLOUD DATABASE 시리즈 참고]
실습 시에는 각자 자신이 만든 데이터베이스에 파이썬을 연동했지만,
한 데이터베이스에 파이썬 챗봇을 연동하면, 여러 컴퓨터로 파이썬 챗봇을 실행하면서 입력되는 데이터를 해당 데이터베이스에 함께 받아올 수 있다. (대박 신기해..!!!)
강사님께서 챗봇 사용 로그를 남겨보는 것이 어떻겠냐고 추천해주셨고,
chatbot 테이블
을 생성하고사용자 이름(username)
, 실행 시간(jointime)
, 위치(location)
, 게임 스코어(gamescore)
, 검색한 뉴스 키워드(newskeyword)
를 받아오는 어트리뷰트를 만들었다.+) 추가적으로 menu_select.py에서 엑셀을 읽어오던 부분을 데이터베이스로 연동하여 기능을 추가 및 수정했다.
+) 또한, 저장한 사용자 로그 데이터를 다시 읽어와서 출력하는 기능도 추가했다.
사실 처음에 파이썬 챗봇을 구상할 때 데이터베이스 연동을 염두에 두고 있지 않아서 데이터베이스 연동을 활용할만한 기능이 딱히 없어 고민이 많았다.
새로운 기능을 구현하는 것이 아니더라도 오라클 클라우드 데이터베이스와 파이썬을 연결하는 실습을 진행할 겸, 사용자 로그 데이터를 받아서 저장하는 것부터 시작하기로 했다.
name
now
location
score
search_keyword
✅ 파이썬 챗봇 특성 상 main.py에 여러 파일이 연결되어 있고, 데이터베이스에 저장할 사용자 로그도 여러 파일 내에 흩어져있기 때문에 기존 코드를 망가뜨리지 않고 기능을 추가하는데 초점을 맞췄다.
▶ 때문에 dbconeect.py 파일을 따로 만들고 데이터베이스에 사용자 로그를 저장하는 함수 db()를 정의하고,
▶ main.py에서 채팅이 종료되는 시점에 db() 함수가 실행되도록 했다.
✅ 데이터베이스 connection, cursor를 하나만 만들어 전역변수로 선언, 여기저기서 연결하여 쓰는 구조이기 때문에 챗봇 전체 작동 흐름과 변수 입력 과정, 데이터베이스에 커밋까지 전체 흐름 상 오류가 없는지 많이 신경썼다.
(아래 구현 상 문제점 모두 이 부분과 연결된 문제였다.)
위의 문제점을 해결하기 위해 아래와 같은 디버깅 방법을 사용하였다.
드디어...드디어 👾파이썬 챗봇👾 최종 코드가 깃헙에 업로드 되었습니다..!👏👏👏
(멀고 험난 했던 git, git-hub 협업이 너무 큰 경험이었기 때문에 더 뿌듯..!)
파이썬 챗봇의 최종 코드가 궁금하다면? 깃허브로!
한 줄 요약 : 하려고하는 마음이 있으면, 반드시 결과물을 만나게 되는구나😲
개발 능력 향상은 물론 취업 준비에도 프로젝트 경험, 포트폴리오가 얼마나 중요한 지 귀에 딱지가 앉도록 들어왔고, 나 또한 그 의견에 전적으로 동의하는 바이지만 혼자서는 기획 단계에서부터 막막하여 프로젝트를 진행하기가 어려웠다.
그런데 팀원분들과 함께 기능 하나 하나를 만들어가고, 오류를 하나 하나 디버깅해가다보니 처음 아이디어 회의했을 때에는 상상하지도 못할 정도로 큰 결과물이 만들어졌다.
서로 같이 공부하고 배워가면서 프로젝트를 진행할 수 있어서 좋았고 단기간에 정말 많은 것을 배웠다. 이번 프로젝트를 하면서 처음 git으로 협업하고, 기술서도 작성해보고, 여러 파이썬 파일을 연동해보기도하고, 마지막에는 데이터베이스와 연동까지 해보았다. 코드를 작성하고 실행해보고 오류를 하나하나 구글링해서 찾아가며 공부해서 그런지 이전의 이론 공부보다 더 효과적인 학습이 가능했다.
처음 프로젝트를 시작할 때, 다들 파이썬으로 어떤 것을 만들 수 있을지에 대해 모호한 인식을 가지고 있었기 때문에 프로젝트의 명확한 클라이언트나 목표를 설정하지 못한 것이 아쉽다.
기획 단계에서 그런 부분을 명확하게 해두었다면, 버전 업을 할 때 추가해야할 기능이나 개선해야 할 부분을 찾기 쉬웠을텐데 그러지 못해서 방향성 없이 기능 확장만 한 느낌이랄까..?💧💧
그치만 이 프로젝트를 하면서 다양한 기능을 익히는 시간을 가질 수 있었기 때문에 파이썬 챗봇은 미니 프로젝트로서 충분한 역할을 수행했다. 다음 프로젝트 때는 더 유의미한 결과물을 만들어 낼 수 있도록 기획 단계에 조금 더 신경을 써보아야겠다.