진짜 개발자
본문 바로가기

FrameWork (총 119개)

Spring JPA - @OneToOne 관계에서 Lazy로딩이 동작하지 않는 경우 문제상황 User와 Car는 OneToOne 양방향 관계입니다. 연관관계의 주인은 User입니다. 성능 향상을 위해, @OneToOne 관계의 FetchType은 거의 항상 LAZY 전략을 사용하고 있었습니다. (물론, 어플리케이션의 특성에 따라 대부분 항상 같이 조회된다라면 EAGER를 사용할 수 있겠지만, 그래도 FetchType은 LAZY로 두고 필요한 곳에서 FetchJoin을 사용하는 편입니다.) 그런데, 분명 LAZY 전략이 적용되어 있지만, 조회 시에 연관관계를 로딩하기 위해 즉시, 추가 쿼리가 발생하는 상황이 발생했습니다. 원인 파악 원인 파악을 위해 여러 시도를하다가, 연관관계의 주인인 User를 조회하는 경우에는, LAZY Loading이 정상 작동함을 확인할 수 있었습니다. 반대로, ..
Spring JPA - JPA N+1 문제 완전 정리 N+1에 대해 포스팅한지 1년이 넘어 제대로 다시한번 정리하는 차원에서 이번 포스팅에서는 N+1이란? N+1이 발생하는 경우 X To One 관계 N+1문제와 해결방법 X To Many 관계 N+1문제 주의할 점 들에 대해서 알아보도록 하겠습니다. EAGER vs LAZY 그리고 마지막으로는 Eager와 Lazy중 어떤것을 사용하면 좋을지에 대해서도 생각을 해보도록 하겠습니다. 사용 언어는 Kotlin 이며, Spring Boot + JPA를 이용했습니다. https://github.com/galid1/jpa_study 코드는 위에서 보실 수 있습니다. 1. N+1 이란? N+1 문제는, JPA의 Entity 조회시 Query 한번 내부에 존재하는 다른 연관관계에 접근할 때 또 다시 한번 쿼리 가 발생하..
Spring MVC - Spring MVC 동기화와 JPA 잠금기법 Spring MVC 동시성 테스트 이번 포스팅에서는 동기화 관련 문제를 다루어 보도록 하겠습니다. 우선, 동기화에 대해 알아보고, Spring MVC를 이용시 발생할 수 있는 문제점을 보도록 하겠습니다. 마지막으로, 이를 해결하는 방법도 알아보도록 하겠습니다. 만약! 현재 Spring MVC 프로젝트를 진행중이지만, Thread를 별도로 생성해서 공유 자원에 접근하는 것이 아닌데 왜, 동기화 문제가 발생하는지를 궁금해하신다면, Servlet에 대해 다시 공부를 해보셔야 합니다. 1. 동기화여러 스레드간 공유되는 자원은 항상 동기화 관련 처리를 해주어야합니다. 자바에서는 객체의 멤버변수가 동기화 대상 데이터가 될 수 있습니다. JVM에서, 객체는 Heap 영역에 할당되고, 이 Heap 영역을 Thread들..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 10 (상품 후기 기능 확장) 이번 시간에는, 상품후기 기능을 기존 시스템에 추가해보도록 하겠습니다 이번 시간에는, 상품후기 기능을 기존 시스템에 추가해보도록 하겠습니다. 1. 상품후기 설계1.1 요구사항후기에는 별점과 후기 내용이 포함된다.구매한 상품에 대해서만 후기가 작성이 가능하다.별점은 집계되어 카탈로그에서 상품과 함께 보여진다.내가 작성한 후기 목록을 볼 수 있다.상품이 별점을 각각 몇개를 받았는지를 볼 수 있다. 1.2 설계기능 추출하기요구사항을 통해서 별점 집계 기능이 필요한것을 알 수 있습니다. 하지만, Item의 별점을 집계 하기위해서는 전체 상품 후기를 보고 집계할 수 있어야합니다. 또한, 카탈로그에서 여러 상품들이 보여지게 되는데요, 이때마다 한 상품마다 모든 후기 목록을 통해서 별점을 집계하는 것 보다는, 상품의..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 9.2 (카테고리 기능 기존 시스템과 결합) 이번에는, 지난 포스팅(httpsgalid1 이번에는, 지난 포스팅(https://galid1.tistory.com/774)에서 구현했던, 무한카테고리 기능을 기존 시스템과 결합하는 방법을 알아보도록 하겠습니다. 1. 기존 시스템과 카테고리 기능 결합사실 최초 설계시, 카테고리를 염두하고 설계를 했었는데요, 카테고리만을 제외하고 구현을 했었습니다. 나중에 카테고리 기능을 추가하면서, 불편한 점이 없는지를 확인해보고 싶었기 때문이기도 합니다. 기존 설계에 비해서 달라진 점은 빨간 사각형에 해당하는 필드가 추가 되었다는 것 입니다. 왜 인지는 이전 포스팅을 참고해주세요. 우선 이전 포스팅에서 무한 카테고리 형태로 카테고리 기능을 구현했습니다. 구현했던 카테고리 기능을 이제, 기존 시스템에 카테고리 기능을 결..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 9.1 (무한카테고리 구현 및 Redis를 이용한 캐싱) 무한 Category 기능확장을 해보도록 하겠습니다. 이번 포스팅에서는 카테고리 기능을 별도로 구현하는 방법을 알아보고, 다음 포스팅에서 기존 시스템과 카테고리 기능을 결합해보도록 하겠습니다. 1. 과정 1.1 카테고리 기능을 별도로 설계 및 구현합니다. 1.2 카테고리 기능을 기존 시스템에 결합합니다. 2. 카테고리 기능 설계 및 구현 2.1 Table 설계 1. 요구 사항 item은 이름, 가격, 속한 카테고리를 가지고 있습니다. item은 하나의 카테고리에만 속합니다. categories는 이름, 상위 카테고리 id를 가지고 있습니다. categories는 여러 item을 가질 수 있습니다. 2. 설계 및 과정 level table 처음 생각한 방법은 level(depth) 별로 테이블을 만드는 것..
Spring JPA - JPA를 이용해 Commerce App 만들기 - 8 (무한스크롤, 페이지네이션, 컬렉션 조회 최적화, N+1 문제해결) 제목 없음 안녕하세요, 이번 포스팅에서는 나의 주문 목록 페이지에 무한스크롤 기능을 추가해보도록 하겠습니다. 또한 JPQL을 이용해 컬렉션을 조회할때, 최적화를 하는 방법과, Pagination을 할 수 있도록 하는 방법도 알아보겠습니다. 1. 필요한 것우선 무한 스크롤을 만들기 위해 필요한것들을 생각해보도록 하겠습니다. 1.1 페이지네이션가장 먼저 떠오르는 것은 페이지네이션 입니다. 페이지네이션이란, 간단히 말씀드려 게시판에서 페이지를 나누는것을 말합니다. 한번에 수많은 데이터를 요청하기보다는, 사용자가 볼 만큼만 부분 부분 서버에 요청하도록 하여, 서버에 부하를 줄일 수 있도록 하는 기술입니다. 무한 스크롤구현을 위해서도 프론트에서 데이터를 페이지별로 받을 수 있도록, 서버단 페이지네이션 기능 구현이..