[뒤끝팁] 트랜잭션 처리를 통해, 효율적인 DB 쓰기 하는 법

안녕하세요, 개발자님! 
함께 뛰는 게임 서버, 뒤끝입니다 🙋‍♀️

오늘은 데이터 베이스(DB)를 쓰기 처리하는 방법에 대해 이야기해보려고 합니다. 데이터 베이스(DB)를 쓰기 처리하는 방법은 아래 두 가지로 나누어지는데요😊

1️⃣ 테이블을 개별 호출 후 쓰기 처리
2️⃣ 테이블을 일괄 호출 후 트랜잭션 처리

아마 트랜잭션 처리 방식이 익숙지 않은 분들도 계실 것 같아요. 트랜잭션 처리는 한 번에 여러 테이블을 처리하는 것입니다. 잘 활용하면 🌟요금 절감의 포인트가 되기도 하니, 필요하시다면 주목해 주세요!

먼저 DB를 쓰기 처리하는 각 방법의 특징에 대해 알아보고, 그중 트랜잭션 처리를 어떤 부분에 활용하면 효과적일지 함께 알아보겠습니다.

목차

1. DB를 쓰기 처리하는 두 가지 방식

(1) 테이블을 개별 호출 후 쓰기 처리

첫 번째는 가장 기초적인 DB 처리 방식이에요. 이 방식으로 쓰기 처리를 할 경우, 아래 이미지와 같이 쓰기를 원하는 데이터 테이블을 개별적으로 호출하고, 호출한 만큼 쓰기가 진행됩니다.

그리고 비용은 호출 및 쓰기의 대상이 되는 테이블의 개수쓰는 데이터의 용량에 비례하여 부과됩니다.

예를 들어 세 번의 쓰기 처리를 진행할 경우(이미지와 동일), 총 3회에 해당하는 테이블 호출 비용과 쓰기 처리한 데이터의 총용량에 해당하는 쓰기 비용이 나올 것으로 예상할 수 있어요.  

개별 호출 후 쓰기 처리 로직

(2) 테이블을 일괄 호출 후 트랜잭션 처리

두 번째는 한 번에 여러 가지 테이블을 처리하는 DB 처리 방식입니다. 
이 방식으로 쓰기 처리를 할 경우, 아래 이미지와 같이 쓰기를 원하는 데이터 테이블들을 한번에 일괄 호출하고, 이에 대한 트랜잭션 처리를 통해 쓰기가 진행됩니다.

트랜잭션 처리를 통한 쓰기는 한 번에 다수의 테이블을 호출하는 만큼, 기본 처리 비용이 상대적으로 비쌉니다.(1번 처리 방식의 두 배) 그렇지만 단 1회의 호출로 필요한 모든 테이블을 불러올 수 있으니, 활용하기에 따라 요금을 절약할 수 있습니다.

그리고 비용은 1회의 테이블 호출 비용과, 쓰는 데이터의 총 용량에 비례하여 부과됩니다. 

일괄 호출 후 트랜잭션 처리 로직

💡 간단 정리! 트랜잭션
▪ DB를 하나씩 개별 호출, 쓰기 처리하는 방식이 아닌, 한 번에 호출, 쓰기 처리하는 방식
▪ 주로 쓰기 처리한 데이터의 용량으로 요금이 결정됨 (처리할 DB의 개수에 비교적 자유로움)

2. 트랜잭션 처리를 잘 활용하는 방법

결론부터 빠르게 말씀드리겠습니다 💨

첫 번째로 소개 드린 ‘개별 호출 후 쓰기 처리’ 방식은 테이블의 개수가 적은 간단한 데이터나 용량이 큰 데이터 처리에 유리합니다. 반대로 ‘테이블을 일괄 호출 후 트랜잭션 처리’ 방식은 테이블의 개수가 많은 데이터 처리에 유리합니다.

그 이유는 뒤끝의 데이터 처리 과정을 통해 알 수 있습니다. 

💡 뒤끝의 데이터 처리 과정 : 뒤끝은 데이터 처리를 위해, 먼저 데이터를 호출한 후 쓰기 처리를 진행합니다. 이 과정에서 발생하는 비용은 데이터 호출 비용 + 쓰기 처리 비용으로 구성됩니다.

그리고 앞서 안내드린 내용과 같이, 트랜잭션 처리 방식을 활용하지 않을 경우 (= 개별 호출 후 쓰기 처리 방식을 활용할 경우) 테이블의 개수만큼 호출하고 쓰기를 처리합니다. 반대로 트랜잭션 처리 방식을 활용할 경우에는 한 번에 많은 수의 테이블을 호출한 후 처리하게 됩니다.

🚨 이때’간단한’ 혹은 ‘용량이 큰’ 데이터의 기준은 무엇일까요?

모든 프로젝트의 DB 구조와 로직이 같을 수 없기 때문에, 이 부분은 직접 고민해 보시는 과정이 필요합니다. 물론 호출 수에 비해 각 데이터 테이블의 용량이 명확히 작다면 트랜잭션 처리를 활용하실 수 있겠습니다. 하지만 모호하다면 꼭 직접 계산해 보시고, 적절한 지점에서 개별 호출과 트랜잭션 처리 방식을 적절히 섞어 쓰시는 것을 추천드립니다. (🌟비용 최적화의 지름길

계산하실 때에는 뒤끝 가격 정책 페이지(호출 당 단가)를 이용해 주시고, 필요하다면 기술 지원 요청도 가능하니 참고 부탁드립니다😊

3. 게임 개발에는 실제로 이렇게 활용돼요!

마지막으로 실제 게임 개발에서 트랜잭션 처리를 하면 좋은 부분들을 공유드리면서 마치겠습니다.

☀ 이럴 때 좋아요! 

많은 종류의 데이터를 한 번에 저장할 때 = 많은 수의 테이블에 쓰기를 하는 경우 (캐릭터 최초 생성 시 보유 재화와 경험치, 진행도 등을 저장하는 경우)

🌧 이럴 때 좋지 않아요…

용량이 큰 데이터를 쓰기 하는 경우 (트랜잭션은 테이블 호출 비용이 저렴하나, 용량 대비 호출 비용은 그렇지 않기 때문에)

3

댓글