Entity의 정의와 JPA의 작동방식

오하수·2026년 1월 25일

엔티티는 이전에도 용어를 정리한 적이 있지만 간단하게 정의만 정리해보자.

자바 애플리케이션에서 데이터베이스와 상호작용할 때 Entity는 중요한 역할을 합니다.
JPA에서 Entity는 데이터베이스의 테이블과 자바 클래스 간의 매핑을 정의하며, 데이터베이스 작업을 객체지향적으로 관리할 수 있게 도와줍니다.


EntityMangerFactory

클래스 자체나 생성한 인스턴스도 엔티티라고 부릅니다. 엔티티 매니저 팩토리는 엔티티 매니저 인스턴스를 관리하는 주체이다 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 엔티티 매니저 팩토리부터 엔티티 매니저를 생성합니다.


EntityManager

엔티티 매니저란 영속성 컨텍스트에 접근하여 엔티티에 대한 테이터 베이스 작업을 제공합니다.

  1. find() : 영속성 컨텍스트에서 엔티티를 검색하고 영속성 컨텍스트에 없을 경우 데이터베이스에서 데이터를 찾아 영속성 컨텍스트에 저장한다.

  2. persit() : 영속성 컨텍스트를 저장한다.

  3. remove() : 엔티티 클래스를 영속성 컨텍스트에서 삭제한다.

  4. flush() : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영한다.

영속성 컨텍스트와 사용시 이점에 대해서는 전 블로그를 참고해주세요
엔티티 설명


ORM과 JPA에 대한 설명

JPA의 작동방식

JPA는 자바 객체(Entity)와 데이터베이스 테이블을 매핑하여, SQL을 직접 작성하지 않고도 DB를 다룰 수 있게 해주는 ORM 표준이다.

Controller -> Service -> Repository(JPA) -> EntityManager-> 영속성 컨텍스트 -> DB


Entity

DB 테이블과 매핑되는 자바 객체

@Entity
public class Member {
  @Id
  private Long id;
}

EntityManager

JPA의 실질적인 관리자
CRUD 담당

entityManager.persist(entity);
entityManager.find(Member.class, id);

영속성 컨텍스트

Entity를 관리하는 1차 캐시 공간


JAP 동작 단계별 설명

1. 엔티티 생성 (비영속 상태)

 Member member = new Member("kim");
  • 자바 객체
  • DB랑 관계 X

2. 영속 상태 전환

entityManager.persist(member);
  • 객체가 영속성 컨텍스트의 1차 캐시에 저장됨
  • 엔티티 상태가 비영속 -> 영속(managed)로 변경

3. 쓰기 지연(SQL 저장 단계)

  • persist() 호출과 동시에 JPA는 해당 엔티티에 대한 INSER SQL을 생성하지만 즉시 DB에 실행하지 않고 쓰기지연 SQL 저장소에 보관된다.

-> DB에 반영 X

4. 트랜잭션 커밋 또는 flush

@Transactional

또는

entityManager.flush();
  • 트랜잭션이 끝나는 순간 영속성 컨텍스트에 쌓여있던 SQL 실행.
flush는 쓰기 지연 SQL 저장소에 있는 SQL들을 DB로 전송하고 DB와 영속성 컨텍스 상태를 동기화함 -> rollback이 가능해짐

5. 조회 동작(1차 캐시)

entityManager.find(Member.class, id);
  • 먼저 영속성 컨텍스트(1차 캐시) 확인
  • 있으면 DB 조회 X
  • 없으면 DB 조회 O

5. 변경 감지(Dirty Checking)

member.setName("park");
  • 트랜잭션 커밋 시점에 JPA가 변경 여부 자동 감지
  • UPDATE 쿼리 자동 생성

6. 삭제

entityManager.remove(member);
  • 트랜잭션 종료 시 DELETE 실행

Repository

public interface MemberRepository extends JpaRepository<Member, Long>

내부적으로 EntityManager를 사용하고 데이터 접근 로직을 담당한다.

JpaRepository는 Spring Data JPA에서 제공하는 인터페이스로, EntityManager를 직접 사용하지 않고 CRUD 기능을 수해할 수 있게 해준다. 그 중에서 JpaRepository에 기본 메서드들이 내장되어 있어 Spring Data JPA가 런타임에 구현체를 자동 생성하여 데이터베이스 접근을 처리한다.

findAll()

List<Member> members = memberRepository.findAll();
  • 해당 Entity 테이블의 모든 행 조회
    == SELECT * FROM member;

FindById()

Optional<Member> member = memberRepository.findById(1L);
  • PK 기준 조회
  • 1차 캐시를 먼저확인 후 없으면 DB 조회

그 외에도 save(), count(), delete()등의 메서드가 내장되어있다.

profile
오늘하루도수고하세용~

0개의 댓글