전산학/SQL

[SQL] 1. 데이터베이스의 기본 개념 (DB, DBMS, 관계형 데이터베이스, SQL, NoSQL)

이신선 2021. 8. 19. 06:30
728x90

개발을 하면서 필요한 기초 지식 중 하나인 Database, 그리고 SQL에 관한 내용을 정리해보려고 한다.

 

아마 실습까지 이어질 것 같은데 나중에 내가 다시 보려고 적는 거긴 하지만,

 

다른 사람들이 봤을 때도 잘 이해가 되도록 적어보려고 한다.

 


0. DB(Database)란?

 

"한 조직의 여러 응용 시스템들이 함께 사용(Shared) 하기 위해 통합(Integrated), 저장(Stored)한 운영 데이터(Operational data)의 집합"이라고 정의하고, "데이터가 2개 이상 모여있으면 DB이다."라고 생각하자. 즉, 데이터가 2개 이상 모여있는 데이터 뭉치라고 간단히 이해하면 되겠다.

 

그럼 여기서 데이터는 뭘까? 나는 처음에는 정보라고 생각했는데, 정보랑 데이터는 다르다고 한다. 어떤 목적을 가지고 수집된 데이터만을 정보라고 부르고, 목적을 가지지 않고 수집된 것을 데이터라고 부른다고 한다.

 

1. DBMS(Database Management System)이란?

 

데이터를 저장할 수 있는 데이터 공간인 DB가 있다고 하자. 그러면 그 DB에 데이터를 넣거나 빼고, 또 원하는 값들을 불러올 수 있어야 할 것이다. 이렇게 DB를 관리할 수 있는 소프트웨어를 DBMS라고 한다.

 

유명한 DBMS로는 Oracle, MySQL 등이 있는데, 상용화되어있는지(돈 내고 써야 하는지) 오픈소스로 되어있는지(공짜인지)로 구분해서 예시를 보면 아래와 같다.

- 상용화: Oracle, Microsoft SQL Server, IBM Db2

- 오픈소스: MySQL, MariaDB, PostgreSQL

 

기존에는 상용화된 DBMS를 많이 사용했는데, 오픈소스로 나온 DBMS들의 성능이 많이 좋아짐에 따라 비용적인 측면을 고려하여 오픈소스로 넘어가는 사례가 많다고 한다.Oracle이 정말 비싸다고 함. 또, 한 시스템에 DBMS를 하나만 쓰는 형태가 아니라 용도에 따라 여러 개의 DBMS를 동시에 붙여서 사용하는 경우도 많다고 한다.

오픈 소스 DBMS인 MySQL을 가장 많이 사용하는 듯 하다.

 

이렇게 많은 종류의 DBMS가 있는데, 그럼 하나하나 전부 다 배워야 할까? 갑자기 처음 보는 DBMS를 사용하라고 하면 어떡하지?라는 걱정이 있을 수 있다. 하지만 모든 DBMS에 공통적으로 적용되는, 일맥상통하는 개념들을 확실하게 익혔다면 새로운 DBMS를 접하는 데 어려움이 크게 없다고 한다.

 

2. 관계형 데이터베이스와 비관계형 데이터베이스, 그리고 SQL

 

데이터베이스는 또 다른 기준을 가지고 두 가지 종류로 나뉜다. 이는 데이터를 어떤 형태로 저장할 것인가의 문제인데, 결론부터 말하자면 관계형 데이터베이스는 표, Table 형태로 데이터를 저장하는 방식이고, 비관계형 데이터베이스는 Graph, Document 등 Table 형태 말고도 다른 형태들로 데이터를 저장하는 방식이다.

 

ID FIRST_NAME LAST_NAME GRADE
1 RICHARD KIM B0
2 RACHEL SEO A0
3 JAMES LEE C+
4 JOHN CHO A-

DB_Class

 

위와 같이 Table 형태로 데이터를 저장하는 방식을 선택한 것이 관계형 데이터베이스(RDBMS, Relational Database Management System)라고 하고, 관계형 데이터베이스에서 사용하는 언어를 SQL(Structured Query Language)라고 한다. 그래서 그런지 관계형 데이터베이스를 SQL 데이터베이스라고도 한다. 여담으로, '관계형'이라는 이름이 붙은 이유는 다음과 같다. 위 테이블에서 ID가 3인 사람의 GRADE를 알고 싶다면 우선 ID 값이 3인 Row를 가져올 것이고, 그 Row의 GRADE 값을 불러올 것이다. 이렇게 서로 관계(row, column)를 가지고 있는 값들을 처리하는 방식이기 때문에 관계형이라는 이름이 붙었다고 한다.내가 말하고도 무슨 말인지 잘 모르겠다

 

