
JPA에서는 엔티티는 테이블에 대응하는 하나의 클래스라고 생각하시면 편합니다.엄청나게 간단한 코드와 함께 같이 보겠습니다.
@Entity
public class Account {
String username;
String password;
}
| username | passoword |
|---|---|
| test | 1234 |
| admin | admin |
spring-boot-starter-data-jpa 의존성을 추가하고 @Entiy 어노테이션을 붙이면 테이블과 자바 클래스가 매핑이 됩니다.
그래서 JPA에서 '하나의 엔티티 타입을 생성한다'라는 의미는 '하나의 클래스를' 작성한다는 의미가 됩니다.
엔티티라는 용어는 때로는 클래스를 의미하는 경우도 있고, 클래스에 의해 생성된 인스턴스를 의미하는 경우가 있습니다.
정확히 얘기 하자면, 엔티티 클래스 와 엔티티 인스턴스 혹은 엔티티 객체라는 표현이 정확합니다.
엔티티 객체들을 관리하는 역할을 합니다. 여기서 관리란 Life Cycle이라고 할 수 있습니다.
엔티티 매니저는 관리하는 엔티티 객체들을 영속 컨텍스트(Persistence Context)에 넣어두고, 객체들의 생사를 관리하게 됩니다.

영속 컨텍스트는 JPA가 엔티티 객체들을 모아두는 공간이라고 이해할 수 있습니다.
| 이름 | 설명 |
|---|---|
| New(비영속) | Java 영역에만 존재하고, 데이터베이스와 연동된 적 없는 상태.순수한 Java 객체로 엔티티 매니저가 관리하지 않음 |
| Managed(영속) | DB에 저장되고, 메모리상에서도 같은 상태로 존재하는 상태.PK 값을 통해 필요한 엔티티 객체를 꺼내 사용할 수 있게 됩니다. |
| Removed(삭제) | DB 상에서 삭제된 상태. 객체는 영속 컨텍스트에 존재하지 않습니다. |
| Detached(준영속) | 영속 컨텍스트에서 엔티티 객체를 꺼내서 사용하는 상태. 아직 DB와 동기화가 이루어지지 않은 상태 |
JPA는 자동으로 테이블을 생성할 수 있는 기능을 가지고 있어, 아래와 같은 방식을 이용할 수 있습니다.
JPA와 H2 인메모리 DB를 이용한 실습은 여기서 확인하실 수 있습니다.
그리고 MySQL과 같은 DB연동은 여기서 확인하실 수 있습니다!
JPA와 관련 어노테이션은 여기서 확인할 수 있습니다👍