impati

JPA에서 변경 감지 사용 안 하기

들어가며 JPA는 트랜잭션 내 영속성 컨텍스트에서 관리되는 엔티티의 변경이 일어났을 때 update 쿼리를 전달하지 않아도 변경 감지 기능에 의해 update 쿼리를 전달해 준다. 이러한 일이 가능한 이유는 엔티티를 영속성 컨텍스트에 보관할 때 최초 상태를 복사해서 저장해 두는 스냅샷을 관리하기 때문이다. 그리고 데이터베이스에 영속성 컨텍스트가 ...

OAuth2 Authorization Code Grant 흐름은 왜 그렇게 동작하는가

들어가며 직접 사용자 서버를 구축해 보며 oauth2 authorization code grant 흐름이 왜 그런가에 대해 생각해 볼 수 있었던 실화를 바탕으로 포스팅을 하고자 한다. 소셜 로그인 기능 도입은 개발자에게 사용자의 인증과 인가 기능을 구현하는 데 있어서 큰 편리함을 가져다준다. 별도의 데이터베이스 구성 없이 소셜 로그인 API 를 ...

성능을 비교해가며 인덱스 적용하기

들어가며 데이터베이스 인덱스 말만 들어보았지 제대로 적용해 본 적이 없는 것 같아 제대로 배우고 개인적으로 운영 중인 프로젝트에 적용해보기 위해 index 적용전 , 적용 후 비교를 해보며 어떻게 인덱스를 설정하면 좋을지 탐구해보았다. 인덱스란? 먼저 인덱스에 대해서 알아보면 서점에 갔을 때 수많은 책들 중에서 내가 원하는 책을 찾기 위해 ...

테스트 인스턴스를 랜덤 생성하여 테스트해보자

들어가며 객체를 생성하는 테스트뿐만 아니라 조회, 삭제, 수정 등의 API를 테스트할 때에도 객체를 생성하는 작업이 선행된다. 특히, 객체가 여러 곳에서 사용되는 경우 테스트에서도 객체를 생성하는 로직이 중복으로 이어질 수 있다. 다음은 객체 생성이 얼마나 자주 일어나는지 게시글 Entity를 Builder로 매번 생성하는 코드를 보여준다. ...

객체의 수정도 빌더와 함께

들어가며 객체의 수정에 대해서는 불변성을 보장하기위해 변경할 수 있는 포인트를 열어두지 않고 항상 새로운 객체를 반환하는 것으로 객체를 수정하는 방법이 있다. 하지만 이번 포스트에서는 JPA, 변경감지(Dirty Check)를 사용하여 객체를 수정하는 ,이미 생성된 객체를 변경할 때 보다 안전하게 변경하기 위한 방법에 대해 알아보자. 객체...

@Profile 로 설정에 따라 다른 빈 객체 주입받기

들어가며 진행하고 있는 프로젝트에서 동기 VS 비동기 호출, 로컬 캐싱 VS Redis, RestTemplate VS webClient를 비교하며 성능을 측정할 계획을 가지고 있다. 현재 프로젝트에서 특정 로직이 실패하게 되면 이메일을 보내는 기능이 있는데 성능 테스트를 수행하면서 수많은 요청과 함수 호출이 이루어질 것이므로 특정 로직이 실패할 ...