• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

같은 커넥션을 유지해야 한다 - 질문

23.06.19 00:11 작성 조회수 411

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
"같은 커넥션을 유지해야 한다" 라는 말이 잘 이해가 가지 않았습니다.

트랜잭션 2개가 각각 시작되더라도 -> 문제 되는 트랜잭션을 각각 롤백해주면 되는거 아닌가? 라고 생각했습니다.

 

<1> 그런데 예제 코드를 보면 connection.rollabck() 가 사용되고 있고 (아래 스크린샷 첨부)-> 이는 즉 비지니스 로직 전에 열린 "하나의 커넥션" 에서만 문제가 생겼을 경우에 - 그 트랜잭션만 롤백이 가능하다 - 로 이해가 되었습니다.

 

즉, 유지가 되는 하나의 트랜잭션 이후에 다른 트랜잭션은 롤백이 되지 않는다 (적어도 코드상으로는)

그렇기 때문에 하나의 커넥션을 유지하면서 - 그 커넥션에 의한 트랜잭션으로 비지니스 로직을 묶어야 한다

로 일단 이해하였습니다 (적어도 코드적으로)

 

<2> 또한 논리적으로 생각을 해 보아도, 작업의 단위를 "하나의 트랜잭션으로 묶어야" -> h2 데이터베이스로 실습을 한 것처럼, 문제가 생겼을 때 전부 롤백이 가능하므로 -> 하나의 트랜잭션으로 묶기 위해 , 그 하나의 커넥션만을 유지해야 한다 로 이해하였습니다.

 

제가 맞게 이해한 건지 , 놓친 부분은 없는지 확인 부탁드립니다.

 

항상 좋은 강의, 상세한 질문 답변 감사드립니다.스크린샷 2023-06-19 오전 12.06.47.png

답변 2

·

답변을 작성해보세요.

0

안녕하세요. khd1692님

트랜잭션을 각각 사용하게 되면 트랜잭션A에서 작업을 수행하고 또 트랜잭션 B에서 작업을 수행할 수 있는데요. 이때 트랜잭션 B가 롤백되더라도 트랜잭션 A의 작업은 커밋될 수 있습니다.

이렇게 되면 데이터의 원자성에 문제가 발생하겠지요?

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.21

안녕하세요, 인프런 AI 인턴이에요.

  1. 질문 내용으로 보았을 때, 강의 내용과 관련된 질문인 것 같습니다.
  2. 인프런의 질문 게시판과 자주 하는 질문을 확인해 보았을 때, 해당 질문과 관련된 내용은 없는 것 같습니다.
  3. 질문 잘하기 메뉴얼을 읽어보셨는지 확인해주시면 감사하겠습니다.

같은 커넥션을 유지해야 한다는 말은, 하나의 커넥션에서 여러 개의 트랜잭션을 수행할 때, 모든 트랜잭션이 동일한 커넥션을 이용하도록 유지하는 것을 의미합니다. 하나의 커넥션에서 여러 트랜잭션을 수행하는 경우에는, 모든 트랜잭션이 동일한 커넥션을 이용하기 때문에 여러 개의 트랜잭션 중 하나에서 문제가 발생할 경우 해당 커넥션 전체에 대해 롤백이 이루어집니다.

따라서, 비지니스 로직을 실행하기 전에 하나의 커넥션을 열고 모든 트랜잭션을 이 커넥션 내에서 수행하는 것이 좋습니다. 이렇게 하면, 모든 트랜잭션의 작업 내용이 하나의 커넥션에 모두 반영되기 때문에, 여러 개의 트랜잭션 중 하나에서 문제가 발생하더라도 롤백이 해당 트랜잭션에 대해서만 이루어지는 것이 아니라, 전체 커넥션에 대해서 이루어집니다.

감사합니다.