프로젝트

프로젝트

[복쟉복쟉] 비정규화로 6초 쿼리를 105ms로 줄이기

프로젝트의 요구사항과 전반적인 맥락은 여기에 정리해놓았습니다 : 실시간으로 적재되는 데이터와 부모 엔티티 한번에 가져오기 ⚠ 발단 실시간 혼잡도 데이터가 계속해서 쌓이면서 60만개가 넘어가던 상황이었다. 앱을 켜보니 응답이 너무 오래 걸리는 상태가 지속됐고, 나중에는 아예 에러가 터졌다. 스프링의 기본 read timeout(서버의 response time에 대한 제한) 시간은 5초인데, 이를 초과한 것. 직접 쿼리를 날려봤더니... 무려 6초를 넘기고 있었다 혼잡도 데이터는 매일 몇만개씩 쌓여가고 있기 때문에, 정상적인 서비스를 위해선 빠르게 개선해야만 했다. 💡 해결 과정 : 기존 쿼리문 안에서 INDEX 사용 🤔문제 파악 기존의 쿼리에서 가장 문제가 됐던 부분은, 가장 최근의(실시간) 혼잡도를 가져..

프로젝트

[부끄북극] 단일 테이블 전략의 문제와 엔티티 객체의 SRP

💡 발단 기능 소개 사이드 프로젝트에서 퀴즈 기능 구현을 맡게 되었습니다. 환경을 지키자는 의미에서 환경에 관련된 퀴즈들을 조회하고 맞춰보는 기능입니다. 퀴즈에는 OX 퀴즈와 객관식 퀴즈 두 가지가 있습니다. OX 퀴즈와 객관식 퀴즈의 차이는 선택지 필드의 유무입니다. OX 퀴즈는 문항이 O,X 두 개로 고정되지만 객관식 퀴즈는 여러 개의 선택지를 가지는 형태입니다. 🤔 엔티티 설계 과정 제가 1차적으로 어려움을 겪은 부분은 엔티티 객체 설계 과정입니다. 처음에는 Quiz 엔티티 하나만 만들 생각이었습니다. 퀴즈에 대한 타입을 두고 nullable한 필드들을 두어서 여러 종류의 퀴즈 정보를 담을 수 있도록 한 것입니다. @Getter @Entity @NoArgsConstructor(access = Acc..

zorbathegeek
'프로젝트' 카테고리의 글 목록