본문 바로가기
Spring/JPA

JPA @Lob 이해하기 (with MariaDB)

by 흑시바 2024. 1. 6.

LOB 이란?

- Large Object의 줄임말로서, 대형 객체 데이터를 저장하기 위한 가변 길이 데이터 유형이다.

- BLOB, CLOB 2가지 종류가 있다.

* BLOB(Binary Large Object) = 이미지, 오디오, 비디오 같은 이진 데이터를 저장한다.

* CLOB = 대량의 텍스트 데이터를 저장한다.

어떻게 사용할까?

이미지, 오디오, 비디오 같은 데이터를 바이너리 형식으로 저장하거나, 대량의 텍스트 값을 저장할 때 사용하면 된다.

엔티티 객체 필드 위에 @Lob이라는 어노테이션을 달면 스프링이 추론하여 어떤 타입으로 저장할지 자동으로 판단한다.

따라서, (1) 데이터베이스에 정의한 컬럼 타입(2) 엔티티에 설정하는 타입을 반드시 일치시켜야 한다.

 

(1) 데이터베이스 컬럼 타입

 

MariaDB에서는 BLOB 형식은 4가지를 지원하고 있으며,

 

CLOB 형식은 1가지를 지원하고 있다.

 

(2) 엔티티 컬럼 타입

 

스프링에서는 아래와 같은 필드 타입에 따라 Lob을 적용한다.

 

CLOB = String, char[], java.sql.CLOB
BLOB = byte[], java.sql.BLOB

예시

@Entity
@Table(name = "tbl_shiba_lob")
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
@Getter
public class ShibaLob {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "img_content", columnDefinition = "MEDIUMBLOB")
    @Lob
    private byte[] imgContent;

    @Column(name = "str_content", columnDefinition = "LONGTEXT")
    @Lob
    private String strContent;
}

 

REFERENCE

https://mariadb.com/kb/en/blob-and-text-data-types/

https://mariadb.com/docs/server/ref/mdb/data-types/CLOB/

댓글