[MariaDB] 프로시저(Procedure), BLOB

JIWON·2025년 5월 14일

MariaDB

목록 보기
13/13
post-thumbnail

📌 프로시저(Procedure)란?

프로시저데이터베이스 안에 저장된 일련의 SQL 명령문을 묶어놓은 것입니다.
주로 자주 사용하는 쿼리나 로직을 재사용할 수 있도록 만들며, 저장 프로시저(Stored Procedure)라고도 부릅니다.

  • 관계형 데이터베이스에서 사용하는 절차적 프로그래밍을 위한 개체
  • 관계형 데이터베이스에서도 프로그래밍이 가능하도록 만들어줌

🧠 왜 프로시저를 사용할까?

1) 보안

  • 클라이언트나 개발자가 데이터베이스 테이블 구조를 몰라도 DML 작업 가능

  • 프로시저에만 권한을 주고, 직접 쿼리 실행은 막을 수 있음 → 보안성 향상

2) 성능(속도)

  • 일반적인 SQL 쿼리는 디스크 접근이나 네트워크를 통해 처리

    • 예: CPU → MAIN MEMORY → DISK / NETWORK
  • 프로시저나 뷰는 메인 메모리에 캐시되어 실행되므로 속도가 빠름

- DB 내부에 저장되고, 재호출 시 디스크 접근 없이 빠르게 실행


🔧 기본 구조

DELIMITER //

CREATE PROCEDURE 프로시저이름(IN 입력값 INT)
BEGIN
    -- 여러 SQL 문
    SELECT * FROM users WHERE age > 입력값;
END //

DELIMITER ;

📥 파라미터 종류

종류설명
IN외부에서 값을 받아오는 용도 (입력 전용)
OUT프로시저가 외부로 값을 돌려줄 때 사용
INOUT입출력 모두 가능

1️⃣ 프로시저 생성

# usertbl을 이용해서 프로시저 생성
DELIMITER //

CREATE PROCEDURE myproc(IN _userid CHAR(15), _name varchar(20), _birthyear int(11), _addr char(100), _mobile char(11), _mdate date)
BEGIN
	INSERT INTO usertbl values(_userid,_name,_birthyear,_addr,_mobile,_mdate)
END //

DELIMITER ;

2️⃣ 프로시저 호출

call myproc('BoA', '권보아',1986,'남양주','01012345678','1986-11-05');
  • 파라미터값이 usertbl에 insert 된다.

3️⃣ 프로시저 삭제

DROP PROCEDURE IF EXISTS 프로시저이름;

4️⃣ 파이썬에서 프로시저 호출

cursor객체.callproc(프로시저이름, args=(매개변수 나열))

예시) 프로시저로 usertbl에 데이터 삽입

import pymysql

# 접속
con = pymysql.connect(host = '127.0.0.1', port=3306, user='root',passwd='0000', db = 'autoever', charset='utf8mb4')

#sql 실행 객체 생성
cursor = con.cursor()

# 프로시저 호출
cursor.callproc('myproc', args=('llala','랄라',2004,'경기','01032342323','2003-10-22'))

con.commit()
  • 🔽실행결과

📦 BLOB란?

BLOB = Binary Large Object
이미지, 영상, 오디오, 파일 등 "큰 크기의 이진 데이터(Binary Data)"를 저장하기 위한 데이터 타입입니다.

🗂️ 파일 데이터를 DB에 저장하는 2가지 방식

방식설명
1️⃣ 파일 경로 저장실제 파일은 서버에 저장하고, DB에는 경로(문자열)만 저장
2️⃣ 파일 원본 저장 (BLOB)파일 내용을 그대로 이진 데이터로 DB에 저장
→ 확장이 필요하거나 파일 보존이 중요한 경우 사용

🧪 예제) MySQL + Python을 이용한 BLOB 저장 및 불러오기

✅ 1. BLOB 저장용 테이블 생성

create table blobtable(
	userid char(15) not null primary key,
	filename varchar(1000),
	filecontent longblob);

select * from blobtable;

✅ 2. Python으로 BLOB 저장 (예: 고양이 이미지)

import sys, pymysql

#자신의 이미지 파일 경로를 사용하세요
# 파일의 내용을 읽을 수 있는 준비
filename = 'image/cat.jpg'
f = open(filename, 'rb')

# 파일의 내용 읽기
photo = f.read()
f.close()

# 접속
con = pymysql.connect(host = '127.0.0.1', port=3306, user='root',passwd='0000', db = 'autoever', charset='utf8mb4')
cursor = con.cursor()
cursor.execute('insert into blobtable values(%s, %s, %s)',('고양이','cat.jpg',photo))
con.commit()

cursor.close()
con.close()
  • 🔽실행결과

✅ 3. Python으로 BLOB 읽기 (파일로 저장)

import sys, pymysql

con = pymysql.connect(host = '127.0.0.1', port=3306, user='root',passwd='0000', db = 'autoever', charset='utf8mb4')
cursor = con.cursor()

cursor.execute('select * from blobtable')

data = cursor.fetchall()

for imsi in data:
    #파일명을 생성
    f = open(imsi[1],'wb')
    # 파일을 기록
    f.write(imsi[2])
    f.close()

con.close()

📁 실행하면 해당 폴더에 이미지 파일이 복원되어 저장됩니다!

0개의 댓글