| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 코딩부트캠프후기
- 작은수제거하기
- java최솟값구하기
- 격파르타장점
- javaJVM
- java list 저장
- 격파르타비전공자
- 항해99후기
- 격파르타합격후기
- 인터프린터언어
- java기본자료형
- java set 출력
- java참조자료형
- 항해15기
- 프로그래머스제일작은수
- java map 출력
- 컴파일
- java알고리즘문제풀이
- 격파르타후기
- 노베이스부트캠프
- java 자료구조 활용
- java set 저장
- 프로그래머스
- java list 출력
- sqld자격증합격
- 비전공자sqld
- java알고리즘
- java map 저장
- javaJRE
- java map
- Today
- Total
목록전체 글 (259)
코딩과 결혼합니다
이전에는 xToOne일 때의 조회 최적화를 해보았는데 이번에는 xToMany일 때 (컬렉션 조회) 최적화를 하는 방법에 대해서 정리하고자 한다. DB 입장에서 1대 N 조인을 하면 조회하는 순간 데이터 결과가 N개만큼 커지게 된다. xToOne일 때에는 이 부분을 고려하지 않아도 되지만, 이러한 경우에는 최적화할 때 좀 더 고민해야 할 포인트가 많아진다. @GetMapping("/api/v1/orders") public List ordersV1() { List all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); order.getDelivery().getAd..
https://coding-s2-chaewon.tistory.com/253 [JPA] 지연 로딩과 조회 성능 최적화(2) https://coding-s2-chaewon.tistory.com/252 [JPA] 지연 로딩과 조회 성능 최적화(1) 등록이나 수정 등은 데이터 한 건을 다루는 것이기 때문에 거의 성능 문제가 발생하지 않는다. 주로 조회하는 데에 문제가 coding-s2-chaewon.tistory.com @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderSimpleQueryRepository.findOrderDtos(); } JPA에서 DTO로 바로 조회하는 방법이다. 이전의 fetch join을 사용한 것 처럼 ..
영속성 전이 특정 엔티티를 와 함께 연관된 엔티티도 영속 상태로 만들고 싶을 때 사용한다. @OneToMany(mappedBy = "order", cascade = ALL) private List orderItems = new ArrayList(); 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다. CASCADE 종류 ALL : 모두 적용 PERSIST : 영속 - 삭제하면 안 될 때, 저장할 때만 써야 할 때 REMOVE : 삭제 그 외... 주의할 점 하나의 부모 테이블이 자식 테이블을 관리할 때에만 쓴다. (자식 테이블을 여러 곳에서 관리를 할 때에는 쓰지 않는다.) 부모 테이블과 자식 테이블의 라이프 사이클이 유사할 때 사용한다. 고아 객체 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 ..
public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; ... } 지연 로딩 동작 LAZY를 걸어주면 Order를 조회할 때에 Member까지 조인해서 가져오지 않고, proxy 객체로 조회한다. Member를 직접 다루게 될 때에 쿼리가 나가게 된다. Order order = em.find(Order.class, 1L) //Order --LAZY-- Member(proxy) Member member = order.getMember(); member.getName();..
프록시, 왜 사용할까? 프록시는 AOP(관점지향프로그래밍)의 핵심 개념으로, 특정 로직을 캡슐화하여 메서드 호출 전후에 실행되도록 하는 방식이다. 프록시는 대상 객체를 감싸서 대상 객체의 메서드를 호출하기 전후에 특정 작업을 수행할 수 있게 해 준다. 이러한 방식으로 코드 중복을 줄이고 관심사의 분리를 달성할 수 있다. 🤔 Member를 조회할 때 Team도 함께 조회해야 하나? 비즈니스 1 - member의 이름과 team의 이름을 함께 조회 Member class 안에는 Team 객체가 있다. member에서 쿼리 1번, team에서 쿼리 1번 한 번에 쿼리를 한번에 날리는 방법은 없나? 비즈니스 2 - member의 이름만 조회 나는 Team 정보는 필요 없는데 낭비네... ⭐JPA의 지연 로딩과 ..
https://coding-s2-chaewon.tistory.com/252 [JPA] 지연 로딩과 조회 성능 최적화(1) 등록이나 수정 등은 데이터 한 건을 다루는 것이기 때문에 거의 성능 문제가 발생하지 않는다. 주로 조회하는 데에 문제가 발생하는데 이번에는 여러 방법으로 데이터를 조회해 보면서 JPA로 성 coding-s2-chaewon.tistory.com @GetMapping("/api/v2/simple-orders") public List ordersV2(){ return orderRepository.findAllByString(new OrderSearch()).stream() .map(SimpleOrderDto::new) .collect(toList()); } Entity를 조회해서 Dto로 ..
등록이나 수정 등은 데이터 한 건을 다루는 것이기 때문에 거의 성능 문제가 발생하지 않는다. 주로 조회하는 데에 문제가 발생하는데 이번에는 여러 방법으로 데이터를 조회해 보면서 JPA로 성능을 최적화하는 방법을 알아본다. @GetMapping("/api/v1/simple-orders") public List orderV1() { List all = orderRepository.findAllByString(new OrderSearch()); return all; } 아주 간단한 주문 조회 API이다. Order Entity를 그대로 사용하며 Order 안에는 Member와 Delivery가 포함되어 있다. 무한루프 이렇게 조회를 하게 되면 어떤 문제가 생기게 될까? public class Order { ...
엔티티를 외부에 노출하거나 파라미터로 그대로 받는 것 ❌ @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { Long id = memberService.join(member); return new CreateMemberResponse(id); } 엔티티를 파라미터로 받게 되면 딱 봤을 때 간단하긴 하다. 하지만 이대로 사용하면 문제가 생기는데 API 스펙 문서를 까보지 않으면 엔티티에서 어느 값이 파라미터로 넘어오는지 모른다. 엔티티의 내용이 변경되면 ( 엔티티명 변경, 필드 추가 및 삭제 등) API 스펙 자체가 변경되는 문제가 발생할 수 있다. 필요로 하는 ..