이번 섹션부터 실무에서 자주 쓰이는 기능을 학습한다. 1. 확장 기능사용자 정의 리포지토리 구현스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고, 구현체는 스프링이 자동으로 생성한다. 만약 인터페이스까지 직접 구현해야 하면 개발자가 할 일이 너무 많아진다. 그래서 인터페이스의 메서드를 직접 구현하고 싶다면 아래 방법들을 사용하면 된다.JPA 직접 사용(EntityManager)스프링 JDBC Template 사용MyBatis 사용DB 커넥션 직접 사용Querydsl 사용 참고실무에서는 주로 QueryDSL이나 SpringJdbcTemplate를 함께 사용할 때 사용자 정의 리포지토리 기능을 자주 사용한다. 사용자 정의 인터페이스를 구현하고, 구현 클래스를 만들어 보자.먼저, 사용자 정의 인터페이스..
DTO
쿼리 메서드 기능은 스프링 데이터 JPA가 제공하는 마법 같은 기능으로, 아래 3가지가 존재한다. 하나씩 학습해 보자.메서드 이름으로 쿼리 생성메서드 이름으로 JPA NamedQuery 호출@Query 애노테이션을 사용해서 리포지토리 인터페이스에 쿼리 직접 정의 1. 메서드 이름으로 쿼리 생성스프링 데이터 JPA는 메서드 이름을 분석해서 JPQL 쿼리를 실행한다. 예를 들어 이름과 나이를 기준으로 회원을 조회하는 경우, 아래와 같이 코드를 작성하면 된다.public interface MemberRepository extends JpaRepository { ... List findByUsernameAndAgeGreaterThan(String username, int age);} 참고쿼리 메서드 ..
실무에서 너무 성능이 안 나와서 튜닝을 해야 할 경우, 코드를 확인해 보면 대부분 아래에 나열해 둔 문제가 자주 발생한다고 한다.지연 로딩과 조회 성능 최적화컬렉션 조회 최적화페이징과 한계 돌파OSIV와 성능 최적화등록 및 수정에선 거의 문제가 발생하지 않고, 90% 정도 조회할 때 성능 문제가 발생한다. 따라서 조회용 샘플 데이터를 입력한 뒤 각 문제에 맞춰 API 성능을 최적화하는 방법을 학습한다. 이번 섹션에선 주문 내역에서 추가로 주문한 상품 정보를 추가로 조회하는 API를 만든다. Order 기준으로 컬렉션인 OrderItem과 Item이 필요하다.이전 섹션에서는 xToOne 관계만 있었다. 이번에는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 학습한다. 참고이전 섹션..
실무에서 너무 성능이 안 나와서 튜닝을 해야 할 경우, 코드를 확인해 보면 대부분 아래에 나열해 둔 문제가 자주 발생한다고 한다.지연 로딩과 조회 성능 최적화컬렉션 조회 최적화페이징과 한계 돌파OSIV와 성능 최적화등록 및 수정에선 거의 문제가 발생하지 않고, 90% 정도 조회할 때 성능 문제가 발생한다. 따라서 조회용 샘플 데이터를 입력한 뒤 각 문제에 맞춰 API 성능을 최적화하는 방법을 학습한다. 이번 섹션에선 주문 및 배송 정보와 회원을 조회하는 API를 만들면서, 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결해 본다.참고실무에서 JPA를 사용하려면 지금부터 설명하는 내용을 100% 이해해야 한다. 안 그러면 엄청난 시간을 날리게 될 수도 있다. 간단한 주문 조회 V1: 엔티티를 직접 노..
이번 강의는 API 개발과 성능 최적화에 초점을 맞춘 강의다. 최근에는 주로 REST API로 개발하기 때문에 이전 [스프링 부트와 JPA 활용1] 편에서 구현해 둔 핵심 기능을 REST API로 구현해 보고, 스프링 부트와 JPA를 사용할 때의 API 개발 실무 노하우를 학습한다. 참고템플릿 엔진을 사용해 렌더링 하는 Controller와 API 스타일의 Controller를 둘 다 사용한다면 패키지를 분리하는 게 낫다.- 예외 처리 등을 공통으로 하는 경우가 많은데, 화면의 경우 템플릿 엔진에서 문제가 생기면 공통 에러 화면(HTML)이 나오게 된다. 그러나 API의 경우는 공통 에러용 JSON API 스펙이 나가야 한다.- 따라서 공통 처리 같은 관점에서 조금씩 차이가 발생하기 때문에 패키지를 분리..