2024 08 22 TIL 한 번 더 엔티티 관련 정리
개념을 제대로 안 익힌 것인지 새로운 걸 학습할 때마다 머릿속에 있던 개념들이 흐려져가서 다시 정리
엔티티
엔티티는 데이터베이스 테이블에 매핑되는 클래스. 다른 엔티티와의 연관관계, 상태 전이를 관리할 수 있다.
즉, 데이터베이스 테이블과 일대일로 매핑되는 객체로서, 데이터베이스의 레코드를 자바 객체로 표현한 것.
선언할 때는 JPA 어노테이션 @Entity로 선언, 각 필드는 테이블의 각컬럼에 매핑됨.
영속성 컨텍스트
엔티티 객체를 관리하는 일종의 '저장소'. 엔티티 객체의 생명 주기를 관리하며, 엔티티와 데이터베이스 사이의 상태를 동기화.
영속성 컨텍스트는 데이터베이스 그 자체가 아니며 일종의 캐시와 같은 역할을 함.
주요 역할
1) 엔티티 저장 : persist() 메서드를 통해 엔티티를 영속성 컨텍스트에 저장하면 영속성 컨텍스트가 엔티티를 관리하고 데이터베이스에 삽입해줌.
2) 엔티티 조회 : 데이터베이스에서 엔티티를 가져올 때, 영속성 컨텍스트에 엔티티가 있는지 확인하고 있으면 조회를 건너뛰어서 성능을 최적화해줌.
3) 변경 감지 : 관리하는 엔티티의 상태 변화를 감지하고, 트랜젝션이 끝날 때 자동으로 변경 사항을 데이터베이스에 반영해줌.
4) 동일성 보장 : 같은 영속성 컨텍스트 안에서는 같은 엔티티를 조회하면 항상 동일한 객체를 반환해줌.
트랜젝션
데이터베이스 시스템에서 일어나는 작업의 논리적인 단위, 여러개의 작업(쿼리, 명령)을 모아서 하나의 작업 단위로 처리해줌
특성
1) 원자성 : 모든 작업이 모두 성공하거나 모두 실패하거나. 하나라도 실패가 뜨면 그냥 전부 롤백시켜버림
2) 일관성 : 트랜젝션의 실행 전과 후의 데이터베이스 상태는 정의된 규칙에 따라 일관성을 가져야 함.
3) 격리성 : 다른 트랜젝션과 독립적으로 수행되어야 함. 트랜젝션 도중에 다른 트랜젝션에 접근하거나 영향을 받지 않도록 격리됨.
4) 지속성 : 트랜젝션이 성공되면, 영구적으로 반영되어야 함.
엔티티의 상태
1) 신규(new) : 엔티티가 영속성 컨텍스트에 저장되기 전 상태, 아직 영속성 컨텍스트에서도 관리되지 않음. new로 객체는 생성했으나 persist()는 호출하지 않은 상태
2) 관리 중(managed) : 영속성 컨텍스트에 의해 관리되는 상태
3) 준영속(detached) : detach(), clear() close()로 엔티티를 더 이상 영속성 컨텍스트에서 관리하지 않는 상태
4) 삭제(removed): 엔티티가 영속성 컨텍스트에서 삭제된 상태, 데이터베이스에서도 제거됨.