데이터 베이스(DATABASE)란?

  자료를 많이! 모은것!

  하지만 자료라고 해서 아무런 연관없는 자료를 그냥 모으면 그건 유용하지 않다.

  데이터 베이스에 있는 자료는 서로 연관성이 있는 자료들이어야 한다. 

  게임이라면 플레이어 데이터 플레이어 아이템 유저 패스워드 같은 식으로 데이터를 연관시켜 모아놓은 것을 의미한다.


데이터 베이스 관리시스템(DBMS : DATABASE MANAGEMENT SYSTEM)

  데이터 베이스와 더불어 많이 쓰이는 용어로 데이터 베이스 관리 시스템이라는 용어가 있다. 데이터베이스와 데이터 베이스 관리 시스템은 다른 개념을 가리킨다.

  DB는 말그대로 데이터의 집합 DBMS는 그것을 편하게 관리하기 위한 시스템이다.


  심플하게 설명하면다음과 같다.

  DB는 창고다. 

  DBMS는 그곳에서 일하는 사람들

  창고는 그 자체로 그냥 물건을 보관하고 물건을 정리하고 빼고 추가하고 하는 일을 하는 것은 창고에서 일하는 사람들이 하는 일이다.


응용(또는 사용자) 프로그램(DBMS : DATABASE MANAGEMENT SYSTEM)

  그런데 각 기관에서 데이터베이스를 관리하려면 데이터베이스 관리 시스템에 있는 프로그램을 활용하여, 그 프로그램등에 맞춰서 또다른 관리 프로그램을 만들어야 한다.

  게임을 생각해보면 유저 패스워드가 있고 그 데이터를 넣고 뺄 수 있는 DBMS가 있다고 해서 유저패스워드를 통한 로그인 시스템까지 지원해주는 것은 아니다.

  그것은 또 우리가 만들어야 한다. 이를 사용자 프로그램이라고 한다.


