Java(35)
-
OSIV (Open-(Session)-In-View) 란?
OSIV Hibernate에서는 Open Session In View라 하고, JPA에서는 Open EntityManager In View라 합니다. 관례상 OSIV이라 칭합니다. Session 쿠키, 세션 할 때 그 세션인가요? 아닙니다. DB에 접근할 수 있는 세션입니다. application.yml spring: jpa: open-in-view: true #default open-in-view: true 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있습니다. API라면 클라이언트에게 응답될 때까지 View라면 랜더링 될 때까지 영속성 컨텍스트가 살아있습니다. open-in-view: false 트랜잭션을 종료할 때 영속성 컨텍스트가 닫히므로 Lazy loading 또한 할 수 없습니다. ..
2022.12.14 -
연산자, 조건문과 반복문 (2/8)
참고한 repository : https://github.com/vividswan/The_Essence_of_Java_Book_Study 연산자 연산자 : 연산을 수행하는 기호(+, -, *, / 등) 피연산자 : 연산자의 작업 대상 연산자는 피연산자로 연산을 수행한 후 결괏값을 반환합니다. 연산자의 종류 산술 연산자 +, -, *, /, % 비교 연산자 , >=, 비교 > 논리 > 대입 우선순위 단항(1) > 이항(2) > 삼항(3) 우선순위 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽 산술 변환 연산 전에 피연산자 타입의 일치를 위해 자동 형변환되는 것을 '산술 변환' 또는 '일반 산술 변환'이라 부름 두 피연산자의 타입을 같게 일치 시킴 보다 큰 타입으로 일치 피연산..
2022.11.25 -
자바, 변수, 기본형과 참조형, 상수와 리터럴, 진법, 형변환 (1/8)
토이 프로젝트를 하면서 자바에 대해 중간중간 개념이 헷갈리는 부분이 보였습니다. 예전에 자바의 정석을 1독 한 적 있지만 다시 읽고 처음부터 정리하는 것이 너무 오래 걸릴 것 같아 항상 미뤄왔었습니다. 그러다 우연히 잘 정리된 GitHub repository가 있어 많은 도움을 받았습니다. 이번 시리즈는 하나하나 깊게 개념을 공부해서 정리한 것이 아닌 크게 크게 어떤 개념들이 있는지 마치 도서의 목차를 머릿속에 넣는다는 느낌으로 진행하고자 합니다. 참고한 repository : https://github.com/vividswan/The_Essence_of_Java_Book_Study 자바(Java Programming Language)란? 썬 마이크로시스템즈에서 개발 후 1996년 1월 공식 발표 운영체..
2022.11.24 -
[API 개발 고급] 컬렉션 조회 최적화(페치 조인, 페이징)
앞의 예제에서는 toOne(OneToOne, ManyToOne) 관계만 있었습니다. 이번에는 컬렉션인 일대다 관계(OneToMany)를 조회하고, 최적화하는 방법을 알아보는 시간을 가져보겠습니다. 요구사항 "주문내역에서 추가로 주문한 상품 정보를 추가로 조회하자." 그럼 Order 기준으로 컬렉션인 OrderItem와 Item 이 필요합니다. "엔티티 직접 노출"은 이전 시간에 공부했던 것처럼 많은 문제가 있으므로, 컬렉션 조회 최적화에서는 엔티티를 DTO로 변환 한 후 최적화하는 것에 초점을 맞추도록 하겠습니다. V2 : 엔티티를 DTO로 변환(fetch join 사용 X) V3 : 엔티티를 DTO로 변환(fetch join 사용 O) 주문 조회 V2: 엔티티를 DTO로 변환(fetch join 사용 ..
2022.05.26 -
[API 개발 고급] 지연 로딩과 조회 성능 최적화(V4) 4/4
간단한 주문 조회 V4: JPA에서 DTO로 바로 조회 쿼리 1번 호출 select 절에서 원하는 데이터만 선택해서 조회 V3까지는 엔티티 조회 후 DTO로 변환하는 작업을 했습니다. V4에서는 JPA에서 DTO로 바로 조회하면서 조금 더 성능 최적화를 해보겠습니다. ❗의존관계 Repository에서 Controller 쪽으로 의존관계가 생기면 망합니다. 의존관계는 한 방향으로 해야합니다. Controller → Service → Repository로 가야 합니다. OrderSimpleApiController @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderRepository.findOrderDtos(); } OrderS..
2022.05.26 -
[API 개발 고급] ❗지연 로딩과 조회 성능 최적화(V3) 3/4
간단한 주문 조회 V3: 엔티티를 DTO로 변환 (fetch join 사용 O) 결론 : fetch join으로 쿼리 1번 호출 V2에서 발생한 성능 문제(N+1)를 해결하기 위해서 페치 조인을 사용해보겠습니다. ❗ [중요] ❗ 실무에서 JPA 성능 문제의 90%는 N+1에서 발생하고 페치 조인은 성능 최적화를 위해서 자주 사용하기때문에 100% 이해하고 있어야 합니다. OrderSimpleApiController package jpabook.jpashop.api; /** * @XToOne 관계(ManyToOne, OneToOne에서의 성능최적화) * Order * Order -> Member * Order -> Delivery */ @RestController @RequiredArgsConstructo..
2022.05.25