💾 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으로 판단함

⚠️ 주의할 점

  1. 성능 이슈: CLOB/BLOB은 많은 I/O를 유발하므로 트래픽이 많은 서비스에서 남용은 금물입니다.
  2. 파일 vs DB 저장 고민:
    • 파일을 DB에 직접 저장하지 않고, 파일 경로만 저장하고 실제 파일은 서버나 S3 등에 저장하는 방식도 많이 씁니다.
  3. DBMS별 제한: Oracle, MySQL, PostgreSQL 등 DB마다 최대 크기와 처리 방식이 다르니 문서 확인 필수입니다.
  4. 트랜잭션 크기: 너무 큰 BLOB 데이터를 저장하거나 수정할 경우 트랜잭션 크기 제한에 걸릴 수 있음

📚 정리

질문 답변
텍스트 저장하려면? CLOB
파일/이미지 저장하려면? BLOB
문자 기반인가요? CLOB는 문자, BLOB은 바이너리
JPA에서는 어떻게? @Lob + String 또는 byte[]
직접 DB에 저장해도 되나요? 가능하지만, 파일 시스템 저장이 더 효율적일 수 있음

 

📝 마무리

CLOB과 BLOB은 데이터베이스에서 대용량 데이터를 다룰 때 반드시 알아야 할 개념입니다.

용도에 맞게 잘 활용하면 유용하지만, 과도하게 사용하면 성능 문제를 초래할 수 있습니다.

실제 프로젝트에서는 "직접 DB에 저장할지, 파일로 분리할지" 고민한 후 선택하는 것이 중요합니다.

 

+ Recent posts