JPA
mysql limit, offset과 id 기반 조회 비교 분석
안녕하세요. 최근 mysql database를 사용하여 데이터를 가져오는 테스트를 하고 있었는데, 유의미한 결과가 있어 공유하려 합니다. 먼저 간략하게 테스트하는 환경과 조건을 말씀드리겠습니다. 1. 테이블에 데이터는 모두 100만 건이 들어가 있습니다.2. paging 처리하는 쿼리와 id 기반으로 검색하는 두 개의 쿼리를 비교하였습니다. 테이블create table exmaple( id bigint auto_increment primary key NOT NULL, version bigint default 0 not null comment '상품 버전', product_id ..
3주차 미션 - Lazy 로딩과 equals 메서드
모든 소스 코드는 https://github.com/lkimilhol/atdd-subway-admin/에서 확인 가능합니다! 안녕하세요. 이번에는 lazy 로딩과 관련한 문제 하나를 설명해볼까 해요. lazy 로딩은 JPA에서 활용되는 데이터를 불러오는 방식 중 하나로 실제로 데이터를 사용하기 전에는 proxy 객체를 활용해 실제로 select가 이루어지지 않고 실제 데이터를 사용할때 select를 해오는 기술이라고 생각 할 수 있습니다. 이렇게 된다면 실제로 사용하지 않는 데이터의 조회를 하지 않기 때문에 성능상의 이점이 있을 수 있다고 생각할 수 있습니다. 하지만 lazy 로딩을 사용하다 보면 예기치 못한 일들이 참 많이 발생하곤 하는데요. 저는 그 중 하나인 lazy 로딩과 equals 메서드에 관..
2주차 미션 - JPA, AuditorAware 구현해 보기
모든 소스 코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 가능합니다! 안녕하세요. 이번에는 2주차 미션의 리뷰에서 알게 된 AuditorAware 구현을 해보려고 합니다. JpaAuditing, AuditorAware이라는 것이 무엇인지 알아보고, 구현을 해보도록 하겠습니다. 1. 중복되는 컬럼을 BaseEntity에 구현 BaseEntity를 abstract class로 구현하여 이를 상속받아 컬럼을 재사용 하는 방법은 잘 아실거라 생각됩니다. 전의 포스트에서 사용하였던 코드를 이용하여 데이터의 등록시간과 수정시간을 넣어 볼 예정입니다! 내용을 모르시는 분들을 위해 간단히 설명하면, User 클래스는 다수의 Computer 클래스를 갖도록 하는 1:N 관계의..
JPA N+1 문제
안녕하세요. 이번에는 N+1 문제를 다루어 보았습니다. N+1 문제는 JPA를 사용하면 자주 만날 수 있는 문제이지만 자칫 잘못하면 예상치 못한 곳에서 N+1 문제를 만날 수 있다고 생각해요. 따라서 문제의 원인을 머릿속에 두고 테스트케이스를 통해 원하는 결과가 잘 나오는지 확인해 보는 습관을 길러보도록 합시다! 모든 소스 코드는 https://github.com/lkimilhol/tistoryblog 에서 확인 할 수 있습니다. 저는 유저와 유저가 가지고 있는 컴퓨터를 개념적으로 표현하였고 유저들은 다수의 컴퓨터를 가질 수 있도록 연관관계를 맺었습니다. 결국 유저와 컴퓨터는 1:N의 관계를 가지게 됩니다! 먼저 유저 클래스를 보도록 하겠습니다. 1. N+1 구현하기 User.java @Entity pu..