데이터 베이스 시스템이 파일관리보다 좋은 점.

  컴퓨터가 처음 나왔을 때는 운영체제 개념이 나오면서 파일 체제 개념도 따라서 나오게 되었다. 그런데 파일체제 많으로는 복잡한 일을 하는데 어려움이 있었다.

  그런 상황에서 거대한 데이터를 파일처리 시스템만으로 관리하지 못하므로 그를 지원하는 기능을 갖춘 DBMS가 1960대 부터 등장하기 시작했다.

  오늘날 많이 쓰고 있는 관계형(relational) 데이터베이스는 1970년대부터 나오기 시작하였다.

  그럼 파일 처리와 데이터베이스 시스템의 차이에 대해서 본격적으로 알아보자.


  1) 자료의 중복(data redundancy)와 자료의 불일치(data inconsistency)

  파일 처리 접근 방식을 쓰면, 꼭 같은 정보가 여러군데 되불이 될 수 있다. 보기를 들어 게임에서 아이템데이터가 변경되었다고 치자. 그런데 유저 아이템데이터는 유저의 세이브파일에도 들어 있고 게임의 로직 아이템파일에도 들어있으며, 각 NPC데이터 파일에도 들어있다. 그럼 결국 세가지 파일을 다 바꿔야 할것이다. 만약 하나라도 이 데이터가 바뀌게 된다면 세개의 파일을 모두 바꿔줘야 한다. 혹은 그러다 어떤 파일을 바꾸지 못하는 경우가 생기는데 이런경우 자료 불일치라고 한다.

  또한 파일로 관리할시 이렇게 세개의 파일이 모두 아이템 데이터를 가지는 경우가 생기는데 이는 같은 자료를 중복적으로 가지게 되는 경우이다.


  2) 자료처리의 불편함.

  파일 처리 접근 방식은 보통 고급언어에서 응용프로그램을 짜야하는데 이는 고급언어에 대한 훈련이 필요하다. 그런데 데이터베이스는 거진 공통적인 명령을 사용하고 고급 프로그래밍 언어보다 데이터를 처리하는데 필수적인 기능만을 모아놓았다. 프로그래밍언어로 파일안의 데이터를 처리하기 위한 명령어는 복잡하거나 상황이나 언어 플랫폼에 따라서 달라지는 반면 데이터베이스는 훨씬 편하게 사용이 가능하다.


  3) 자료의 고립(data isolation) 문제

  게임 아이템을 모아놓은 아이템데이터 NPC의 능력을 모아놓은 파일 월드세팅 파일 등이 따로 존재하는데 이를 모아서 세이브파일을 만든다고 치면 같은 자료가 3개의 파일에 따로 생기는 것이다. 그 결과 자료 불일치가 생기는 경우가 생긴다.

  
  4) 자료의 무결성(data integrity)

  자료의 무결성이란 자료에 잘못이 없어야 한다는 것을 말하는데, 자료의 불일치를 포함하여 여러가지 경우에 자료의 무결성이 깨질 수 있다.

  책에 따라서 자료의 불일치와 자료의 무결성에 풀이가 다를수 있는데 일반적으로 자료의 불일치는 자료의 무결성을 깨게 된다. 하지만 자료의 불일치가 아니더라도 자료의 무결성을 깨는 경우가 많다. 

  예를 들어 자료의 불일치와 다르게 게임의 퀘스트데이터파일은 한군데에만 저장되어 있더라도 그것을 처리하는 응용프로그램의 로직이 내부응용프로그램에서 다섯군대가 있다고 친다면 그 로직들마다 자료의 무결성을 보장하는 코드를 짜야 한다 또한 퀘스트파일이 변경된다면 그것을 처리하던 다섯개의 로직에서 그에 대한 예외처리를 모조리 해줘야 한다.

  예를 들면 이런것이다. 퀘스트 파일안에 퀘스트가 해결되었다면 0 퀘스트가 진행중이라면 1 퀘스트를 완료했다면 2라고 정했다. 그런데 갑자기 분기 퀘스트가 생기면서 1000의 자리는 퀘스트 실행중 뒤의 3자리를 분기가 생기는 퀘스트의 번호를 표기하기로 했다 1001 이런식으로 말이다. 이제부터 퀘스트 내부내용 데이터는 무조건 4자리의 정수여야 한다.

  그렇다면 결국 다섯개의 로직을 모두 그에 맞춰서 변경해야 한다 하지만 데이터 베이스에서는 무를 위한 제약을 한곳에서만 처리해주면 된다.


  5) 원자성(atomicity)

  플레이어가 NPC와 거래를 하면 게임은 다음과 같은 처리를 거친다.

  0. 플레이어의 아이템을 건네줄 수 있는지 확인

  1. 플레이어의 아이템 데이터를 삭제.

  2. 플레이어의 아이템 데이터 저장.

  3. NPC의 아이템 데이터 를 수정.

  4. NPC의 아이템 데이터 저장.

  그런데 게임 도중 3번 까지만 처리하고 갑자기 정전이 되어 게임이 종료가 됬다고 치자.

  다시 와보니 플레이어의 아이템만 사라지고 NPC는 아무런 변화가 없다. 퀘스트 아이템 이었는데!

  하지만 데이터 베이스에서는 트레젝션(=거래, transaction)이라는 개념을 도입하여 다음과 같은 과정이 생기지 않도록 한다.


  6) 동시접근 문제(concurrent acces anomalies)

  어떤 파일을 동시에 2개의 게임 쓰레드에서 수정하려고 한다면 파일 처리 방식에서는 자료의 값이 잘못 될수가 있다.

  하지만 데이터 베이스에서는 동시 접근 제어(concurrency control) 기능이 있어서, 동시접근 하면 순서를 지켜서 처리하도록 보장한다.


  7) 보안문제(security problems)

  파일처리 접근 방식에서는 자료에 대한 보안에 어려움이 있다 수많은 에디터를 통해서 파일을 에디팅하는 모습을 볼 수 있을 것이다. 하지만 서버와 DB를 통한 관리는 자료를 모두 한군데에 저장하고 사용자의 권한등을 자세히 정함으로서 자료의 보안을 쉽게 유지할 수 있다.

Posted by JJOREG