JPA/JPA Basic 28

[JPA] 엔티티 매핑 - @Entity, @Table, @Column

엔티티매니저에 의해 생성된 엔티티는 DB의 테이블과 매핑된다. 매핑 작업은 JPA프레임워크가 담당한다. 개발자가 해야할 일은 어떤 엔티티가 어떤 테이블과 매핑되어야 하는지, 어떤 필드가 기본키인지, 어떤 필드가 어떤 컬럼과 매핑되어야 하는지를 '표시' 하는 작업이다. '표시'는 '어노테이션'으로 이루어진다. [JAVA] 어노테이션( Annotation )이란? 어노테이션(Annotation)은 무엇일까? 어노테이션은 '주석'이다. JVM이 읽는 주석이다. 주석이 필요한 이유가 무엇일까? 철학책과 과학책이 있다. 과학책은 과학코너로 철학책은 철학코너로 분류하고 lordofkangs.tistory.com 어노테이션에 대한 자세한 내용은 위 포스팅을 참고 바란다. 이번 포스팅에서는 매핑작업에 사용되는 가장 기..

JPA/JPA Basic 2023.05.31

[JPA] 영속성 컨텍스트의 이점 ( + DirtyChecking )

[JPA] JPA 동작원리 ( 영속성 컨텍스트 ) [JPA] 패러다임의 불일치 어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 구현하지만 문제가 있다. 데이터는 주로 관계형DB에 저장되는데 관 lordofkangs.tistory.com 영속성 컨텍스트의 동작원리를 간단히 설명하면, 엔티티(member)는 영속화(persist)되어 1차 캐시에 저장된다. 그리고 쓰기지연SQL저장소에는 INSERT문이 생성되어 1차캐시에 등록된 데이터를 DB 테이블에 추가할 준비를 한다. 그리고 flush 명령이 내려오면 쓰기지연SQL저장소에 저장된 쿼리들이 실행되면서 1차캐시와 DB가 동기화된다. 마무리로 커밋(commit)까지 완료되면 완전히 1차캐시 내용이 DB에 반영된다...

JPA/JPA Basic 2023.05.25

[JPA] 엔티티(Entity)가 기본생성자를 가져야 하는 이유 ( Reflection )

조회시 사용되는 엔티티(Entity)는 기본생성자를 가지고 있어야 한다. @Entity @Data public class Member { @Id public String name; public int age; public Member() {} //반드시 필요! public Member(String name, int age) { this.name = name; this.age = age; } } 이유가 무엇일까? ◎ Reflection EntityManger가 조회(find)를 요청하면 1차캐시에 원하는 엔티티가 없는 경우 DB에 SELECT문을 실행하여 조회한다. 그리고 결과를 1차캐시에 저장하고 엔티티 객체를 생성하여 반환(return)한다. 즉, 프로그램 실행 중에 동적으로 엔티티 객체를 생성해야 한..

JPA/JPA Basic 2023.05.25

[JPA] 트랜잭션(Transaction) 이해하기(2) - JPA

DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이란? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않는다. 입금을 생각해보자. A가 B에게 5만원을 입금하면 두 가지 쿼리가 실행되어야 한다. 1) A계좌에 5만원 출금 2) B계좌에 5만원 입금 1) 과 2)는 독립되어 있지 않다. 1)이 성공해도 2)가 실패하면 1)은 원복되어야 한다. 그러므로 여러 처리를 하나의 단위로 묶는 논리적 단위가 필요한데, 이가 바로 '트랜잭션'이다. [JPA] 트랜잭션(Transaction) 이해하기(1) - JDBC DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이 필요한 이유가 무엇일까? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않..

JPA/JPA Basic 2023.05.24

[JPA] 트랜잭션(Transaction) 이해하기(1) - JDBC

