본문 바로가기

ORM7

OSIV(Open Session In View) 0. 개요 - 지금까지 JPA 기본 개념에 대해서 알아보았다. - 이번 포스팅은 JPA의 마지막 개념인 OSIV에 대해서 알아보자. 1. OSIV(Open Session In View) a) OSIV 란? - Open Session In View란, 하이버네이트 또는 JPA를 지칭하는 이름이다. - JPA는 Open Entity Manager In View이라 불리기도 하는데, 관례상 OSIV로 통일하여 부른다. b) OSIV 사용 설정 - JPA를 사용하면 Spring에서 기본적으로 spring.jpa.open-in-view의 옵션 값을 TRUE로 설정한다. - 이는 OSIV 옵션을 사용한다는 의미로, JPA 프로젝트 빌드 시점에 다음과 같은 warn 로그에서 확인할 수 있다. c) OSIV의 기능 -.. 2022. 6. 7.
API 조회 성능 최적화 - DTO 변환 방식(Fetch Join) 1. 조회 API에서 DTO를 사용하는 이유 - 이전 포스팅에서 Entity를 직접 사용한 조회 API를 구성하는 방법에 대해 알아보았다. - Entity를 직접 노출하는 방식은 Entity의 내용이 변경됐을 때, API 스펙에 직접적인 영향을 미치기 때문이다. - 그러므로 Entity 대신 DTO를 사용하여 이를 해결한다. 2. DTO를 이용한 조회 API 구성 방법 - API에서 DTO를 구성하는 방식은 매우 간단하다. - 기존에 Entity가 직접 사용된 부분을 DTO로 교체하면 된다. - 다음 코드를 살펴보자. @RestController @RequiredArgsConstructor public class OrderSimpleApiController { private final OrderRepos.. 2022. 5. 30.
28. JPQL - case 식 0. 개요 - 이번 포스팅에서는 JPQL에서 사용할 수 있는 case 식에 대해서 알아보자. 1. Case 식의 종류 a) 기본 CASE - 예시를 통해 기본 case 식의 형태를 알아보자. SELECT CASE WHEN p.age = 35 THEN '노장' ELSE '현역' END FROM Player p; - 기본 case 식은 비교 대상에 대해서 조건을 부여할 수 있다. - 자바에서 사용하는 switch case 문과 동일한 원리로 작동한다. b) 단순 CASE - 예시를 통해 단순 case 식의 형태를 알아보자. SELECT CASE l.name WHEN 'leagueA' THEN '1부리그' WHEN 'leagueB' THEN '2부리그' ELSE '3부리그' END FROM League l; .. 2022. 4. 28.
27. JPQL - 서브 쿼리 & 타입 표현 0. 개요 - 이번 포스팅에서는 JPQL에서 SubQuery와 타입 표현에 대해 알아보자. 1. 서브 쿼리(SubQuery) a) 개념 - 서브 쿼리란, 쿼리 내부에 또 다른 쿼리를 삽입하는 형태를 말한다. - 간단한 예시를 통해서 서브 쿼리의 형태를 살펴보자. SELECT p FROM Player p WHERE p.age > (SELECT AVG(p2.age) FROM Player p2); - 이처럼 SQL과 동일하게 JPQL에서도 서브 쿼리를 사용할 수 있다. - 중요한 점은 서브 쿼리와 서브 쿼리를 포함하고 있는 쿼리는 쿼리상에서 연관 관계가 전혀 없다는 것이다. - 즉, p와 p2는 함께 사용되지 않고 독립적인 쿼리로 사용된다. - 이렇게 쿼리를 짜는 것이 서브 쿼리의 효율을 가장 잘 뽑아낼 수 .. 2022. 4. 27.
25. JPQL - 페이징 0. 개요 - JPQL에서 페이징을 사용하는 방법에 대해서 알아보자. 1. 개념 a) 페이징 이란 - 페이징이란 조회된 결과를 가져올 때, 몇 번째 데이터부터 몇 개를 가져올지 설정하는 것이다. - Oracle이나 MySQL을 사용하는 경우, 페이징을 설정하기 위한 쿼리가 굉장히 복잡하다. - 하지만, JPQL은 이를 2가지 메서드로 추상화하여 매우 편리하게 사용할 수 있다. 2. 페이징 API - JPA는 복잡한 페이징 쿼리를 다음 2가지 메서드(= API)로 추상화하여 제공한다. - 이 2가지 메서드는 설정한 방언에 따라 페이징 쿼리로 변환된다. a) setFirstResult(int startPosition) - setFirstResult() 메서드는 조회된 결과를 가져올 때의 시작 위치를 설정한다.. 2022. 4. 25.
23. JPQL - 기본 기능(파라미터 바인딩, 결과 조회, 쿼리의 종류) 0. 개요 - 이전 포스팅에서 JPQL에 대해서 전반적으로 알아보았다. - 이번 포스팅에서는 JPQL의 기본 문법과 기능에 대해서 알아보자. 1. 기본 규칙 - JPQL은 다음과 같은 기본 규칙을 준수해야 한다. 1. JPQL은 DB 테이블이 아닌 객체(= Entity)를 대상으로 작성한다. 2. Entity를 사용할 때에는 테이블 명칭이 아닌 Entity 이름을 사용한다. 3. Entity 속성을 작성할 때, 대소문자를 구분하므로 주의해야 한다. 4. JPQL 키워드(= select, from, where 등)는 대소문자를 구분하지 않는다. 5. 별칭은 필수로 사용하며, as는 생략 가능하다. 2. 집합과 정렬 - JPQL은 ANSI 표준에 의해 정의된 SQL 문법을 모두 지원한다. - 집합과 정렬에는.. 2022. 4. 21.
1. JPA의 등장 0. 개요 - 이전 포스팅에서 JPA를 사용하는 이유에 대해서 알아보았다. - 왜 JPA가 필요한지, 근본적인 문제점이 무엇인지에 대해서 알아보았다. - 복습하자면 JPA를 사용하는 이유는 SQL 중심의 개발 방식을 객체지향 중심의 개발 방식으로 개선하기 위함이다. - 그렇다면 JPA가 무엇인지 천천히 알아보자. 1. JPA란? - JPA는 Java Persistent API의 축약어다. - 쉽게 설명하자면 JAVA의 ORM 표준 기술을 의미한다. a) ORM(Object-relational Mapping) - ORM이 의미하는 바, 역할하는 바는 JPA가 필요한 이유와 동일하다. - JPA가 필요한 이유는 OOP와 RDB의 구조적 차이로 인해 데이터를 매핑하는 과정에 있어서 SQL 중점적인 개발 방식을.. 2022. 3. 22.