Back-end/JPA

    JPA 프록시 객체와 지연로딩

    JPA 프록시 객체와 지연로딩

    도입 정말 오랜만에 JPA와 관련된 글을 작성하는 듯하다. 약 2주정도는 갑작스럽게 영어 스피킹 시험을 보고 싶다는 핑계로 JPA에 대한 글을 잠시 미루고 열심히 영어에 매진하였다. 결과는 망했지만. 이번에 우리는 JPA의 프록시 객체와 지연로딩에 대하여 알아보려고 한다. 프록시 객체? Proxy는 번역하면 대리라고 할 수 있다. 남을 대신하는 무엇인가를 프록시라고 한다. 프록시 객체는 말 그대로 객체를 대신한다는 의미를 포함하고 있다. 객체를 대신한다는 말이 무엇을 의미할까. DB에 있는 값을 영속성컨텍스트로 관리하려면 find()를 사용한다. find를 부르게 되면 영속성 컨텍스트에 값이 있는지 확인하고 없다면 DB로 쿼리가 날라가서 값을 가져올 것이다. find가 아닌 다른 방법으로 DB에 있는 객..

    JPA 상속관계 매핑하기(+ @MappedSuperclass)

    JPA 상속관계 매핑하기(+ @MappedSuperclass)

    도입 지난 시간에 JPA를 활용해 객체와 연관관계 매핑을 하는 방법을 알아보았다. 이번 시간에는 JPA를 활용하여 객체의 상속관계를 테이블로 표현하는 방법에 대하여 알아보고, 상속관계와는 다르지만 비슷해서 혼동하기 쉬운 개념인 @MappedSuperclass를 알아보도록 하겠다. 상속관계 매핑 객체지향언어에서는 중복되는 정보를 상속관계를 사용해 묶어줄 수있다. 예를들어 사람과 강아지 고양이는 모두 이름과 나이 그리고 구분지어줄 ID를 가지고 있다. 이러한 특징을 '동물'로 묶어서 상속해줄 수 있다. 객체에서는 이렇게 상속을 허용해주지만, 테이블에서는 이렇게 상속을 할 수 없다. 따라서 상속을 위해서는 전략을 사용해야한다. 상속의 전략을 사용하기 위해서는 @Inheritance annotation을 이용하..

    JPA 연관관계 매핑하기

    JPA 연관관계 매핑하기

    도입 이번 시간에는 JPA에서 엔티티를 객체적으로 묶어보는 시간을 가져보려고 한다. DB처럼 구현을 하게 될 경우 연관이 되어있는 클래스에는 다른 엔티티의 key값을 넣어주게 되는데, 그러면 다시 그 키값으로 객체를 찾아주어야하는 번거로움이 생긴다. 따라서 이번시간에는 객체 자체를 받을 수 있는 연관관계 매핑을 알아보도록 하겠다. *지난 시간에는 기본키를 매핑하는 방법과 키값을 자동으로 주입시키는 전략을 알아보았다. 2022.01.12 - [Tech-Stack & Language/JPA] - JPA 기본 키 매핑하기 JPA 기본 키 매핑하기 도입 지난 시간에는 필드와 칼럼을 매핑하여 보았다. 이번에는 매핑된 칼럼중에서 Primary key를 지정하는 방법을 알아보도록 하겠다. Primary Key란 기본..

    JPA 기본 키 매핑하기

    JPA 기본 키 매핑하기

    도입 지난 시간에는 필드와 칼럼을 매핑하여 보았다. 이번에는 매핑된 칼럼중에서 Primary key를 지정하는 방법을 알아보도록 하겠다. Primary Key란 기본키를 의미한다. 기본키의 성질은 테이블 내에서 유일하고 null값이 없어야하며 변경되면 안된다. 따라서 테이블에서 데이터들을 유일하게 구분하는데 사용이된다. 이번 시간에는 이러한 기본 키를 매핑하는 방법을 알아보도록 하자. 2022.01.10 - [Tech-Stack & Language/JPA] - JPA로 필드와 칼럼 매핑하는 annotation 알아보기 JPA로 필드와 칼럼 매핑하는 annotation 알아보기 도입 지난 시간에는 객체와 엔티티를 매핑하는 방법에 대하여 알아보았다. 객체와 엔티티를 매핑하였다면, 다음에는 각 객체가 가지고 ..

    JPA로 필드와 칼럼 매핑하는 annotation 알아보기

    JPA로 필드와 칼럼 매핑하는 annotation 알아보기

    도입 지난 시간에는 객체와 엔티티를 매핑하는 방법에 대하여 알아보았다. 객체와 엔티티를 매핑하였다면, 다음에는 각 객체가 가지고 있는 속성(필드)와 엔티티의 칼럼을 매핑해주어야 한다. 이번 시간에는 칼럼과 필드를 매핑하는 과정을 알아보도록 하겠다. 2022.01.07 - [Tech-Stack & Language/JPA] - JPA로 객체와 테이블 매핑하기 JPA로 객체와 테이블 매핑하기 도입 지난 시간에는 JPA의 영속성 컨텍스트에 대하여 알아보았다. 영속성 컨텍스트는 JPA의 동작을 이해하기 위해 반드시 알아야할 부분으로 매우 중요한 내용이었다. 이번 시간도 JPA를 공부할 cnu-jinseop.tistory.com 칼럼과 필드를 매핑하는 방법 칼럼과 필드를 매핑하는 경우도 동일하게 어노테이션을 사용하..

    JPA로 객체와 테이블 매핑하기

    JPA로 객체와 테이블 매핑하기

    도입 지난 시간에는 JPA의 영속성 컨텍스트에 대하여 알아보았다. 영속성 컨텍스트는 JPA의 동작을 이해하기 위해 반드시 알아야할 부분으로 매우 중요한 내용이었다. 이번 시간도 JPA를 공부할 때 매우 중요한 부분을 알아보려고 한다. ORM은 객체로 RDB를 사용하는 기능을 제공한다고 하였다. JPA가 ORM으로 동작하기 위해서 객체와 테이블을 매핑해주어야 한다. 이번 시간에는 JPA로 어떻게 객체로 테이블을 매핑하는지 알아보도록 하겠다. 테이블 - 객체 연결 Annotation을 이용하자. 객체와 테이블을 매핑하기 위해서는 2개의 Annotation만 사용하면 된다. 클래스 하나당 하나의 테이블로 매핑을 시켜주어야 하므로 클래스에 @Entity를 붙여 주어야 한다. 그리고 어느 값이 키 값인지 알아내기..

    JPA 영속성 컨텍스트란?

    JPA 영속성 컨텍스트란?

    도입 지난 포스팅에선 JPA를 활용하여 데이터를 저장하고 삭제하고 변경하는 작업을 해보았다. JPA를 사용하여 CRUD를 진행할 때 어떠한 원리로 동작을 하게 되는지 굉장히 많이 궁금하였다. 이번 포스팅에서는 JPA의 작동원리인 영속성 컨텍스트에 대하여 알아보려고 한다. 영속성 컨텍스트? 영속성 컨텍스트란 엔티티를 영구히 저장하는 환경으로 JPA의 저장공간이라고 생각하면 된다. 객체를 생성하고 JPA를 활용하여 DB에 넣어주게되면, 쿼리로 바로 DB에 넣어주는 것이 아니라 영속성 컨텍스트라는 공간에 따로 저장을 해두는 것이다. 해당 트렌잭션이 끝날 때(commit) 그 동안 모아둔 쿼리를 DB에 쏴주게 된다. 여기서 중요한 것은 영속성 컨텍스트는 당연히 하나의 트렌젝션에서만 공유가 된다. 언제 영속성 컨..

    JPA로 CRUD하기

    JPA로 CRUD하기

    도입 지난 시간에 JPA 프로젝트를 설정하는 방법에 대하여 알아보았습니다. 이번시간에는 JPA로 CRUD를 하는 것을 알아보도록 하겠습니다. CRUD는 Create, Read, Update, Delete의 약자로 생성, 읽기, 갱신, 삭제를 의미합니다. 이번 포스팅에서는 DB에 데이터를 넣고, 조회하고, 수정하고, 삭제하는 방법을 알아보도록 하겠습니다. 시작 전에 JPA? 객체지향적인 언어와 RDB는 구현할 때 굉장히 모순적인 부분이 많습니다. 객체들이 협력하며 만들어낸 결과물들을 DB에 저장을 할 때는 객체가 아닌 테이블에 저장이 되기 때문에 테이블로 각각 데이터를 넣어주어야하는 번거로움이 있습니다. 이로써 객체지향적으로 프로그램을 개발하여도 RDB와 연동시켜주는 과정에서 굉장히 적은 생산성을 보여주었..

    JPA 프로젝트 설정(Maven, H2 DB)

    JPA 프로젝트 설정(Maven, H2 DB)

    H2 DataBase JPA를 사용하기 위해서는 데이터베이스가 필요합니다. 실습에 활용하기 좋은 DB인 H2를 사용하도록 하겠습니다. H2 DB의 장점은 굉장히 가볍습니다. 그리고 MySQL이나 Oracle DB 시뮬레이션도 가능합니다. H2 DB를 설치하는 방법을 알아보도록 하겠습니다. 설치 방법 H2 DB를 설치하기 위해서는 해당 웹페이지를 들어가보도록 하겠습니다. H2 DB 웹페이지 바로가기 H2 Database Engine (redirect) H2 Database Engine Welcome to H2, the free SQL database. The main feature of H2 are: It is free to use for everybody, source code is included Wr..