데이터베이스 카테고리 문자열 저장 시 발생하는 예외와 해결 방법

ZEDY·2023년 10월 6일
0

[백엔드] Spring Boot

목록 보기
9/27

데이터베이스 카테고리 문자열 저장 시 발생하는 예외와 해결 방법

데이터베이스에서 카테고리를 문자열로 저장하는 경우, 특정 쿼리나 데이터베이스 함수 사용 시 문제가 발생할 수 있습니다. 이 글에서는 실제로 발생한 문제와 그 해결 방법을 공유하고자 합니다.

문제 상황

저희 프로젝트에서는 레슨 카테고리를 데이터베이스에 문자열로 저장하고 있었습니다. 그런데 특정 상황에서 문제가 발생했습니다. 아래와 같은 쿼리를 실행해야 하는 상황이었습니다.

SELECT * FROM Lesson l WHERE l.category = :category AND l.id <> :currentLessonId ORDER BY RANDOM() LIMIT 3

여기서 :category는 문자열로 저장된 카테고리를 가리키며, 랜덤하게 3개의 레슨을 선택하되, 현재 레슨 ID인 :currentLessonId와 같은 레슨은 제외해야 했습니다.

발생한 문제

  1. 카테고리 예외: 문자열로 저장된 카테고리를 비교할 때, 문자열이 정확하게 일치하지 않으면 원하는 결과를 얻지 못하는 문제가 발생했습니다. 예를 들어, "영어" 카테고리가 "영어 " (끝에 공백이 있는 경우)로 저장되어 있을 때, 일치하지 않아 결과에 누락이 발생했습니다.

  2. 랜덤 함수: MySQL에서 랜덤하게 레슨을 선택하기 위해 RANDOM() 함수를 사용했으나, 실제 MySQL에서는 RAND() 함수를 사용해야 올바르게 작동하는 것을 발견했습니다.

해결 방법

  1. 카테고리 일치성: 카테고리를 저장할 때, 문자열 앞뒤의 공백을 제거하고 저장하는 방법을 선택했습니다. 이렇게 하면 문자열이 정확하게 일치하는 문제를 해결할 수 있습니다. 또한, 데이터 입력 시에 입력 양식을 엄격하게 관리하여 일관성을 유지하는 것이 중요합니다.

  2. 랜덤 함수 수정: MySQL에서는 RAND() 함수를 사용하여 랜덤 값을 얻을 수 있으므로, 쿼리에서 RANDOM()RAND()로 수정했습니다. 이로써 랜덤하게 레슨을 선택하는 기능이 올바르게 동작합니다.

결론

데이터베이스에서 문자열로 카테고리를 저장할 때는 문자열 일치성과 데이터 입력 시의 엄격한 관리가 중요합니다. 또한, 데이터베이스 특성에 따라 쿼리를 수정해야 할 수 있으므로 데이터베이스와 관련된 기술적인 사항을 주의깊게 고려해야 합니다. 이러한 경험을 통해 데이터베이스 관련 문제를 빠르게 파악하고 해결할 수 있게 되었습니다.


profile
Spring Boot 백엔드 주니어 개발자

0개의 댓글