대규모 Database를 운영하는 은행계열이나 금융 쪽에서는 트랜잭션이라는
명칭이 심심하지 않게 등장합니다.
또한 DB관리자들이 Mysql의 InnoDB를 사용하는 가장 큰 이유도 이 트랜잭션
이라는 것 때문인데 도대체 무엇인지에 대해 알아보겠습니다.
트랜잭션은 현대의 웹 보안에 있어서 매우 중요한 역할을 차지하며 DB와 JAVA 언어가
데이터를 주고받는 과정에 원자성을 부여하는 수단을 의미합니다.
위의 의미만 가지고는 처음 이 개념을 접하는 사람에게는 잘 이해가 되지 않습니다.
자 그럼 좀더 자세하게 개념에 대해 이해해보겠습니다.
과거에 트랜잭션은 소수의 웹 개발자들끼리 공유하는 기술이었습니다.
굉장히 고급 기술이고 손이 많이 가는 작업이라 트랜잭션이 일반화되지 않았을 때는
비슷한 기술인 프러시저를 더 선호했었던 시기가 있었죠.
물론 아직까지도 트랜잭션보다 프로시져를 선호하는 사람들이 있습니다.
하지만 현대에는 발달된 프레임워크 덕분에 트랜잭션의 이용 방법 자체가 간단해졌고
트랜잭션의 장점이 자연스럽게 부각되면서 JAVA에서만큼은 프러시저보다는 트랜잭션을 많이 선호합니다.
트랜잭션이란 어느 순간 도저히 쿼리 한 줄로는 끝낼 수 없는
구문을 실행해야 하는 경우에 이러한 로직을 처리할 때 필요한 기술입니다.
2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송하고 이 과정에서
어떠한 에러가 발생할 경우 자동으로 모든 과정을 원래 상태로 되돌립니다.
프러시저도 같은 맥락이긴 하지만 트랜잭션과의 차이점은 로직을 JAVA에서 처리하는 게
아니라 DB상에서 처리한다는 점입니다.
과거 프러시저 구현이 더 간편했을 시절에는 많은 웹 애플리케이션이 비즈니스 로직을
JAVA가 아니라 DB상에서 처리하는 게 일반적이었습니다.
아직까지 프러시저를 사용하는 개발자들은 트랜잭션에 비해 프러시저가 빠르다는
장점이 있다고 하지만 서버의 퍼포먼스 향상과 기술 발달로 그 차이는 미미합니다.
다시 한번 간단하게 정리하면 트랜잭션이란
하나 이상의 쿼리에서 동일한 Connection 객체를 공유하는 것
이게 무슨 의미인가 하면 JAVA에서 DB를 연결할 때 java.sql.Connection이란
객체를 이용하여 연결하는데 이 Connection 객체에는 setAutoCommit이라는 메서드가 있습니다.
이 메서드와 연결된 autoCommit 객체는 true란 기본값을 가지고 있으며
한 번의 연결 이후 자동으로 커넥션을 커밋해 종료시켜줍니다.
그런데 트랜잭션을 이용하려면 이 자동 커밋을 false로 바꾸고 manual commit으로 변경해야만 합니다.
즉 개발자가 직접 커넥션에 대해 커밋과 롤백을 해주어야 한다는 뜻입니다.
Commit : 해당 Connection의 요청을 완료하고 특별한 에러가 없다면 DB에 결과 반영
Rollback : 해당 Connection 수행 중 에러가 발생하면 모든 과정을 취소하고 Connection이
수행되기 이전으로 상태를 되돌림
이제는 스프링 트랜잭션 기술, Open소스 등을 이용하면 단 몇 가지의 함수를 통해서도
이 트랜잭션을 구현하고 내부의 동작 구조에 대해서는 개발자는 신경 쓸 필요가 없습니다.
'서버 > 서버이론' 카테고리의 다른 글
[서버] REST API란 무엇인가? (4) | 2022.09.21 |
---|---|
[Server] 리눅스 소켓이란? (7) | 2022.01.13 |
[Server] 로드 밸런싱이란? (0) | 2022.01.03 |
[Server] FCM이란? (1) | 2021.12.12 |
[Server] MQTT 서버란? (0) | 2021.03.09 |
댓글