이제 거의 실전 프로젝트가 마무리되어간다. 저번엔 Redis를 활용하여 수강신청의 성능을 개선해 봤는데, 이번에는 ORM에서 자주 발생하는 N+1 문제를 개선하였다. 문제가 발생하는 부분을 확인하고, 개선하는 작업을 진행하였다. ✔️ N+1 문제 발생우리 프로젝트에서 N+1이 발생한 부분은 장바구니 페이지를 조회할 때 발생했다. 페이지 조회 시, 과목 정보에 대한 쿼리가 여러 번 요청되는 것을 확인하였다. 💬 원인 분석장바구니 페이지에서 N+1 문제가 발생하는 원인을 찾아보자. RegisteredSubjectRepository에서, findAllByStudentId() 메서드로 학생이 장바구니에 담은 과목들의 정보를 Spring Data JPA의 쿼리메서드로 불러오도록 되어있다. [ Register..
JPA
✔️ 영속성 컨텍스트(Persistence Context)란? 영속성 컨텍스트란 '엔티티를 영구히 저장하는 환경' 이라는 뜻이다. 일종의 작업 영역이라고 생각할 수 있다. JPA에서 제공하는 논리적인 구조로 영속 상태의 엔티티들을 관리하기 위한 목적으로 사용된다. 1차 캐시, 동일성 보장, 변경감지(Dirty Checking)등 의 기능이 제공된다. ✔️ 엔티티의 생명 주기 비영속(New) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속(Managed) : 영속성 컨텍스트에 의해 관리되는 상태 //객체를 생성한 상태(비..
JPA를 공부하며, 알지 못하면 치명적인 성능저하 및 장애를 불러일으킬 수 있는 N + 1 문제에 관한 내용과 해결법을 정리해보려고 한다. N + 1 문제는 아주 다양한 상황에서 발생한다. 이 글에서는 @OneToMay 에서 발생하는 N + 1 문제를 다룬다. 코드는 Spring Data JPA를 기준으로 작성하였다. ✔️ N + 1 문제란 무엇일까? N + 1 문제란 엔티티 간의 연관관계가 설정된 상황에서 발생한다. 나는 분명 1개 의 쿼리를 기대했는데, 연관관계 또한 조회하게 되며 N개만큼 쿼리가 추가적으로 발생하는 상황을 말한다. 사실 이렇게 글로 보면 이해가 잘 안 간다. 바로 코드를 보며 이해해 보자. ✔️ 엔티티 & 코드 Team과 User는 일대다(1:N) 관계이다. 1개의 Team에 여러..
항해 99 주특기 주차를 진행하게 됐다. 2주 동안 Spring boot를 활용한 Lv1 ~ Lv5 과제를 수행했다. 약 2~3일 간격으로 과제를 제출했기에, 시간이 굉장히 부족했던 주차였다. 블로그 작성에 신경을 많이 못 썼던 것 같다. 시간이 많이 부족해서, 이론적으로 깊이 공부하지 못한 것 같아서 간단하게 정리해 보는 시간을 가져보려고 한다. ✔️ REST API 란? Representational State Transfer(표현 상태 전이)의 약자로, 웹 서비스를 설계하고 구현하기 위한 아키텍처 스타일 중 하나. URI엔 자원을 나타내고, 자원의 대한 행위는 HTTP method를 통해 표현한다. GET /members/show/1 (x) GET /members/1 (o) ✔️ Spring을 왜 ..