Closed hainho closed 2 years ago
질문글 상세보기 페이지 API 구현 방식에 따른 속도 차이 테스트
질문글 상세보기 페이지 API에서 로그인한 유저가 질문글과 답변글에 좋아요를 눌렀는지 정보를 가져오는 방식을 2가지로 구현하였습니다.
데이터베이스(RDBMS)에서 질문글과 답변글에 달린 좋아요 정보를 모두 가져온 뒤 좋아요 정보에서 유저아이디와 일치하는 데이터를 filter를 사용하여 가져와서 응답 데이터에 삽입하는 방식
데이터베이스(RDBMS)에서 질문글과 답변글 정보만 가져온뒤 추가적인 각 질문글과 답변글마다 쿼리를 날려 해당 글에 유저가 좋아요를 눌렀는지 데이터를 가져와서 응답 데이터에 삽입하는 방식
속도 테스트에 사용한 도구 로컬환경에서 실행시킨뒤 postman을 사용하여 응답까지 걸린 시간을 비교하였습니다. postman에서 request는 20회 수행하여 그 중 가장 오래걸린 시간과 가장 빠르게 수행된 시간을 가지고왔습니다.
속도 테스트에 사용한 데이터 위 테스트는 답변글의 수와 질문글과 답변글에 달린 좋아요의 수의 영향을 받기 때문에 2가지 데이터에 대하여 테스트를 진행하였습니다.
a. 좋아요 수가 많은 데이터 질문글에 좋아요 수가 1천개 답변글에 좋아요 수가 총 3천개 답변글의 수는 10개인 데이터입니다.
b. 답변글 수가 많은 데이터 질문글에 좋아요 수가 10개 답변글에 좋아요 수가 총 100개 이하 답변글의 수는 1천개인 데이터입니다.
테스트 결과 1-a 시간 초과로 데이터 응답 없음
1-b 4~5s
2-a 0.05~ 0.1s
2-b 6~7s
예상했던 결과는 쿼리를 여러번 날리는 2번 코드가 더 느릴것이라 예상했습니다. 그러나 결과는 a 데이터에 대해서는 1번 코드는 시간초과로 응답이 오지 않았지만 2번 코드는 0.1s 이하의 시간에 항상 응답이 왔습니다.
b의 데이터는 1번 코드가 2번 코드보다 더 빨랐습니다.
1번 코드는 데이터베이스(RDBMS)에 쿼리를 한번만 날린 뒤 데이터에서 일부 필요한 데이터를 js코드를 통하여 찾았고 2번 코드는 데이터베이스(RDBMS) 쿼리를 여러번 날리긴 했지만 데이터는 모두 쿼리를 이용하여 원하는 데이터를 모두 찾았습니다.
쿼리를 많이 날리는 것이 더 비효율적일 것이라 예상했지만 제 예상보다 쿼리는 최적화가 잘 되어 있었던것 같습니다. 특히 a 데이터에서 속도 차이가 비교가 불가능한 수준이었습니다.
앞으로 데이터베이스(RDBMS)의 데이터를 가져오는 것은 최대한 쿼리를 믿고 활용하는 방법을 선택하는 것이 좋을것으로 생각이됩니다.
결론 : 똑똑하신 분들이 만들어둔 데이터베이스(RDBMS)를 다시는 무시하지 않겠습니다.
Database 데이터베이스는 자체적으로 내부에 Cache를 포함하고 있습니다. DB엔진 스터디도 있으니 참고하세요. https://github.com/innovationacademy-kr/dbstudy
제목
질문글 상세보기 페이지 API 구현 방식에 따른 속도 차이 테스트
이슈에 대한 설명
질문글 상세보기 페이지 API에서 로그인한 유저가 질문글과 답변글에 좋아요를 눌렀는지 정보를 가져오는 방식을 2가지로 구현하였습니다.
데이터베이스(RDBMS)에서 질문글과 답변글에 달린 좋아요 정보를 모두 가져온 뒤 좋아요 정보에서 유저아이디와 일치하는 데이터를 filter를 사용하여 가져와서 응답 데이터에 삽입하는 방식
데이터베이스(RDBMS)에서 질문글과 답변글 정보만 가져온뒤 추가적인 각 질문글과 답변글마다 쿼리를 날려 해당 글에 유저가 좋아요를 눌렀는지 데이터를 가져와서 응답 데이터에 삽입하는 방식
속도 테스트에 사용한 도구 로컬환경에서 실행시킨뒤 postman을 사용하여 응답까지 걸린 시간을 비교하였습니다. postman에서 request는 20회 수행하여 그 중 가장 오래걸린 시간과 가장 빠르게 수행된 시간을 가지고왔습니다.
속도 테스트에 사용한 데이터 위 테스트는 답변글의 수와 질문글과 답변글에 달린 좋아요의 수의 영향을 받기 때문에 2가지 데이터에 대하여 테스트를 진행하였습니다.
a. 좋아요 수가 많은 데이터 질문글에 좋아요 수가 1천개 답변글에 좋아요 수가 총 3천개 답변글의 수는 10개인 데이터입니다.
b. 답변글 수가 많은 데이터 질문글에 좋아요 수가 10개 답변글에 좋아요 수가 총 100개 이하 답변글의 수는 1천개인 데이터입니다.
테스트 결과 1-a 시간 초과로 데이터 응답 없음
1-b 4~5s
2-a 0.05~ 0.1s
2-b 6~7s
예상했던 결과는 쿼리를 여러번 날리는 2번 코드가 더 느릴것이라 예상했습니다. 그러나 결과는 a 데이터에 대해서는 1번 코드는 시간초과로 응답이 오지 않았지만 2번 코드는 0.1s 이하의 시간에 항상 응답이 왔습니다.
b의 데이터는 1번 코드가 2번 코드보다 더 빨랐습니다.
1번 코드는 데이터베이스(RDBMS)에 쿼리를 한번만 날린 뒤 데이터에서 일부 필요한 데이터를 js코드를 통하여 찾았고 2번 코드는 데이터베이스(RDBMS) 쿼리를 여러번 날리긴 했지만 데이터는 모두 쿼리를 이용하여 원하는 데이터를 모두 찾았습니다.
쿼리를 많이 날리는 것이 더 비효율적일 것이라 예상했지만 제 예상보다 쿼리는 최적화가 잘 되어 있었던것 같습니다. 특히 a 데이터에서 속도 차이가 비교가 불가능한 수준이었습니다.
앞으로 데이터베이스(RDBMS)의 데이터를 가져오는 것은 최대한 쿼리를 믿고 활용하는 방법을 선택하는 것이 좋을것으로 생각이됩니다.
결론 : 똑똑하신 분들이 만들어둔 데이터베이스(RDBMS)를 다시는 무시하지 않겠습니다.