JPA

    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..