[TIL] SQL && Database

ytwicey·2020년 12월 8일
0

TIL

목록 보기
20/23

Cominciamo,

이번 스프린트는 SQL과 Database에 관한 것이었는데, react보다 재밌었고, 수월했다. 전체 데이터의 아키텍처를 고민할 수 있어서 머리쓰는 재미가 있었다고 해야하나. 노드에서 데이터베이스를 불러오는 것이 fetch랑 같다는 걸 알게 된 이후에는 좀 더 재밌었던 것 같다.

가장 많이 참고했던 페이지는 w3school SQL 튜토리얼 이었고, 데이터베이스와 서버를 연결시키는 과정도 여기서 가장 많이 참고 했다.

그리고 SQL 과 NOSQL의 차이는 니꼴라스의 영상을 참고 했다.
아직도 SQL을 모른다고해서 5분 설명해드림
SQL vs NoSQL 5분컷 설명!
이 두 개 영상이 도움이 됐으니 여러분도 참고하시길!

그러나 그중에 최고봉은 언제나 공식문서, 특히나 이번엔 더 많이 참고 했다.


1. SQL? NoSQL?

SQL은 Structured Query Language의 약자로, 데이터베이스와 소통하는 언어라고 생각하면 된다. SQL은 보통 관계형데이터베이스, RDBMS(Relational Database Management System)를 위한 언어라고 이야기를 한다. 그렇다면 반대로, NoSQL은 no가 앞에 붙었으니, 관계성이 없는 데이터베이스를 위한 언어라고 생각하면 된다. 출처는 여기, 그리고 SQL, NoSQL은 엄밀히 말하자면 언어이지만, 사용되는 데이터베이스를 일컬어 이야기 한다. 그렇지만 그렇다고 해서, 데이터베이스의 종류가 각 언어당 1가지만 있는 것은 아니고, 사용할 수 있는 여러 브랜드(?)의 데이터베이스가 있다.

SQL은 MySQL로 배웠고, NoSQL는 그 안에 다시 종류가 document, graph, key-value등의 타입으로 나눠져 다양하고, document 타입에는 mongoDB가 있다.

이런 느낌. 보다시피 SQL은 좀 더 structured 하고, NoSQL(document)로 좀 더 자유롭다.

2. SQL CRUD

sql의 언어는 데이터베이스마다 다른데, w3school을 기준으로 배웠다. 기본적 CRUD는 비슷하고 부속적인 것들만 달라서, 문서를 참고하면서 쓰면 된다. 위에 cominciamo에 링크 있음.

3. 그렇지만 가장 어려운건 JOIN,

원래 만사가 남이랑 어울리는게 제일 어렵다. 그래서 협업도 어렵다.
그래서 관계를 엮어서 필요한 데이터를 뽑는 Join도 어려웠다. Socrative 문제를 다시 풀어보자.

위와 같은 테이블이 존재하고, 이에 대한 문제는 다음과 같다.

SQL데이터베이스에 이미지와 같이 users테이블과 pets테이블,그리고 각 두테이블에 대한 데이터가 있다고 가정해봅시다.(여기서 owner_id는 pets 테이블의 Foreign Key 입니다.) 이 때, 최소 하나 이상의 pet을 가진 모든 owner를 선택하는 SQL Query문을 작성해 주세요. (단, users와 pets 테이블의 모든 칼럼을 선택해야합니다.)

우선 모든 owner(user)를 선택해야하고, 그 owner는 최소 하나 이상의 pet을 가져야함. => 그렇기 때문에 owner의 id와 pets의 owner_id가 같아야 하고, 최소 하나의 펫이 있어야 하기 때문에 inner join을 써야한다.

SELECT * FROM users INNER JOIN pets ON user.id = pets.owner_id;

Join의 종류는 위와 같이 7개가 있는데, 호용님이 4개만 외우라고 했다. 스프린트에서도 그 정도의 join으로 충분히 풀 수 있었고, 연습도 됐다.

참고 했던 영상은 여기 :
SQL Joins: Difference Between Inner/Left/Right/Outer Joins

4. SQL vs NoSQL 장단점?

장점
출처 : SQL, NOSQL 개념 및 장단점
SQL: 명확하게 정의된 스키마로 데이터 무결성 보장, 관계는 각 데이터를 중복없이 한번만 저장

NoSQL:
스키마 없기에 훨씬 유연, 언제든지 저장된 데이터를 조정하고, 새로운 필드 추가 가능,
데이터의 저장은 앱이 필요한 부분에 유동적으로 저장 (낭비 없음) => 속도 빨라짐,
수직, 수평 확장 가능함으로 db가 앱에서 발생하는 모든 읽기/쓰기 요청 처리 가능

단점

SQL: 덜유연, 데이터 스키마는 사전에 계획되고 알려져야함 (수정하기 매우 힘들다)
관계를 맺기에 JOIN문이 많은 복잡한 쿼리 생성

NoSQL: 중복된 데이터가 변경된 경우 여러개의 콜렉션에서 데이터를 바꿔야한다.

특징 : SQL이든 NoSQL이든 설계가 중요하다. 설계로 단점을 줄일 수 있고, 실제로 NoSQL이라도 어떻게 넣느냐에 따라 데이터를 꺼내는 효율이 달라질 수 있음.


Finiamo,

SQL & NoSQL에 대해서 간략하게 정리해봤는데, 실제로 사용해본건 mysql뿐이라 나중에 noSQL도 만져보고 싶다. 나중에 한번 해보면 되곘지!!

끝~

profile
always 2B#

0개의 댓글