[코드스테이츠 PMB 8기] SQL를 활용한 데이터베이스 구조 개념 이해

2021. 11. 3. 13:58PM 성장 스토리/Product

출저- wpDataTables  and  Paperpile

데이터 베이스란?

“컴퓨터 시스템에 전자 방식으로 저장된 구조화된 데이터의 체계적인 집합”

 

데이터베이스 구조는 너무나도 광범위하고 배울 것이 많다. 하지만 기획자로서 데이터베이스 기본 개념을 알아야 하고 훌륭한 개발자들과 협업하기 위해서는 필수로 익혀야 할 기술이라 생각한다. 그렇기에 오늘도 공부하고 메모하기 위해 포스팅을 작성한다.

 


관계형 데이터베이스(Database) 개념

관계형 데이터베이스는 데이터를 테이블(표)로 표현한다. 문서를 작성할 때 엑셀로 만드는 표를 생각하면 이해하기 쉽다. 관계형 데이터베이스는 이와 같이 데이터를 항목으로 구분하여 테이블로 구성하는 것이다. 이렇게 하면 테이블의 생성이나 항목의 분할과 결합을 자유롭게 할 수 있어서 편리하기 때문에 관계형 데이터베이스는 데이터 시장의 주류로 자리를 잡고 있다.

 

 

 

관계형 데이터베이스(Database) 구조

출저 - 생활코딩 MySQL

관계형 데이터베이스 구조는 생각보다 간단하다. 우리가 데이터를 쌓을 'Server'가 존재하고 그 안에 수많은 DB를 넣을 수 있다. 이 DB 안에는 우리가 흔히 생각하는 엑셀의 '표'와 같은 Table을 넣을 수 있고, 이렇게 쌓인 DB in Table 안에서 다양한 관계를 맺고 데이터를 수집하고 해석할 수 있다. 

 

그렇다면 이와 반대로 데이터가 서로 관계되지 않고 독자적으로(?) 쌓이는 데이터 구조를 NoSQL이라 하며 이에 대해서는 추후 자세히 설명하도록 하겠다.

NoSQL이란?
NoSQL(Non SQL)는 일반적으로 '실시간 웹 어플리케이션'과 '빅데이터'의 처리를 위한 '비 관계형 데이터베이스 관리 시스템'(Non-Relational DBMS)을 말합니다. NoSQL은 대규모의 데이터를 유연하게 처리할 수 있는 강점을 지니고 있습니다.

'비 관계형 데이터베이스'는 전통적인 '관계형 데이터베이스' 보다 덜 제한적인 데이터의 저장 및 검색 메커니즘을 제공합니다. 그 이유는 디자인의 단순화, 수평적 확장성, 세부적인 컨트롤을 하기 위해서입니다.

NoSQL 시스템은 SQL 계열 쿼리 언어를 사용할 수 있다는 사실을 강조한다는 면에서 "Not only SQL"로 불리기도 합니다.

NoSQL은 테이블-칼럼과 같은 스키마 없이, 분산 환경에서 단순 검색 및 추가 작업을 위한 키 값을 최적화하고, 지연과 처리율이 우수하고, 대규모 확대가 가능한 수평적인 확장성의 특징을 가지고 있습니다.

 

관계형 데이터베이스(Database) 활용

그럼 실제 관계형 데이터 베이스는 어떠한 방식으로 활용되는지 살펴볼 필요가 있다. 코드스테이츠에서 제안하는 w3schools 을 활용하여 실제 SQL 명령어 사용 방법과 앞서 이야기한 데이터베이스 구조를 확인해 보겠다.

 

출저 - w3schools

실제 w3schools SQL 실습에 들어가면 쿼리를 입력할 수 있는 창이 나타나고, 처음 본다면 이해할 수 없는(?) 명령어가 기본으로 입력되어 있을 것이다. 'Run SQL'  버튼을 입력한다면 아래와 같이 데이터가 조회된다.

출저 - w3schools

(총 91 행이 조회되었지만 가독성을 위해 9개 행만 캡처하였다.)

 

이것을 해석해 보자면 데이터베이스(=w3schools)에 들어있는 표(Table)=Customer를 우리가 SELECT 하여 조회한 SQL 명령어라고 볼 수 있다. (처음 본다면 이해하기 어렵다...)

 

즉 이처럼 SQL 관계형 데이터베이스는 우리가 지정한 각각의 테이블을 넣어놓고 원할 때마다 명령어를 통해 꺼낼 수 있고 수정할 수 있다.

 

그럼 위 사진처럼 데이터베이스(Database)에는 오로지 한 개의 Table(표)를 넣을 수 있을까? 그렇지 않다. 데이터베이스에는 수많은 테이블을 마구잡이(?)로 넣을 수 있고 이를 통해 다양한 관계(?)를 형성할 수 있다.

 

