📝

그것이 알고 싶다! SQL vs NoSQL!

뒤에 내용과 겹치는 내용이 있어, 중요한 내용은 빨간색으로 중요한 내용을 표시해두었습니다.

0. 결론

  1. 전통적인 회사에 지원하려면 SQL 배우셔야 합니다. 그렇지 않더라도 한 번은 마주칩니다.
  1. 기업에서 한 가지만 사용하는 경우보다는 보통 2가지를 다 사용합니다. 이를 하이브리드 방식이라고 합니다. 그러니 둘 다 합시다.
  1. 확장성 측면에서는 NoSQL을! 그러나 명확하게 데이터가 들어가 있길 원한다면 SQL을! 배우는 입장에서 뭐부터 공부해야할지 고민하신다면 저는 SQL을 추천합니다. 왜냐하면 NoSQL은 배우기 쉽거든요. 언제든지 빠르게 배울 수 있으니, 좀 더 시간이 걸리는 것을 공부하는 것입니다. 쉬운 것을 먼저 하고 싶으시면 NoSQL 먼저 공부하셔도 되고요! 😂

1. DB

데이터베이스(영어: database, DB)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합이다. 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다. - Wikidipia
 
읽어도 무슨 뜻인지 잘 모르시겠죠? 이렇게 기억해 주세요!
데이터를 저장하는 공간!
 

2. DB, RDB, DBMS, RDBMS

  • DB → DBMS
  • RDB → RDBMS
RDBMS(stands for Relational Database Management System)는 DB를 관리하는 시스템입니다. TOP3 오픈소스 RDBMS는 MySQL(무료), PostgreSQL(무료), SQLite(무료)입니다. 오픈소스가 아닌 것에서는 Oracle(유료)이 독보적입니다.
모두 SQL이죠? 하지만 프로젝트에 따라 NoSQL이 압도적으로 우위를 차지하고 있는 분야도 있답니다!
 

3. SQL 데이터베이스(1974)의 구성 요소

출처 : 제주코딩베이스캠프 Notion강좌출처 : 제주코딩베이스캠프 Notion강좌
출처 : 제주코딩베이스캠프 Notion강좌
  • 튜플(Tuple)은 테이블의 행입니다.
  • 속성(Attribute)은 HTML로 따지자면 Table Heading 입니다. 여기서는 학번, 이름, 주소, 전화번호가 속성이죠.
  • 도메인(Domain)은 하나의 속성에서 취할 수 있는 값의 범위를 말합니다. 예를 들어 위에서는 신청 과목에서 전체 과목의 범위를 얘기합니다.
  • 차수(Degree)는 속성의 개수입니다. 학생 릴레이션에서는 학번, 이름, 주소, 전화번호이니 총 4개가 될 것입니다.
  • 기수(Cardinality)는 튜플의 개수입니다. 위에서는 어트리뷰트를 제외하고 총 5개의 튜플이 존재합니다.
  • 학생 테이블의 스키마는 학번, 이름, 주소, 전화번호 입니다.
  • 여기서 학번은 숫자, 이름은 문자입니다. 이처럼 처음에 스키마를 정할 때 타입이 정해져 있어야 합니다.

3.1 키의 개념 및 종류

  • 기본키는 메인으로 사용할 키를 말합니다. 고유한(유일한) 주민등록번호나, 계좌번호, 전화번호 등을 기본키로 사용할 수 있습니다. 기본키는 NULL을 사용할 수 없습니다.
  • 후보키는 기본키를 제외하고 고유한 키들을 말합니다.
  • 외래키는 관계되어 있는 테이블에서 참고하고 있는 키를 얘기합니다. 여기서 학생 릴레이션과 수강신청 과목 릴레이션은 서로 학번으로 연결되어 있죠.

3.2 데이터베이스의 종류

  • 계층형 데이터베이스 (1:N)
  • 망형 데이터베이스 (N:M)
  • 관계형 데이터베이스 (단순한 표 형태의 상호 관계, 1:1, 1:N, N:M관계 표현)
  • 객체 지향형 데이터베이스

4. NoSQL 데이터베이스(1998)의 구성 요소

  • 스키마가 없습니다.
  • 관계형이 아닙니다.
  • 아래처럼 저장이 되는 형식이고, 관계형이 아니기 때문에 (통합할 수 있지만 장점을 살리기 위해 일부러) 중복해서 데이터가 들어가는 경우가 많으며, 심지어 특정 데이터에 필드가 더 있을 수도 있습니다. 아래처럼 다른 유저에게는 통장잔고 필드가 없을 수도 있어요!
user { "id" : 123123 "name" : "hojun" "통장잔고" : 100 .... }
 

 
최근에 데이터의 형태가 단순해지고 규모로 커지게되면서 데이터를 빠른 속도로 처리할 수 있는 데이터베이스에 대한 필요성이 증가하고 있습니다. RDBMS를 대용량 데이터 서비스에 이용하기에는 비용적인 문제, 데이터를 분산하기 위해 수십, 수백 대의 서버로 분산시켜야 하기 때문에 처리하기는 힘들기 때문에 NoSQL을 많이 이용하고 있습니다.
 
NoSQL(Not Only SQL) 은 관계형 데이터베이스와 SQL을 사용하지 않는 데이터베이스를 말합니다. NoSQL의 대표적인 제품은 구글의 빅테이블, 그리고 mongoDB 등이 있습니다.
 
NoSQL 데이터베이스의 종류는 4가지 종류가 있습니다.
  • 키-값 데이터베이스: 키와 값으로 구성된 배열구조의 데이터베이스로 NoSQL 데이터베이스 중 가장 단순한 구조입니다.
  • 도큐먼트 데이터베이스: 필드와 값의 형태로 구성된 데이터를 JSON 포맷으로 관리하는 데이터베이스로 NoSQL 데이터베이스 중 가장 인기가 높습니다.
  • 컬럼 패밀리 데이터베이스: 컬럼과 로우로 구성된 데이터베이스로 칼럼은 이름과 값으로 구성되고 로우는 각기 다른 칼럼으로 구성이 가능합니다.
  • 그래프 데이터베이스: 노드와 관계로 구성된 데이터베이스로 근접한 객체를 모델링할 목적으로 설계되었습니다.
 
NoSQL DB 특징
  • 유연성: 스키마 선언 없이 필드의 추가 및 삭제가 자유로운 Schema-less 구조입니다.
  • 확장성: 스케일 아웃에 의한 서버 확장이 용이합니다.
  • 고성능: 대용량 데이터를 처리하는 성능이 뛰어납니다.
  • 가용성: 여러 대의 백업 서버 구성이 가능하여 장애 발생 시에도 무중단 서비스가 가능합니다.