BLOB (Binary Large Object)
이미지, 동영상, 오디오, 압축파일 등 "파일 그대로의 이진데이터"를 저장하기 위한 타입
특징
- 이진 대용량 데이터 저장하는 타입, 비문자 데이터에 적합
- 데이터는 바이트 단위로 저장, 원본 이진 데이터가 그대로 보존됨
- DB 내부에서는 비트 스트림으로 해석되어 처리
- 데이터는 일반 문자열 함수 대신 InputStream/OutputStream과 같은 스트림 방식으로 접근
- 대량 바이너리 데이터 효율적으로 저장 및 전송하는데 최적화
- 직접적인 텍스트 검색이나 LIKE 연산은 성능 상 비추천
CLOB (Character Large Object)
XML, JSON, 게시글, 본문, 문서 등 "아주 긴 텍스트 데이터"를 저장하기 위한 타입
특징
- 문자 대용량 데이터를 저장하는 타입으로, 텍스트 중심 데이터에 사용
- 문자 인코딩(UTF-8, UTF-16 등) 고려하여 문자열로 저장
- DB에서 문자열 처리 기능 지원
- 데이터 접근 시 Reader/Writer 같은 문자 스트림 사용해 데이터 입출력 수행
- 단일 바이트 문자 스트림으로 해석되며, NCLOB의 경우 다국어 문자셋 지원
- 문자열 처리에 최적화 되어, LIKE 검색이 가능하지만 대용량 경우 성능 저하됨
공통점
- LOB 계열로, 일반적인 CHAR/VARCHAR보다 훨씬 큰 데이터 저장 싯 ㅏ용
- 동일 테이블에 여러 LOB 컬럼 들 수 있음, 대용량 데이터를 효과적으로 저장 관리 위한 구조
- 별도 영역에 저장된 데이터를 포인터(Locator)로 참조하는 구조
비교

Oracle에서의 활용
- 별도의 LOB 저장 영역에 저장되고, 테이블 컬럼에는 LOB 위치자(Locator)가 저장
- CLOB은 데이터 문자형으로 DBMS_LOB.SUBSTR, DMBS_LOB.GETLENGTH 같은 내장함수로 처리
- BLOB은 이진 데이터로 주로 스트림으로 읽고 쓴다
Java에서의 활용
CLOB 매핑용 데이터 형
- VO 필드 타입 :
String 혹은 java.sql.Clob
- 일반적으로 긴 텍스트 데이터를 읽어올 때는
String 타입으로 많이 사용
- 원본 Clob 객체가 필요한 경우나 스트림 처리 시
java.sql.Clob 타입을 사용
MyBatis 매퍼 XML jdbcType CLOB 지정
<result property="content" column="CLOB_COLUMN" jdbcType="CLOB"/>
BLOB 매핑용 데이터 형
- VO 필드 타입 :
byte[] 또는 java.sql.Blob
- 이진 데이터는 주로
byte 배열로 매핑해 편리하게 처리
- 우너본 Blob 객체 자체가 필요한 경우
java.sql.Blob 타입을 사용
MyBatis 매퍼 XML jdbcType BLOB 지정
<result property="imageData" column="BLOB_COLUMN" jdbcType="BLOB"/>
JAVA 예시코드
PreparedStatement pstmt = connection.prepareStatement("INSERT INTO my_table(id, blob_column, clob_column) VALUES (?, ?, ?)");
pstmt.setInt(1, 1);
Blob blob = connection.createBlob();
blob.setBytes(1, byteData);
pstmt.setBlob(2, blob);
Clob clob = connection.createClob();
clob.setString(1, clobString);
pstmt.setClob(3, clob);
pstmt.executeUpdate();
결론
BLOB과 CLOB을 잘 활용해, 다양한 데이터를 Oracle과 Java에서 다루자