이번엔 코드스테이츠에서 Database를 배웠다. Database라는 말은 개발쪽을 공부하기 전에도 많이 들어봤던 말이었는데, 꽤나 그 실체가 궁금했다. 그 동안 개발을 쭉 배워오면서 내가 가장 궁금했던 분야이고, 다뤄보고 싶었던 서버였다. 배웠던 소감은.. 재밌다. 특히 쿼리 같은 경우, CLI명령어처럼 원하는 명령을 알맞게 작성해서 보내면 내가 원하는 데이터를 뽑아낼 수 있다는게 짜릿했다.
잊어먹지 않기 위해, 나만의 언어로 한 번 정리하려고 한다.
왜 데이터베이스를 사용할까?
그 이유는 서버를 껐다 켜도, 저장해 놓았던 데이터를 계속 갖고 있기 위함이다. 데이터베이스가 없다면, 변수(array, object 등)를 선언해서, 변수에 데이터를 할당하는 방식으로 저장을 할 것인데, 이 방식을 In-memory방식이라고 한다. 즉, 이렇게 변수에 할당을 하면 컴퓨터 메모리에 저장이 된다. 이 메모리 방식은, 기존 디스크 방식으로의 접근보다 훨씬 빠르게 저장하고 조회할 수 있는 장점이 있지만, RAM기술(휘발성)로 되어있기 때문에 서버가 꺼지거나, 컴퓨터 전원이 꺼지면 데이터는 사라진다. 이런 치명적인 데이터 휘발 문제를 해결할 수 있는 것으로는 본인 컴퓨터에 새로운 폴더/파일을 생성해서 저장하는 방법도 있다(Node.js의 경우 fs모듈을 사용하는 방식). 그렇지만 저장해야 할 데이터가 만약 대용량이라면 본인 컴퓨터의 용량을 많이 차지할 것이고, 이 데이터를 다른 동료와 공유하려고 할 때, 매우 번거로운 절차를 거쳐야 할 것이다. 또한 본인 컴퓨터가 특정 목적을 가진 해커에 의해 바이러스에 감염된다면(=보안이 뚫린다면), 데이터 파일들이 탈취될 위험이 있다. (데이터베이스는 자체적인 강력한 보안기능이 있음)
데이터가 휘발되지도 않고, 본인 컴퓨터를 Data Store로 사용하지 않는 방법? 데이터베이스!
데이터베이스란 데이터에 특화된 컴퓨터(서버)라고 정의한다. 즉, 데이터를 다른 컴퓨터(를 빌려서)에 저장을 하는 것이다. 이렇게 되면 위 In-memory방식과 file방식의 단점을 커버할 수 있다.
데이터베이스 분류와 구조
데이터베이스는 크게 2종류로 분류된다. 데이터 제어시 쿼리를 사용해 테이블을 생성하고 테이블간의 관계를 설정해서 데이터를 제어하고 RDBMS(Relational Database Management System) 방식과 쿼리를 사용하지 않고 테이블도 생성하지 않는 No-SQL 데이터베이스가 존재하는데, 이번 정리는 코드스테이츠에서 배웠던 RDBMS 방식인 MySql에 대해 정리를 해보려고 한다. (SQL vs No-SQL에 대해서도 꼭 정리를 해보고 싶다)
Mysql은 RDBMS(Relational Database Management System)방식으로 관계형 데이터베이스 방식이라고도 한다. SQL(Structured Query Language)을 사용해서 데이터 테이블을 생성하는 방식으로 데이터를 제어할 수 있다. SQL은 관계형 데이터 베이스 속하는 제품들이 공통적으로 데이터베이스 서버를 제어할때 사용하는 언어이다. 다수의 제품(OracleDB, MariaDb, Mysql, SQLite등)이 SQL로 작동한다. RDBMS의 한 종류이자 sql을 사용하는 Mysql의 구조는 다음과 같다.
- Schema : 관련된 테이블끼리 그룹핑을 해놓은것을 말한다. 데이터베이스라고도 일컫는다. 위 그림에서 두 개의 schema를 표시했는데, 이 두 schema는 전혀 다른 목적을 가진 schema(데이터베이스)이다.
- Database Server : 이런 데이터베이스(Schema)들을 관리하는 서버이다.
데이터베이스를 설치하면, 데이터베이스 클라이언트(mysql monitor ⇒ 명령어를 통해 데이터베이스 서버를 제어하는 프로그램)와 데이터베이스 서버가 설치되는데, Mysql은 데이터베이스 클라이언트 중 하나이다.
- Table : 데이터를 Key와 value형태로 정의한 모델을 말한다.
위는 바이에른.com 사이트에 회원들을 User테이블에 저장한 구조이다. Id, name, email, password는 column형태로 테이블의 key(속성)이고, 그에 대한 값(데이터)들이 row형태로 들어가 있다. 이 바이에른.com 사이트는 이 User에 대한 데이터를 관리하는 테이블뿐만 아니라 다른 데이터들을 관리하는 테이블도 가질 수 있다. 여기서 관계형데이터베이스의 특징으로, 이 User테이블을 다른 테이블의 key(속성)값으로 사용할 수 있다.
'기술들 > Database' 카테고리의 다른 글
Database(feat. Inner join, Outer join 차이점 정리) (0) | 2020.12.06 |
---|