DB data type Issue

Joy🌱·2023년 5월 19일
0

🌟 Trouble Shooting

목록 보기
5/17
post-thumbnail

❓ 문제 발생

최신 공지사항 7개를 조회해오는 구문에서 쿼리메소드 findTop7ByBoardStatusOrderByBoardWriteDateDesc()로 boardStatus가 "Y"이고 boardWriteDate 역순으로 조회하고자 했으나, 빈 배열로 넘어오는 문제 발생

👊 1st Try

쿼리메소드 문제라고 생각되어 계속 수정하여 시도했지만 Failed to create query for method public abstract java.util.List ... 등의 오류가 발생하며 서버가 실행조차 되지않음

👊 2nd Try

Top N 부분의 문제인지 확인하기 위해 boardStatus 조건을 제외한 findTop7ByOrderByBoardWriteDateDesc()로 실행한 결과, 정상적으로 공지사항이 넘어오는 것을 확인할 수 있었음

👊 3rd Try

이전 생각과는 달리 boardStatus의 문제라는 것을 인지한 후, DB에 선언되어있는 타입은 char인데 서버에서는 String으로 다루는 것이 문제였던 것인지 확인하기 위해 Entity, DTO를 포함한 클래스 모두 char로 변경한 뒤 테스트
=> 변동 X

👊 4th Try

계속 고민하다가 전에 이와 비슷한(?) 문제를 해결했었던 경험에서 아이디어를 얻어 DB에서의 "Y"가 설마 공백을 포함하고 있어서 인식을 못 했던 것인가? 생각이 들어 곧바로 Controller에서 boardStatus를 trim() 했으나 변동 X
=> 번뜩 생각이 들자마자 바로 실행에 옮긴 탓에 실행 결과를 보고 이것은 의미가 없다는 것을 바로 깨달음


❗ 원인

DB에서 BOARD_STATUS의 data type은 char(10 byte)였고, 실제 할당된 값의 행을 클릭해서 확인하니, "Y " 이런식의 공백을 포함한 값이 존재
=> 기본값을 저장할 때, 지정한 data type의 크기만큼의 공간을 할당했던 것이 원인 .. 🫠


✅ 해결

해당 컬럼의 data type을 char(1 byte)로 변경하여 해결


🥲 회고

사실 DB를 구축할 때 data type은 어떠한 변수가 생길지 모르니 약간 여유있게 할당하자 라는 생각을 가지고 있었는데, 정말 이번 이슈를 겪고 많은 생각이 들었고 깨달음이 있었다. 더욱 data type을 꼼꼼히 작성하고 알맞은 크기를 할당해야겠다.

Y/N 과 같은 여부를 저장하는 컬럼은 꼭 char(1 byte)로 할 것 !!

profile
Tiny little habits make me

0개의 댓글