본문 바로가기

Spring5

[JPA] 프록시 중요 포인트 Team과 Member(1:N) 연관관계를 가지는 객체가 존재할 때. 데이터를 조회시 둘다 가져와야할지 하나만 가져와야 할지 상황에따라 애매한 경우가 존재한다. jpa에서 이런 상황은 즉시 로딩과 지연 로딩에 대해 고민해야 할 문제이다. 두 개념을 알기 전에 프록시 개념의 이해가 필요하다. 프록시 프록시의 초기화 요청은 영속성 컨텍스트를 통해 이루어진다. em.find() vs em.getPersistence() 지연로딩, 즉시로딩 , 프록시 프록시 클래스 - 가짜 객체 주의1 프록시 객체는 처음 사용할 때 한 번만 초기화 된다. 프록시 객체가 초기화되는 것이 프록시가 진짜 객체로 바뀌는 것을 의미하지 않는다. 프록시 객체 내부의 target에 값이 초기화 되는 것. 프록시 객체의 타입 체크.. 2023. 10. 9.
[JPA]영속성 컨텍스트 영속성 컨텍스트 영속성 컨텍스트란 무엇인가? 엔티티를 영구 저장하는 환경이라는 뜻을 가진다. 코드로 보면EntityManager.persist(entity); 에 해당한다. 영속성 컨텍스트는 논리적인 개념으로 엔티티 매니저를 통해서 접근한다. 서비스 별로 하나의 EntityManagerFactory가 존재하고 DB에 접근하는 트랜잭션이 발생하는 경우 스레드 별로 EntityManager를 생헝하여 영속성 컨텍스트에 접근한다. 사용자로 부터 요청이 들어옴 -> EntityManagerFactory에서 요청당 1개의 EntityManager를 생성 -> EntityManager로 DB에 접근 EntityManager 에서 엔티티를 저장하거나 조회하는 경우 영속성 컨텍스트에서 엔티티를 보관하고 관리하게 된다... 2023. 9. 24.
[JPA] 더티체킹 더티체킹이란 트랜잭션이 끝날 때 엔티티의 변경을 감지하여 DB에 flush하는 것을 의미한다. 최초 조회 상태와 커밋상태를 비교하여 변경된 것이 있다면 수정한다. 따라서 영속성 컨텍스트가 관리하는 엔티티의 경우에만 더티체킹이 적용된다. 준영속(Detach), 비영속(DB반영 전) 상태의 경우 더티체킹 대상이 되지 않는다. 즉, 데이터를 변경해도 DB에 해당 부분이 적용되지 않는다. 변경된 부분만 적용하기 더티체킹은 기본적으로 모든 필드를 update를한다. 테이블의 필드가 적은 경우에는 상관 없지만, 필드가 많아지는 경우 불필요한 update는 부담이 될 수 있다. @DynamicUpdate를 사용하여 변경 필드만 수정할 수 있다. 데이터가 많은 경우 엔티티의 변경이 일어나는 것을 자동으로 확인하여 DB.. 2023. 9. 11.
Spring boot에서 Redis 연동 Spring boot에서 Redis 사용기 .. Spring Boot에서 Redis를 사용한 것에 대해 기록하려고 한다. 레디스를 왜 사용할까 ? 서비스가 커지고 트래픽이 많아질 수록 백엔드 서버를 유지하기 위해서는 많은 것을 고려해야한다. 흔히 고려할 수 있는 포인트는 불필요한 I/O를 줄이는 것이다. 변하지 않는 결과를 굳이 DB에서 조회하기 보단 캐싱해서 빠르게 조회하는 것이 성능면에서 좋을 것이다. 물론 애플리케이션 내의 캐싱을 사용할 수 있지만, 서버를 여러개 띄우게 되면 해당 값들은 공유할 수 없다. redis를 사용하면 서버를 여러대 띄운 환경에서도 캐시 메모리를 공유할 수 있다. 레디스 특징 in-memory 데이터베이스 key-value 형태의 데이터베이스 single-thread 다양한.. 2023. 7. 24.