데이터베이스의 기본 기능

1. 데이터의 검색과 갱신(CRUD)

  • 데이터베이스의 가장 중요한 기능은 검색

넓은 의미에서 갱신은 등록, 수정, 제거

  • 데이터베이스는 새로운 데이터 등록, 기존 데이터 수정, 불필요한 데이터 제거가 가능해야 함
  • 등록, 수정, 제거 3가지 기능을 통틀어 갱신이라고 함
  • 검색, 등록, 수정, 제거 중에서 하나라도 빠진다면 데이터베이스의 역할을 하지 못함

데이터 포맷에 유의

  • 데이터베이스를 조작할 때 데이터를 어떤 포맷(형식)으로 관리하는가,
    검색이나 갱신에서 효율적인가
  • 데이터베이스 관리에 고유성(Uniqueness)은 기초적인 규칙의 하나
    • ex) 동성동명이 있더라도 2명이 다른 사람이라는 것을 알도록 관리해야함

처리 성능에 유의

  • 검색이나 갱신에 성능이 중요한 문제
    • 어느 정도의 빠르기로 처리 가능한가

2. 동시성 제어

  • 데이터베이스는 동시에 복수의 사용자로부터 검색이나 갱신 처리를 받음
  1. A가 파일을 열고 있을 때 B는 r/w 불가능
  2. A가 파일을 열고 있을 때 B는 r만 가능 -> 읽기 전용(Read Only)
  3. A가 파일을 열고 있을 때 B는 r/w 가능 -> 나중에 수행된 쪽의 갱신이 반영

3과 같은 경우를 더티 쓰기(Dirty Write) -> 데이터 무결성 관점에서 기피

괴로운 트레이드오프의 관계

  • 데이터베이스를 복수의 사용자가 동시에 공유하고 이용하려면 같은 데이터를 갱신하는 상황에 대한 제어가 필요함
  • 트레이드오프 관계 : 어느 사용자에게는 괜찮은 갱신 제어가 다른 사용자에게는 불편한 상황
  • 동시성 제어(= 베타 제어) : 복수 사용자의 갱신을 조절하기 위한 기능
괴로운 트레이드오프의 관계
ex) B입장에서는 1이 행위 제한이 가장 심하고, 3이 가장 느슨
하지만 A입장에서는 3은 마음대로 갱신되니 위험하고, 1은 방해를 안받아서 가장 좋음

3. 장애 대응

  • 데이터베이스는 장애에 강할 것
    • 부서지기 어렵고 부서졌다고 하더라도 복원할 수 있어야함

데이터 소실 사건

  • 데이터베이스에 보존된 데이터가 어떤 원인으로 소실되고 복원되지 않는 경우
    • ex) 하드웨어가 부서진 경우, 하드웨어 전원이 안들어 오거나 데이터가 파손된 경우
  • 금융기관의 거래 이력 or 기업의 고객 정보가 사라져버리면 큰 사회문제 발생

데이터 소실 문제의 대책

1. 데이터 다중화 -> 예방책

  • 데이터를 한 곳이 아니라 복수의 장소에 분산해서 유지하는 것
  • 데이터가 완전 소실 되는 것을 막는 방법

2. 백업 -> 사후대책

  • 데이터가 소실 되었을 때 데이터를 복원하는 방법

데이터 소실 사건이 끊이지 않는 이유

  • 서비스 레벨과 비용이란 트레이드오프의 딜레마로 인해 -> 돈이 문제

4. 보안

  • 데이터베이스에 보존된 데이터를 어떻게 숨길 것인가

데이터베이스를 사용자로 부터 보이지 않게 설계하는 이유

1. 사용자는 서버를 의식할 필요가 없음

  • 사용자는 서버의 시스템 내용이나 구성을 몰라도 다양한 편리한 서비스 사용 가능
  • 사용자는 클라이언트만 조작하면 되고 서버에 배치된 데이터베이스 등의 소프트웨어를 직접 조작하는 일 없음
    • 만약 가능하다면 이거는 보안 구멍으로 시스템의 결함

2. 데이터베이스는 기밀성이 높음

  • 데이터베이스에 들어있는 데이터는 기밀성이 높아서 공개할 수 없는 내용이 상당수 포함됨
    • ex) 계좌번호와 주소, 신용카드 번호와 비밀번호 등

데이터베이스의 종류

  • 데이터를 보존하는 형식에 따라 5가지로 구분

계층형 데이터베이스

  • 역사상 최초로 등록, 가장 오래된 형태의 데이터베이스
  • 컴퓨터에 계층 구조로 저장되어 있는 폴더와 파일 형태
  • 오래된 방식이지만 아직 이용되고 있음

관계형 데이터베이스

  • 2차원 표 형식으로 열(Column)행(row)으로 설계된 데이터베이스
  • 많은 데이터를 키(key)관계라는 연결 고리로 연결하여 데이터를 조회하고 가공하는 방식
  • 현재 가장 많이 쓰이는 방식

객제지향 데이터베이스

  • 객체형식으로 데이터를 관리하는 데이터베이스
  • 자바(Java)와 C++ 같은 객체 지향 언어의 객체 지향 프로그래밍(object-oriented programming)에 적합한 데이터베이스

XML 데이터베이스

  • XML문서 형식으로 데이터를 관리하는 데이터베이스

NoSQL 데이터베이스

  • NoSQL = Not only SQL
  • 관계형 데이터베스의 일부 기능을 버려서 성능(처리 속도)을 높임
  • 대량의 데이터를 고속으로 처리하는데 주로 이용 -> 웹서비스

느낀점

  • 데이터베이스의 기본 기능으로 4가지를 알게 되었다. 검색과 갱신에서 데이터의 고유성이 있어야하고 검색 처리 성능이 빨라야하고 다수 사용자들로 부터 DB의 동시제어가 가능해야 하며 장애가 생겼을 경우를 대비해서 데이터를 여러 군데에 분산시켜 저장을 해두거나 백업을 해서 데이터를 복원할 수 있도록 해야합니다. 마지막으로 DB에는 민감한 정보들이 있어서 보안을 잘 유지해야한다.
  • DB를 설계할 때 트레이드오프 상황에 많이 만나게 되는거 같은데 구체적으로 어떤 상황이고 그럴때면 어떻게 대처해야될지 고민해보게 되었다.

reference

데이터베이스 첫걸음
모두의 SQL