# 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가지 상태 중 하나에 놓이게 된다.
- Transient(비영속)
→ new로 생성했지만 아직 JPA가 관리하지 않는 상태 - Persistent(영속)
→ 엔티티 매니저나 Repository를 통해 저장되어 관리되는 상태 - Detached(준영속)
→ 영속성 컨텍스트가 더 이상 관리하지 않는 상태
(clear, close, detach 호출 시 발생) - 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 |
