DB - 01 데이터베이스 기초
Database란?
DataBase는
데이터를 저장하고 조회하는 프로그램
이다. 은행에서 고객의 정보를 담아두고 조회하고, 학교에서 학생들의 성적을 저장하고 조회하는 것처럼 일상에서 쉽게 접할 수 있다.
DB의 사용 목적
데이터를 저장하고 조회하는 것이 데이터베이스의 본질이다.
그렇지만 우리가 보편적으로 사용하는 폴더를 이용한 파일 구조도 이러한 기능을 할 수 있는데 굳이 데이터베이스를 사용하는 이유가 있을까? 라는 의문이 들 수 있다. 사람들은 왜 데이터베이스를 쓰는 걸까?
바로 데이터베이스의 데이터 관리 능력때문이다.
데이터베이스는 SQL이라는 언어를 통해서 데이터를 사용자의 목적에 맞춰 디테일하게 제어하고 관리할 수 있다.
데이터를 한 저장소에 통합하여 저장하여 목적에 맞는 데이터들을 효율적으로 관리할 수 있으며, 중복되거나 누락되는 데이터를 방지할 수 있고, 또 여러 사용자가 실시간으로 저장소에 담긴 데이터를 쉽게 사용할 수 있는 장점이 있다.
[ 최적화 ]
사용자들은 데이터베이스의 신속하고 쉽게 데이터를 관리할 수 있기 때문에 데이터베이스를 이용한다. 그래서 데이터베이스는 최선의 속도로 데이터를 사용할 수 있도록 설계되었으며 속도와 공간상의 최적화를 위해서 여러 규칙들이 만들어져있음을 알 수 있을 것이다.
[ 데이터의 일관성 ]
또 여러 사람들이 동시에 접근하여 실시간으로 사용하는 저장소인 만큼, 잘못된 정보가 사용자에게 전달되면 큰 문제가 된다. 이런 문제를 방지하기 위한 데이터베이스의 특징과 개념에 대해서도 알아보자.
DBMS(Database Management System)란?
DBMS란 데이터베이스를 관리하는 프로그램이다. 데이터베이스에서 사용자가 목적에 맞춰 쉽게 데이터를 저장하고, 검색하고, 수정하고, 삭제할 수 있도록 해준다. DBMS는 사용 목적과 환경에 따라서 적절하게 이용하면 기능의 측면에서 천차만별이기에 각각의 장단점을 알고 있으면 좋다.
트렌잭션
DBMS에서 데이터베이스의 상태가 변화하는 일련의 과정을 '트렌잭션'이라 한다. 쉽게 예를 들어보자면 A의 잔고에서 1000원을 빼와서 B의 잔고에 1000원을 더하는 총 과정을 하나의 트렌잭션이라 볼 수 있다.
트렌잭션의 동작과정
트렌잭션의 동작은 다음과 같다.
- 트렌잭션 시작
- 작업수행(조회,저장,수정,삭제)
- 데이터의 일관성 검사
- 커밋: 트렌잭션이 성공적으로 이루어졌을 시, 결과를 데이터베이스에 영구히 저장
- 롤백: 트렌잭션이 실패 시, 트렌잭션이 이뤄지기 이전의 상황으로 돌아간다.
트렌잭션의 주요속성(ACID)
트렌잭션은 데이터를 안전하고 일관되게 유지하기 위하여 아래와 같은 속성을 지닌다.
- 독립성(Atomicity) : 모든 작업이 완전히 수행 or 전혀 수행x, 트렌잭션 과정에서 문제가 생기면 롤백, 성공시 커밋한다
- 일관성(Consistency) : 트렌잭션 이전의 데이터와 이후의 데이터 모두 데이터베이스의 상태가 일관된 규칙을 따른다
- 고립성(Isolation) : 트랜잭션이 수행되는 동안 동시에 실행되는 다른 트랜잭션의 영향을 받지 않는다
- 지속성(Durability) : 성공적으로 과정이 완료되면 결과는 영구반영
데이터의 속성
조금 CS적인 지식이지만 트렌잭션을 깊게 이해하기 위해서 데이터 베이스의 시스템에 대한 속성에 대해서 잠시 살펴보자.
- 데이터의 일관성(Consistency) : 시스템 내의 데이터가 모든 노드나 위치에서 동일한 값을 가지는 것을 의미한다
- 데이터의 무결성(Integrity) : 데이터가 정확하고 일관된 상태를 유지하는 것, 일관성,신뢰성,정확성을 유지하기 위해서 여러 규칙과 제약조건이 존재한다.
- 데이터의 신뢰성(Reliability) : 데이터가 신뢰할 수 있고, 시스템이 장애나 오류 상황에서도 데이터를 잃지 않고 복구할 수 있는 능력을 의미. 이는 백업, 복제, 장애 복구 메커니즘 등등이다.
- 데이터의 가용성(Availability) : 사용자가 언제든지 데이터에 접근하고 사용할 수 있는 능력을 의미. 분산시스템과, 아키텍쳐 관련
- 데이터의 안전성(Security) : 데이터에 대한 접근을 통제하고 보호하는 것. 데이터의 암호화, 인증 및 접근 제어 등등
이후에 sql을 이용하여 데이터를 다루다보면 여러 오류가 발생할 것이다. 데이터의 무결성을 유지하기 위해서 시스템적으로 만든 규칙에 위반하여 많은 오류가 발생할 것이니 그때 그때 정확한 원인을 기록해보자.
DBMS의 역사
SQL을 다루기에 앞서 DBMS의 역사와 종류를 살펴보면 이후에 공부함에 있어서 관점을 넓게 볼 수 있을 것이다. 하나씩 살펴보자.
앞서 말한바와 같이 과거에는 파일시스템을 사용했지만 이전의 버전과 구분이 어렵고 관리가 어려워 데이터 베이스라는 개념이 탄생했다.
네트워크 DBMS -> 계층 DBMS -> 관계 DBMS -> 객체 DBMS -> NoSQL DBMS 순으로 데이터 베이스의 모델이 발전해왔으며 최근에는 관계형 DBMS, NoSQL을 위주로 많이 사용한다.
( 많은 DBMS가 생겼지만 관계형 DBMS를 아직도 왜 가장 많이 쓸까? )
각 DBMS 마다 데이터를 어떻게 저장하고 관리할지에 대한 방법에 대한 차이점이 있다.
- 계층형 모델 : 파일 시스템의 디렉토리 구조, 자식 레코드가 하나의 부모 레코드만을 가질 수 있어 다른 자식 레코드로 이동하기 위해서는 부모를 거쳐가야하는 불필요함이 존재
- 네트워크형 모델 : 자료간 link를 망형태로 연결하여 자유롭게 연결 but 구조가 복잡
- 관계형 데이터모델 (Relational DBMS) : 테이블 형태로 데이터를 저장하여 행(레코드)과 열(필드)로 구성된다.
표 형태로 데이터를 저장하고 SQL(Structured Query Language)를 이용하여 데이터를 조작 - 객체 지향형 모델 : 객체를 캡슐화하여 객체 단위로 데이터를 보관
DBMS의 종류
- 오라클 : 데이터베이스의 아버지, 대규모 트랜잭션 처리와 데이터 웨어하우징에 사용
- MySQL : 오픈소스이고 사용이 쉬워, 다양한 운영체제를 지원
- Microsoft SQL : 데이터 분석 도구 지원
- PostgreSQL : 복잡한 쿼리와 대규모 데이터베이스 관리, 객체-관개형 DBMS
- MongoDB : 실시간 분석, 대규모 데이터 처리, NO SQL로 문서 지향적 구조
- Redis(Remote Dictionary Server) : 고성능 key-value 저장소
캐싱,세션관리 게임리더보드 등 실시간 앱에 주로 사용
인메모리(*) 데이터 스토어로, 매우 빠른 읽기와 쓰기가 가능하다
(웹 소캣이란?) - Elasticsearch : 분산 검색 엔진, 데이터분석 및 로그 데이터 집계에 사용
ELK(Elasticsearch,Logstash,Kibana) 스택으로 널리 사용
ELK를 통해 CPU사용량을 확인하며 트레픽 관리
분산이란 용어는 빅데이터와 연관 - Apache Hive : Hive는 Hadoop위에 구축된 데이터 웨어하우스 시스템, 데이터의 분산에 용이
대규모 데이터 세트의 저장, 퀴리 및 분석에 사용
(데이터 샤딩이란?)
이후에 각 DBMS 별로 장단점과 sturcture를 정리하며 프로젝트를 진행할 때 적합한 데이터베이스를 사용해보자.