백엔드/Spring

Entity와 영속화

삐삐에스 2024. 7. 29. 08:29

오늘은 영속화에 대해 말해보겠다.

스프링은 자바에 있는 객체를 어떻게 DB의 테이블과 맵핑하여 데이터를 저장해주는 걸까?

우리는 여기서 Entity, EntityManager, EntityContext에 대해 알아봐야 한다.

 

그전에 "영속화"라는 말에 대해 알아보자.

자바 프로젝트 안의 객체는 프로젝트가 꺼지면, 즉 JVM이 꺼지면 사라진다.

그런데 우리는 이 객체를 JVM이 꺼진 이후에도 유지하고 싶다는 생각을 하게 된다.

객체는 RDB의 관점에서 생각해보면 하나의 Row를 뜻한다.

따라서 객체는 하나의 데이터 집합이고, 이를 영속적으로 유지하고 싶다는 생각에서 자바의 "영속화" 개념이 시작된다.

 

그래서 우리는 영속화 방법으로 객체를 DB에 저장하는 방법을 고안했다.

여기서 어떻게 자바 객체를 DB의 테이블과 맵핑시키는 걸까?

 

 

바로 이 역할을 ORM이 해준다.

그렇다면 ORM은 어떤 객체들을 영속화시키는 걸까?

바로 Entity들을 영속화시킨다.

Entity는 영속화가 되고 싶은 객체를 말한다.

Entity가 되면 EntityContext로 들어갈 수 있다.

Entity가 되기 위해서는 클래스 상단에 @Entity라는 어노테이션을 붙여주면 된다.

 

EntityContext는 영속화가 될 객체들을 모아둔 공간을 의미한다. 즉, 영속화를 위한 중간 공간으로 볼 수 있다.

사실 정확히는 자바 쪽에 있는 공간이다. 그래서 자바의 객체가 DB에 들어가거나 DB의 데이터가 자바로 들어올 때 이 공간을 거치게 된다.

 

그렇다면 EntityContext에 Entity가 자동으로 들어가는 것이냐?

이건 EntityManager가 해주는 일이다.

EntityManager 객체에는 persist()라는 메소드가 있다.

EntityManager의 persist() 메소드를 사용하면 EntityContext에 Entity들을 모아놓을 수 있다.

 

EntityManager는 트랜잭션 관리까지 해주는 만능꾼이다.

다음에 이 EntityManager에 대해 더 자세한 게시글로 돌아오겠다!!

반응형

'백엔드 > Spring' 카테고리의 다른 글

공통 작업을 처리해주는 AOP  (0) 2024.07.31
예외 처리를 위한 어노테이션  (0) 2024.07.25
예외 처리 위치에 대한 고민  (2) 2024.07.24
DTO에 대해  (1) 2024.07.22
직렬화 vs 역직렬화  (1) 2024.07.19