🤔 데이터, 어떻게 해야 ‘잘’ 다룰 수 있을까?
어제는 데이터베이스의 고급 기능을 배우며 DB 자체의 가능성에 놀랐다면, 오늘은 그 경계를 넘어 파이썬과 데이터베이스가 어떻게 하나로 연결되는지를 배웠다. 단순히 데이터를 저장하는 것을 넘어, ‘잘 구조화된’ 데이터베이스를 설계하고, 이를 파이썬으로 자유자재로 다루는 기술은 백엔드 개발의 핵심이라는 것을 다시 한번 깨달았다.
오늘은 데이터베이스 정규화로 시작해 ERD를 설계하고, Python으로 DB에 접속해 pandas
와 SQLAlchemy
로 데이터를 주고받는 여정이었다. 그 과정에서 어제 배운 프로시저, 함수, 트리거가 실제 프로젝트에서 어떻게 활용될 수 있을지 더욱 명확하게 그릴 수 있었다.
🗂️ 정규화와 ERD: 좋은 설계가 반이다
정규화(Normalization) 는 중복된 데이터를 제거하고, 데이터의 일관성을 지키는 필수적인 과정이다. 영화 데이터베이스를 예제로, 하나의 거대한 테이블을 movies
, productions
, distributors
등으로 쪼개고, 이들의 관계를 연결 테이블로 정의하는 실습을 진행했다.
이 과정을 통해, 데이터의 구조가 명확해지고, 불필요한 데이터 중복이 사라지는 것을 보며 좋은 설계의 중요성을 실감했다. ERD는 그 설계의 청사진이었다.
🐍 파이썬과 MySQL의 만남: pymysql
, pandas
, SQLAlchemy
가장 흥미로웠던 부분은 파이썬으로 데이터베이스를 직접 제어하는 것이었다. 세 가지 핵심 도구를 사용했다.
라이브러리 | 내 생각 & 느낌 |
---|---|
pymysql |
DB와 파이썬을 이어주는 가장 기본적인 연결고리. 모든 것의 시작점이었다. |
pandas |
pd.read_sql() 한 줄이면 DB 테이블이 DataFrame으로 변신하는 마법! 데이터 분석가와 개발자 모두에게 사랑받는 이유를 알 것 같았다. |
SQLAlchemy |
df.to_sql() 로 DataFrame을 DB에 밀어 넣는 과정은 정말 간편했다. 복잡한 INSERT 문 없이 객체지향적으로 DB를 다룰 수 있게 해주는 강력한 도구였다. |
# pandas와 SQLAlchemy의 조합은 정말 강력했다.
from sqlalchemy import create_engine
import pandas as pd
# DB 연결 엔진 생성
engine = create_engine("mysql+pymysql://user:password@host/db_name")
# 엑셀 데이터를 DataFrame으로 읽고
df = pd.read_excel('movie_data.xlsx')
# 한 줄의 코드로 DB에 저장한다.
df.to_sql('movies', con=engine, if_exists='append', index=False)
이런 생산성은 정말 놀라웠다. 앞으로 데이터 처리 작업이 훨씬 즐거워질 것 같다.
⚙️ 고급 SQL, 프로젝트에 날개를 달다
어제 배운 프로시저, 함수, 트리거가 오늘 배운 내용과 합쳐지니 그 활용도가 더욱 명확해졌다.
- 프로시저/함수: 복잡한 데이터 처리 로직을 DB에 만들어두고, 파이썬에서는 간단히
CALL
만 하면 된다. 파이썬 코드는 깔끔해지고, 성능은 올라간다. - 트리거: 파이썬 코드로 일일이 처리하기 힘든 데이터 무결성 제약이나, 변경 이력 등을 DB가 알아서 처리해준다. 개발자의 실수를 줄여주는 든든한 안전장치다.
예를 들어, 사용자가 회원 탈퇴를 요청하면, 파이썬은
DELETE
쿼리만 날린다. 그러면 DB의 트리거가 알아서 관련 데이터를 백업 테이블로 옮기고, 활동 로그를 남기는 식의 자동화가 가능하다.
✨ 오늘의 회고
오늘은 데이터베이스와 애플리케이션(파이썬)이 어떻게 유기적으로 상호작용하는지에 대한 큰 그림을 그린 날이었다.
- 잘 설계된 DB는 시스템의 뼈대이고,
- 파이썬과의 연동은 그 뼈대에 살을 붙이는 작업이며,
- 고급 SQL은 그 시스템에 지능과 자동화라는 영혼을 불어넣는 기술이다.
이 모든 것이 조화롭게 어우러질 때, 비로소 안정적이고 확장 가능한 서비스가 탄생한다는 것을 깨달았다. 🚀