ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 13일차

ssungcohol 2023. 3. 22. 23:50

DB에 데이터를 1000만개 넣고 main 페이지를 띄웠을 때, 데이터 양이 너무 많다보니

페이지 로딩 시간이 40초 이상 걸렸다.

 

원인은 메인페이지에서 보여지는 데이터 양이 DB의 모든 데이터를 가지고와서 보여줬기 때문

 

해결 방법은 1000만 건의 데이터 중 몇 개만 random으로 가져와 보여줘야 했다

 

내가 생각한 방법은 DB에 random 쿼리를 날려서 랜덤으로 8개만 가지고 오려고 했다.

@Query (value = "select * from {Table} order by RAND() limit 8", nativeQuery = true)
List<Book> findAll();

해당 쿼리를 작성하여 테스트를 해본 결과 그래도 시간은 꽤 오래 걸린다..

 

방법을 찾다가 팀원에게 도움을 요청했다.

 

몇시간동안 해결하지 못했던 것을 팀원은 30분 만에 해결..

 

아예 접근 방식 자체가 달랐다.

 

데이터의 id를 가지고와서 service 단에서 랜덤 추출 코드를 통해서 가지고 온 것..

 

쿼리가 아닌 Java 코드로 해결을 해주셨다. 왜 이런 생각을 못하고 계속 DB에서 랜덤으로 가지고 오려고만 했을까..?

List<Book> bookList = new ArrayList<>();
Long random;
Random r = new Random();

for (int i = 0; i < 8; i++) {
	random = (long)r.nextInt(10000000);
    Optional<Book> book = bookRepository.findById(random);
    if (book.isPresent()) {
    	bookList.add(book.get());
    }else i--;
}

return bookList;

 랜덤 함수를 사용해 id를 반복문을 통해 추출하고 다시 반환해주는 로직이었다.

 

진짜 우리 팀원이 멋있었고, 내가 한없이 작고 더 많이 노력해야겠다는 생각이 들었다.

 

해결책을 찾을 때, 우물에 갇혀서 찾으려 하지말고 좀 나와서 이것저것 다양하게 찾아보는 생각, 습관을 들여봐야겠다.

728x90