어제 트레이너님이 오셔서 잠시 질문을 했다 Service객체에서는 @Transactional 어노테이션을 조건 반사느낌으로 강의에서는 사용을 해라 라고 했었던 걸 저번주 강의에서 어렵풋이 들었던 기억이 있었는데 왜 그럴까?
@Transactional 트랜잭션이 뭘까? 마카오뱅크에서 많이 보던 거래.... 아니다. 컴퓨터 용어에서 transaction은 이런 뜻이다.
데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 유사한 시스템이란 트랜잭션이 성공과 실패가 분명하고 상호 독립적이며, 일관되고 믿을 수 있는 시스템을 의미한다.
뭐 일단 정의는 이렇고 일단 핵심은 transaction이란 데이터 관리 시스템이란 것이다. 그리고 트랜잭션이란 데이터 관리 시스템을 사용하는 이유는 완전성을 보장하기 때문이다. 여기서 완전성이란 무엇일까?
은행의 계좌이체 시스템을 예로 들어 보자 다음은 간략하게 계좌이체의 과정이다.
- 데이터베이스에서 A의 은행계좌잔고 값을 읽어온다.
- A의 계좌에서 B의 계좌로 10000원을 이체를 한다.
- A의 잔고 값에서 10,000을 감소시킨다.
- 데이터베이스 에서 B의 은행계좌잔고 값을 읽어온다.
- B의 잔고 값을 10,000 증가시킨다.
- A의 계좌잔액을 데이터베이스에 기록한다
- B의 계좌잔액을 데이터베이스에 기록한다
이런 일련의 과정이 아마 있을 것이다. 그러면 여기서 3번 과정을 처리하고 4번과정을 실행을 할려다가 알 수 없는 오류가 발생했다고 치자 그러면 어떻게 될까? A의 계좌잔액은 1만원이 그냥 공주분해가 되버리고 B의 계좌에는 입금 처리가 안될 것이다.
한마디로 돈 삭제 버그가 생긴것...
이런 상황이 발생하지 않기 위해서 Transaction이라는 데이터베이스 시스템을 사용하는 것이다. 아까 말했던 완전성이란 위에 있는 계좌이체의 과정을 하나로 묶는 다는 것이다. 1,2,3,4,5,6,7의 과정을 독립적으로 보는 것이 아니라 하나의 과정으로 처리를 한다는 것이다.
만약 5번에서 오류가 발생하면 다시 1번의 상태로 돌아가서(RollBack) 처리를 하게 만드는 목적이다.
@Transactional 어노테이션을 클래스에서 선언을 하면 해당 클래스의 모든 메소드들에 기본값으로 적용이 되고 메소드에 개별적으로 사용을 할 수 도 있다.
어쨌든 이렇게 간략하게 알게 되긴 했는데... 어제 트레이너님이 모르는 키워드를 찾는 방법에 대해서 생각해봤는데
1. 일단 베이스는 공식문서..(영어....ㅎㅎ)를 먼저 본다.
2. 공식문서는 솔직히 굉장히 어렵게 적혀있다. 블로그에서는 해당 키워드의 예시나 예제만 본다.
3. command + 좌클릭으로 어떻게 생겨먹은 친구인지 한 번 본다.
4. 실험을 해보자(자꾸 안하게 되네.. 블로그에 있는 예제를 따라 쳐보기라도 하자)
'TIL' 카테고리의 다른 글
TIL-220902 굳이가 학습에서는 중요하다 (0) | 2022.09.02 |
---|---|
TIL-220901-폭풍코딩?.. (1) | 2022.09.01 |
TIL-220830-주중에는 따라치기 금지 (0) | 2022.08.30 |
TIL-220829- 반복과제 왜 이렇게 오래걸렸나 (0) | 2022.08.29 |
메가테라 10주차 주간회고 (0) | 2022.08.28 |