[JPA] SpringDataJPA - OSIV
[JPA] SpringDataJPA - OSIV and etc.. 지연로딩으로 인해 프록시 객체가 들어있는 엔티티를 트랜잭션 범위 밖에서 초기화 하려고하면 에러가 발생한다. 스프링에서는 이런 문제를 해결하기위해, OSIV라는 방법을 제공하는데, 그 전에, API를 사용하지않고, 해결하는 방법을 알아보자. 미리 초기화, Facade, DTO만 넘기기 첫번째 해결법은 트랜잭션 범위가 끝나기전에 엔티티를 미리 초기화 하는 것 이다. 이 방법은 관리해야할 트랜잭션 범위가 OSIV보다 적어서 디버깅이 편하지만, 코드량이 늘어나는 단점이 있다. 또한, 뷰에 맞는 최적화 코드를 추가로 생성해야 하므로, 코드끼리의 논리적인 의존도가 증가할수있다. 예를들어, 뷰 A는 user1엔티티만 필요하고, 뷰 B는 user1엔티티..
[JPA] JPA란? - 패러다임의 불일치
JPA JPA는 자바 진영의 ORM기술 표준이다. JPA또한 내부적으로 JDBC API를 사용하며, 애플리케이션과 JDBC사이에서 동작한다. JPA를 사용함으로써, 아래에서 설명할 패러다임의 불일치 문제를 거의 대부분 해결할수있으며, 생산성 또한 향상시킬수있다. SQL - 관계지향 패러다임과 객체지향 패러다임의 불일치로 발생하는 문제점 1. 객체 그래프탐색에서의 불편함 SQL은 처음 작성한 SQL문에 따라서, 탐색범위가 결정된다. 하지만, 객체는 한 객체를 한번 참조함으로써, 그 객체가 참조하는 다른 객체를 전부 참조할수있다. 외래키만 저장한 가상의 테이블 A, B, C, D, E, F 가 있고, 각각 외래키를 통해 다음과 같이 연결되어있다. A - B - C - D - E - F 이를 객체로 표현하면 ..