스프링 데이터 JPA 분석
·
BackEnd/스프링 데이터 JPA
스프링 데이터 JPA 구현체 분석 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체는 org.springframework.data.jpa.repository.support.SimpleJpaRepository 이다. @Repository 적용 JPA 예외를 스프링이 추상화한 예외로 변환한다. JDBC를 JPA로 바꿔도 예외를 처리하는 매커니즘이 동일하다. @Transactional 트랜잭션 적용 JPA의 모든 변경은 트랜잭션 안에서 동작한다. 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리한다. 서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작한다. 서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파 받아서 사용한다. 그래서 스프링 데..
확장 기능
·
BackEnd/스프링 데이터 JPA
사용자 정의 리포지토리 구현 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성한다. 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많다. MemberRepositoryCustom public interface MemberRepositoryCustom { List findMemberCustom(); } MemberRepositoryImpl @RequiredArgsConstructor public class MemberRepositoryImpl implements MemberRepositoryCustom{ private final EntityManager em; @Override public List findMemberCustom() ..
SQL 고득점 Kit3
·
BackEnd/MySQL 문제 풀기
카테고리 별 도서 판매량 집계하기 https://school.programmers.co.kr/learn/courses/30/lessons/144855 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr SELECT category, sum(book_sales.sales) as total_sales from book, book_sales where book.book_id = book_sales.book_id and date_format(book_sales.sales_date, "%Y-%m") = '2022-01' group by category order by ..
유니온 파인드, 집합의 표현(백준_1717)
·
BackEnd/알고리즘 공부
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는 www.acmicpc.net 문제 설명 {0} {1} {2} .... {n}이 주어지고 각가 쿼리가 주어진다. 입력값이 0 a b 일 경우 a와 b를 합쳐라! 입력값이 1 a b 일 경우 a와 b가 같은 집합에 포함되어 있는지를 확인하는 것이다. 예시로 살펴보면 7일경우 {1} {2} {3} {4} {5} {6} {7} 이 존재한다. 0 1 3일 경우 {1,3} {2} {4} {5} ..
그래프 이론
·
BackEnd/알고리즘 공부
그래프의 종류 Directed Graph (방향 그래프) : 간선간에 방향이 존재한다. Undirected Graph (무방향 그래프) : 간선간에 방향이 존재하지 않는다. Weighted Graph (가중 그래프) : 간선에 weight가 존재한다. 그래프에서 좀더 깊게 들어가면 Subgraph(부분 그래프) : V' ⊆ V, E' ⊆ E, 그래프에 포함된 그래프 Complete graph(완전 그래프) : 모든 노드 간에 간선이 연결된 그래프 Path : 한 노드에서 특정 노드 까지 도착한 노드들의 모임 (simple path는 중복된 노드 도달 불가) reachable(도달 가능) : 임의의 노드에서 다른 노드 까지 도달이 가능하다. Connected : 모든 vertex가 연결되어 있는 Undir..
@EntityGraph, JPA Hint @ Lock
·
BackEnd/스프링 데이터 JPA
저번 기본 편에서 연관된 다른 엔티티에 내용을 조회할 때 문제가 있었다. 실무에서는 모든 내용이 Lazy 로딩으로 되어 있어야 한다. 그 상태에서 연관된 다른 엔티티를 조회할 경우 프락시로 저장되어 있다. 그래서 그 엔티티 내용을 다시 조회할 때면 쿼리가 또 나가게 된다. 결국 N+1 문제가 발생한다. 이것을 해결한 것이 fetch join이다. fetch join은 연관된 엔티티도 조회할 때 클래스로 가지고 온다. 즉, N+1 문제가 해결되고 한방 쿼리로 모든 것을 가져오게 된다. 하지만 스프링 데이터 JPA에서 사용할려면 Query문을 새로 추가해 줘야 하고 매번 fetch join을 써줘야 한다. 그래서 스프링 데이터 JPA에서 지원해주는 것이 @EntityGraph 이다. EntityGraph 사..