일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링 핵심 원리
- JDBC
- 백준
- 김영한
- kotlin
- pointcut
- JPQL
- 알고리즘
- AOP
- springdatajpa
- 그리디
- 스프링 핵심 기능
- spring
- http
- Exception
- Android
- jpa
- 인프런
- 자바
- Spring Boot
- java
- Thymeleaf
- QueryDSL
- SpringBoot
- Proxy
- transaction
- db
- Servlet
- 스프링
- Greedy
- Today
- Total
목록인프런/[인프런] Springboot와 JPA활용 1 (22)
개발자되기 프로젝트
1. 테스트 요구사항 상품 주문이 성공해야 한다. 상품을 주문할 때 재고 수량을 초과하면 안 된다. 주문 취소가 성공해야 한다 2. 상품 주문 테스트 @SpringBootTest @RunWith(SpringRunner.class) @Transactional public class OrderServiceTest { @Autowired EntityManager em; @Autowired OrderService orderService; @Autowired OrderRepository orderRepository; @Test public void 상품주문() throws Exception{ //given Member member = new Member(); member.setName("회원1"); member...
1. OrderRepository @Repository @RequiredArgsConstructor public class OrderRepository { private final EntityManager em; public void save(Order order){ em.persist(order); } public Order findOne(Long id){ return em.find(Order.class, id); } //public List findAll(OrderSearch orderSearch){ //} } 2. OrderService 배송 주소는 간단하게 회원의 주소로 대체 다른 엔티티들은 save를 호출하지 않는데, order만 save를 했다? 왜??? Cascade 옵션 때문! OrderI..
1. 구현 기능 상품 주문 주문 내역 조회 주문 취소 2. 순서 주문 엔티티, 주문상품 엔티티 개발 주문 repository 개발 주문 service 개발 주문 검색 기능 개발 주문 기능 test 3. 주문 Entity Order는 Member, Delivery, OrderItemd와 연관관계가 있음 OrderItem은 list로 가지고 있음.(OrderItem이 연관관계주인) Order는 OrderItem을 읽어오기만 함. Order가 생성될 때 Member, Delivery, OrdeItems 필요함. 생성 메서드를 통해 한 번에 세팅하자. - 생성메서드가 가능한 이유는 - Order가 컨트롤 하는 쪽이기 때문에 양방향으로 연관관계를 맺어주는 편의메서드가 있기 때문. //==생성메서드==// //or..
1. 구현 기능 상품 등록 상품 목록 조회 상품 수정 2. 개발 순서 상품 엔티티 개발, 비느지느 로직 추가 상품 repository 상품 service 상품 기능 test 3. Item class 개발 객체 지향 관점으로는 데이터를 가지고 있는 곳 에서 business method가 있는 것이 좋다. 따라서 도메인 주도 설계 시 엔티티 자체가 해결할 수 있는 것은엔티티 안에 메서드를 만듦. 이 때 Setter로 변경하는 것이 아니라 특정 메서드(로직)을 통해 값을 변경해야 한다. 예제의 경우 주문에 따라 재고 수량(stockQuantity)가 변경이된다. stockQuantity는 Item에서 가지고 있다. 따라서 stockQuantity가 변경되는 로직은 Item에 추가하자. Item class - ..
1. 테스트 요구사항 회원가입을 성공한다 회원가입할 대 같은 이름이 있으면 예외발생! 2. 회원 가입 테스트 @SpringBootTest, @RunWith --> Springboot띄우기 위해 필요(Junit4 기준) @Transactional : 반복적이고 독립적인 test를 위해 rollback @SpringBootTest @RunWith(SpringRunner.class) @Transactional //rollback public class MemberServiceTest { @Autowired MemberService memberService; @Autowired MemberRepository memberRepository; @Test public void 회원가입() throws Exceptio..
1. Member Service @Service : 컴포넌트 스캔 대상, 스프링 빈으로 등록 @Transactional : JPA의 모든 데이터 변경 및 로직은 transaction에서 실행되어야 함. - class에 적용되면 각 메서드마다 적용됨 - 메서드에 추가로 @Transactional이 있다면 메서드에 걸린게 우선순위 높음 - 조회 메서드는 가급적 readOnly = true를 적용하자. @GeneratedValue에 의해 DB마다 전략이 다르긴 하지만 id를 자동으로 생성함. - Persist 시점에 PK인 id는 DB에 저장되기 위해 필요함. - 즉 DB 에 반영되기 이전에도 Persist시점에 PK존재는 보장됨. //@Transactional //JPA의 모든 데이터 변경 및 로직은 tra..
1. 구현 기능 회원 등록 회원 목록 조회 2. MemberRepository @Repository : 컴포넌트 스캔 대상, 스프링 빈으로 등록 @PersistenceContext - JPA 표준 annotation - 스프링이 EntityManager 만들어서 주입해줌. PK로 찾지 않는경우(ex, findByName, findAll) - JPQL 사용해야함 - em.createQuery(JPQL, 조회타입).getResultList - name(parameter)으로 찾는 경우 setParameter(parameterName, parameterValue) 추가됨. - query에서 사용한 parameter와 name을 통해 binding 시켜줌. @Repository //스프링 빈으로 등록, 컴포넌트..
1. 엔티티에는 가급적 Setter를 사용하지 말자 Setter가 모두 열려있으면 변경 포인트가 많아서 유지보수가 어려워진다.. 2. 모든 연관관계는 지연로딩으로 설정! 엄!청!중!요! EAGER타입은 예측이 어렵고, 어떤 SQL이 실행되는지 추적하기 어렵다. - 특히 JPQ을 실행할 때 N+1 이슈가 발생한다. - 만약 A와 B가 일대다 관계인데, EAGER 타입이다? - A불러오는 쿼리 실행하고 n개의 B를 불러오는 쿼리 바로 실행됨 ㄷㄷ JPA Fetch type, N + 1 이슈 1. Fetch Type이란? Entity 를 조회할 경우 해당 Entity와 연관관계에 있는 Entity를 어떻게 가져올 것인지 설정하는 값이다. - 연관 관계에 있는 Entity 를 모두 가져온다 → Eager - 연..