현재 실습하고 있는 'w3schools' 사이트 우측 상단을 보면 'Your Database'라고 해서 다양한 테이블을 보여주고 있다. 이것이 앞서 말한 데이터베이스(Datadase) 안에 다양한 테이블(표)라고 할 수 있다.

 

해당 테이블을 클릭해 보면 데이터가 조회되는 것을 확인할 수 있고, 각 테이블 이름과 관련된 데이터들이 저장되어 있는 것을 확인할 수 있다.

 

 

 

조금 더 명확한 이해를 돕기 위해 직접 데이터베이스 구조를 이미지로 제작해 봤고, 우리는 쉽게 생각해  w3schools라는 데이터베이스 안에 Customers, Categories와 같은 테이블이 들어있다고 생각한다면 이해하기 쉬울 것이다.

 

 

 

관계형 데이터베이스(Database) 실습

그럼 데이터베이스 안에 있는 수많은 테이블을 우리가 엑셀처럼 전부 하나식 클릭하거나 'SELECT * FROM 테이블명' 같은 명령어로 확인해야 할까? 절대 그렇지 않고, 다양한 SQL 명령어를 활용하여 데이터를 본인이 원하는 대로 뽑아낼 수 있다.

 

데이터 조작어(DML)

우선 데이터를 핸들링하는 다양한 SQL 명령어가 있지만 우선 원하는 데이터만 조회할 수 있는 조작어를 통해 원하는 데이터만 출력해 보도록 하겠다. 

*실제로 데이터 조작어(DML) 말고도 다양한 명령어 종류가 있으니 직접 구글링 해보는 것을 권장!*

 

-예시1)
Customers 테이블에서 CustomerName과 ContactName 열만 보고 싶어!

 

1
2
//실제 코드
SELECT  CustomerName, ContactName FROM  Customers; // 실제 코드이니 w3school에 입력해보시길
cs

 

위 코드를 해석하기 전 실제로 입력하면 어떠한 결과가 나오는지 아래 이미지를 첨부했다. 

출저 - w3schools

Customer라는 표에서 우리가 앞에 지정한 CustomerName, ContactName 열만 조회된 것을 확인할 수 있다. 즉 위 명령어를 자세히 해석하자면

  • SELECT  CustomerName, ContactName = CustomerName, ContactName 열만 보여줘!
  • FROM  Customers = Customers라는 테이블에서! 

조금 극단적으로 예시를 들었지만 이렇게 해석한다면 조금 이해하는 데 도움이 될 것이다. 

 

테이블 결합(JOIN)

-예시 2)
Customers 테이블에 'CustomerID'와 Orders 테이블의 'CustomerID'를 합치면 어떨까?

Customers 테이블
Orders 테이블

위 이미지는 실제로 Customers 테이블과 Orders 테이블을 조회한 결과다. 결과값을 보면 'CustomerID' 열 이름이 동일한 것을 볼 수 있다. 이것은 두 테이블이 관계(?) 한다고 볼 수 있고, 앞서 말한 관계형 데이터 베이스로 활용할 수 있을 것 같다.(위 형식은 어디까지나 예시이며, 해당 사례 말고도 관계형 데이터베이스 활용은 엄청 다양합니다)

 

1
2
//실제 코드
SELECT  * FROM  Customers AS A INNER JOIN  Orders AS B ON  A.CustomerID = B.CustomerID;
cs

 

위 코드는  Customers 테이블과 Orders 테이블의 CustomerID를 Join 하는 명령어이고 이를 실제로 입력하면 아래와 같은 결과가 출력된다. 

표를 자세히 보면 'CustomerID'를 기준으로 표가 합쳐진 것을 볼 수 있다. 이처럼 다양한 테이블을 결합하여 노출하는 방법을 활용하면 다양한 관계형 데이터를 사용할 수 있다.

 

위 코드는 보기에는 어려워 보일 수 있어도 첫 번째 예시와 같이 직접 해석해 본다면 쉽게 해석할 수 있으니 직접 구글링이나 독학으로 이해해 보는 것을 권장한다! (자율 학습!)

 

 

 


해당 게시글은 단순히 SQL를 공부하며 배운 내용을 본인 주관으로 이해하고 해석할 글입니다. 잘못된 부분이 있다면 가차 없이 피드백 주시면 정말 감사하겠습니다! (꾸벅꾸벅)

 


항상 창의적인 크레이티브를 만들어내기 위해 노력하는 기획자입니다
제안은 언제나 환영입니다
Creative Owner l wogud544@naver.com