JPA에서 변경 감지 사용 안 하기
들어가며 JPA는 트랜잭션 내 영속성 컨텍스트에서 관리되는 엔티티의 변경이 일어났을 때 update 쿼리를 전달하지 않아도 변경 감지 기능에 의해 update 쿼리를 전달해 준다. 이러한 일이 가능한 이유는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 저장해 두는 스냅샷을 관리하기 때문이다. 그리고 데이터베이스에 영속성 컨텍스트가 ...
들어가며 JPA는 트랜잭션 내 영속성 컨텍스트에서 관리되는 엔티티의 변경이 일어났을 때 update 쿼리를 전달하지 않아도 변경 감지 기능에 의해 update 쿼리를 전달해 준다. 이러한 일이 가능한 이유는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 저장해 두는 스냅샷을 관리하기 때문이다. 그리고 데이터베이스에 영속성 컨텍스트가 ...
들어가며 쇼핑몰 프로젝트를 진행하면서 하루에 한 번 상품의 재고 Entity 를 데이터베이스로 부터 영속성 컨텍스트로 가져온 뒤 재고 Entity 를 조건에 따라 Delete 하거나 Update 해야 했다. 이때 상품 Entity 와 재고 Entity 는 OneToMany 관계이다. 상품 하나에 재고 Entity 를 Delete 하거나 Updat...
들어가며 우아한 테크 캠프에서 쇼핑 미션을 진행하며 리뷰어분께 다음과 같은 리뷰를 받았었다. 먼저 EntityGraph 를 소개하자면 엔티티에 대해 어노테이션을 활용하여 연관관계에 있는 엔티트의 Fetch Plan 을 구성할 수 있도록 해준다.기본 type 값으로는 EntityGraphType.FETCH 이며 attributePaths = {“필...
들어가며 테스트를 진행하다 보면 하나의 메서드에 여러 테스트를 수행해야 할 때가 있었다. 예를 들어 “1,2,3” 과 같은 문자열이 입력으로 들어오고 , 혹은 : 으로 구분한 뒤에 값을 모두 더하는 메서드가 있다고 했을 때 가볍게 예상해 볼 수 있는 케이스는 다음과 같다. “1,2” ⇒ 3 “1,2,3” ⇒ 6 “1,2:3”...
들어가며 직접 사용자 서버를 구축해 보며 oauth2 authorization code grant 흐름이 왜 그런가에 대해 생각해 볼 수 있었던 실화를 바탕으로 포스팅을 하고자 한다. 소셜 로그인 기능 도입은 개발자에게 사용자의 인증과 인가 기능을 구현하는 데 있어서 큰 편리함을 가져다준다. 별도의 데이터베이스 구성 없이 소셜 로그인 API 를 ...
들어가며 데이터베이스 인덱스 말만 들어보았지 제대로 적용해 본 적이 없는 것 같아 제대로 배우고 개인적으로 운영 중인 프로젝트에 적용해보기 위해 index 적용전 , 적용 후 비교를 해보며 어떻게 인덱스를 설정하면 좋을지 탐구해보았다. 인덱스란? 먼저 인덱스에 대해서 알아보면 서점에 갔을 때 수많은 책들 중에서 내가 원하는 책을 찾기 위해 ...
들어가며 먼 옛날 Spring REST Docs 설정을 마치고 언젠가 이를 적용하는 글을 작성하려고 했는데 마침 간단한 게시판 API를 구현하게 돼서 겸사겸사 Spring REST Docs 적용기를 작성하고자 한다. 요구사항 문서에 request-parameters 에 대한 정보를 남기고 optional 여부를 나타낸다. 문서에 pa...
들어가며 객체를 생성하는 테스트뿐만 아니라 조회, 삭제, 수정 등의 API를 테스트할 때에도 객체를 생성하는 작업이 선행된다. 특히, 객체가 여러 곳에서 사용되는 경우 테스트에서도 객체를 생성하는 로직이 중복으로 이어질 수 있다. 다음은 객체 생성이 얼마나 자주 일어나는지 게시글 Entity를 Builder로 매번 생성하는 코드를 보여준다. ...
들어가며 객체의 수정에 대해서는 불변성을 보장하기위해 변경할 수 있는 포인트를 열어두지 않고 항상 새로운 객체를 반환하는 것으로 객체를 수정하는 방법이 있다. 하지만 이번 포스트에서는 JPA, 변경감지(Dirty Check)를 사용하여 객체를 수정하는 ,이미 생성된 객체를 변경할 때 보다 안전하게 변경하기 위한 방법에 대해 알아보자. 객체...
들어가며 진행하고 있는 프로젝트에서 동기 VS 비동기 호출, 로컬 캐싱 VS Redis, RestTemplate VS webClient를 비교하며 성능을 측정할 계획을 가지고 있다. 현재 프로젝트에서 특정 로직이 실패하게 되면 이메일을 보내는 기능이 있는데 성능 테스트를 수행하면서 수많은 요청과 함수 호출이 이루어질 것이므로 특정 로직이 실패할 ...