728x90
1. 문제 상황
ERROR: value too long for type character varying(255)
- MSA 환경에서 FeignClient를 통해 HubPath 애플리케이션이 AI 애플리케이션에 최적 경로를 요청하는 로직에서 "value too long for type character varying(255)" 오류가 발생했습니다.
- 해당 로직은 출발 허브 ID와 도착 허브 ID를 받아 경로 리스트를 생성하고, 이를 AI에 전송하여 최적의 경로를 요청하는 구조입니다.
2. 문제 원인
import jakarta.persistence.Lob;
public class AiRequestDto {
// 다른 필드들...
private String question;
// getter, setter
}
AiRequestDto aiRequestDto = new AiRequestDto();
aiRequestDto.setService("hub-service");
String preQuestion = "교통 수단: 자동차, 목적: 시간 단축, 기준: 주소 간 현재 예상 소요시간\n";
String instructions = "1. 주어진 정보만을 사용하여 판단해주세요.\n" +
"2. 각 경로의 소요 시간을 고려하여 최적의 경로를 선택해주세요.\n" +
"3. 최적 경로는 허브 이름으로 경로만 응답해주세요.\n";
String question = preQuestion + instructions + "다음 허브 이동 경로 리스트 중에서 최적의 경로를 선택해주세요 :\n\n" + pathsContent;
- 문제의 원인은 question 필드에 대한 길이 제한입니다.
- 별도의 설정이 없으면, 문자열 필드는 기본적으로 VARCHAR(255)로 처리됩니다.
- 경로 리스트와 함께 생성된 question 문자열의 길이가 255자를 넘으면서 데이터베이스에서 제한을 초과해 오류가 발생한 것입니다.
3. 문제 해결 : @Lob어노테이션 사용
- 이를 해결하기 위해 @Lob 어노테이션을 사용하여, 대용량 텍스트를 저장할 수 있도록 수정했습니다.
- @Lob은 PostgreSQL에서 TEXT 타입으로 매핑되어 문자열 길이에 제한 없이 데이터를 저장할 수 있습니다.
@Lob 어노테이션을 사용한 이유
- 간단한 설정
- 별도로 길이를 지정하지 않고, 어노테이션만으로 TEXT 타입으로 매핑됩니다.
- 데이터베이스 호환성
- PostgreSQL에서 TEXT 타입은 길이에 제한이 없으므로 대용량 데이터를 문제없이 처리할 수 있습니다.
- 유지 보수성
- 문자열 길이 문제를 쉽게 해결할 수 있어, 대규모 데이터를 다룰 때 유연성을 제공합니다.
4. 성능 개선 효과
- question 필드의 문자열 길이 초과로 발생한 오류는 @Lob 어노테이션을 사용하여 TEXT 타입으로 매핑함으로써 해결되었습니다. 이제 길이가 긴 경로 리스트도 문제없이 AI 애플리케이션에 전송할 수 있습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.24 - 나머지 연산(%)을 활용한 배열 순환 처리 방법 (1) | 2024.09.24 |
---|---|
[TIL, 일일 회고] 2024.09.23 - Feign Client에서 PATCH 메서드 사용 시 발생하는 문제와 해결 방법 (0) | 2024.09.23 |
[TIL, 일일 회고] 2024.09.21 - N+1 문제 해결 및 성능 최적화: HubPath 조회 트러블슈팅 (0) | 2024.09.22 |
[TIL, 일일 회고] 2024.09.20 - N+1 문제에서 Fetch Join을 선택하는 이유 (0) | 2024.09.20 |
[TIL, 일일 회고] 2024.09.19 - DDL 자동 생성하기 (0) | 2024.09.19 |