Spring

@Lob과 columnDefinition = "TEXT"

MDanderson 2023. 4. 26. 16:11

@Column 어노테이션은 필수는 아니지만, 엔티티의 속성과 데이터베이스 테이블의 컬럼을 더 명확하게 매핑하려면 사용하는 것이 좋습니다. @Column 어노테이션을 사용하면 컬럼의 이름, 길이, 널 허용 여부, 고유 여부 등의 속성을 지정할 수 있습니다. 어노테이션을 생략하면 JPA가 기본값을 사용하여 매핑하게 됩니다.

 

기본적으로 @Column 어노테이션을 사용하지 않을 경우, JPA는 문자열 필드에 대해 기본적으로 VARCHAR(255) 타입을 사용합니다. 따라서 subTitle과 description은 기본적으로 최대 255자까지 저장할 수 있습니다.

만약 더 긴 길이의 문자열을 저장하고 싶다면, @Column 어노테이션을 사용하여 length 속성을 지정할 수 있습니다. 예를 들어, subTitle에 최대 500자, description에 최대 1000자를 저장하고 싶다면 다음과 같이 설정할 수 있습니다.

이렇게 설정하면 subTitle 필드는 최대 500자, description 필드는 최대 1000자까지 저장할 수 있습니다. 이 값을 적절하게 조절하여 필요한 길이만큼 저장할 수 있도록 설정할 수 있습니다.

 

 

@Lob은 JPA에서 Large Object의 약자로, 대용량 데이터를 저장할 때 사용하는 어노테이션입니다. 이 어노테이션은 바이너리 데이터(BLOB) 또는 긴 문자열 데이터(CLOB)를 저장할 때 사용합니다. @Lob 어노테이션을 사용하면, JPA는 해당 필드에 대해 적절한 데이터베이스 타입을 선택합니다.

예를 들어, 문자열 필드에 @Lob을 사용하면 JPA는 데이터베이스에서 CLOB 타입을 사용합니다. 또한, 바이트 배열에 @Lob을 사용하면 JPA는 데이터베이스에서 BLOB 타입을 사용합니다.

이 경우, longDescription 필드는 데이터베이스에서 CLOB 타입으로 저장됩니다.

TEXT는 MySQL 등 일부 데이터베이스에서 사용되는 데이터 타입으로, 긴 문자열을 저장하기 위한 타입입니다. TEXT 타입은 일반적으로 최대 65,535자까지 저장할 수 있습니다.

@Lob와 TEXT의 차이점은 다음과 같습니다:

@Lob은 JPA 어노테이션이며, TEXT는 데이터베이스 타입입니다.
@Lob은 JPA에서 적절한 대용량 데이터 타입(CLOB 또는 BLOB)을 선택하도록 지시하는 역할을 합니다.
TEXT는 일부 데이터베이스에서 사용되는 긴 문자열을 저장하기 위한 타입으로, 기본적으로 최대 65,535자까지 저장할 수 있습니다.
따라서, 대용량 문자열 데이터를 저장하려면 JPA에서 @Lob 어노테이션을 사용하고, 데이터베이스에서 적절한 데이터 타입이 선택되도록 하는 것이 좋습니다.

 

@Lob 어노테이션은 JPA에서 대용량 데이터를 저장하기 위한 어노테이션이며, 실제 저장 가능한 문자 수는 데이터베이스 엔진과 사용하는 데이터 타입에 따라 결정됩니다. 일반적으로 @Lob은 CLOB 또는 BLOB 타입과 연관되어 사용됩니다.

CLOB (Character Large Object)의 경우, 저장 가능한 문자 수는 다음과 같습니다:

Oracle: 최대 4GB
PostgreSQL: 최대 4TB
MySQL: 최대 4GB (InnoDB), 최대 4TB (MyISAM)
SQL Server: 최대 2GB
이러한 값들은 데이터베이스 엔진과 설정에 따라 다를 수 있으며, 특정 엔진에서 사용 가능한 정확한 크기는 해당 엔진의 공식 문서를 참고해야 합니다.

@Lob을 사용할 때 저장 가능한 문자 수가 궁금하다면, 해당 데이터베이스 엔진과 사용하는 데이터 타입(CLOB)의 제한을 확인해보세요.