DB의 데이터변경은 '트랜잭션(Transaction)' 단위로 이루어진다. 트랜잭션이란? DB 데이터 변경은 단 하나의 쿼리만으로 이루어지지 않는다. 입금을 생각해보자. A가 B에게 5만원을 입금하면 두 가지 쿼리가 실행되어야 한다. 1) A계좌에 5만원 출금 2) B계좌에 5만원 입금 1) 과 2)는 독립되어 있지 않다. 1)이 성공해도 2)가 실패하면 1)은 원복되어야 한다. 그러므로 여러 처리를 하나의 단위로 묶는 논리적 단위가 필요한데, 이가 바로 '트랜잭션'이다. DB에서 트랜잭션 구현하기 H2 DB에서 트랜잭션을 이해해보자. 계좌 테이블(Account)은 계좌정보가 들어있다. 사쿠라는 20000원 김채원은 30000이 계좌에 들어있다. 그럼 사쿠라가 김채원에게 5000원을 송금하는 과정을 구현..

JPA/JPA Basic 2023.05.24

[JPA] JPA 프로젝트 만들기 ( with Maven )

JPA는 SQL 중심 프로그래밍을 자동화하여 개발자가 쿼리를 짜는 노고를 줄이는 ORM 기술이다. JPA를 구현하는 대표 구현체는 Hibernate이다. JPA 구현은 대부분 Hibernate로 구현된다. DB는 H2 DB를 사용할 예정이다. [ DB ] H2 DB를 사용하는 이유 H2 데이터베이스는 간단한 프로젝트나 테스트용으로 적합한 데이터베이스이다. H2의 장점은 Embeded모드를 지원하기 때문이다. Application과 DB의 통신 Oracle , MySQL, MariaDB의 작동원리는 위 그림과 같 lordofkangs.tistory.com ( H2 사용은 위 포스팀 참고 ) 그럼 JPA 프로젝트를 만들어보자. 1. pom.xml 설정하기 JPA 예제를 위한 라이브러리를 디펜던시로 추가해보자..

JPA/JPA Basic 2023.05.22

[JPA] JPA 동작원리 ( 영속성 컨텍스트 )

[JPA] 패러다임의 불일치 어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 구현하지만 문제가 있다. 데이터는 주로 관계형DB에 저장되는데 관계형DB와 어플리케이션은 lordofkangs.tistory.com JPA는 객체지향 프로그래밍과 SQL 중심 프로그래밍 사이의 '패러다임 불일치' 문제를 해결하기 위해 등장했다. 이전에는 개발자가 SQL문을 직접 작성하여 테이블에 레코드를 추가해야 했다. JPA가 등장한 이후, 개발자는 JPA가 관리하는 인스턴스(엔티티)를 생성, 수정, 삭제만 하면 된다. ( 객체지향 관점 유지 가능 ) 그러면 JPA가 자동으로 SQL문을 생성한다. JPA는 DB 테이블의 레코드를 엔티티 인스턴스와 동기화하여 관리한다. 1차 캐시 영역..

JPA/JPA Basic 2023.05.22

[JPA] 패러다임 불일치

어플리케이션 개발은 주로 객체지향언어로 이루어진다. 객체지향언어는 현실의 많은 문제를 코드로 구현 가능하게 하지만 문제가 있다. 데이터는 주로 관계형DB에 저장되는데 관계형DB와 어플리케이션은 패러다임이 다르다. 객체지향언어는 객체를 생성하고 객체간 관계를 맺는다. 반면 관계형DB는 테이블간 외래키로 관계를 맺는다. 객체와 테이블의 개념이 달라, 두 환경의 패러다임 자체가 서로 다르다. 그러므로 중간에 변환과정이 필요하다. JDBC의 등장 Application이 DB에 읽기/쓰기를 하려면 두 환경을 연결할 모듈이 필요하다. 그래서 JAVA언어로 읽기/쓰기를 구현하는 라이브러리가 등장하는데, 그것이 JDBC(Java Database Connectivity)이다. 이후에는 iBatis, MyBatis같은 O..

JPA/JPA Basic 2023.05.18