일하면서 터진 문제 중, 올려도 될만한 문제들을 포스팅하려고 합니다.
공부하면서 개인 플젝 또는 팀 플젝할때는 기능이 제대로 돌아가는지만 확인하면 되었습니다.
개발중에는 사용자도 없고 JPA를 사용중이니 ddl-auto create나 update 팍팍 쓰고 진짜 안되면 밀어버리고 다시하면 됐거든요
현재는 사용자가 있고 제 실수로 운영 DB가 날아가는등의 장애가 생길수도 있기에 손 벌벌 떨면서 일하고있습니다.
사수가 없으니 서럽네요.
드리고 싶은 말씀은 제 포스팅은 적용 방법만 보시고, 어떤 상황에 적용할지는 고민을 좀 더 하셨으면 좋겠다는 것 입니다.
취준생일때나 개인 프로젝트 할때 보시면 크게 문제는 안될것같습니다.
사용중인 기술은 다음과 같습니다.
- Java 21
- Spring Boot 3.2.1
- JPA
- Gradle
- MariaDB
문제
서비스 로직이 제대로 되지 않는다는 연락이 왔고, 실제 서비스와 로컬에서 테스트를 했을때는 문제가 없었습니다.
이에 서버 로그를 확인했고 문제는 Data too long for column '칼럼명' error 였습니다.
work 라는 칼럼에 들어가는 데이터가 너무 길어서 생긴 오류였습니다.
WorkBench를 활용해 해당 데이터를 확인하였습니다.
보면 work 칼럼이 varchar(255)로 되어있는것을 확인할 수 있습니다. 255를 넘어가는 데이터를 집어넣으니 오류가 난 것이였습니다.
문제 해결
해결방법은 두가지가 있습니다.
1. 입력하는 데이터 크기를 줄이기
2. 데이터 길이를 늘리기
저는 이런 상황이 다시 벌어질 수 있기에 데이터를 longtext로 늘리기로 하였습니다.
longtext는 MySQL과 MariaDB에서 사용할 수 있으며, 최대 길이 4,294,967,295 또는 4GB 인 문자열을 저장할 수 있습니다.
공식문서 (https://mariadb.com/kb/en/longtext/)
먼저 테이블을 바꿔주었습니다.
ALTER TABLE {테이블 명}
MODIFY COLUMN {칼럼명} LONGTEXT;
또한 entity에 @Lob 어노테이션을 붙였습니다.
@Lob 어노테이션은 Large Object의 줄임말로서, 대형 객체를 저장하기 위한 가변길이 데이터 유형입니다.
columnDefinition으로 타입을 명시할 수도 있지만 저는 굳이 사용하지 않았습니다.
후에 데이터베이스가 바뀐다던지 할 경우 지원하지 않는 타입을 명시해놓으면 불편할것같다고 생각되었습니다.
사용하실 분들은 밑의 어노테이션을 추가하시면 됩니다.
@Column(columnDefinition = "longtext")
굳이 longtext까지 필요없으신 분들은 기본값인 255에서 길이를 늘리는 방식으로도 문제를 해결할 수 있을것입니다.
예를들어 길이를 255에서 400으로 늘린다고 하면 다음과 같습니다.
@Column(length = 400)
ALTER table {테이블명}
MODIFY COLUMN {칼럼명} varchar(400);
해당 변경사항 반영 후 문제가 해결된 것을 확인하였습니다.
초보 개발자의 글이라 부족한 점이 많습니다. 잘못된 점 등을 말씀해주시면 감사히 받겠습니다.
'WEB > Spring' 카테고리의 다른 글
[Spring] Failed to load driver class org.mariadb.jdbc.Driver 에러 (0) | 2025.01.13 |
---|---|
[Spring, JPA] @OrderBy로 정렬하기, OneToMany 특정 칼럼 기준 정렬 (0) | 2024.12.11 |
[Spring] Apache.commons.exec 사용, 외부 명령어 실행 API 만들기, Java에서 Shell 사용 (0) | 2024.05.26 |
[Spring] Caused by: java.lang.IllegalStateException: Duplicate key 에러, Swagger GroupedOpenApi 사용 (0) | 2024.03.21 |
[Spring] @RequestBody로 받은 데이터가 null 일때 (3) | 2024.02.04 |