본문 바로가기

Project

(2)
[최종 프로젝트] [백엔드] 랜덤 10명을 뽑을때 어떻게 해야 빠르게 가져올까 백엔드 개발을 처음 시작하면 텅 빈 데이터베이스를 마주하게 됩니다. 기능이 "작동"하는 것만 확인하려면 데이터 몇 개면 충분하지만, 실무에 가까운 환경을 경험해보고 싶어서 더미 데이터를 열심히 채워 넣고 있었습니다. 목표는 유저 100만 명. 그런데 이 데이터를 가지고 **"비회원 10명을 랜덤으로 추첨해 쿠폰을 지급하는 기능"**을 구현하려다 보니, 예상치 못한 성능 이슈와 마주하게 되었습니다. 오늘은 그 삽질의 기록과 해결 과정을 정리해 보려 합니다.1. 상황: 100명일 땐 몰랐던 것들초기 개발 단계에서 유저가 100명일 때는 아주 단순하게 접근했습니다.Java // User 100명을 전부 가져와서 애플리케이션에서 랜덤 선택List users = userRepository.findAll(); Co..
[최종프로젝트] MySQL에서 ORDER BY RAND() 사용 시 성능 문제 및 해결 전략 번역 및 요약 https://jan.kneschke.de/projects/mysql/order-by-rand/ 요약 및 정리 MySQL에서 ORDER BY RAND()를 사용할 때 발생하는 성능 저하 문제를 근본적으로 해결하는 실용적인 데이터베이스 튜닝 가이드입니다. 이 콘텐츠는 대량의 데이터에서 무작위 행을 추출할 때 ORDER BY RAND() 대신 MAX(id)와 RAND()를 조합하여 쿼리 속도를 획기적으로 개선하는 구체적인 SQL 기법과, 데이터 삭제 시 발생하는 ID 공백(Holes) 문제를 관리하는 트리거 설정 방법까지 상세히 다룹니다. 데이터베이스 성능 최적화에 관심 있는 개발자라면, 이 글을 통해 실제 적용 가능한 고성능 랜덤 추출 전략을 즉시 습득할 수 있습니다. 1. MySQL에서 ORDER B..