backend12 빈번한 북마크 update요청을 방지하기 위한 사용자별 스레드 관리 1. 문제상황 북마크라는 기능 자체가 누를 때마다 실시간성으로 변화되는 로직이다 보니, 일반적으로 사용자가 북마크를 클릭할 때마다 update 요청이 발생한다. 때문에, (북마크 -> 북마크 해제 -> 북마크 -> .... ) 누를 때마다 불필요한 update 요청이 발생할 것이라 판단하였다. (나도 언젠가 한번쯤은 이런 거 막 눌러봤던 거 같아서... 이런 생각을 가지게 된 것 같다..ㅎ) 그래서, 불필요한 update 요청을 줄이고자 몇 가지 방식을 생각해 봤다. [방식 1] 사용자의 북마크 상태를 캐시 데이터로써 관리하고, 빠른 응답으로 실시간 업데이트를 제공한다. (X) 어쨌든 cache에도 당연히 update가 발생하기 때문에, 근본적인 원인을 해결하는 처리방식은 아니라고 판단했다. [방식 2].. 2023. 9. 13. 무한 스크롤 구현 및 성능개선 (Pagination) 무한 스크롤 적용 계기 현재 한 달 동안의 2차 프로젝트를 진행 중이다. 우리 팀이 선정한 주제는 Bmart 이다. 실제 프로덕트를 분석/설계하고, 개발하는 과정에서 사용해보고 싶은 기술을 적용하며 최적화하는 재미가 있다. Bmart에서 카테고리별 상품을 조회하는 과정에서, 각 정렬기준별로 조회하는 기능이 있다. 무작정 Pagination부터 구현을 시작하여 점진적으로 성능을 개선해 보고자 이 글을 작성하게 되었다. 페이지네이션 사용 우선, 해당 글에서는 두 가지 방식으로 무한 스크롤을 적용해 볼 것이다. JPA Pagination을 사용하여 page number와 page size를 이용하기 JPA Pagination을 이용하되 약간의 성능개선을 위해 page number는 0으로 고정하기 두 방식 모.. 2023. 9. 13. Fetch join과 Paging JPQL에서 fetch join을 사용한다는 것은 아래와 같이 번역되는 것이다. SELECT c FROM Comment c JOIN FETCH c.post p SELECT c, p FROM comment c JOIN post p on c.post_id = p.id; 위와 같이 fetch join을 사용한다는 것은 한 번에 두 객체를 동시에 조회한다는 뜻이다. 즉, EAGER/LAZY 다 상관없이 N+1 상황이 발생하지 않기에 fetch join을 주로 사용하는 것이기도 하다. 근데, 페이징을 구현하면서 fetch join을 함께 사용하면 꼭 문제가 발생하곤 한다. 그래서 이번에는 fetch join과 Pageable 인터페이스를 함께 사용할 때, 어떤 문제가 발생 가능한지 상황별로 알아볼 생각이다. On.. 2023. 8. 14. [Spring] 스프링의 DI를 이용한 전략패턴 도입 프로젝트를 진행하다 보니, 여러 가지 상황을 겪게 된다. 이번에 경험한 것은 제목과 같이 프로젝트에 "전략패턴"을 구현함으로써 유연성을 향상시킬 수 있었던 이야기다. 상황은 아래와 같다. 문제 A: 그냥 읽기만 하면 되는 문제 문제 B: 객관식 위와 같이 두 문제가 있고, 각 문제의 유형은 다르다. 또한 각 문제마다 채점 방식이 다른데, 채점 방식은 아래와 같다. - 문제 A는 읽기만 하고 [제출]을 누르면 Solve 처리가 된다. - 문제 B는 읽고, 정확하게 번호를 고른 후 [제출]을 눌러야 Solve 처리가 된다. 이러한 상황에서 전략 패턴을 도입하기 전과 후 어떤 차이가 있고, 어떤 식으로 Spring에서 전략패턴을 구현할 수 있는지에 대해 정리해보고자 한다. 전략패턴이란? 알고리즘군을 정의하고 .. 2023. 6. 8. 이전 1 2 3 다음