이번 스프린트에서는 DataBase에 대해 학습했다.
DB를 이용하면 data를 영속성있게 유지할 수 있게 된다.
데이터베이스(DataBase, DB)란, 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고, 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.
앞서 데이터를 서버에 저장(in-memory, 서버가 켜져있을 동안만 유효)하거나, local storage에 파일로 저장하는 방식으로 웹을 만들어왔는데, DB를 이용하면 이제는 데이터를 영속성(persistently)있게 저장할 수 있는 있게된다.
DBMS(DataBase Management System)이란, 데이터베이스를 관리하는 소프트웨어를 말한다.
데이터를 관리하는 방법에 따라서 DBMS를 구분하는데, 계층형, 네트워크형, 관계형, 객체지향형, 객체관계형, NoSQL 등이 있다.
이 중 테이블형 데이터베이스인 관계형 테이터베이스가 가장 많이 쓰이는데, 이를 R(Relational)DBMS라고 칭한다. 이번에는 대표적인 RDBMS인 MYSQL을 사용해보았다.
스키마(schema)란, DB내에 속성들의 집합인 개체들(테이블) 간의 관계에 대한 정의와, 이들이 유지해야할 제약조건들을 정의한 것으로,
각각의 data들이 어떤 속성을 가지고, 어떠한 형태로, 어떤 테이블에 종속되어 저장될 것인가를 설계하는 것이다.
스키마를 설계하면서 가장 중요한 부분이라고하면 각 엔티티들의 '관계' 라고 할 수 있다.
'관계'에는 1:1, 1:N, N:N이 존재한다.
1:1(일대일) 관계는 서로가 데이터를 단 하나씩 가질 수 있는 관계이다. 양쪽 어디에서도 여러개의 데이터를 가질 수 없다.
예를 들자면 유저와 닉네임의 관계이다. 유저는 단 하나의 닉네임을 가질 수 있고, 닉네임 또한 단 한명의 유저에 종속된다.
1:N(일대다) 관계는 한쪽이 여러개의 데이터를 가지는 관계이다.
예를 들자면 사용자와 사용자의 게시글이다. 사용자는 여러개의 게시글을 포함할 수 있지만, 게시글은 단 한명의 작성자(사용자)를 가진다.
N:N(다대다) 관계는 서로 여러개의 데이터를 가지는 관계이다.
예를 들자면 태그와 게시글을 들 수 있다. 하나의 태그는 여러개의 게시글을 포함할 수 있고, 하나의 게시글을 여러개의 태그를 포함할 수 있다.
이런 다대다 관계의 경우, 서로의 테이블이 매우 복잡해지므로 조인 테이블(JOIN TABLE)을 중간에 새로 생성해 관계를 묶어놓는 작업을 하는 것이 통상적이다.
SQL(Structured Query Language)는 데이터베이스에서 데이터를 정의, 조작, 제어하기 위해 사용하는 언어이다.
정의, 조작, 제어 목적에 따라 언어구문도 세 가지로 나뉜다.
DDL(Data Definition Language) : 데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어
query) CREATE, ALTER(테이블 열 추가/삭제), DROP ...
DML(Data Manipulation Language) : 데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어
query) INSERT, UPDATE, DELETE, SELECT ...
DCL(Data Control Language) : 데이터베이스게 저장된 데이터를 관리하기 위하여 데이터의 보안성 및 무결성 등을 제어하기 위한 명령어
query) GRANT(다른 사용자에게 권한부여), REVOKE(권한부여 취소) ...
여러가지 쿼리문이 있지만, 그 중에서도 테이블 간의 관계를 이용하는 JOIN문을 살펴보자.
앞서 스키마에서 언급했듯, 테이블들은 서로 관계를 가질 수 있다.
관계를 이용해 데이터를 조회할 때, JOIN 쿼리를 이용할 수 있는데 JOIN에는 여러종류가 있다.
위의 JOIN의 종류 중, INNER JOIN과 LEFT JOIN, RIGHT JOIN이 가장 많이 쓰이는데,
사실 'table A LEFT JOIN table B'와 'table B RIGHT JOIN table A'는 정확히 똑같은 결과를 낸다. 다시 말해서, LEFT 와 RIGHT JOIN은 취향껏 선택해서 사용할 수 있는 구문이다.
그러니 INNER JOIN과 LEFT JOIN만 잘 사용할 줄 알면 왠만한 필요한 조회는 다 할 수 있다.
그러니 쿼리문과 조인문 종류가 너무 많다고 서터레스 받지 말자. (나 자신아..)
+) 그리고 집계쿼리 (COUNT, MAX, MIN, SUM, AVG 등)과 함께 사용되는 GROUP BY문도 매우 유용하다.
사실 이번 스프린트는 이때까지 다루지 않았던 전혀 새로운 개념이어서 학습하는데 많은 시간이 들법 했지만, 전에 컴활 1급에서 액세스를 했던 기억으로(액세스에서 쿼리를 다룬다.) 생각보다 빠르게 학습하고 적응할 수 있었던 것 같다. 참 다행이다. 단지 컴활 1개의 공부가 생각보다 많은 도움이 되고있다. 그 때 포기하지않고 1급 따낸 나 자신 칭찬해 🤣❤️