내일배움캠프/TIL

2024 08 22 TIL 한 번 더 엔티티 관련 정리

동성만능크리너 2024. 8. 23. 14:29

개념을 제대로 안 익힌 것인지 새로운 걸 학습할 때마다 머릿속에 있던 개념들이 흐려져가서 다시 정리 

 

엔티티

엔티티는 데이터베이스 테이블에 매핑되는 클래스. 다른 엔티티와의 연관관계, 상태 전이를 관리할 수 있다. 

즉, 데이터베이스 테이블과 일대일로 매핑되는 객체로서, 데이터베이스의 레코드를 자바 객체로 표현한 것. 

선언할 때는 JPA 어노테이션 @Entity로 선언, 각 필드는 테이블의 각컬럼에 매핑됨. 

 

영속성 컨텍스트

엔티티 객체를 관리하는 일종의 '저장소'. 엔티티 객체의 생명 주기를 관리하며, 엔티티와 데이터베이스 사이의 상태를 동기화.

영속성 컨텍스트는 데이터베이스 그 자체가 아니며 일종의 캐시와 같은 역할을 함. 

 

주요 역할
1) 엔티티 저장 : persist() 메서드를 통해 엔티티를 영속성 컨텍스트에 저장하면 영속성 컨텍스트가 엔티티를 관리하고 데이터베이스에 삽입해줌. 

2) 엔티티 조회 : 데이터베이스에서 엔티티를 가져올 때, 영속성 컨텍스트에 엔티티가 있는지 확인하고 있으면 조회를 건너뛰어서 성능을 최적화해줌.

3) 변경 감지 : 관리하는 엔티티의 상태 변화를 감지하고, 트랜젝션이 끝날 때 자동으로 변경 사항을 데이터베이스에 반영해줌. 

4) 동일성 보장 : 같은 영속성 컨텍스트 안에서는 같은 엔티티를 조회하면 항상 동일한 객체를 반환해줌.

 

트랜젝션

데이터베이스 시스템에서 일어나는 작업의 논리적인 단위, 여러개의 작업(쿼리, 명령)을 모아서 하나의 작업 단위로 처리해줌

 

특성

1) 원자성 : 모든 작업이 모두 성공하거나 모두 실패하거나. 하나라도 실패가 뜨면 그냥 전부 롤백시켜버림

2) 일관성 :  트랜젝션의 실행 전과 후의 데이터베이스 상태는 정의된 규칙에 따라 일관성을 가져야 함. 

3) 격리성 : 다른 트랜젝션과 독립적으로 수행되어야 함. 트랜젝션 도중에 다른 트랜젝션에 접근하거나 영향을 받지 않도록 격리됨.

4) 지속성 : 트랜젝션이 성공되면, 영구적으로 반영되어야 함. 

 

엔티티의 상태

1) 신규(new) : 엔티티가 영속성 컨텍스트에 저장되기 전 상태, 아직 영속성 컨텍스트에서도 관리되지 않음. new로 객체는 생성했으나 persist()는 호출하지 않은 상태 

2) 관리 중(managed) : 영속성 컨텍스트에 의해 관리되는 상태 

3) 준영속(detached) : detach(), clear() close()로 엔티티를 더 이상 영속성 컨텍스트에서 관리하지 않는 상태 

4) 삭제(removed): 엔티티가 영속성 컨텍스트에서 삭제된 상태, 데이터베이스에서도 제거됨.

 

https://psvm.kr/posts/tutorials/jpa/4-entity-lifecycle