인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 전파 활용2 - 커밋, 롤백

커넥션을 사용한다는 것

작성

·

32

0

안녕하세요.

강의 자료중에, " MemberRepository는 JPA를 통해 회원을 저장하는데, 이때 JPA는 트랜잭션이 시작된 con1을 사용해서 회원을 저장한다 " 라고 되어있는데요.

이 부분에 대해 영한님께서 "em.persist()를 호출할때 내부적으로 JPA는 트랜잭션이 시작된 con1을 사용한다" 고 하셨는데,

  1. em.persist()를 호출할때, 실제 데이터베이스에 커밋은 아직 하지 않지만 con1을 사용해서 회원을 데이터베이스에 저장하는것인가요?

  1. "LogRepository도 트랜잭션C와 관련된 con2를 사용한다" 라고 강의자료에 나와있는 부분도, 위 내용과 동일한걸까요?

  1. con1과, con2를 사용한다는 개념이 어떤것을 의미하는지 궁금해서 질문드립니다.

감사합니다.

답변 2

0

오리쉐리님의 프로필 이미지
오리쉐리
질문자

질문의 답변에 대해 이해가 안됩니다ㅠㅠ좀 더 자세히 설명 해주실수있을까요?

오리쉐리님의 프로필 이미지
오리쉐리
질문자

아 그냥 단순히 커넥션을 사용한다는것이,

해당 트랜잭션과 관련된 커넥션을 사용한다는것인가요?

0

안녕하세요, 인프런 AI 인턴입니다. 오리쉐리님.

질문해주신 내용을 기반으로, 스프링과 JPA의 트랜잭션 및 커넥션 관리에 대해 설명드리겠습니다.

1. em.persist() 호출과 커밋

em.persist() 메서드를 호출할 때, JPA는 엔티티 매니저를 통해 해당 객체를 영속성 컨텍스트에 저장합니다. 이때 실제 데이터베이스에 커밋되는 것은 아니며, 단지 con1을 통해 트랜잭션 내에서 변경 사항을 준비하는 것입니다. 실제 데이터베이스에 커밋되는 시점은 트랜잭션이 종료되거나 EntityManager.flush()가 호출되었을 때입니다. 스프링에서는 @Transactional 어노테이션을 사용하면 트랜잭션이 자동으로 관리되어, 메서드가 끝날 때 커밋(혹은 롤백)이 진행됩니다.

2. LogRepository의 트랜잭션

LogRepository가 별도의 트랜잭션 C와 관련된 con2를 사용한다고 하신 부분은 특정 로직이 서로 다른 트랜잭션에 의해 독립적으로 처리될 때 발생합니다. 두 트랜잭션이 서로 다른 작업 단위를 가지며, 각각 별도의 커넥션을 통할 수 있습니다. 이는 특히 @TransactionalPROPAGATION.REQUIRES_NEW 같은 옵션을 사용할 때 유용합니다.

3. 커넥션 사용의 의미

con1con2를 사용한다는 것은 각각의 트랜잭션이 별도의 데이터베이스 연결을 통해 독립적으로 관리된다는 것을 의미합니다. 트랜잭션 범위 내에서 동일한 커넥션이 사용되어야 일관성을 유지할 수 있으며, 커넥션이 트랜잭션의 경계를 넘게 되면 해당 커넥션에서 수행된 모든 작업의 안정성을 보장할 수 있습니다.

추가 참고 링크

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오리쉐리님의 프로필 이미지
오리쉐리

작성한 질문수

질문하기