본문 바로가기

전체 글191

23.07.28 쿼리 최적화를 발생시키기 위해서는 아래 3가지를 확인해봐야 합니다. 먼저 해당 함수나 클래스가 Transaction 안에 포함되고 있는지 봐야합니다. @Transactional 으로 함께 감싸져 있어야만 쿼리 최적화가 동작합니다. Transaction 으로 포함되어있지 않으면 repository 메소드 내부에서만 Transcation 이 최적화됩니다. Transaction Propagation (전파) 전략 체크해봐야합니다. (심화) 두번째로, 해당 엔티티의 ID 식별자 생성전략을@GeneratedValue(strategy = GenerationType.IDENTITY)로 사용한건 아닌지 확인해봐야 합니다. GenerationType.IDENTITY 로 키필드가 설정되어 있으면 데이터베이스에 실제로 저장.. 2023. 7. 28.
23.07.27 엔티티의 이벤트를 감시하는 Auditing Auditing 을 사용하면 엔티티를 누가 언제 생성/마지막 수정 했는지 자동으로 기록되게 할 수 있다. Auditing 적용 방법 메인 애플리케이션 위에 @EnableJpaAuditing 추가 엔티티 클래스 위에 @EntityListeners(AuditingEntityListener.class) 추가 AuditorAware 구현체 만들기 createdAt, modifiedAt 은 구현체 없이 동작하지만 createdBy, modifiedBy 는 구현체가 필요하다. SpringSecurity 의 SecurityContextHolder 에서 인증정보안에 담긴 UserDetailsImpl 을 사용하여 user 객체를 가져와서 넣어준다. @EnableJpaAuditi.. 2023. 7. 27.
23.07.26 ORM이 가지고 있던 문제와 해결 방법 상속 문제 : 매핑정보에 상속정보를 넣어준다. (@OneToMany, @ManyToOne) 관계 문제 : 매핑정보에 방향정보를 넣어준다. (@JoinColumn, @MappedBy) 탐색 문제 : 매핑/조회 정보로 참조탐색 시점을 관리한다. (@FetchType, fetchJoin()) 밀도 문제 : 크기가 큰 멤버 객체는 테이블을 분리하여 상속으로 처리한다. (@embedded) 식별성 문제 : PK 를 객체 Id로 설정하고 EntityManager는 해당 값으로 객체를 식별하여 관리 한다. (@Id, @GeneratedValue) ORM이 가지는 장점 1. 1차, 2차 캐시 1차 캐시 영속성 컨텍스트 내부에는 엔티티를 보관하는 저장소가 있는데 이를 1차 캐시라고.. 2023. 7. 26.
23.07.25 스프링 심화 주차로 넘어오면서 JPA에 대해 더 자세히 다루게 되었다. 모든 회사의 모든 프로젝트가 JPA 적용되어있는게 아니므로, ORM에 대해 알아야 할 필요가 있다. JDBC > QueryMapper > ORM(JPA)로 발전해오면서 각 기능을 포함하고 있기 때문에, 어떤 단점을 보완하기 위해 JPA가 생긴 것인지 알아야 제대로 쓸 수 있다. JDBC : JAVA와 DB를 연결해주기 위해 생긴 기술, JPA도 이 기술을 사용한다. JDBC Driver는 여러 데이터베이스와 연결할 수 있는 기능을 제공한다. JDBC Driver Manager는 런타임 시점에 Connection을 생성하여 쿼리를 요청할 수 있는 상태로 만들어주고, Statement를 생성하여 쿼리를 요청, ResultSet을 생성해 .. 2023. 7. 25.