본문 바로가기

Spring/JPA

(12)
기본키 매핑 기본 키는 DB에서 특정 레코드를 유일하게 식별하기 위해 사용됩니다. 기본 키(Primary Key)는 테이블에서 각 레코드를 식별하는 데 사용되고 테이블의 각 레코드에는 기본 키 값이 반드시 존재해야 합니다. 다시 말해 기본 키는 테이블에 존재하는 수많은 데이터들을 구별할 수 있는 유일한 기준이 되는 속성이 됩니다. 기본 키는 null이 아니고 유일해야 하며 변하지 않아야 합니다. 따라서 엔티티를 DB 테이블에 매핑할 때 엔티티 클래스에 필수적으로 기본 키 값을 설정해야 합니다. 기본 키 값을 설정하는 방법은 직접 할당과 자동 생성으로 나뉩니다. @Id 애노테이션만 사용한다면 직접 할당 방식으로 개발자가 엔티티의 기본 키 값을 직접 세팅해야 합니다. 직접 할당과 달리 자동 생성 방식은 @Id와 @Gen..
영속성 컨텍스트 플러시 플러시는 영속성 컨텍스트의 변경 내용을 DB에 반영합니다. 보통 DB 트랜잭션이 커밋될 때 영속성 컨텍스트에서 플러시가 자동으로 일어납니다. 영속성 컨텍스트에서 플러시가 발생되면 엔티티의 변경을 감지하고 수정된 엔티티가 있다면 UPDATE SQL을 쓰기 지연 SQL 저장소에 저장합니다. 이후에 쓰기 지연 SQL 저장소에 저장된 쿼리(등록, 수정, 삭제 쿼리)를 DB에 전달합니다.  영속성 컨텍스트가 플러시 되었다고 해서 영속성 컨텍스트의 1차 캐시가 지워지지 않습니다. 플러시는 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 반영되는 과정입니다. 아래와 같은 방법으로 영속성 컨텍스트를 플러시 할 수 있습니다.em.flush() : 플러시를 직접 호출하는 방법입니다.트랜잭션 커밋 : 플러시가 자동으로 호출..
영속성 컨텍스트 객체와 관계형 데이터베이스를 매핑하는 것과 영속성 컨텍스트의 개념은 JPA에서 가장 중요한 두 가지입니다. 실제 JPA가 내부에서 어떻게 동작하는지 알기 위해서는 영속성 컨텍스트를 이해해야 합니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻으로 엔티티를 저장하고 관리합니다. 또한 1차 캐시, 동일성 보장, 트랜잭션을 지원하는 쓰기 지연, 변경 감지, 지연 로딩 기능을 제공합니다. 영속성 컨텍스트가 제공하는 기능을 제공하기 전에 영속성 컨텍스트에 접근하도록 도와주는 엔티티 매니저 팩토리와 엔티티 매니저에 대해 살펴봅시다. EntityManagerFactory & EntityManager 엔티티 매니저 팩토리는 DB당 하나만 생성하여 애플리케이션 전체에서 공유합니다. 위 그림처럼 엔티티 매니저 ..
JPA가 등장한 배경 보통을 개발을 하면 객체를 만들고 그 객체를 관계형 DB에 보관하는 일이 많습니다. 이 과정에서 SQL 중심적인 개발이 생겨나고 개발자는 객체와 DB 테이블 사이의 SQL 매퍼와 같은 반복적인 CRUD 작업을 해야 했습니다. 심지어 객체와 관계형 DB 테이블 사이에 패러다임 불일치로 반복적인 SQL을 개발자가 직접 작성하여 그 불일치를 해소해야 했습니다. 예를 들어 Album 객체를 DB에 저장하기 위해서는 객체를 생성하고 INSERT 쿼리를 직접 작성해야 합니다. 만약 Album 객체가 Item 객체를 부모 클래스로 두고 있다면, Album 객체와 함께 Item 객체의 INSERT 쿼리도 작성해야 합니다. Album을 조회할 때는 더 복잡합니다. 물론 DB 테이블끼리 상관관계를 가지면 너무 복잡하기 때..