스프링9 @Builder 상속하기 Item 클래스를 상속받은 Book 클래스가 있다 Book 클래스에서 Builder를 사용하면 Book 클래스에 있는 값을 builder로 정의할 수 있는데 상속할 Item 클래스는 추가적인 작업이 필요하다. 우선 Book 클래스와 Item클래스를 살펴보자 @Entity @DiscriminatorValue("B") // 싱글 테이블이기 때문에 db에 저장할 때 구분해야한다. @Getter public class Book extends Item{ private String author; private String isbn; } @Entity // 상속관계 매핑은 상속관계 전략을 지정해야한다. 이 전략을 부모클래스에 입력해야한다. @Inheritance(strategy = InheritanceType.SIN.. 2022. 8. 24. ./mvnw clean compile package 명령 시 Fatal error compiling: invalid target release: 11 에러 해결 인텔리j 터미널에서 프로젝트 위치에서 ./mvnw clean compile package 명령어를 입력했는데 다음과 같이 에러가 발생한다. PS C:\Users\taekg\IdeaProjects\Inflearn\msa\firstService> ./mvnw clean compile package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------- [INFO] Building first-service 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]-----------------------.. 2022. 8. 17. JPA 사용 시 쿼리 방식 선택 권장 순서(컬렉션 조회 할 때) 정리 엔티티 조회 엔티티를 조회해서 그대로 반환: V1 엔티티 조회 후 DTO로 변환: V2 페치 조인으로 쿼리 수 최적화: V3 컬렉션 페이징과 한계 돌파: V3.1 컬렉션은 페치 조인시 페이징이 불가능 ToOne 관계는 페치 조인으로 쿼리 수 최적화 컬렉션은 페치 조인 대신에 지연 로딩을 유지하고, hibernate.default_batch_fetch_size , @BatchSize 로 최적화 DTO 직접 조회 JPA에서 DTO를 직접 조회: V4 컬렉션 조회 최적화 - 일대다 관계인 컬렉션은 IN 절을 활용해서 메모리에 미리 조회해서 최적화: V5 플랫 데이터 최적화 - JOIN 결과를 그대로 조회 후 애플리케이션에서 원하는 모양으로 직접 변환: V6 권장 순서 1. 엔티티 조회 방식으로 우선 접근.. 2022. 8. 14. JPA 사용 시 쿼리 방식 선택 권장 순서(컬렉션 조회 안할 때) JPA 사용 시 컬렉션 조회 안할 때 쿼리방식 선택 권장 순서 1. 우선 엔티티를 DTO로 변환하는 방법을 선택한다. 2. 필요하면 페치 조인으로 성능을 최적화 한다. 대부분의 성능 이슈가 해결된다. 3. 그래도 안되면 DTO로 직접 조회하는 방법을 사용한다. 4. 최후의 방법은 JPA가 제공하는 네이티브 SQL이나 스프링 JDBC Template을 사용해서 SQL을 직접 사용한다 (4번 까지 갈일은 거의 없다.) 2번 까지 사용하는 경우와 3번 까지 사용하는 경우를 비교하면 2번 까지 사용하는 경우는 다음처럼 엔티티를 fetch join해서 엔티티 전체 컬럼 값을 가져오는 것이다. // v3 방법 public List findAllWithMemberDelivery() { /* 프록시도 아니고 진짜 객체.. 2022. 8. 3. 필터와 인터셉터 디스패처 서블릿(Dispatcher-Servlet)이란 디스패처 서블릿의 dispatch는 "보내다"라는 뜻을 가지고 있습니다. 그리고 이러한 단어를 포함하는 디스패처 서블릿은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)라고 정의할 수 있습니다. 필터(Filter)란 필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. 디스패처 서블릿은 스프링의 가장 앞단에 존재하는 프론트 컨트롤러이므로, 필터는 스프링 범위 밖에서 처리가 되는 것이다. 즉, 스프링 컨테이너가 .. 2022. 5. 7. 스프링 AOP란 AOP (Aspect Oriented Programming)는 관점 지향 프로그래밍이다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예를들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 이다. 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 **.. 2022. 5. 7. 이전 1 2 다음