21/09/08 TL. 데이터베이스의 기본 기능과 종류
- -
데이터베이스 첫걸음 chapter 1.
🍉 데이터베이스의 기본 기능
🥥 데이터의 검색과 갱신
데이터베이스의 가장 중요한 기능은 원하는 데이터를 찾는 검색이다. 키워드를 통해 검색을 수행할 수단으로 관련 데이터를 추출해낼 수 있어야 한다.
🍑 넓은 의미에서 갱신은 등록/수정/제거
데이터베이스는 새로운 데이터를 등록하고 기존 데이터를 수정하며 불필요한 데이터를 제거할 수 있어야 한다. 이 세가지 기능을 통틀어 갱신 이라고 한다. 혹은 기존 데이터 수정 만을 의미할 때도 있다.
🍑 데이터 포맷에 유의한다
데이터베이스를 조작할 때 가장 중요한 것은 데이터를 어떤 포맷(형식)으로 관리하는가, 검색이나 갱신에서 효율적인가 등의 문제이다. 예를 들면 고유성(Uniqueness)를 준수해야 한다 등이 있다.
🍑 처리 성능에 유의한다
검색이나 갱신에서 중요한 문제로 성능이 있다. 따라서 검색/갱신 성능을 어떻게 향상할 것인가 하는 주제는 데이터베이스에서 영원한 숙제 중 하나이다.
🥥동시성 제어
데이터베이스는 동시에 복수의 사용자로부터 검색이나 갱신 처리를 받는다. 이때 문제 되는 것이 '갱신의 무결성을 어느 정도로 보장하는가?'이다.
예를 들어 A와 B가 파일을 공유할 때 A가 데이터를 수정하려할 때 B도 같은 데이터를 수정하려 한다. 그 때 예상되는 동작은 대략 다음 중 하나이다.
- 최초로 파일을 연 사람이 파일을 열고 있다면 다음 사람은 파일을 열 수 없다.
- 최초로 파일을 연 사람이 파일을 열고 있다면 다음 사람은 파일을 읽기 전송으로밖에 열 수 없다.
- 모두 파일을 열 수 있고 나중에 수행된 쪽의 갱신이 반영된다.
🍑 괴로운 트레이드오프의 관계
복수의 사용자가 동시에 데이터베이스를 공유하고 이용하려고 한다면 데이터를 갱신하는 상황에 대한 제어를 필요로 한다. 1의 경우 A에게 좋지만 B에겐 좋지 않다. 3의 경우 B에게 좋지만 A에겐 좋지 않다. 이처럼 어떠한 갱신에 대한 제어가 누구에겐 좋지만 다른 누구에겐 불편한 경우 트레이드 오프 관계 라고 한다.
이처럼 복수 사용자에 대한 갱신을 조절하기 위한 기능을 DB에서 2번째로 중요한 기능인 동시성 제어 또는 배타 제어 라고 한다. 실제 데이터베이스에서는 1, 2를 기준으로 한 동시성 제어가 수행되는 경우가 많다.
3과 같은 방식을 Dirty Write라고 하며, 일반적으로 데이터 무결성 관점에서 기피하는 경향이 있다.
🥥 장애 대응
데이터베이스에 요구되는 세 번째 중요 기능은 '장애에 강할 것'이다. 즉, '잘 부서지지 않고 부서지더라 하더라도 복원할 수 있을 것'을 요구한다.
🍑 데이터 소실 문제의 대책
데이터 소실 사건은 모두 데이터베이스에 보존된 데이터가 어떤 원인으로 소실되고 복원 또한 되지 않는 경우에 발생한다. 이에 대비하려면 데이터베이스의 설계와 구축에서 제대로 된 대책을 취하는 것이 중요하다.
- 데이터 다중화 : 데이터를 한 곳이 아닌 여러 곳에 분산해서 유지하는 방법을 말한다. '예방책'이라고 할 수 있다.
- 백업 : 데이터 소실이 발생했을 때 데이터를 복원하는 방법을 말한다. '사후대책'이라고 할 수 있다.
🍑 왜 데이터 소실 사건이 끊이지 않는가
엔지니어가 항상 서비스 레벨 과 비용 이라는 트레이드오프의 딜레마로 고민하기 때문이다. 즉, 알고는 있지만 돈이 없는 상황 때문이다.
🥥 보안
데이터베이스에 요구되는 기본 기능의 마지막은 보안 이다. 즉, 데이터베이스에 보존된 데이터를 어떻게 숨길 것인가이다. 하지만, 사용자가 데이터베이스를 의식하는 일은 거의 없다. 실제로도 데이터베이스는 사용자로부터 가능한 보이지 않게 설계되고 있다. 그 이유는 다음과 같다.
🍑 이유 1 : 사용자는 서버를 의식할 필요가 없다.
사용자가 시스템을 사용하면 직접 조작하는 것은 어디까지나 클라이언트와 그 위에서 동작하는 프로그램 뿐이다. 서버의 데이터베이스나 소프트웨어를 직접 조작하는 일은 없다.
- 클라이언트 : 사용자가 직접 사용하는 단말기. PC, 태블릿, 스마트폰 등을 말한다.
🍑 이유 2 : 데이터베이스는 기밀성이 높다.
데이터베이스에 들어있는 데이터는 기밀성이 높아 일반에 공개할 수 없는 내용이 상당수 포함돼있다. 따라서 개발자는 되도록 사용자가 데이터베이스에 접근할 수 없도록 이용제한을 걸고 싶다. 그러나 이런 보안의 강도는 편리함과 간편함 같은 사용자 편의성과 트레이드오프 관계가 있어서 균형잡힌 설계가 어렵다.
🥥 데이터베이스의 종류
🍑 계층형 데이터베이스
조직도, 전체 구조도와 같이 계층 구조로 데이터를 관리하는 데이터베이스이다.
🍑 관계형 데이터베이스
2차원 표 형식으로 데이터를 관리하는 데이터베이스이다. 현재 가장 주류이다.
🍑 객체지향 데이터베이스와 XML 데이터베이스
각각 '객체'와 'XML'이라는 형식으로 데이터를 관리하는 데이터베이스이다. 틈새시장에서 기반을 쌓고 있는 정도이다.
🍑 NoSQL 데이터베이스
Not Only SQL. SQL 뿐만 아니라 다른 것이 더 있다는 의미이다. 관계형 데이터베이스에 있는 기능 일부를 버려 성능(처리 속도)을 높인다. 대량의 데이터를 고속으로 처리해야 하는 웹 서비스와 잘 맞아 최근에 자주 이용된다.
- SQL : 관계형 데이터베이스를 만들기 위한 언어이다.
SQL 첫걸음 chapter 1-2
🍉 데이터베이스
데이터 : 컴퓨터 안에 기록되어 있는 숫자를 말한다.
데이터베이스 : 데이터의 집합을 말한다. HD나 SDD 등 비휘발성 저장장치에 저장한다.
데이터베이스 관리 시스템 : DBMS. Database Management System. 데이터베이스를 효율적으로 관리하는 소프트웨어를 말한다.
🥥 DB와 DBMS
DBMS와 같은 전용 소프트웨어가 필요한 이유는 다음과 같다.
- 생산성 : 데이터 검색, 추가, 삭제, 갱신과 같은 기본 기능을 DBMS가 제공하기 때문에 비용 측면에서 효율적이다.
- 기능성 : 데이터베이스를 다루는 기능을 많이 제공한다. 복수 유저의 요청에 대응하거나, 대용량 데이터를 저장하고 고속으로 검색하는 기능을 제공하기도 한다. 데이터베이스 관리 기능을 유저가 확장할 수도 있어 유연하게 시스템을 개발할 수 있다.
- 신뢰성 : 여러 컴퓨터를 두고 소프트웨어를 통해 클러스터를 구성하고 로드밸런싱해서 스케일 아웃할 수 있기 때문에 많은 요청에 대해 정확한 데이터를 제공할 수 있다. 또한 데이터베이스의 데이터를 꺼내거나 넣는 기능을 이용해서 간단하게 백업할 수 있다.
🥥 데이터베이스를 조작하는 언어 SQL
SQL 명령의 종류는 다음과 같다.
- DML : Data Manipulation Language. 데이터베이스에 데이터를 조작할 때 사용한다. SQL의 가장 기본이 되는 명령셋이다.
- DDL : Data Definition Language. 데이터를 정의하는 명령어이다. 데이터베이스 객체(obejct) 라는 데이터 그릇을 만들어 데이터를 관리하며, 이 같은 객체를 만들거나 삭제하는 명령어이다.
- DCL : Data Control Language. 데이터를 제어하는 명령어이다. 트랜잭션을 제어하는 명령과 데이터 접근권한을 제어하는 명령이 포함돼있다.
🍉다양한 데이터베이스
🥥 데이터베이스 종류
DBMS는 데이터 저장 방법에 따라 몇 가지로 분류할 수 있다. 오래된 순서로 다음과 같은 DBMS가 있다.
🍑 계층형 데이터베이스
폴더나 파일 등의 계층 구조로 데이터를 저장하는 방식의 데이터베이스이다. HDD나 DVD 파일 시스템을 이러한 계층형 데이터베이스라고 할 수 있다.
🍑 관계형 데이터베이스
행과 열을 가지는 표 형식 데이터(2차원 데이터)를 저장하는 형태의 데이터베이스이다. 엑셀 시트와 유사하며 SQL 명령어를 통해 데이터를 조작할 수 있다.
🍑 객체지향 데이터베이스
객체 그대로를 데이터로 저장하는 데이터베이스를 말한다.
🍑 XML 데이터베이스
XML 형석으로 기록된 데이터를 저장하는 데이터베이스를 말한다. XQuery라는 전용 명령어를 사용한다.
🍑 키-밸류 스토어(KVS)
키-밸류 꼴로 데이터를 저장하는 데이터베이스이다. NoSQL에서 파생됐으며, 열 지향 데이터베이스라고도 불린다.
🥥 데이터베이스 제품
🍑 Oracle
오라클에서 개발한 RDBMS이다. 현재 가장 많이 쓰이는 RDBMS 중 하나로, 사실상 표준이라고 해도 무방하다. 관계형 모델을 객체 관계형 모델로 확장하여 복잡한 비즈니스 모델을 관계형 데이터베이스에 저장할 수 있다. 여러 유형의 스키마 객체를 지원한다. ex) 테이블, 인덱스
- 객체 관계형 데이터베이스 관리 시스템 : ORDBMS. 사용자 정의 유형, 상속 및 다형성과 같은 객체 지향 기능을 구현하는 RDBMS를 말한다.
🍑 DB2
IBM에서 개발했다. 시장 점유율이 낮다. 워크로드의 특성에 맞게 시스템에 최적화될 수 있다. 다양한 기능을 구현할 수 있고 데이터 압축 기술이 좋기 때문에 대형화된 데이터를 다루는 데 최적화 되어있다.
🍑 PostgreSQL
오픈소스 커뮤니티가 개발했다. 무료 소프트웨어이다. 실험적인 기능이 포함되어 있거나 독특한 구조를 가지기도 한다. 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있어 하나의 프로그래밍 언어처럼 기능을 구현할 수 있다.
🍑 MySQL
오픈소스 커뮤니티에서 개발됐다. 경량 데이터베이스에서 시작됐지만 현재는 기능이 확장되었다. 매우 빠르며 확장 가능하다. 사용하기 쉽다.
🍑 SQLite
오픈소스 커뮤니티에서 개발됐다. 임베디드 시스템에서 자주 쓰이는 작은 RDBMS이다.
🍑 SQL SERVER
MS에서 개발했다. Microsoft Azure Cloud의 일부이다.
🍑 Maria DB
MySQL 개발자에 의해 만들어졌으며 오픈소스를 유지하도록 보장했다. 애플리케이션에서 데이터를 구조화한 정보로 변환한다. 빠르게 확장 가능하며 강력해서 다용도로 사용할 수 있다. MySQL에 비해 성능적인 부분에서 70%가량 향상되었다. GIS(Geographic information System)와 JSON 기능을 포함한다.
🥥 SQL의 방언과 표준화
모든 RDBMS에서 SQL을 사용할 수 있지만, 각 데이터베이스 제품마다 통용되는 고유 방언이 있다. 예를 들어 Oracle이나 SQL Server에서는 DELETE 뒤 FROM을 생략해도 되지만, 다른 곳에서는 구문 에러를 발생시킨다. 현재는 SQL 표준화에 참여한 덕에 방언이 많이 줄어들었다.
'TL' 카테고리의 다른 글
21/09/12 TL. 자바스크립트 - 함수(1) (0) | 2021.09.12 |
---|---|
21/09/11 TL. 객체 리터럴, 원시 값과 객체의 비교 (0) | 2021.09.12 |
21/08/09 TL. db 리플리케이션 vs 클러스터링. GTID (0) | 2021.08.09 |
21/04/15 TL. OPTEE (0) | 2021.04.16 |
21/04/04 TL. FSB를 이용한 공격 (0) | 2021.04.04 |
소중한 공감 감사합니다