JPA 10

OSIV 를 통한 성능 최적화 ( Connection 관리 관점 )

OSIV 란 뭘까? OSIV는 Open Session In View의 약자로 spring.kpa.open-in-view 옵션을 통해 application.properties 또는 yml 파일에서 On / Off 설정을 할 수 있다. OSIV의 기본값은 true 이다. ( on 상태를 의미한다. ) 기본적으로, 트랜잭션을 시작할 때 JPA의 영속성 콘텍스트는 데이터베이스 커넥션을 가져온다. OSIV는 트랜잭션이 끝나도 사용자에게 Response 가 반환 될 때까지 영속성 콘텍스트와 데이터베이스 커넥션을 끝까지 살려주는 역할을 한다. OSIV - On OSIV 가 On 이면 위 그림과 같이 요청에서 응답까지 이르는 모든 범위에서 영속성 콘텍스트와 데이터베이스 커넥션이 살아 있다. 이렇게 모든 범위에서 영속성..

Dev/JPA 2024.03.15

JPQL 의 개념과 간단한 사용 방법 ( 2 / 2 )

이전 포스팅에서 이어집니다. 2024.02.17 - [개발/jpa] - JPQL의 개념과 간단한 사용 방법 ( 1 / 2 ) JPQL 의 개념과 간단한 사용 방법 ( 1 / 2 ) 게시글을 하나로 통합할까 하다가, 이론적인 부분과 실제 사용하는 구문을 분리하는 게 좋겠다는 생각이 들어서 두 개로 나눴다. 이 게시글은 JPQL 의 개념에 대한 내용이 주가 되었으니 참고 바 zigo-autumn.tistory.com 4. JPQL 에서의 페이징은 어떨까? JPA 에서 페이징은 setFirstResult(in statPosition )과 setMaxResults(int maxResult)로 추상화할 수 있다. 각각의 API 의미는 다음과 같다. setFirstResult(int startPosition) ..

Dev/JPA 2024.02.17

영속성 전이와 고아 객체

이전 포스팅에서 이어집니다 2024.02.05 - [개발/jpa] - JPA 에서 프록시 객체와 지연 로딩 JPA 에서 프록시 객체와 지연 로딩 JPA 를 사용하면서 연관관계를 정의하고, 연관 관계 정의 시 사용하는 지연로딩에 대해 이해하기 위해서는 프록시라는 개념이 무엇인지 확실히 알아야 한다. 해당 게시글에서는 프록시에 대한 zigo-autumn.tistory.com 1. CASCADE, 영속성 전이 영속성 전이는 연관관계 세팅이나 즉시 로딩과는 전혀 관계가 없는 내용이다. 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속 상태로 만들고 싶다면 영속성 전이를 사용할 수 있다. 즉, 영속성 전이를 사용하면 자동으로 자식 객체까지 persist 가 호출 된다. 여기서 헷갈릴 수 있는 부분..

Dev/JPA 2024.02.06

JPA 에서 프록시 객체와 지연 로딩

JPA 를 사용하면서 연관관계를 정의하고, 연관 관계 정의 시 사용하는 지연로딩에 대해 이해하기 위해서는 프록시라는 개념이 무엇인지 확실히 알아야 한다. 해당 게시글에서는 프록시에 대한 개념과 연관관계에 대해 정리하려고 한다. 들어가기 전에, 해당글에서 '프록시 객체'와 '프록시 엔티티'는 동일한 의미로 사용됨을 밝힌다. 이 글을 이해하려면 JPA 에서 제공하는 영속성의 의미를 알고 있어야 한다. 필요한 사람은 해당 글을 참고하면 좋을 것 같다. 2023.12.11 - [개발/jpa] - JPA에서 영속성의 의미와 사용하는 애노테이션 정리 1. 프록시 객체가 뭘까? EntityManager에서 제공하는 getReference()로 프록시 객체의 기본 개념을 알아보자 일반적으로 entityManager ..

Dev/JPA 2024.02.05

JPA 상속관계 매핑 - 상속 전략과 MappedSuperClass

1. JPA 에서 상속관계매핑이란? 객체(Entity) 의 상속구조, 데이터베이스에서 Super/Sub 타입 관계를 매핑하는 것을 의미한다. 이처럼 부모 객체(Super)를 자식 객체(Sub)가 상속하게 되면 부모객체의 변수와 메서드에 접근 가능한 것처럼, JPA 에서도 상속관계 매핑을 사용하여 동일하게 구현할 수 있다. 예를 들어 판매자가 판매하려고 하는 상품(Item) 에는 서적(Book), 앨범(Album), 영화(Movie) 가 있다고 하자. 이 때 상품이 가지는 공통적인 특징을 묶어 Item 객체를 생성하고 서적과 앨범, 영화는 각각 Item 을 상속받는 Book, Album, Movie 객체로 생성할 수 있다. 이렇게 정의한 Item 과 Book, Item 과 Album, Item과 Movie..

