본문 바로가기

@Lob2

@Lob 사용시 DB와 엔티티 필드 타입이 다른 경우 발생하는 문제와 해결방법 😫 배경 진행 중인 프로젝트의 과거 코드 중 HTML 문서를 그대로 DB에 저장하는 내용이 있었다. HTML 문서 내용은 동적이고, 길이가 길었기 때문에 긴 문자열 저장을 위해 LOB을 사용했고, 별다른 문제없이 서비스를 이용해 왔었다. 그러다 어느 순간 서비스를 이용할 수 없는 문제가 발생했다. 이와 관련해서 파악한 원인과 해결 방법에 대해서 공유하고자 한다. 🔎 원인 문제 내용을 분석해 보니, 'DB에 선언된 LOB 타입'과 '엔티티에 사용된 @LOB 타입'이 다르게 사용되었기 때문에 발생한 문제였다. 서비스 DB에서는 BLOB 타입을 적용시켰는데, 막상 엔티티 필드에서는 String 타입으로 선언했기 때문에 CLOB 관련 로직이 적용되면서 데이터베이스에서 가져온 데이터를 처리할 수 없게 되어 문제가.. 2024. 1. 7.
JPA @Lob 이해하기 (with MariaDB) LOB 이란? - Large Object의 줄임말로서, 대형 객체 데이터를 저장하기 위한 가변 길이 데이터 유형이다. - BLOB, CLOB 2가지 종류가 있다. * BLOB(Binary Large Object) = 이미지, 오디오, 비디오 같은 이진 데이터를 저장한다. * CLOB = 대량의 텍스트 데이터를 저장한다. 어떻게 사용할까? 이미지, 오디오, 비디오 같은 데이터를 바이너리 형식으로 저장하거나, 대량의 텍스트 값을 저장할 때 사용하면 된다. 엔티티 객체 필드 위에 @Lob이라는 어노테이션을 달면 스프링이 추론하여 어떤 타입으로 저장할지 자동으로 판단한다. 따라서, (1) 데이터베이스에 정의한 컬럼 타입과 (2) 엔티티에 설정하는 타입을 반드시 일치시켜야 한다. (1) 데이터베이스 컬럼 타입 M.. 2024. 1. 6.