SQL 기초1- 데이터베이스와 RDBMS란?
이번 포스팅에서는 데이터베이스에 대한 기본적인 공부를 해보려고 한다.

우선, 데이터베이스가 뭔지부터 알아보자.
데이터베이스(DataBase, DB)
- 다양한 카테고리의 정보를 저장할 수 있는 구조
- 여러 사람에 의해 공유되어 사용될 목적으로 통합되어 관리되는 데이터의 집합
- 즉, 데이터를 저장하는 구조/자료의 모음
- 파일 시스템의 단점을 개선하기 위해 등장
- 단점: 데이터 중복 & 불일치, 공유 제한, 구현 및 유지보수의 까다로움 등
- 장점
- 효율적인 확장: 확장을 통해 대량의 데이터 관리 가능
- 데이터 무결성: 데이터 일관성을 유지하기 위한 기본 제공 규칙 및 조건 존재↑
- 데이터 보안: 모든 데이터와 관련된 개인정보 보호 및 규정 준수 요구사항 지원
- 데이터 분석: 데이터 분석을 통해 비즈니스 의사 결정 가능
데이터베이스 관리 시스템(DBMS, DataBase Management System)
- 다수의 사용자들이 DB 내의 데이터를 접근할 수 있도록 해주는 SW 도구의 집합
- 데이터베이스에 접근하고 관리하기 위해 만들어짐
- 데이터베이스 사용자가 데이터베이스를 생성, 공유, 관리할 수 있도록 함
- 파일 시스템이 가진 문제를 해결하기 위해 만들어짐
- 기능
- 정의, 구축, 조작, 공유, 보호, 유지보수
- 장점
- 자료의 통합성 증진
- 데이터 접근성 용이
- 데이터 통제 강화
- 애플리케이션 프로그램의 개발 및 관리 용이
- 파일 시스템보다는 비교적 보안성이 높음
- 데이터를 계층 or 탐색 방식으로 저장
- 파일 시스템을 사용해 저장하며, 따라서 테이블 간에는 아무런 관계X
- 단점
- 데이터에 대한 많은 보안X
- 정규화 불가능 → 데이터의 높은 중복성 발생 가능
- 종류
- ORACLE, Postgres, Tibero, MySQL, MS-SQL 등
바로 위의 DBMS에 대한 설명을 보면, 테이블 간의 아무런 관계가 있지 않다고 했다. 이러한 점은, 데이터를 관리하는데 있어서 불편함과 단점을 초래한다. 이를 해결하기 위해 테이블 간의 관계성을 주는 관계형 데이터베이스가 등장했다.
관계형 데이터베이스(RDB, Relational DataBase)
- 가장 많이 사용되는 DB의 한 종류
- 관계형 데이터 모델에 기초를 둔 데이터베이스
- 테이블로 이루어져 있으며, 이 테이블은 키와 값의 관계를 나타내는 데이터베이스임
- 모든 데이터를 2차원의 테이블 형태로 구조로 표현 → 행, 열
- 데이터의 종속성을 관계로 표현
- 열(Column): 각각의 열은 유일성을 가짐, 필드(filed). 속성(attribute)
- 행(Record): 관계된 데이터의 묶음, 튜플(tuple)
- 키(Key)
- 하나의 테이블을 구성하는 여러 열 중에서 특별한 의미를 지닌 하나 또는 여러 열의 조합
- 특정 튜플(행)을 식별할 때 사용하는 속성 or 속성의 집합
- 테이블 간 관계를 맺는 데도 사용
- 기본키(PK, Primary Key)
- 메인키로 한 테이블에서 특정 튜플(행)을 유일하게 구별할 수 있는 속성
- 여러 후보 속성 중 하나를 선택하여 테이블을 대표하는 속성
- 테이블 당 오직 하나의 필드에만 설정 가능
- NULL X
- 중복X(= 고유성)
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이어야 함
- 외래키(Foreign Key, FK)
- 어떤 테이블의 기본키(PK)를 참조하는 속성
- 참조하고 참조되는 양쪽 테이블 도메인은 서로 같아야 함
- 참조되는 값이 변경되면 참조하는 값도 변경됨
- NULL O
- 중복 O
- 자기 자신의 기본키를 참조하는 외래키 가능
- 후보키
- 기본키가 될 수 있는 모든 키, 후보키= 기본키 + 보조키(대체키)
- 복합키
- 여러 열을 종합하여 기본키 역할을 할 수 있게 만든 키
- 하나의 열만으로 행을 식별하는 것이 불가능하여 두 개 이상의 열 값을 묶어 함께 사용하여 데이터를 구별
관계형 데이터베이스 관리 시스템(Relational DBMS, RDBMS)
- 관계형 데이터베이스를 생성 및 수정, 관리할 수 있는 SW
- 데이터의 분류, 정렬, 탐색 속도가 비교적 빠름
- SQL 을 사용해 데이터를 다룸
- 작업의 완전성 보장(Transaction)
- 반드시 Schema 규격에 맞춰야 함(유연성X)
- 부하의 분산이 어려움(수직 확장만 가능함)
- 장점
- 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장함
- 관계는 각 데이터를 중복없이 한 번만 저장 가능
- 단점
- 시스템이 커질 경우, 복잡한 쿼리가 만들어질 수 있음
- 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up 만을 지원 → 따라서, 비용이 많이 발생할 수 O
- 스키마로 인해 데이터가 유연하지X
- 스키마의 변경이 발생하면, 번거롭고 어려움
- 종류
- MySQL, SQLite, PostgreSQL, Oracle 등
RDBMS에서는 SQL을 사용해 데이터를 다룬다.
SQL이란 무엇일까?
SQL(Structured Query Language)
- RDBMS에서 데이터를 다루고 관리하는데 사용하는 데이터베이스 질의 언어
- 구조적 쿼리 언어
- 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
- 실행 순서가 없는 비절차적 언어
- SQL은 사용 목적(기능)에 따라서 여러 종류로 나뉨
- 데이터 조작어(DML, Data Manipulation Languague): select/insert/update/delete
- 데이터 정의어(DDL, Data Definition Languague): create/alter/drop
- 데이터 제어어(DCL, Data Control Languague): grant/revoke → 권한 관련
- 트랜잭션 제어어(TCL, Transaction Control Language)
- 데이터 조작어(DML)의 실행/취소/임시 저장시 사용하는 명령어
- commit: 모든 작업 최종 실행
- rollback: 모든 작업 되돌리기
- savepoint: 임시저장/ rollback 저장점 지정
점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가하게 되는데, RDBMS의 단점인 성능을 향상시키기 위해서는 서버의 성능을 향상 시켜야하는 Scale-up의 특징으로 인해 비용 측면에서 많은 부담이 되었다. 이를 해결하기 위해 데이터의 일관성은 포기하되, 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 NoSQL(Not Only SQL)이 등장하게 되었다.
특히, RDBMS와 NoSQL의 차이점이 CS면접에서 자주 출제되니, NoSQL에 대해서도 짚고 넘어가보자.
NoSQL(Not Only SQL)
- SQL만을 사용하지 않는 데이터베이스 관리 시스템(DBMS)을 지칭하는 단어
- 관계형 데이터베이스를 사용하지 않는다는 의미가 아닌, 여러 유형의 데이터베이스를 사용하는 것
- 테이블 간 관계 정의 X → 따라서, 테이블 간 join도 X
- 여러 대의 DB 서버를 묶어서 하나의 DB 구성
- RDB에서 지원하는 data처리 완결성 미보장
- 데이터의 스키마와 속성들을 다양하게 수용 및 동적 정의
- 대부분 Open Source로 제공
- 확장성, 가용성, 고성능, 유연성, 분산형 구조
- 즉, 초고용량 데이터 처리 등 성능에 특화된 목적을 위해, 비관계형 데이터 저장소에, 비구조적인 데이터를 저장하기 위한 분산 저장 시스템
- 단점
- 데이터 중복 발생 가능, 중복 데이터의 변경 → 모든 컬렉션에서 수정 필요
- 명확한 데이터 구조 보장X → 데이터 구조 결정 어려움
- 데이터가 여러 컬렉션에 중복되어 있어서 데이터를 update하는 경우, 느림
- key값에 대한 입/출력만 지원
- 종류
- MongoDB, Redis 등
RDBMS VS NoSQL
참고