4. PyMySQL 익혀보기 > 4-1. PyMySQL을 사용하는 이유

PyMySQL을 사용하는 이유

PyMySQL 이란?

PyMySQL 은 MySQL을 Python에서 사용할 수 있도록 하는 라이브러리입니다. PyMySQL외에 다른 라이브러리도 존재하지만, 이번 스터디에서는 설치가 쉬워 가장 대중적으로 많이 사용하는 PyMySQL을 배워보겠습니다.

그렇다면, PyMySQL을 사용하는 이유는 무엇일까요? 바로 하나의 프로그램에서 데이터 분석과 저장, 수정을 모두 진행할 수 있다는 '편리성' 때문입니다. 기존에 우리가 사용하는 방식을 생각해봅시다. xlsx 혹은 csv 등의 형태의 데이터를 Python의 pandas를 활용해서 전처리 및 분석을 진행하고, 수정한 데이터는 다시 새로운 xlsx, csv 파일로 저장 합니다. 그러나 xlsx 혹은 csv에 담기지 않는 대용량의 데이터, 즉 DB의 데이터를 사용할 땐 이 방법을 사용할 수 없습니다. 따라서 PyMySQL을 통해 데이터 분석과정과 데이터 저장 및 수정을 한번에, 즉 DB와 바로 연결하여 보다 편리하게 작업을 진행하는 것입니다. 또한 Python을 공부하면서 익힌 함수, 코드, 라이브러리 등을 그대로 적용할 수 있다는 것도 PyMySQL을 사용하면 얻을 수 있는 장점 중 하나입니다.

기본 개념

pymysql_기본개념

DB를 연결해줄 때 대부분의 경우 host='localhost', port='3306', user='root'일 가능성이 높습니다. 바꿔줘야할 부분은 password=''와 db=''이죠. 또한 charset=''은 character set을 설정하는 것으로 한글 데이터 처리를 위한 코드를 의미합니다. host와 port에 대해서 조금 더 자세히 알아보기 위해 관련 용어 및 설정해줄 파라미터들에 대한 개념을 하나씩 살펴보겠습니다.

  • network: 우리는 인터넷, 인트라넷 등 네트워크 상에서 정보를 주고 받게 됩니다. 이때 네트워크에 연결된 모든 장치를 노드(node)라고 부릅니다.
  • process: 프로그램, 어플리케이션, 소프트웨어 등 기기 동작의 총칭.
  • host: 노드 중에서 네트워크 주소(IP)가 할당된 즉, 인터넷에 연결된 컴퓨터, 노트북, 핸드폰 등등 모두 host이고, 이 host끼리 서로 데이터를 주고 받습니다.
  • port: 네트워크를 통해 데이터를 주고 받는 프로세스를 식별하기 위해 호스트 내부적으로 프로세스가 할당 받는 고유한 값. 데이터가 누구한테 가야할지, 데이터를 누가 보냈는지 알려주는 주소 같은 개념입니다. 한 호스트 내에서 네트워크 통신을 하는 프로세스를 식별하기 위해 사용되는 값이므로 (기본적으로) 같은 호스트 내에서 다른 프로세스가 같은 포트 넘버를 가질 수 없습니다.
  • socket: '프로세스가 네트워크를 통해 데이터를 주고 받으려면 반드시 열어야 하는 창구' 프로세스가 데이터를 보내고 받기 위해서는 socket을 열어야 합니다. 비유하자면 편지를 보내려면 우체국이 열려 있어야 하는 상황이죠. 이때 socket을 열기 위해서는 host에 할당된 ip주소, 포트 넘버, 프로토콜(통신 규약) 세 가지가 필요하고, 이 세 가지가 소켓을 정의합니다.

즉, 네트워크 상에서 데이터를 주고 받는다는 것은 '한 호스트의 프로세스 된 데이터가 다른 호스트의 프로세스까지 오고 갔다!'는 것을 의미합니다. 예를 들어 SLACK에서 DM을 보냈다면 상대방의 SLACK에 DM이 도착해야 합니다.

✔️ PyMySQL은 왜 Colab에서는 사용할 수 없을까요?
PyMySQL을 Colab에서 실행하면 다음과 같은 에러가 발생합니다. (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)") 즉, 로컬에서 MySQL을 연결할 수 없다는 것을 의미하는데, 정확한 원인은 구글링을 해도 잘 나오지 않지만,, 경로 설정 등 추가로 진행해줘야 할 직업이 생길 가능성이 높으니 가능한 Jypyter notebook을 사용하길 권장합니다.

마지막으로 업데이트 된 날짜:
2022년 9월 24일