ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링부트 서버에서 게시글 순서 정렬 이슈.
    미니 블로그 프로젝트 2022. 6. 11. 13:53

    이 프로젝트에서는 db를 사용하지않았다.

     

    그 이유는 애초에 연습용 프로젝트이므로 많은 데이터를 저장할 일이 없고,

     

    실제로 db에 데이터가 저장되는것처럼

     

    직접 그 게시글 등이 저장되는 구조를 만들어보면 java 연습에 도움이 될것같아서

     

    그냥 서버 컴퓨터의 메모리에 데이터를 저장할 목적으로 구현을 하였다.

     

     

    문제는 어떤 자료구조를 사용해 게시글이나 회원 정보를 저장할것인가였는데,

     

    List가 제일 편리할것같긴하지만 List를 사용하지않았다.

     

    그 이유는

     

    찾고자하는 데이터를 검색할 때 List는 무조건 순차탐색을 하기때문에 자원 소모량이 많다.

     

    따라서 내부적으로 해쉬 함수를 적용하는 HashMap이 좋을것같았는데,

     

    문제는 HashMap으로 데이터를 저장하면 데이터가 저장된 순으로 받아올 수 가 없다는 단점이있었다.

     

     

    따라서 LinkedHashMap을 사용했는데, 각 데이터가 다음 요소의 주소값으로 링킹이 되어있어 순서를 유지하면서

     

    자료를 검색할 때는 빠르게 해쉬 함수로 원하는 요소를 찾을 수 있기때문이다.

     

     

    다음 문제는 순서 정렬 이슈였다.

     

    보통 블로그나 게시판을 보면 제일 최근의 데이터가 맨 앞으로 오는데,

     

    보통의 자료구조들은 제일 최근에 삽입된 요소들은 자료의 맨 뒤로 배치된다.

     

    따라서 순서를 거꾸로해줄 필요가 있었는데,

     

    LinkedHashMap은 어쨋든 결국 Map이기때문에 List처럼 순서를 역순으로 할 수 없었던 것.

     

     

    그래서 이 Map을 List로 바꿔줄 필요가 있었다.

     

    귀찮을것같아서 미루고있던 작업이었는데 아주 쉽게 구현이 가능했다.

    List<String> listValues = new ArrayList<String>(lhmap.values());

    이거 한방으로 한 번에 Map을 ArrayList로 변화시켰다.

     

     

    물론 여기서 추가적인 삽입이나 삭제를 해야한다면 LinkedList로 변환을 고려할 수 있었겠지만,

     

    여기서는 현재 사용자의 id에 따라 '좋아요'된 게시물인지 감별하고,

     

    그 사항을 boolean으로 표시 및 offset과 limit에 맞는 요소를 새로운 ArrayList에 옮겨

     

    그것을 클라이언트에 갖다주기만할 계획이었기에,

     

    List 인터페이스 중에 좀 더 빠른 자료구조인 ArrayList를 사용하였다.

     

     

    어쨋든 여기서 순서를 다시 역순으로 해야할 필요가 있었는데,

     

    Collections.reverse(list);

     

     

    Collection의 정적 메소드로 순서를 바꿔주었다.

     

    참고 https://www.nextree.co.kr/p6506/

     

     

     

     

     

     

Designed by Tistory.