MySQL을 시작하면서..
처음 MySQL을 배우려고 하는 이유는 백엔드든 AI든 데이터를 이용하고, 데이터를 전처리하고 가공할 줄 알아야 한다고 전해 들었기 때문이다.
많은 RDBMS 중 왜 하필 MySQL을 배우는지는 그냥 단순히 예전부터 많이 가장 많이 들어왔고 그렇기 때문에 가장 많이 쓰이지 않을까 해서이다..
MySQL을 배우기 이전에 MySQL이 뭔지?? 또 더 이전에 데이터베이스와 데이터베이스를 관리하는 DBMS에 대해 알아가면서 자연스럽게 MySQL에 대해 알아보려 한다.
데이터베이스(DB) :
데이터의 집합을 의미하며, 데이터의 저장공간 자체를 의미하기도 한다. 특히 MySQL에서는 데이터베이스를 자료가 저장되는 디스크 공간 (주로 파일로 구성되어 있는)으로 취급한다.
DBMS(DataBase Management System) :
데이터베이스를 관리, 운영하는 역할을 하는 소프트웨어의 개념
또한 여러명이 사용자나 응용 프로그램이 DBMS가 관리하는 데이터에 동시에 접속하고 데이터를 공유하게 되므로 DBMS에서 데이터가 집중적으로 관리되고 있을 것이다.
MySQL이 대표적인 DBMS 중 하나로
MySQL, MariaDB, Oracle, SQLite 등등 여러 회사의 DBMS 제품이 있다.
데이터베이스(DB) 와 DBMS의 특징
1. 데이터의 무결성 :
DB 안의 데이터는 어떤 경로를 통해 저장되었던 간에 데이터에 오류가 있어서는 안된다.
이러한 무결성의 특징을 지키기 위해 DB는 제약 조건(Constraint)이라는 특성을 가진다.
2. 데이터의 독립성 :
DB의 크기를 변경 혹은 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램에는 절대 영향을 끼쳐서는 안된다.
즉 서로 독립적인 관계여야 한다. (의존적 X)
3. 보안 :
DB안의 데이터에 아무나 접근할 수 있는 것이 아니라 데이ㅓ를 소유한 사람이거나 데이터에 접근 허가된 사람만 접근할 수 있어야 한다.
또한 사용자의 계정에 따라 다른 권한을 가짐!!
4. 데이터 중복의 최소화 :
동일한 데이터가 여러개 중복되어서 저장되면 안된다.
5. 응용 프로그램 제작 및 수정이 쉬움 :
기존에 존재하는 파일시스템을 사용할 때 각각 파일의 포매셍 맞춰 개발해야하는 응용 프로그램을 DB를 이용하면 통일된 방식으로 응용 프로그램 작성이 가능해지게 된다. 따라서 유지보수가 쉬워진다.
6. 데이터의 안정성 향상 :
대부분 DBMS가 제공하는 백업, 복원 기능을 제공하기 때문에 데이터에 문제가 생겼을 경우 복원 복구할 수 있다.
DBMS 유형 :
DBMS의 유형은 여러가지가 존재한다. 우리가 배울 MySQL은 어떤 한 유형의 DBMS에서 쓰인다.
1. 계층형 DBMS (Hierarchical DBMS) :
각 계층이 트리 형태를 가지며 1:N 관계를 가진다.
ex)
노드 1
노드 1 밑에 노드 2-1 노드 2-2가 연결되어 잇고
노드 2-1 밑에 노드 3-1, 노드 3-2가 연결되어 밑에 있고 ~~~~
이 구조의 장점은
1) 주어진 상태에서 검색이 상당히 빠르다.
이러한 구조는 엄청난 단점이 존재한다.
1) 구조를 변경하기 어렵다.
2) 접근의 유연성이 떨어진다. -> 따라서 임의의 검색에 어려움이 있다.
2. 망형 DBMS (Network DBMS) :
계층형 DBMS의 단점을 개선하기 위해 생겨난 구조로 1:1, 1:N, N:M 관계가 존재하여 효과적이고 빠른 데이터 추출이 가능해졌다.
ex)
계층형 DBMS 구조에서 같은 층의 노드끼리도 연결이 되어 있거나, 노드 3-2가 노드 2-1과 연결되어 있을 뿐 아니라 노드 2-2 와도 연결 될 수 있는 구조이다.
이 뿐만 아니라 이전에 설명한 1:1, 1:N, N:M 구조도 모두 가능
하지만 단점이 아직 존재하는데.
계층형 DBMS와 마찬가지로 매우 복잡한 내부 포인터를 사용하고 있어 프로그래머가 이 모든 구조를 이해해야만이 프로그램의 작성이 가능하다. (1:1, 1:N, N:M 등 여러 관계가 가능하다 보니 계층형 구조보다 더 복잡함)
3. 관계형 DBMS(Relational DBMS) RDBMS :
데이터베이스를 테이블(table)이라고 불리는 최소 단위로 구성
테이블은 하나 이상의 열로 구성 되어있음!!
RDBMS는 모든 데이터는 테이블에 저장되므로 테이블이라는 구조가 가장 기본적이고 중요한 구성이다!!
왜 테이블로 데이터를 저장하려 했을까??
-> 데이터를 효율적으로 저장할 수 있는 구조이기 때문이다.
데이터를 저장할때 여러 테이블을 나누어 저장하여 불필요한 공간 낭비 줄일 수 있고, 데이터 저장의 효율성을 높이기 때문이다.
위의 장점 뿐 아니라 RDBMS는 다른 유형의 DBMS에 비해 변화에 순응할 수 있으며, 유지보수에도 편리한 특징을 가지고 있다.
또한 이전에 설명한 DB와 DBMS의 특징인 무결성을 잘 보장해 주기 때문에 동시에 데이터에 접근하는 응용프로그램 사용시 RDBMS를 사용하는 것이 좋을 가능성이 크다.
물론 장점만 있는것은 아니다..
단점 으로느 시스템 자원을 많이 차지해서 시스템 속도가 전반적으로 느려진다.
속도가 정말 중요한 사회에서 너무 큰 단점 아닌가??
다행이도 하드웨어의 발전으로 인해 이 단점을 매꾸어 줄 정도로 하드웨어 성능으로 속도를 많이 보완 하였다.
다른 유형은 DBMS와 다르게 RDBMS의 장점을 많이 나타냈고, 단점 또한 그렇게 심하게 표현하지 않은것으로 보아 우리가 배울 MySQL이 RDBMS 이다..
이제 DB, DBMS에 대해 어느정도 알겠는데..
그런데 도대체 SQL이 뭐지 ?
SQL(Structed Query Language) :
Language에서 알 수 있듯 언어이다.
이전에 MySQL이 RDBMS 중 하나라고 설명하였다.
즉 SQL이 RDBMS에 쓰이는 언어임을 유추해 볼 수 있을 것이다.
다시 SQL은 관계형 데이터베이스에서 사용되는 언어이다.
즉 RDBMS를 배우기 위해 SQL을 알아야 한다.
여기서 헷갈리는 점이 SQL은 RDBMS에 쓰이는 언어이고
MySQL은 RDMBS 중 하나이면 MySQL은 SQL 중 하나가 아니네??
-> 맞다.. MySQL은 RDBMS 제품 중 하나의 이름일 뿐이다..
MySQL은 RDBMS이므로 MySQL에서 SQL을 사용하겠네… 라고 이해 하면 된다.
SQL의 특징
1. DBMS 제작 회사와 독립적
이전에 RDBMS 제품이 MySQL, MariaDB, Oracle등 다양하다고 하였다. 그런데 RDBMS에서 사용된는 언어인 SQL이 여러 제작 회사에 따라 다르다면 어휴… 회사 제품(RDBMS)마다 적합한 SQL을 공부해야하니 생각만해도 끔찍하다..
다행이도 SQL은 표준 SQL이 존재하고 각 제작회사들은 이 표준 SQL에 맞춰서 RDBMS를 만든다. (물론 그.. 제품마다 다른 명령어(언어) 등이 존재하긴 한다.)
2. 다른 시스템으로 이식성이 좋음
SQL은 서버, 개인, 휴대용 장비에 운영되는 DBMS마다 상호 호환성이 뛰어나기 때문에 다른 시스템으로의 이식성이 좋다.
3. 표준이 계속 발전
SQL 표준이 계속적으로 개선되고 발전되고 있다.
ex) SQL-86, SQL-92, SQL:1999, SQL:2019 등등
4. 대화식 언어이다.
주피터 노트북으로 파이썬 언어를 작성해 보았으면 알 것이다.
기존 프로그래밍 언어처럼 코드 작성하고 컴파일, 디버깅 실행 과정 거쳐서 결과를 확인할 수 있는것과 달리 바로바로 코드 한줄 한줄 바로 결과를 확인할 수 있다는 장점이 있다.
SQL도 이러한 장점이 있는 바로 질의하고 결과를 얻는 대화식 언어이다.
5. 분산형 클라이언트 / 서버 구조
SQL은 분산형 구조인 클라이언트 / 서버 구조를 지원한다.
클라이언트 / 서버 구조란 클라이언트에서 질의를 하면 서버에서 질의를 받아서 처리하고 그에 대한 대답을 클라언트에게 전달하는 구조이다.
주의 !!!
이전에 설명하듯 표준 SQL이 존재하지만 제조사별로 각자의 RDBMS에서 SQL이 동일하지 않은 경우가 있다.
마지막으로 앞으로 배울 MySQL의 특징에 대해 알아보자.
MySQL :
Oracle사에서 제작한 RDBMS로 오픈 소스로 제공된다. (무료라는 말 ㅎㅎ) -> 이게 장점 중 하나임
MySQL의 또다른 장점으로는 특히 대용량 데이터베이스 운영하기 위한 기술들이 많이 포함되어 있다는 것이다.
Reference
우재남, 이것이 MySQL이다, 한빛미디어, 2020, 1~17pg