◾에러 파악하기
✔️Background
기존에는 Jdbc를 이용하여 API개발을 진행하다가, Spring Data JPA를 사용하기 위한 코드로 리팩토링하였다.
리팩토링은 엔터티 한 개에 @Entity
를 붙여 테이블과 매핑을 하는 것인데,
컴파일 상 오류는 없었고 서버는 정상적으로 동작했다.
⚠️Error
에러는 아래와 같다. Unknown column '테이블명_필드명' in field list 라는 오류이다.

상황
문제는 db상의 테이블과 객체의 매핑에 있었다. LocalDate warehousingDate
필드 때문이었다.
POST API나 PUT API를 할 시 위와 같은 에러가 터지며 POSTMAN에서는 500에러를보냈다.
db상에는 warehousingDate라는 이름의 테이블이 있으나 jpa가 찾고 있는 warehousing_date라는 테이블은 없는 것이다. LocalDate warehousingDate
필드는 db상에서 스네이크케이스(대문자를 밑줄로 구분)를 사용하기 때문에 이 필드에 대한 테이블로 warehousing_date 을 찾는 것이다. 즉 db상에 컬럼이 없다고 나타나는 에러이다.

◾에러 해결하기
문제는 위와 같이 db상에 컬럼이 없는 경우도 있고, 문자열 데이터에 따옴표가 없는 경우도 있다고 한다. 정리하면 위의 에러의 대표적인 원인 2가지는 아래와 같다.
✔️에러 원인
ERROR: Unknown column in field list
1. 데이터베이스에 컬럼이 존재하지 않는 경우
2. 문자열 데이터에 따옴표가 없는 경우
✔️에러 해결
→ 데이터베이스 컬럼명 변경하기
첫 번째 경우에 해당하였기 때문에 아래와 같이 데이터베이스의 컬럼명을 warehousingDate
→ warehousing_date
로 변경하였다. 그러면 현재 찾고 있는 컬럼이 생긴 것이므로 에러가 발생하지 않을 것이다. 나는 기존의 컬럼이 있었기 때문에 이름을 변경하였고, 기존 컬럼이 없다면 새로 'warehousing_date'라는 이름의 컬럼을 생성하여도 된다. 어찌되었든 데이터베이스에 지금 콘솔에서 찾고 있는 unknown column(warehousing_date)이 존재하기만 하면 된다!
물론 jpa기본 설정을 바꿔주어 이 문제를 해결하는 방법도 있는 듯 하다. 그러나 데이터베이스는 보통 snake_case, 자바는 camelCase를 많이 이용하기 때문에 관례를 따라서 데이터베이스 컬럼명을 스네이크 케이스로 변경해주기로 하였다.
ALTER TABLE fruit
CHANGE COLUMN warehousingDate warehousing_date DATE;
위와 같은 쿼리를 작성하였다. 컬럼이 잘 바뀌었는지 확인해보자.

새로고침해보니 컬럼명이 잘 바뀌어 warehousing_date로 변경되어 있다. POSTMAN에서 API 요청도 잘 보내진다.
'웹 개발 > error' 카테고리의 다른 글
[error/spring] BeanCreation, BeanDefinition 에러 (0) | 2024.03.24 |
---|---|
[java/sql] 쿼리 작성 시 테이블명이 빨간 색일 때 해결법 (0) | 2024.02.23 |
[error/spring] 스프링 시큐리티 POST요청 시 403에러 (0) | 2024.02.02 |
[error/security] CORS란? Origin이란? (2) | 2024.01.10 |
[error] ERR_CONNECTION 서버가 꺼져있을 때 발생하는 연결 에러 (0) | 2024.01.03 |