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

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

SJ님의 프로필 이미지
SJ

작성한 질문수

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

Hello JPA - 애플리케이션 개발

트랜잭션

작성

·

198

0

안녕하세요. 이건..그냥 궁금해서 여쭤보는건데요

 

우리가 트랜잭션을 걸지않아도 데이터베이스에서 내부적으로 알아서  트랜잭션 개념을 가지고있다고하면 

저희가 그럼 트랜잭션을 선언해서 할 필요성이 있을까용 ?

답변 1

0

안녕하세요, SJ 님! 공식 서포터즈 codesweaver 입니다.

데이터베이스는 테이블의 로우 별로 트랜잭션을 관리합니다. 그러나 각 쿼리들 간의 관계를 알 순 업습니다.

만약 은행에서 A가 B에게 천원을 이체 한다고 하면 다음과 같은 쿼리가 발생할텐데요.

1) A, B 계좌 및 잔고 조회

2) A 계좌 천원 차감

3) B 계좌 천원 증가

 

데이터베이스는 여러 사람이 동시에 계좌/잔고 테이블에 접속할때 문제(동시성 문제)를 트랜잭션으로 관리할 순 있으나 1), 2), 3) 의 프로세스가 '하나의 작업'으로 처리되어야 한다는 사실은 알 수 없습니다. (하나의 작업이란 건, 1), 2), 3) 중 단 하나의 작업이라도 실패하면, 모든 작업을 실패로 처리한다는 뜻입니다. 원자성이라고도 합니다)

 

그래서 애플리케이션에서도 트랜잭션 단위로 프로세스를 묶을 수 있다면 매우 유용합니다. 

데이터베이스는 보통 모든 쿼리가 실행된 직후 자동으로 커밋 을 하도록 되어있는데요,

애플리케이션은 이 자동 커밋 설정을 제어하며 모든 프로세스의 원자성을 구현합니다.

 

감사합니다.

SJ님의 프로필 이미지
SJ

작성한 질문수

질문하기