Dev/JPA 2023.12.27

JPA 에서 연관관계의 정의

12월동안 JPA 강의를 수강하고 개인 프로젝트에 적용해보면서 가장 힘들었던 내용이다. 까먹기전에 수업들었던 내용을 간략하게 정리하려고 한다. 사실 강의를 한번들어서 연관관계를 파악하기에는 쉽지 않았다. 역시 직접해보는게 최고다. 개인 프로젝트 적용할 때 속도는 느렸지만 도움이 많이 되었기 때문에 혹시 이 개념이 헷갈린다면 시간이 좀 걸리더라도 본인이 직접 처음부터 강사님의 예제와 유사한 구성을 새로 기획하여 만들어 보는 것을 추천한다. 1. 연관관계란? 말 그대로 두 객체가 연관되어 서로의 객체를 참조 가능한 상태를 의미한다. 2. 방향(Direction) 의 종류와 의미 , 단방향과 양방향이란? 두 객체(Entity) 가 있을 때, 서로 연관관계가 있다면 양방향 연관 관계, 한쪽에 대해서만 관계가 있..

Dev/JPA 2023.12.27

개인프로젝트_UKmedicine_1

요구 사항 회사에서 일할때도 느꼈던거지만 사실 기능을 구현하고 만드는것 보다는 고객의 요청사항을 파악하고 그것을 구체화 하는것이 가장 중요하다. 아무리 개발 실력이 좋아도 무엇을 어떻게 구현해야할지 정의가 되어 있지 않다면 결과물 또한 모호해지기 때문이다. 간단한 게시판으로 만들겠지만 그래도 기본적인 기능은 정의하고 가면 좋을 것 같아서 게시판의 성격과 주요 기능을 정의 하고자 한다. 1. 로그인은 구현하지 않는다. 2. 주료 사용되는 재료 항목과 재료를 통해 만들 수 있는 레시피를 검색할 수 있다. 3. 재료는 등록/삭제/수정 할 수 있다. 4. 레시피는 등록된 재료를 검색하여 등록/삭제/수정할 수 있다. 5. 레시피 조합하기 버튼을 누를 경우 해당 약재에 필요한 물의 총량이 도출 되어야 한다. 6. ..

Dev/Toy Project 2023.12.11

JPA 에서 데이터베이스 스키마 자동생성 기능 사용하기

jpa 를 사용하여 개발시, 개발 환경에서 간단하게 사용할 수 있는 기능중에 데이터 베이스 스키마 자동생성 기능이 있다. 사용 방법은 persistence.xml 파일에 아래와 같이 추가한다. value 에는 create, update, validate, none 이 들어 올 수 있는데 각 옵션의 의미는 아래와 같다. create 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop create와 같으나 종료시점에 테이블 DROP update 변경분만 반영(운영DB에는 사용하면 안됨) validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 개발 초기 단계에는 create, update , 테스트 서버는 update 또는 validate, 스테이징과 운..

Dev/JPA 2023.12.11

JPA 에서 영속성의 의미와 사용하는 애노테이션 정리

jpa 를 강의를 들으면서 가장 기본적인 영속성의 개념에 대해 간단하게 정리해보려고 한다. 1. 영속성 컨텍스트란 무엇인가? 데이터 베이스와 객체 사이에 중간 단계가 있는 개념이라고 할 수 있다. 객체를 데이터베이스로 옮기거나, 데이터베이스에 있는 데이터를 객체에 매핑할 때 중간에 존재하는 저장 공간이다. 간단하게 코드로 나타내면 EntityManager.persist(entity) 로 표현할 수 있다. 이 때 이 영속성 컨텍스트가 존재함으로써 일종의 버퍼링 기능을 수행하게 되는데 persistence.xml 파일에 를 추가하여 버퍼 사이즈를 조율할 수 있다. 버퍼링 기능을 사용하면 쿼리를 일일히 데이터베이스에 날리는게 아니라 지정한 버퍼 크기만큼 쌓아놨다가 한번에 데이터베이스에 요청하여 커밋할 수 있다..

Dev/JPA 2023.12.11

h2 db 연결시 javax.xml.bind.JAXBException 오류 해결 방법

김영한 강사님의 인프런 jpa 강의 수강 중 아래와 같은 오류가 발생했다. Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 12 more maven 프로젝트로 기본 설정파..

Dev/JPA 2023.12.06