BLOB과 CLOB, Oracle과 Java에서 활용법

이도형·2025년 12월 1일

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 처리 (byte[] data)
Blob blob = connection.createBlob();
blob.setBytes(1, byteData);
pstmt.setBlob(2, blob);

// CLOB 처리 (String text)
Clob clob = connection.createClob();
clob.setString(1, clobString);
pstmt.setClob(3, clob);

pstmt.executeUpdate();

결론

BLOB과 CLOB을 잘 활용해, 다양한 데이터를 Oracle과 Java에서 다루자

profile
열심히 살고 싶습니다! 일하고 싶습니다 :)

0개의 댓글