BLOB & CLOB
DATE : 2024/2/19
What is BLOB & CLOB?
BLOB이란, Binary Large Object로 큰 사이즈의 binary data를 DB에 저장할 때
설정할 수 있는 데이터 유형이다.
CLOB도 마찬가지로 Large Object에 해당하는 데이터 유형인데 BLOB과 차이점이 있다면
Binary data를 다루는 BLOB과 달리 CLOB은 큰 사이즈의 문자열(Character) 데이터를
저장할 때 설정하는 데이터 유형이다.
그렇다 보니, BLOB의 경우에는 비디오, 이미지와 같은 파일을 저장하기에 적합하고
CLOB은 PDF나 워드 문서와 같은 파일을 저장하기에 적합하다고 한다.
File Upload & Download 공격에 대응하기 위해서는
파일을 DB에 저장하는 게 하나의 방법일 수 있다고 앞서 설명하였다!
그.래.서 이번 POST에서는
BLOB type의 column을 생성하여 이미지 파일을 DB에 넣는 과정에 대해 다루어볼까 한다.
1_Table 생성하기
우선, 이미지를 저장할 Table을 만들어줄 것이다.
data column에는 이미지 파일의 내용을 그대로 가져다 넣을 거기 때문에
Datatype을 BLOB으로 설정해준다.
2_파일 업로드 기능 구현하기
이미지를 저장할 Table을 만들었으니 이젠 사용자가 파일을 업로드했을 때,
해당 파일을 Table에 가져다 넣는 기능을 구현할 차례이다.
파일을 서버에 업로드 했을 때, 파일이 올라가는 directory가 존재하는 지, 파일 확장자가 무엇인지 등등
확인하는 과정을 구현하느라 코드가 좀 길어졌지만
이번 POST에서는 일단 이미지 파일만 업로드한다는 과정 하에 파일이 Table에 잘 들어가는 지를
확인하는 걸 최우선 목표로 진행할 것이다!
우선 파일 업로드를 위해 필요한 Form을 만들어 준다.
파일을 업로드하는 경우에는 <form> tag에 enctype='multipart/form-data'를 적어줘야 한다.
사용자가 파일을 선택한 후, 업로드 버튼을 누르면 이 시점에서 blob.php가 동작하게 된다.
blob.php에서는 위에서 만들어둔 images table에 파일을 저장하기 위해서
DB와 연결을 맺은 다음, INSERT 구문을 통해 파일 이름, 파일 내용, 파일 유형을 넣어준다.
이때 id는 INT형 데이터로 auto increase 설정을 해두었기 때문에 default로 입력하면
알아서 숫자가 1씩 증가하는 id가 부여된다.
또한 파일 내용을 file_get_contents()로 가져와 바로 DB에 넣게 되면
파일 내용에 존재하는 띄어쓰기나 기타 문자들 때문에 에러가 나서 addslashes()를 처리해준다.
3_파일 업로드 기능 확인하기
구현한 기능이 제대로 동작하는지 보기 위해 파일 업로드 페이지로 접속했다.
파일 선택 버튼을 누른 후 업로드 하고 싶은 파일을 선택해준다.
이제 선택한 파일을 업로드 해볼 건데..!
정상적으로 기능이 구현됐다면 images Table로 파일이 들어간 모습을 확인할 수 있을 것이다.
업로드 버튼을 누른 후 Table을 확인해 보면 방금 업로드한 파일이 문제 없이 저장된 모습을 볼 수 있다! 👍
Table을 잘 보면 id, name, type은 결과가 출력 되지만
파일 내용은 BLOB 데이터 형식으로 넣은 대용량 데이터이기 때문에
BLOB으로 처리돼 나오는 걸 볼 수 있을 것이다.
(+) CLOB은 Datatype이 CLOB이 아닌 TEXT 중 하나로 지정하면 된다.
이렇게 해서 BLOB type으로 이미지 파일을 DB에 저장하는 방법에 대해 살펴보았다.
다음으로는 DB에 저장한 이미지를 반대로 꺼내서 다운로드 하는 기능을 구현해볼 것이다! 🤗
Last updated