💾 CLOB vs BLOB - 대용량 데이터를 저장하는 두 가지 방식
RDBMS(관계형 데이터베이스)에서는 종종 텍스트나 파일 같은 대용량 데이터를 다뤄야 할 때가 있습니다.
이럴 때 사용하는 대표적인 데이터 타입이 바로 CLOB(Character Large Object)와 BLOB(Binary Large Object)입니다.
이번 글에서는 이 둘의 차이와 활용 방법에 대해 정리해 보겠습니다.
📌 1. CLOB이란?
CLOB(Character Large Object)는 대용량 텍스트 데이터를 저장하기 위한 데이터 타입입니다.
예시
- 장문의 기사 본문
- JSON/XML 형식의 긴 설정값
- 문서 내용 (예: 계약서, 보고서 등)
특징
- 문자열(문자 기반) 데이터 전용
- 일반적으로 최대 수십 MB~수 GB까지 저장 가능 (DBMS마다 다름)
- JDBC에서는 java.sql.Clob으로 처리됨
📌 2. BLOB이란?
BLOB(Binary Large Object)는 이미지, 동영상, PDF, 실행파일 등 바이너리 데이터를 저장하는 타입입니다.
예시
- 이미지 파일 (JPG, PNG 등)
- 동영상 파일
- 바이너리 파일(exe, zip 등)
특징
- 비정형(바이너리) 데이터 전용
- 텍스트가 아닌 데이터는 반드시 BLOB을 사용
- JDBC에서는 java.sql.Blob으로 처리됨
📊 CLOB vs BLOB 비교 정리
구분 | CLOB | BLOB |
의미 | Character Large Object | Binary Large Object |
용도 | 긴 텍스트 저장 | 이미지, 파일 등 바이너리 저장 |
데이터 형태 | 문자 기반 (UTF-8 등 인코딩) | 바이너리 기반 (byte) |
JDBC 타입 | java.sql.Clob | java.sql.Blob |
처리 방식 | Reader / Writer | InputStream / OutputStream |
주 사용 예시 | 뉴스 본문, 소설, XML, JSON | 사진, 동영상, PDF, ZIP 등 |
🛠️ 사용 예시 (JDBC 기준)
✅ CLOB 저장
PreparedStatement ps = conn.prepareStatement("INSERT INTO article (title, content) VALUES (?, ?)");
ps.setString(1, "클롭 예제");
ps.setClob(2, new StringReader("긴 텍스트 내용..."));
ps.executeUpdate();
✅ BLOB 저장
PreparedStatement ps = conn.prepareStatement("INSERT INTO files (filename, data) VALUES (?, ?)");
ps.setString(1, "image.jpg");
ps.setBlob(2, new FileInputStream(new File("image.jpg")));
ps.executeUpdate();
💡 스프링(Spring)에서는 어떻게 다룰까?
Spring JDBC 또는 JPA에서도 CLOB/BLOB 처리는 가능합니다.
JPA 예시
@Lob
private String content; // CLOB 처리됨
@Lob
private byte[] fileData; // BLOB 처리됨
- @Lob 어노테이션은 필드를 CLOB 또는 BLOB으로 자동 매핑합니다.
- String이면 CLOB, byte[]이면 BLOB으로 판단함
⚠️ 주의할 점
- 성능 이슈: CLOB/BLOB은 많은 I/O를 유발하므로 트래픽이 많은 서비스에서 남용은 금물입니다.
- 파일 vs DB 저장 고민:
- 파일을 DB에 직접 저장하지 않고, 파일 경로만 저장하고 실제 파일은 서버나 S3 등에 저장하는 방식도 많이 씁니다.
- DBMS별 제한: Oracle, MySQL, PostgreSQL 등 DB마다 최대 크기와 처리 방식이 다르니 문서 확인 필수입니다.
- 트랜잭션 크기: 너무 큰 BLOB 데이터를 저장하거나 수정할 경우 트랜잭션 크기 제한에 걸릴 수 있음
📚 정리
질문 | 답변 |
텍스트 저장하려면? | CLOB |
파일/이미지 저장하려면? | BLOB |
문자 기반인가요? | CLOB는 문자, BLOB은 바이너리 |
JPA에서는 어떻게? | @Lob + String 또는 byte[] |
직접 DB에 저장해도 되나요? | 가능하지만, 파일 시스템 저장이 더 효율적일 수 있음 |
📝 마무리
CLOB과 BLOB은 데이터베이스에서 대용량 데이터를 다룰 때 반드시 알아야 할 개념입니다.
용도에 맞게 잘 활용하면 유용하지만, 과도하게 사용하면 성능 문제를 초래할 수 있습니다.
실제 프로젝트에서는 "직접 DB에 저장할지, 파일로 분리할지" 고민한 후 선택하는 것이 중요합니다.
'Computer Science > Database' 카테고리의 다른 글
데이터베이스의 정의, 특징, 장단점 (0) | 2024.12.03 |
---|---|
MySQL) SELECT...INTO Outfile과 Load Data (0) | 2021.08.27 |
SQL, 저장 프로시저(Stored Procedure) (0) | 2021.08.27 |