JPA 5

JPA - Querydsl로 max값 뽑기

현재 연차프로젝트를 진행하고 있는 중인데 사번을 넣기가 애매했다. 사번은 중복되지 않은 값을 넣어야 하기 때문에 static으로 변수 하나를 선언하고 할까도 고민했었는데 이 방식은 무리가 있었다. 만약 서버를 내리게 된다면??.... 그렇다 다시 숫자가 처음부터 중복된다. 이러한 점은 서버가 들때 select를 하는 방법도 있지만 회원가입 로직이 실행될때 max값으로 조회하는 방법을 찾아보고 싶어 한 번 시도해봤는데 개인적으로 Querydsl에 편리함을 한번 더 느끼는 계기가 된 것 같다. 이런식으로 실행하면 member 테이블에 employeeNumber가 가장 큰 값을 뽑아올 수 있다. 여기서도 애초에 PK 중복을 피하기 위해 select를 한번 하면 해결할 수 있다는 생각과 AUTO_INCREMEN..

JPA 2023.05.04

JPA - fetchJoin, Inner join

일반 inner join 또는 left join을 사용할 경우 join fetch와 같은 쿼리가 실행된다. 하지만 동작결과나 사용하는게 다르다. 일반 Join - 다른 Entitiy를 join해도 join한 entitiy는 영속성 컨텍스트에서 관리하지 않는다. select 한 주체가 되는 entitty만 관리하기 때문에 @OneToMnay 필드에 접근할 경우 새로운 쿼리가 한번 더 일어나야 한다. (여기서 Transcational로 묶여있지 않다면 no Session 에러가 발생한다) fetch join - 주체가 되는 entitiy뿐만 아니라 join fetch를 사용한 entitiy도 모두 영속성 컨텍스트에서 관리한다. - 모두 영속성 컨텍스트에서 관리하기 때문에 join fetch 한 다른 enti..

JPA 2023.03.03

Redis - 개념 및 Spring에서 사용

Cache 란? 다음에 요청할 결과를 미리 저장해둔 후 빠르게 서비스해주는 것을 의미한다. 즉 미리 결과를 저장하고 나중에 요청이 오면 그 요청에 대해서 DB 또는 API를 참고하지않고 Cache에 접근하여 처리할 수 있다. (주로 정적인 데이터를 다룰 때 사용하기 좋다. 주로 Open API 데이터들로 받은 값들은 DML로 바꿀 일이 없기 때문에 Cache로 저장해두는 것이 좋은 방법일 때가 있다) Memcached 란? Memcached는 무료로 사용할 수 있는 오픈소스이며 분산메모리 Cache 시스템이다. DB부하를 줄여 웹애플리케이션의 속도 개선을 위해 사용하며 DB나 API 호출 또는 렌더링 등으로부터 받아오는 데이터를 key-value로 저장한다. 단점 -> InMemory 기반의 시스템이므로..

JPA 2023.01.25

JPA - JPQL ORDER BY

TypedQuery query = em.createQuery("select m from Member m",Member.class"); List members = query.getResultList(); 기존에 Spring에서는 이렇게 EntityManager를 통해 직접 짜서 사용해야했는데 Spring Data JPA 는 확실히 편리해진 것 같다. 주로 @Query("SELECT m FROM Member m"); public List getResultList(); JpaRepository 를 상속한 인터페이스에 위처럼 작성한 뒤 가져다 쓰면 사용이 가능하다. order by를 이용한 정렬 order by를 native query와 동일하게 정렬 순서를 지정할 수 있다. 근데 다른 점은 여기서는 컬럼이 아..

JPA 2023.01.17

JPA - 연관관계 Insert Query 줄이기

영화 프로젝트를 하면서 연관관계에 대해 insert를 하는도중 이상함을 느껴 찾아보다가 이상함을 느껴 글을 작성하게 되었다. 좋아요 엔티티는(Like는 예약어라 LikeGood으로 변경했다) 여기서 보면 boxOffice와 member와 ManyToOne으로 연관관계를 맺고있다. 근데 여기서 만약 insert를 해야한다면..? ....? !??! insert 쿼리 한번 하기 위해 연관관계로 되어있는 엔티티들을 영속성컨텍스트에 불러와 저장하는 상태가 되어버렸다. 하지만 DB에 정작 들어가는 값은 엔티티에 PK이다. JPA에서는 객체이지만 DB에서는 PK값만 들어가서 이 부분에서 쿼리를 줄일 수 없을까 찾아봤다. 좋아요 기능은 회원(Member) 그리고 영화(BoxOffcie) 엔티티가 각각 OneToMan..

JPA 2022.12.19