ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DB란 무엇인가
    @ 16. 1 ~ 17. 1/네트워크 프로그래밍 2017. 1. 4. 17:45

    데이터 베이스 : 여러가지 업무에 공동으로 필요한 데이터를 유기적으로 결합하여 저장한 집합체, 데이터를 효율적으로 처리하기 위하여 개발된것으로 같은 데이터가 중복되는 문제를 없앨 수 있으며..업무가 확대되어도 새로 파일을 준비할 필요가 없다는 장점이다..궁시렁궁시렁..


    사전적 요소는 저렇고..

    그 내용을 쉽게 접근하여 처리하고 갱신할 수 있도록 구성된 데이터의 집합체이다.

    결국 데이터(자료)를 모아둔 것이라고 한다.


    수많은 기능들 중에서도 특히 다수의 사용자가 동시에 플레이 하는 MMORPG의 경우를 위해서 가장 중요한 기능이 바로 트랜잭션의 처리이다.

    트랜잭션은 데이터베이스의 완정성 혹은 무결성을 보장하는 기능으로..일련의 여러작업을 하나의 단위로 처리할 수 있게 해주는 기능을 말한다.


    트랜잭션 처리의 4대 특성 ( acid)

    http://www.thisisgame.com/webzine/series/nboard/212/?series=39&n=46458

    데이터베이스 시스템은 사용자가 데이터베이스의 완전성 유지를 확신하도록 만들기 위해서 트랜잭션 기능을 제공합니다.

    1. 원자성(Automicity)

      - 트랜잭션 관련 작업들이 모두 수행되었는지 아니면 모두 실행이 안되었는지를 보장하는 특성이다.

      - 이 원칙이 안지켜지면 1:1 거래간 (단순히 아이템과 게임머니와의 거래를 생각하면된다..) 한쪽이 피해를 본다.

    교환 트랜잭션 시작 (begin transaction TRADE)

     

    ① 카제란의 인벤토리에서 샤프롱을 지운다.

    ② 지크프리트의 인벤토리에 샤프롱을 넣는다.

    ③ 지크프리트의 인벤토리에서 5천만 머니를 지운다.

    ④ 카제란의 인벤토리에 5천만 머니를 넣는다.

     

    교환 트랜잭션 완료 (commit transaction TRADE)

     

    위의 4가지 연산을 전부 성공해야만 트랜잭션은 성공인 것입니다만약 이중 하나만 실패를 하더라도전부 실패로 돌리고원상태로 되돌아 가게 됩니다.(롤백이라고 부릅니다)

    서비스 중이던 모 게임에서 일어났던 일로창고의 역할을 하는 은행에 돈을 보관하는 과정에서 트랜잭션의 원자성이 지켜지지 않아 은행에 돈은 보관이 됐지만인벤토리에 있던 돈은 줄지 않던 버그가 발생했습니다.

     

    이런 예상치 못했던 돈 복사 버그가 며칠 동안 발생하면서 게임 내에 엄청난 인플레이션 현상이 일어났던 적이 있습니다.

     

    결국 은행에 돈을 보관하는 일련의 과정 중 은행에 돈을 넣는 데이터베이스 연산은 정상적으로 이루어졌지만인벤토리 내의 캐릭터 소지 금액에서 차감하는 데이터베이스 연산이 정상적으로 이루어지지 않아서 발생한 문제였습니다두 개의 작업을 하나의 트랜잭션으로 처리하지 않았기 때문에 원자성이 지켜지지 않아서 생겼던 문제로 파악이 되었죠.


    2. 일관성(Consistency)

      - 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성있는 데이터 베이스 상태로 유지하는 것을 의미한다.

    원자성을 설명하면서 예로 들었던 카제란의 소지금액이 최대치에 달했다거나인벤토리에 여유공간이 없다는 것과 같은 제약조건이 있다면 해당 트랜잭션은 전체적으로 중단되어야 한다는 것을 의미합니다.

     

    또한완료된 트랜잭션이라면 앞서 설명한 제약조건에서 자유롭다는 것을 보장해야 한다는 것입니다제약조건에 위배되지 않았음에도 불구하고 실패를 하거나 제약조건에 위배됨에도 불구하고 트랜잭션이 성공하는 일은 있을 수 없다는 것을 데이터베이스 시스템이 항상 보장해 줘야 한다는 것이죠.

     

    다시 한번 강조하지만트랜잭션은 작업의 단위이지 작업 내의 각각의 실행단위가 아닙니다교환은 트랜잭션이며교환 도중에 일어난 각각의 실행 단위는 데이터베이스 연산으로 트랜잭션을 구성하는 부품과 같은 요소들입니다.


    3. 독립성(Isolation)

      - 트랜잭션을 수행할 때 다른 트랜잭션의 연산 작업이 낄어들지 못하도록 보장하는 것을 의미한다.

    예를 든 교환 트랜잭션의 처리 중에 바닥에 있는 돈을 줍는다고 해서 이 트랜잭션이 교환 트랜잭션 작업 중간에 끼어들어서는 안 된다는 것입니다이 부분에서 게이머는 실제로 DB를 처리하는 단위를 느끼지 못할 가능성이 높습니다. 

     

    교환 도중에 다른 행위를 클라이언트 단위에서 막을 수도 있고실제로 교환 트랜잭션을 처리하는 것은 교환 트랜잭션을 완료하고 나서 할 수도 있기 때문입니다.


    하지만실제 데이터베이스 연산 작업을 수행함에 있어서 교환 트랜잭션을 처리하는 도중 다른 어떠한 트랜잭션도 중간에 끼어들지 않아야 합니다.


    사실 이 부분은 데이터베이스 시스템의 성능에 미치는 영향이 크다 보니 각 제품마다 어느 정도 유연하게 대처하고 있는 상황이고이 부분을 얼마나 효율적으로 구현하였는가와 사용자(개발자)가 얼마나 잘 사용하느냐에 따라 초당 처리 가능한 트랜잭션의 수(TPS : Transaction per second)가 결정됩니다온라인게임의 성능에 직결되는 중요한 요소라도 할 수 있죠


    4. 지속성(Durability)

      - 성공적으로 수행된 트랜잭션은 영원히 반영이 되어야 함을 의미합니다.

    이건 굳이 따로 설명할 필요가 없을 정도인데요교환 트랜잭션이 성공적으로 완료되고 난 후에 갑자기 교환이 취소되거나 해서는 안되고교환이 성사된 상태로 유지되어야 한다는 것입니다한 번 성공한 트랜잭션의 결과는 온전히 반영되고다른 어떠한 요소에 의해서 변질이 되어서는 안 된다는 것입니다.

     

    여기까지 트랜잭션의 4대 특성이라고 불리는 ACID에 대해서 알아보았습니다. 사실 꽤 어려운 이야기라서 제대로 전달이 안 됐으면 어떻게 하나 걱정이 앞섭니다.

     

    하지만 정말 중요한 것이 트랜잭션이고, 트랜잭션을 얘기하면서 ACID를 빼놓을 수 없어 약간은 무리하게 내용을 진행할 수 밖에 없었습니다.

     

    최소한 게임 내에서 동시다발적으로 일어나는 사건들은 하나의 논리적인 데이터베이스 조작(연산)의 단위인 트랜잭션으로 처리되지 않으면반영된 데이터들이 정확하다고 보장할 수 없다는 것입니다.





    예전에는 데이터베이스의 부하보다 네트워크의 부하가 더 큰 걸림돌이었을 당시 실제로 데이터베이스가 견디지 못할 부하가 발생할 만큼의 사용자를

    하나의 서버에 받아들이지 조차 못했으므로 큰 고민이 아니였다.

    (수많은 유저를 하나의 서버에서 받지 못했다고..)


    하지만 IOCP 기술등이 나오면서 서버에서 수용할 수 있는 동시접속자의 수가 비약적으로 늘었다.

    이렇게 되니 수많은 유저들이 동시에 발생시키는 데이터베이스의 부하를 걱정해야하는 수준까지 왔다.



    '@ 16. 1 ~ 17. 1 > 네트워크 프로그래밍' 카테고리의 다른 글

    http 프로토콜 요청 / 응답  (0) 2016.12.08
    네트워킹 기초  (0) 2016.12.05
Designed by Tistory.