데이터베이스에서 카테고리를 문자열로 저장하는 경우, 특정 쿼리나 데이터베이스 함수 사용 시 문제가 발생할 수 있습니다. 이 글에서는 실제로 발생한 문제와 그 해결 방법을 공유하고자 합니다.
저희 프로젝트에서는 레슨 카테고리를 데이터베이스에 문자열로 저장하고 있었습니다. 그런데 특정 상황에서 문제가 발생했습니다. 아래와 같은 쿼리를 실행해야 하는 상황이었습니다.
SELECT * FROM Lesson l WHERE l.category = :category AND l.id <> :currentLessonId ORDER BY RANDOM() LIMIT 3
여기서 :category
는 문자열로 저장된 카테고리를 가리키며, 랜덤하게 3개의 레슨을 선택하되, 현재 레슨 ID인 :currentLessonId
와 같은 레슨은 제외해야 했습니다.
카테고리 예외: 문자열로 저장된 카테고리를 비교할 때, 문자열이 정확하게 일치하지 않으면 원하는 결과를 얻지 못하는 문제가 발생했습니다. 예를 들어, "영어" 카테고리가 "영어 " (끝에 공백이 있는 경우)로 저장되어 있을 때, 일치하지 않아 결과에 누락이 발생했습니다.
랜덤 함수: MySQL에서 랜덤하게 레슨을 선택하기 위해 RANDOM()
함수를 사용했으나, 실제 MySQL에서는 RAND()
함수를 사용해야 올바르게 작동하는 것을 발견했습니다.
카테고리 일치성: 카테고리를 저장할 때, 문자열 앞뒤의 공백을 제거하고 저장하는 방법을 선택했습니다. 이렇게 하면 문자열이 정확하게 일치하는 문제를 해결할 수 있습니다. 또한, 데이터 입력 시에 입력 양식을 엄격하게 관리하여 일관성을 유지하는 것이 중요합니다.
랜덤 함수 수정: MySQL에서는 RAND()
함수를 사용하여 랜덤 값을 얻을 수 있으므로, 쿼리에서 RANDOM()
을 RAND()
로 수정했습니다. 이로써 랜덤하게 레슨을 선택하는 기능이 올바르게 동작합니다.
데이터베이스에서 문자열로 카테고리를 저장할 때는 문자열 일치성과 데이터 입력 시의 엄격한 관리가 중요합니다. 또한, 데이터베이스 특성에 따라 쿼리를 수정해야 할 수 있으므로 데이터베이스와 관련된 기술적인 사항을 주의깊게 고려해야 합니다. 이러한 경험을 통해 데이터베이스 관련 문제를 빠르게 파악하고 해결할 수 있게 되었습니다.