Entity

2025. 12. 1. 11:37·spring

# Entity란?

DB에서 Table 역할을 수행하는 JPA 컴포넌트이며 영속성이 부여되는 객체를 의미한다. 즉 실제 데이터베이스의 테이블과 1:1로 매핑되는 클래스이다. 

Entity는 애플리케이션에서 사용하는 객체(Object)를 관계형 데이터베이스의 테이블 구조와 자동으로 매핑하기 위해 사용하는 JPA의 핵심 요소이다.
이 객체는 JPA가 관리하는 영속성 콘텍스트에 의해 생명주기를 관리하며 저장, 조회, 수정, 삭제 작업이 트랜잭션 단위로 처리된다.


# Entity Listener

Entity에는 특정 시점마다 자동으로 콜백되는 Listener 기능이 존재한다.
Listener는 삽입 전/후, 수정 전/후, 삭제 전/후에 특정 로직을 실행하도록 지원한다.

💡주요 Entity Listener 메서드

@PrePersist
Entity가 처음 저장되기 전 호출된다.
→ createdAt 자동 설정에 자주 사용됨.

@PostPersist
Entity 저장 후 호출된다.

@PreUpdate
Entity가 수정되기 전 호출된다.
→ updatedAt 자동 갱신 시 활용.

@PostUpdate
수정 후 호출된다.

@PreRemove
삭제되기 전 호출된다.

@PostRemove
삭제 후 호출된다.

@PostLoad
Entity 조회 후 호출된다.
→ 로깅 또는 일부 가공 작업에 사용됨.
JPA는 이러한 Listener를 통해 DB 작업과 연동된 공통 로직을 자동화할 수 있게 한다.
예시로 createdAt, updatedAt 같은 필드를 자동 관리하기 위해 Auditing 기능과 함께 많이 사용된다.

# Entity의 필수 구성 요소

💡Entity는 단순한 클래스가 아니라 JPA가 관리할 수 있도록 특정 규칙을 갖추어야 한다.

@Entity
해당 클래스가 JPA에서 관리되는 Entity임을 나타낸다.

기본 생성자 필수
JPA는 프록시 생성 등을 위해 기본생성자를 반드시 필요로 한다.

@Id
테이블의 Primary Key를 지정한다.

@GeneratedValue
PK의 생성 전략을 지정한다.
- AUTO
- IDENTITY
- SEQUENCE
- TABLE

@Column
컬럼칼럼 이름, 길이, nullable 여부 등 DB 칼럼에 대한 추가 속성을 정의한다.

@Table
해당 Entity가 매핑될 실제 테이블 이름을 지정한다.

# Entity의 생명주기(Lifecycle)

Entity는 JPA에 의해 4가지 상태 중 하나에 놓이게 된다.

  1. Transient(비영속)
    → new로 생성했지만 아직 JPA가 관리하지 않는 상태
  2. Persistent(영속)
    → 엔티티 매니저나 Repository를 통해 저장되어 관리되는 상태
  3. Detached(준영속)
    → 영속성 컨텍스트가 더 이상 관리하지 않는 상태
    (clear, close, detach 호출 시 발생)
  4. Removed(삭제됨)
    → 삭제 예정 상태
이 생명주기 동안 Listener가 적절한 지점에서 콜백 된다.

# Entity와 연관관계 매핑

실제 프로젝트에서는 여러 Entity가 서로 관계를 가진다.
JPA는 다음 관계를 매핑하여 객체 그래프 탐색을 가능하게 한다.

@OneToOne : 1:1 관계
@OneToMany : 1:N 관계
@ManyToOne : N:1 관계
@ManyToMany : N:N 관계
각 관계에 대해 fetch 전략과 cascade 전략을 적절히 선택해야 한다.

# Auditing 기능 (Entity 자동 시간 관리)

Entity Listener는 Auditing과 함께 사용되며 다음 기능을 제공한다.

@CreatedDate
@LastModifiedDate
@CreatedBy
@LastModifiedBy
이 기능을 활성화하면 createdAt, updatedAt 같은 자동 시간 관리가 가능하다.

'spring' 카테고리의 다른 글

JPA(=Java Persistance API)  (0) 2025.12.01
Thymeleaf  (0) 2025.12.01
Validation  (0) 2025.12.01
AOP (Aspect Oriented Programming)  (0) 2025.12.01
Spring boot 기초  (0) 2025.11.28
'spring' 카테고리의 다른 글
  • JPA(=Java Persistance API)
  • Thymeleaf
  • Validation
  • AOP (Aspect Oriented Programming)
차하비
차하비
chadev 님의 블로그 입니다.
  • 차하비
    chadev
    차하비
  • 전체
    오늘
    어제
    • 분류 전체보기 (47)
      • kubernetes, k8s (3)
      • docker (3)
      • cloud (6)
      • linux (12)
      • spring (7)
      • java (11)
      • error (4)
      • 자격증 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    monolithic
    docker
    Join
    restAPI
    Kubernetes
    객체지향
    클래스
    Spring
    Java
    url
    KUBECTL
    HTTP
    URI
    모놀리식
    thread
    진법
    비트 연산
    k8s
    OOP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
차하비
Entity
상단으로

티스토리툴바