관계형 데이터베이스가 아닌 데이터베이스를 비관계형 데이터베이스라고 한다. 그리고 비관계형 데이터베이스 하면 항상 따라 나오는 것이 NoSQL이다. 이는 Not only SQL, 즉 '기존의 SQL과는 다르다'라는 의미로 이름을 붙였다고 한다. 정리하면 비관계형 데이터베이스를 NoSQL 데이터베이스라고도 부르고, 비관계형 데이터베이스에서 사용하는 언어는 Non SQL이다.

 

요즘 굉장히 핫한 MongoDB. NoSQL 중 하나이다.

 

그래서 비관계형 데이터베이스, NoSQL 데이터베이스는 어떤 형태로 데이터를 담는가? 알려진 바로는 Document 기반 데이터베이스, Key-value 저장소, 그래프 저장소, wide 컬럼 저장소 등이 있다고 한다. 즉, RDBMS는 Table 형태로 되어있는 데이터만을 저장하고 다룰 수 있는 반면에, 비관계형 데이터베이스는 이외의 다양한 형태의 데이터들을 담을 수 있다는 말이다. 그러니까 NoSQL 데이터베이스는 Table 형태를 포함하여 더 많은 형태의 데이터를 다루는 것이 가능하다. 정리해서 말하면, NoSQL 데이터베이스는 RDBMS을 기반으로 하면서, 더 다양한 형태의 데이터를 저장하기 위해 확장한 개념이다.

 

SQL 데이터베이스와 NoSQL 데이터베이스의 대표적인 예시로는 아래와 같다.

- SQL : Oracle, PostgreSQL, MySQL, Microsoft SQL Server, SQLite

- NoSQL : Redis, mongoDB, Apache HBase, Apache Cassandra

 

3. SQL은 어떤 식으로 쓰는가?

 

우리가 하나의 DBMS를 선택해 DB를 만들었다고 가정해보자. 처음에는 DB가 비어있는 상태일 것이다. 우리는 이 DB에 새로운 데이터를 추가하거나 수정 또는 삭제를 하고 싶고, 원할 때 필요한 조건에 맞는 데이터들을 불러오고 싶다. 그런 작업을 위해 SQL이라는 특수한 프로그래밍 언어를 사용한다. 각 DBMS 별로 SQL이 있고 사용자는 선택한 DBMS에서 제공하는 SQL을 사용해야 한다. SQL을 어떻게 사용하느냐가 (특히 데이터를 불러오는 작업인 Query를 할 수 있는 SELECT 문) 개발자의 실력을 가른다고 한다. Query를 하는 SQL은 아래와 같은 형태로 작성된다. (아주 간단한 형태이다)

 

SELECT *
FROM   DB_Class
WHERE  GRADE = 'C+';

 

위에서 RDBMS를 소개할 때 사용한 DB_Class에 위 Query를 보내려고 한다. DB_Class라는 Table의 row들 중에 GRADE가 C+인 row 모든 column들을 출력하겠다는 의미이다. GRADE가 C+인 row는 ID가 3번인 row 하나뿐이다. 그러므로 이 Query 결과는 아래와 같을 것이다.

 

ID FIRST_NAME LAST_NAME GRADE
3 JAMES LEE C+

 

SQL은 위와 같이 원하는 조건에 해당하는 데이터들을 불러오거나 Table의 데이터를 추가/수정/삭제할 수 있을 뿐만 아니라, Table을 생성, 삭제하는 등 전체적인 DB 관리를 위해 사용된다.

 


 

이번 포스팅에서는 DB가 무엇인지, DBMS가 무엇인지, 그리고 RDBMS와 NoSQL이 어떻게 다른지 알아보고, SQL이 어떻게 쓰이는지 알아보았다.

 

마지막 부분에 실제로 SQL 문법을 사용하여 Query를 해봤는데, 아직 이해가 안 된다면 그건 당연한 것이다. 아직 배우지 않았으니까. 개인적으로 직접 DBMS를 설치한 후 명령어를 입력해보며 직접 Query를 날려보는 것이 가장 빨리 감을 익힐 수 있는 방법인 것 같다. 그래서 다음 포스팅에서는 Oracle에서 제공하는 DBMS를 이용해 직접 Query를 날려볼 수 있도록 실습 환경을 구축해보려고 한다. 그다음은 아마 SQL 문법을 배워야겠지?

 

 

728x90