springboot 30

공통 인터페이스 기반 - 순수 JPA 기반 레포지토리 만들기

일단 순수하게 JPA 기반을 레포지토리를 한번 만들어보자. 저장 변경 - > 변경감지 사용 삭제 전체 조회 단건 조회 카운트 => JPA에서 수정은 변경가지 기능을 사용하면 되고 트랜잭션 안에서 엔티티 조회한 다음 데이터 변경하고 트랜잭션 종료 시점에 변경 감지 기능이 작동해서 변경된 엔티티를 감지하고 UPDATE SQL을 실행한다. 기본적인 CRUD를 만들어본다. JPA가 제공하는 JPQL이라는 기술을 사용하자(객체를 대상으로 하는 쿼리) SQL로 번역이 된 다음에 실제 db에서 데이터를 가져와서 반환을 해준다. delete, findById, Optional, count을 사용해서 만들어준다. package study.datajpa.repository; import org.springframewor..

지연 로딩과 조회 성능 최적화 - 엔티티를 DTO로 변환(페치 조인 최적화) ERROR

error log 2022-04-12 15:27:58.833 ERROR 58221 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found 'o' near line 1,..

Spring/JPA 2022.04.12

도메인 분석 설계 - 엔티티 설계시 주의점

엔티티 설계시에는 가급적 Setter을 사용안하는게 좋다. 그리고 모든 연관관계는 지연로딩으로 설정을 해줘야 한다. 즉시로딩( EAGER )은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. 실무에서 모든 연관관계는 지연로딩( LAZY )으로 설정해야 한다. 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다. @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. 최악의 경우를 살펴보자. 아래에서 Member Order 연관 Order OrderItem이 연관 이렇게 다 연관이 되어있다 하자. 하나를 가져오면 다 연관되어 있는 애..

Spring/SpringBoot 2022.04.05

도메인 분석 설계 - 엔티티 클래스 개발2

Item 폴더안에 Category Class를 만들고 // Category Class package jpabook.jpashop.domain.item; import lombok.Getter; import lombok.Setter; import javax.persistence.*; import java.util.ArrayList; import java.util.List; import static javax.persistence.FetchType.*; @Entity @Getter @Setter public class Category { @Id @GeneratedValue @Column(name = "category_id") private Long id; private String name; // Catego..

Spring/SpringBoot 2022.04.02

도메인 분석 설계 - 도메인 모델과 테이블 설계

회원 - 주문 : 1:N 주문 - 상품(물품) 여러개 주문 가능 1 : n => 중간에 주문상품을 두어서 여러개를 놓는다. 카테고리 - 상품 n : n 도메인 모델 회원 엔티티 pk 값을 다 Long type으로 잡았다. 임베디드 타입(내장 값 타입)으로 Address를 넣어주었다. orders는 주문을 List로 가지게 된다. Order와 Item사이 중간에 OrderItem이 있는데 1 : N , N : 1 이 있는 관계를 풀어서 만들었다. ( id, item, order, orderPrice, count를 넣어놓았다.) 그리고 Member가 Order가지고 있고 Order는 Member을 가지고 있는 양방향 연관관계이다. 이 관계의 내용은 회원이 주문을 생성하는 것으로 생각하지 말고 주문이 필요할 ..

Spring/SpringBoot 2022.04.02

SpringBoot Error 해결

https://www.inflearn.com/questions/494407?re_comment_id=180025 OrderService의 setAddress부분 에러 / OrderServiceTest부분의 setAddress(new Address부분에러) - 인프런 | 질문 & Address Class 는 아래와 같습니다. package jpabook.jpashop.domain;import lombok.Getter;import javax.persistence.Embeddable;@Embeddable@Getterpublic class Address... www.inflearn.com https://www.inflearn.com/questions/479107 new Address( - 인프런 | 질문 & 답..

Spring/SpringBoot 2022.04.02

도메인 분석 설계 - 요구사항 분석

아래 흐름대로 가보면서 간단한 쇼핑몰을 구현해보자. 요구사항 분석 - 도메인 모델과 테이블 설계 - 엔티티 클래스 개발 - 엔티티 설계시 주의사항 회원 기능 / 상품 기능 / 주문 기능이 따로 구현되어있다. 안의 기능들은 구현해보는 작업을 시작할 것이다. 기능 목록 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항은 아래와 같다. 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 다음으로는 도메인 모델과 테이블 설계를 알아보자. https://www.inflearn.com/questions/494651?re_comme..

Spring/SpringBoot 2022.04.01

프로젝트 환경설정 - JPA와 DB 설정, 동작확인

참고: 스프링부트를 통해 복잡한 설정이 다 자동화되었다. persistence.xml 도없고, LocalContainerEntityManagerFactoryBean 도 없다. 스프링 부트를 통한 추가 설정은 스프링 부트 메뉴얼을 참고하고, 스프링 부트를 사용하지 않고 순수 스프링과 JPA 설정 방법은 자바 ORM 표준 JPA 프로그래밍 책을 참고하자. application.properties파일을 지우고 application.yml파일을 생성해준다. 세팅을 한번 해주자. // application.yml spring: datasource: url: jdbc:h2:tcp://localhost/~/jpashop #4칸 // MBCC=TRUE라는 옵션은 빼준다. username: sa password: dri..

Spring/SpringBoot 2022.03.30

프로젝트 환경설정 - View 환경 설정

main폴더에 jpabook.jpashop폴더에서 HelloController Class를 만들어준다. @Controller annotation을 달아준다. hello라는 url로 오면 Controller가 호출되겠다고 하는 것이다. model에 아무 값이나 담는다 Model model에 데이터를 실어서 view에 넘길 수 있게 해준다. data key의 값을 hello라는 걸로 넘길거고 // HelloController package jpabook.jpashop; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.G..

Spring/SpringBoot 2022.03.30

SpringBoot 프로젝트 환경설정

여기를 들어가서 생성해보자. 초기세팅은 아래와 같이 해주고 Dependencies에서 WebApplication을 만들때 필요한 Web Starter설치 JSP를 쓰는 대신 Thymeleaf(A modern server-side Java template engine)를 쓰자. JSP는 성능이슈 때문에 거의 안쓰는 추세 / SpringBoot 내장 tomcat에서도 권장하지 않는다. Sprimg Data JPA도 설치를 해준다.(나중에 JPA에 대해서 자세히 알아보고 Spring Data JPA는 도움용으로 쓰는 것으로 알고있자.) DB는 H2 DB를 쓴다. 개발 / 테스트 할 때 많이 쓴다. MySQL 같은 경우는 설치하고 세팅하는 과정이 까다롭지만 H2는 웹어플리케이션 실행할 때 데이터베이스를 메모리상..

Spring/SpringBoot 2022.03.29