본문 바로가기
개발/Java

[Java] BLOB, CLOB 데이터에 대해 알아보고 처리방법을 알아보자.

by 쓸있쏜 2024. 12. 4.

Java로 BLOB, CLOB 데이터를 자유롭게 요리하기

안녕! 오늘은 조금 낯설 수도 있는 BLOB과 CLOB 데이터를 Java에서 어떻게 다뤄야 하는지 이야기해볼게. 음, 뭔가 어렵게 들릴 수도 있지만, 사실 이건 데이터의 특성과 우리의 접근 방식에 따라 굉장히 흥미로운 주제야! 마치 퍼즐 같다고나 할까? 자, 하나씩 뜯어보자.


BLOB? CLOB? 이름부터 생소하네!

BLOB은 Binary Large Object의 줄임말이고, CLOB은 Character Large Object야. 이게 뭐냐고? 쉽게 말하면, BLOB은 '이미지, 동영상, 음악 파일 같은 바이너리 데이터'를 담는 큰 그릇이고, CLOB은 '아주 길~고 긴 텍스트'를 담는 그릇이야.

어떤 예를 들어볼까?

  • BLOB: 데이터베이스에 저장된 프로필 사진, 동영상 클립
  • CLOB: 데이터베이스에 저장된 소설 한 권, 논문, 아니면 한밤중에 쓴 감성적인 블로그 글

그러니까, 이 둘은 "작은 데이터로는 부족하다!" 싶을 때 등장하는 강력한 친구들이지.


Java로 어떻게 접근할까?

데이터베이스에서 이 친구들을 불러오려면 우리가 PreparedStatementResultSet을 사용해야 해. 이건 마치 도서관에서 책을 빌리는 것 같아. 카드(PreparedStatement)를 내고 책(ResultSet)을 받는 느낌?

1. BLOB 처리하기

BLOB은 바이너리 데이터를 다루기 때문에 스트림이 필요해. 자, 아래 예제를 볼까?

String query = "SELECT image_data FROM images WHERE id = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setInt(1, 1);

ResultSet rs = ps.executeQuery();
if (rs.next()) {
    InputStream inputStream = rs.getBinaryStream("image_data");
    // 바이너리 데이터를 처리하는 로직
    Files.copy(inputStream, Paths.get("output_image.jpg"), StandardCopyOption.REPLACE_EXISTING);
    inputStream.close();
    System.out.println("이미지 파일이 저장되었습니다!");
}

어때? 데이터베이스에서 BLOB 데이터를 꺼내서 이미지 파일로 저장하는 과정이야. 아주 간단하지?


2. CLOB 처리하기

CLOB은 길~고 긴 텍스트를 다뤄야 하니까, Reader가 필요해.

String query = "SELECT article_text FROM articles WHERE id = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setInt(1, 1);

ResultSet rs = ps.executeQuery();
if (rs.next()) {
    Reader reader = rs.getCharacterStream("article_text");
    StringBuilder stringBuilder = new StringBuilder();
    char[] buffer = new char[1024];
    int bytesRead;
    while ((bytesRead = reader.read(buffer)) != -1) {
        stringBuilder.append(buffer, 0, bytesRead);
    }
    reader.close();
    System.out.println("아티클 내용: " + stringBuilder.toString());
}

이건 CLOB 데이터를 꺼내서 텍스트로 변환하는 코드야. Reader를 사용해서 아주 긴 텍스트도 부담 없이 처리할 수 있어.


실제 활용 사례

어떤 사례가 있을까? 상상력을 발휘해보자:

  1. 온라인 쇼핑몰: 상품 이미지(BLOB)와 설명(CLOB)을 불러와 페이지에 출력하기
  2. 도서 플랫폼: 책 표지(BLOB)와 책 내용(CLOB)를 데이터베이스에서 끌어오기
  3. 개인 블로그: 사용자 업로드 파일과 긴 게시글 관리

유의사항: 이런 건 꼭 알아두자!

  • 대용량 데이터 주의: BLOB이나 CLOB 데이터를 처리할 때는 메모리 사용량을 항상 신경 써야 해. 파일이 너무 크면 OOM(Out of Memory) 문제가 생길 수 있어!
  • 스트림 닫기: InputStream이나 Reader는 사용 후 꼭 닫아야 해. 그렇지 않으면 리소스 누수가 발생할 수 있거든.

마무리하며

BLOB과 CLOB 데이터는 처음엔 조금 어렵게 느껴질 수 있어. 하지만 천천히 하나씩 다뤄보면, 마치 내가 데이터와 친한 친구가 된 것처럼 느껴질 거야. Java와 함께라면 이런 대용량 데이터도 무섭지 않아.

혹시 궁금한 게 있다면 언제든 질문해줘. "BLOB? CLOB? 나 이제 다 알겠어!"라고 외치는 그날까지, 우리 같이 배워보자!

 

댓글