파이썬과 SQL의 결합 — 엔터프라이즈급 장부 관리
엑셀은 데이터가 100만 건이 넘어가면 버티지 못합니다.
이제 방대한 거래자료를 데이터베이스(MariaDB)에 안전하게 저장하고, SQL과 Pandas를 연동해 순식간에 집계하는 실무 시스템을 구축합니다.
왜 엑셀을 버리고 DB(데이터베이스)로 가야 하는가?
11단계까지는 "엑셀 파일 50개를 열어서 하나로 합치는 작업"을 자동화했습니다. 하지만 회사가 커지고 거래 건수가 수십~수백만 건이 되면 엑셀만으로는 관리가 불가능해집니다.
100만 건 시 프로그램 뻗음
수천만 건도 1초 만에 검색
DB에서는 엑셀의 '시트'를 테이블(Table), '행'을 Row, '열'을 Column이라고 부릅니다. 이 구조만 이해하면 절반은 끝난 것입니다.
최소한 알아야 할 필수 SQL (조회, 집계)
데이터베이스(MariaDB, MySQL)에 데이터를 명령할 때는 SQL이라는 언어를 씁니다. 회계 분석에 필요한 엑기스 문법은 아래 4가지입니다.
-- 1. 조건 검색: 1천만원 이상 매출만 찾기 SELECT * FROM transactions WHERE transaction_type = '매출' AND amount >= 10000000; -- 2. 그룹 집계 (Pandas의 groupby와 동일): 거래처별 총 매출액 SELECT customer, SUM(amount) AS total_amount FROM transactions WHERE transaction_type = '매출' GROUP BY customer ORDER BY total_amount DESC;
Pandas의 df.groupby("거래처")["금액"].sum() 코드는 SQL의 SELECT customer, SUM(amount) FROM transactions GROUP BY customer 와 완벽히 동일한 역할을 수행합니다.
Python에서 DB 문 두드리기 (pymysql)
터미널에서 pip install pymysql 모듈을 설치한 뒤, 서버에 있는 DB에 연결하여 직접 SQL을 날려 결과를 가져올 수 있습니다.
import pymysql # 1. DB 접속 conn = pymysql.connect( host="localhost", user="root", password="비밀번호", database="accounting", charset="utf8mb4" ) # 2. 쿼리 실행기 생성 및 명령 cursor = conn.cursor() cursor.execute("SELECT * FROM transactions LIMIT 5") rows = cursor.fetchall() for row in rows: print(row) conn.close()
환상의 짝꿍: Pandas ↔ SQL 연동 (SQLAlchemy)
위 방식처럼 한 줄 한 줄 튜플로 가져오면 분석하기 힘듭니다. SQLAlchemy를 사용하면 DB 데이터를 곧바로 Pandas DataFrame으로 빨아들이고, 반대로 DataFrame을 통째로 DB 테이블에 쑤셔 넣을 수 있습니다.
# read_sql을 통해 SQL 쿼리 결과를 # 즉시 DataFrame으로 가져옵니다! sql = "SELECT * FROM transactions" df = pd.read_sql(sql, conn) print(df.head())
# SQLAlchemy 엔진을 사용하여 # df의 내용을 transactions 테이블에 삽입 df.to_sql( "transactions", engine, if_exists="append", # 이어붙이기 index=False )
관계형 DB의 진가: JOIN 연산
엑셀에서는 수십만 줄짜리 장부에 "거래처 대표자", "사업자 주소" 등을 VLOOKUP으로 가져오면 파일이 뻗어버립니다. DB에서는 거래 테이블과 고객 테이블을 분리하고, JOIN을 통해 순식간에 연결합니다.
-- transactions(거래기록)와 customers(고객정보) 테이블 연결 SELECT t.transaction_date, t.amount, c.customer_name, c.representative FROM transactions t JOIN customers c ON t.business_number = c.business_number;
이것이 대규모 ERP 시스템이 멈추지 않고 돌아가는 핵심 원리입니다.
12단계 최종 과제: 엑셀 ➡️ 데이터 정제 ➡️ DB 적재 ➡️ 분석 엑셀 출력
이제 수강생은 단순한 파이썬 스크립터를 넘어, "데이터 시스템 설계자"가 됩니다.
import pandas as pd from sqlalchemy import create_engine # 1. 엑셀 원본 읽기 및 정제 (Cleaning) df = pd.read_excel("transactions_raw.xlsx") df["공급가액"] = pd.to_numeric(df["공급가액"].astype(str).str.replace(",", ""), errors="coerce") # 2. DB 엔진 연결 (SQLAlchemy) engine = create_engine("mysql+pymysql://root:1234@localhost/accounting") # 3. 깨끗해진 데이터를 DB에 그대로 쑤셔넣기 (Insert) df.to_sql("transactions", engine, if_exists="append", index=False) print("✅ DB 적재 완료!") # 4. DB에서 SQL을 날려 거래처별 실적 분석 가져오기 sql = """ SELECT customer AS 거래처, COUNT(*) AS 거래건수, SUM(amount) AS 총공급가액 FROM transactions GROUP BY customer ORDER BY 총공급가액 DESC """ customer_summary = pd.read_sql(sql, engine) # 5. 분석 결과를 보고서 임원용 엑셀로 출력 customer_summary.to_excel("customer_report.xlsx", index=False) print("✅ 분석 보고서 엑셀 생성 완료!")
지금까지 배운 파이썬, Pandas, SQL을 모조리 결합하여 실전 회계자료 자동 검증 시스템을 만듭니다. 중복 거래, 사업자번호 불량, 음수 금액 오류 등을 AI처럼 자동으로 체크하고 검토 리포트를 떨구는 완벽한 자동화 솔루션을 13단계에서 제작합니다.