JPA 15

[Spring/JPA] JPA 소개

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ 과거 엔터프라이즈 자바 빈즈(이하 EJB)라는 기술 표준이 있었는 데, 그 안에도 엔티티 빈이라는 ORM 기술이 있었다. 하지만, 너무 복잡하고 J2EE 애플리케이션 서버에서만 동작하였기에 오픈소스 ORM 프레임워크, Hibernate(하이버네이트)가 등장하였다. 하이버네이트는 EJB의 ORM에 비해 가볍고, 기술 성숙도가 높으며, J2EE 애플리케이션 서버없이도 동작하였기에 결국, EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준을 만들었는 데, 바로 JPA이다. JPA를 사용하는 이유는 다음과 같으며, 이유의 9할은 JPA의 등장배경과 관련이 깊다. 생산성: JCP(자바 컬렉션 ..

Spring/JPA 2022.05.25

[Spring/JPA] JPA의 등장배경

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※ JPA 이전에는 JDBC와 mybatis를 사용하여 데이터베이스를 사용하여 개발하는 데 다음과 같은 문제점들이 존재했었다. 패러다임 불일치: 객체와 관계형 데이터베이스는 서로 지향하는 목적이 다르다. 단순 반복 작업: 단순한 작업인 CRUD를 진행할 때마다 쿼리를 반복적으로 작성해주어야 한다. 유지보수의 어려움: 요구사항의 변동으로 인해 칼럼이 추가 혹은 삭제, 변경 등이 되었을 때, 유연하지 못하다. Query 의존도가 높음: 3번과 마찬가지로 요구사항의 변동이 있어 복잡한 쿼리를 수정해야 하는 경우, 전체를 수정하거나 등의 문제로 객체 매핑하는 데 어려움이 있었다. 이 외에도 문제는 여러 존재한다. ..

Spring/JPA 2022.05.18

[Spring] JPA 공부 #1

JPA에 대해 자세히 공부해보고자 JPA 공부를 해보고자합니다. 일단 JPA에 대해 공부하다보니 영속성 컨텍스트에 대해 알아야하기에 영속성 컨텍스트가 무엇이고, 또 어떤 역할을 수행해주는 지에 대해 간단하게 제 방식대로 요약을 해보고, 직접 테스트하는 것으로 #1을 마무리하도록 하겠습니다. 영속성 컨텍스트(Persistence context)란? 일단 영속성 컨텍스트에 대해 알아보기전에 영속이 무슨 뜻인지 알아보기위해 사전에 검색했습니다. 그리고 컨텍스트는 저장소로써 어떤 정보들을 저장하고 관리하는 용도라고 하니 이 둘을 그냥 이어붙인다면 "영원히 계속 유지되는 성질들을 저장하고 관리"라는 뜻이 되나, 뭔가 어색한 뜻이기에 저만의 풀이로 해석하자면, "지속적으로 정보들을 저장하고 관리하는 저장소" 정도로..

Spring 2022.03.25

일상이에요

요즘 JPA를 공부를 하다보니 머리가 어질어질합니다. JPA가 어느정도 익숙해질 때 쯤 되니, 튜닝, 그리고 더 세세한 사항들까지 알아보다보니, 끝도 없는 것 같습니다. Batch Size, IN 쿼리, 즉시 로딩, 지연 로딩, fetch & 조인 등등 ... 위와 같은 내용들을 보고 나니 현타가 찾아왔습니다.. 그제서야 Spring을 왜 다들 어려워하는 지 알 것 같더라고요... 그리고 현재 프로젝트를 실행했을 때 발생하는 쿼리들을 보니... Hibernate: select member0_.id as id1_2_, member0_.email as email2_2_, member0_.name as name3_2_, member0_.nickname as nickname4_2_, member0_.passwo..

일상 2022.03.05

[Spring] JPA, Hibernate 설명

JPA, Hibernate, Spring Data JPA 이 3가지에 대해서 다소 헷갈리는 점들이 있어서 포스트하고자 했다. 먼저 JPA는 Java Persistence API의 약자로 자바 어플리케이션에서 관계형 DB를 사용하는 방식을 정의한 인터페이스이다. 즉, 라이브러리가 아닌 인터페이스이다. 간혹 JPA와 관련한 오류를 발생하게 되면 EntityManager와 관련한 오류가 발생하는 경우가 종종 있는 데 이때, EntityManager의 역할이 문뜩 궁금해져서 찾아보니 엔티티들을 관리한다. 내부에는 영속성 컨테이너가 있어, 이를 통해 엔티티 관리 여러 엔티티 메니저가 하나의 영속성 컨테이너 공유 가능 Thread-safe 보장 그리고 CRUD (Create, Read, Update, Delete)..

Spring 2022.02.04