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

클래스 자체나 생성한 인스턴스도 엔티티라고 부릅니다. 엔티티 매니저 팩토리는 엔티티 매니저 인스턴스를 관리하는 주체이다 애플리케이션 실행 시 한 개만 만들어지며 사용자로부터 요청이 오면 엔티티 매니저 팩토리부터 엔티티 매니저를 생성합니다.
엔티티 매니저란 영속성 컨텍스트에 접근하여 엔티티에 대한 테이터 베이스 작업을 제공합니다.
find() : 영속성 컨텍스트에서 엔티티를 검색하고 영속성 컨텍스트에 없을 경우 데이터베이스에서 데이터를 찾아 영속성 컨텍스트에 저장한다.
persit() : 영속성 컨텍스트를 저장한다.
remove() : 엔티티 클래스를 영속성 컨텍스트에서 삭제한다.
flush() : 영속성 컨텍스트에 저장된 내용을 데이터베이스에 반영한다.
영속성 컨텍스트와 사용시 이점에 대해서는 전 블로그를 참고해주세요
엔티티 설명

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차 캐시 공간
1. 엔티티 생성 (비영속 상태)
Member member = new Member("kim");
2. 영속 상태 전환
entityManager.persist(member);
3. 쓰기 지연(SQL 저장 단계)
-> DB에 반영 X
4. 트랜잭션 커밋 또는 flush
@Transactional
또는
entityManager.flush();
flush는 쓰기 지연 SQL 저장소에 있는 SQL들을 DB로 전송하고 DB와 영속성 컨텍스 상태를 동기화함 -> rollback이 가능해짐
5. 조회 동작(1차 캐시)
entityManager.find(Member.class, id);
5. 변경 감지(Dirty Checking)
member.setName("park");
6. 삭제
entityManager.remove(member);
public interface MemberRepository extends JpaRepository<Member, Long>
내부적으로 EntityManager를 사용하고 데이터 접근 로직을 담당한다.
JpaRepository는 Spring Data JPA에서 제공하는 인터페이스로, EntityManager를 직접 사용하지 않고 CRUD 기능을 수해할 수 있게 해준다. 그 중에서 JpaRepository에 기본 메서드들이 내장되어 있어 Spring Data JPA가 런타임에 구현체를 자동 생성하여 데이터베이스 접근을 처리한다.
findAll()
List<Member> members = memberRepository.findAll();
FindById()
Optional<Member> member = memberRepository.findById(1L);
그 외에도 save(), count(), delete()등의 메서드가 내장되어있다.