inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

트랜잭션 커밋시 영속 컨텍스트, 그리고 트랜잭션 커밋과 종료의 차이

483

gdf4013

작성한 질문수 3

0

트랜잭션이 커밋이 일어나면 영속 컨텍스트가 어떻게 되는지 궁금해서 질문드립니다.

 

비슷한 질문이 있어 해당 글의 답을 보니, "커밋되는 시점에는 영속성 컨텍스트를 삭제한다."라고 되어있습니다.

그런데 어떤 블로그 글에서는 커밋되더라도 영속 컨텍스트의 1차 캐시는 남아있고, 쓰기 지연 SQL 저장소의 내용은 사라진다고 되어있습니다.

Q1. 정확히 어떻게 되나요? 그리고 "컨텍스트의 삭제"의 정확한 의미가 이해가 되지않아서 이 부분도 궁금합니다!

Q2. 영속 컨텍스트 자체가 삭제되는거라면, 커밋될 때 영속 컨텍스트의 삭제와 엔티티 매니저를 close()할 때 영속 컨텍스트가 닫히는것의 차이가 무엇인지 궁금합니다!

Q3. 그리고 트랜잭션 커밋과 종료의 차이가 무엇인지 궁금합니다.

찾아보니 "COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하는 것이다"라고 봤는데, 워딩의 차이이지 결국 같은 의미인가요? 아니면 커밋하지않고 트랜잭션이 종료될 수 도 있는건가요?

감사합니다.

java jpa

답변 1

0

y2gcoder

안녕하세요. gdf4013님, 공식 서포터즈 y2gcoder입니다.

Q1. 정확히 어떻게 되나요? 그리고 "컨텍스트의 삭제"의 정확한 의미가 이해가 되지않아서 이 부분도 궁금합니다! (트랜잭션 커밋시 영속성 컨텍스트의 동작)

=> 정확하게는 트랜잭션 커밋 시점에 영속성 컨텍스트는 닫히게(비활성화) 된다고 이해하시는 게 맞는 것 같습니다. 트랜잭션 커밋 시 Dirty Checking을 통해 변경된 엔티티 상태를 데이터베이스에 반영하면서 쓰기 지연 SQL 저장소를 비우고, 트랜잭션 범위를 벗어나면 해당 영속성 컨텍스트는 비활성화되었다가, 동일한 스레드에서 새로운 트랜잭션을 열면 새로운 영속성 컨텍스트가 활성화됩니다. 이전 영속성 컨텍스트가 비활성화되는 것을 삭제로 볼 수도 있을 것 같습니다!

 

Q2. 영속 컨텍스트 자체가 삭제되는거라면, 커밋될 때 영속 컨텍스트의 삭제와 엔티티 매니저를 close()할 때 영속 컨텍스트가 닫히는것의 차이가 무엇인지 궁금합니다!

=> 삭제에 대해서는 위에서 답변해드린 것을 참고해주시면 감사하겠습니다. EntityManager를 close()한다면 해당 영속성 컨텍스트는 완전히 종료되게 됩니다. 그리고 그 안에서 영속 상태이던 엔티티들은 준영속 상태가 됩니다. 그런 의미에서 트랜잭션 커밋 후 트랜잭션 범위를 벗어났을 때와 엔티티 매니저를 close()했을 때는 동일한 의미라고 저는 이해하고 있습니다.

Q3. 그리고 트랜잭션 커밋과 종료의 차이가 무엇인지 궁금합니다.

=> 트랜잭션 종료가 좀 더 큰 의미라고 생각합니다. 트랜잭션 커밋이 트랜잭션 내 수행된 모든 작업들이 데이터베이스에 성공적으로 반영되었다는 것을 의미한다면, 그 반대로 트랜잭션 내 수행하던 작업 중 문제가 생겨 롤백하면서 트랜잭션이 종료되는 경우도 있습니다 :) 저는 그래서 트랜잭션의 성공적인 종료를 커밋, 실패한 종료를 롤백으로 이해하고 있습니다!

 

감사합니다.

실무 조언 관련 질문입니다.

0

41

1

H2데이터베이스 파일 생성

0

51

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

49

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

48

1

JPQL 메소드와 락

0

52

1

Delivery @OneToOne

0

57

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

89

2

UnsupportedOperationException 발생

0

82

3

H2 Database 연결이 안됩니다.

0

87

2

연관관계 매핑 질문드립니다.

0

82

2

h2데이터베이스 실행오류

0

105

2

persistence.xml

0

103

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

77

1

영속성 컨텍스트

0

62

1

JPA 프록시

0

89

1

Native Query와 MyBatis

0

63

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

82

1

임베디드 타입 예시 코드 관련 질문

0

112

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

90

3

인텔리제이 패키지 커서 단축키 질문

0

106

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

136

1

양방향 연관관계 시 연관관계 주인을 설정하는 이유

0

68

1

임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.

0

95

1

데이터베이스가 초기화되는 것 같아요

1

177

2