항해9956 JPA N+1문제 발견과 해결 JPA의 N+1문제란? 1개의 쿼리를 생각하고 설계를 했으나 N개의 쿼리가 더 발생하는 상황 JPA에 의해 자동화된 쿼리문들이 생겨나면서 어쩔 수 없이 발생하게 된다. 더보기 findAll() 등의 쿼리메소드를 사용하면 -> Spring Data JPA가 메소드 이름을 분석해서 JPQL 쿼리를 생성하고 실행한다. -> JPA는 이 JPQL 쿼리를 분석한 다음 자동으로 적절한 SQL을 만들어 데이터베이스를 조회한다. 언제 발생할까? 두 개의 엔티티가 일대다 관계를 가지며 JPQL로 객체를 조회할 때, CASE 1) EAGER 전략으로 데이터를 가져오는 경우 CASE 2) LAZY 전략으로 데이터를 가져온 이후에 가져온 데이터에서 하위 엔티티를 다시 조회하는 경우 문제발생1. 케이크 리스트 불러오기 (@Ma.. 2022. 3. 25. 알림 구현하기 - 테이블의 분리 알림 기능 도입 보통 모든 웹사이트가 아래 사진과 같은 알림 기능을 가지고 있다. 사용자에게 일어난 변화들을 한눈에 볼 수 있어서 편의성을 위해 꼭 필요한 기능이다. 그래서 makecake 서비스에서도 알림 기능을 구현하기로 했다. 알림으로 보낼 내용은 아래와 같이 생각했다. 내 글에 댓글이 달린 경우 내 글에 좋아요가 눌린 경우 관리자가 보내는 전체 공지 관리자가 보내는 광고 메세지 이것도 처음엔 단순한 알림 기능이라고 생각했는데 팀원들과 같이 이야기를 나누다보니 여러 방법이 나왔다. 방법1. 알림 테이블 하나만 만들기 맨 처음 생각했던 방법이다. 알림 테이블을 하나 만들어서 알림을 받는 사용자 (FK) 알림내용 읽었는지 여부 생성날짜 를 저장하는 방법이다. Noti 테이블 id (PK) userId .. 2022. 3. 16. 무한스크롤과 페이징 - 오프셋 페이징? 커서 페이징? 우리가 준비해놓은 케이크 이미지들은 5000여개이다. 일반 게시판들 처럼 페이지 1, 페이지2 이렇게 보여주면 되지 않을까 생각했는데 스마트폰으로 서비스를 사용하는 경우를 기본으로 두고 있기 때문에 무한스크롤 방식으로 구현하기로 했다. 무한스크롤을 알아보다가 페이징 방식에는 오프셋 페이징과 커서 페이징이 있다는 것을 알게 되었다. 그래서 두가지 페이징 방식에 대해 정리해보려 한다. 1. 오프셋 페이징 오프셋 페이징 방법은 수십년동안 효과적으로 사용된 방법이다. 원하는 정렬을 담은 Sort, page 번호, 사이즈를 담은 Pageable 객체를 만들면 바로 구현이 된다. 아래는 최신순으로 케이크를 10개씩 가져오는 코드이다. Sort sort = Sort.by(Sort.Direction.DESC,"cake.. 2022. 3. 10. 항해 7주차 WIL - 구글링으로 코드 작성 강의에서 들은 개념을 적용하거나 아니면 이를 바탕으로 좀 더 심화된 응용을 찾아서 하는것까지는 나름대로 자신이 붙었다. 하지만 모르는 기능을 검색해서 바로 내 프로젝트에 적용시켜보는 능력은 많이 부족했다. 팀원들 중에서 막히는 부분이 있으면 바로 검색해서 뚝딱뚝딱 붙여보는 분들이 있었는데 나도 저렇게 바로 내 코드에 적용시키는 능력을 기르고 싶었다. 그래서 이번에 이전에 구현해본적 없는 새로운 기능들을 주로 맡았다. 이번에 내가 맡은 부분은 크롤링과 S3에 이미지 파일을 저장하는 부분이었다. 내가 새로운 기능들을 구현한 방법은 아래 순서로 진행됐다. 1. 구글링을 통해 스프링부트로 기능을 구현한 글을 찾는다. 2. 모르는 내용들이지만 일단 글에 적혀 있는 코드를 읽는다. 3. 글에 적힌 내용을 토대로 코.. 2022. 3. 10. 이전 1 2 3 4 ··· 14 다음