SQL, 관계형 데이터베이스와 NoSQL

yezo cha·2021년 7월 23일
0
post-thumbnail

SQL?

Structured Query Language은 데이터베이스용 프로그래밍 언어로서, 주로 관계형 데이터베이스에서 사용한다.

SQL데이터가 구조화된(structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있다.
SQL은 구조화된 쿼리 언어라고 말할 수 있다. 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
예를 들어 MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다.

SQL을 사용할 수 있는 데이터베이스와 달리, 데이터의 구조가 고정되어 있지 않은 데이터베이스를 NoSQL이라고 한다.
NoSQL는 테이블을 사용하지 않고 데이터를 다른 형태로 저장한다.
대표적으로 MongoDB와 같은 문서 지향 데이터베이스가 있다.

SQL vs. NoSQL

데이터베이스는 크게 관계형 데이터베이스비관계형 데이터베이스로 구분한다.
관계형 데이터베이스는 SQL을 기반으로 하고, 비관계형 데이터베이스는 NoSQL로 데이터를 다룬다.

SQL 구조화 쿼리 언어

관계형 데이터베이스에서는 테이블의 구조과 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
관계형 데이터베이스행(row)열(column)로 구성된 테이블에 데이터를 저장한다.
각 컬럼은 하나의 속성에 대한 정보를 저장하고, 행에는 컬럼의 데이터 형식에 맞는 데이터가 저장된다.
관계형 데이터베이스에서는 테이블 간의 관계를 직관적으로 파악할 수 있다.

NoSQL 비구조화 쿼리 언어

NoSQL은 앞에 붙은 NO에서 알 수 있듯이, 주로 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.
NoSQLSQL과 반대된다고 해서 스키마가 반드시 없는 것은 아니다.
관계형 데이터베이스에서는 데이터를 입력할 때 스키마에 맞게 입력해야 하는 반면, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 읽어온다. (schema on read)

SQL과 NoSQL 중에서 어떤 것을 사용해야 할까?

NoSQL기반의 비관계형 데이터베이스가 확장성이나 속도면에서 더 뛰어나다.
하지만 구조화된 SQL기반의 관계형 데이터베이스가 더 좋은 성능을 보여주는 부분도 있다.
여러 사용 사례를 알고 적절한 데이터베이스를 선택하는 것이 중요하다.

SQL 기반의 관계형 데이터베이스를 사용하는 경우

1. 데이터베이스의 ACID 성질을 준수해야 하는 경우

ACIDAtomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)을 의미한다.
데이터베이스에서 실행되는 하나의 트랜잭션(Transaction)에 의한 상태 변화를 수행하는 과정에서, 안정성을 보장하기 위해 필요한 성질이다.

SQL을 사용하면 데이터베이스와 상호 작용하는 방식을 정확하게 규정할 수 있기 때문에 데이터베이스에서 데이터를 처리할 때 발생할 수 있는 예외적인 상황을 줄이고, 데이터베이스의 무결성을 보호할 수 있다.

전자 상거래를 비롯한 모든 금융 서비스를 위한 소프트웨어 개발에서는 반드시 데이터베이스의 ACID 성질을 준수해야 한다.

2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

프로젝트의 규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우, 관계형 데이터베이스를 많이 사용한다.

NoSQL 기반의 비관계형 데이터베이스를 사용하는 경우

1. 데이터의 구조가 거의 없거나 전혀 없는 대용량의 데이터를 저장하는 경우

대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터의 유형에 제한이 없다.
언제든지 필요에 따라 데이터의 새 유형을 추가할 수 있다.
정형화되지 않은 많은 양의 데이터가 필요한 경우라면 NoSQL을 적용하는 것이 더 효율적이다.

2. 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우

NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에서 매우 유리하다.
데이터 구조를 자주 업데이트 해야하는 경우, 스키마를 매번 수정해야 하는 관계형 데이터베이스보다 NoSQL 기반의 비관계형 데이터베이스를 사용한는게 더 적합하다.

SQL Basics

SQL 명령어 (MySQL)

SQL을 사용할 때, 필요한 기본 문법이다.
많은 쿼리문은 여기에서 확인하자.

  • SELECT
  • WHERE
  • ORDER BY
  • GROUP BY
  • INSERT INTO
  • UPDATE SET
  • DELETE
  • LIKE
  • JOIN
    • (INNER) JOIN
    • LEFT (OUTER) JOIN
    • RIGHT (OUTER) JOIN

데이터베이스 관련 명령어

데이터베이스 생성

CREATE DATABASE 데이터베이스_이름;

데이터베이스 사용

데이터베이스를 이용해 테이블을 만들거나, 수정, 삭제 등의 작업을 하려면 먼저, 데이터베이스를 사용하겠다는 명령을 전달해야 한다.

USE 데이터베이스_이름;

테이블 생성

CREATE TABLE table_name (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);
CREATE TABLE user (
  id int PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(255),
  email VARCHAR(255),
  created_at TIMESTAMP
);

테이블 정보 확인

DESCRIBE(DESC) 테이블_이름;

테이블 삭제

DROP TABLE 테이블_이름;

테이블 수정

// ADD Column
ALTER TABLE table_name
ADD column_name datatype;

// DROP COLUMN
ALTER TABLE table_name
DROP COLUMN column_name;

// ALTER/MODIFY COLUMN
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
profile
(ง •̀_•́)ง

0개의 댓글