[Section 2] SQL

Kim·2022년 10월 5일
0

Boot Camp

목록 보기
26/64
post-thumbnail
post-custom-banner

In-Memory

JavaScript에서 데이터를 다룰 때 프로그램이 실행될 때에만 존재하는 데이터가 있다.
JavaScript에서 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라진다. 이 말은 변수 등에 저장한 데이터가 프로그램의 실행에 의존한다는 말이다. 즉, 예기치 못한 상황에서 데이터를 보호할 수 없고, 프로그램이 종료된 상태라면 데이터를 원하는 시간에 받아올 수 없으며 데이터의 수명이 프로그램의 수명에 의존하게 된다.


File I/O

파일을 읽는 방식으로 작동하는 형태를 말한다. 엑셀 시트나 CSV 같은 파일의 형태는 In-Memory에 비해 데이터를 저장하는데 적절하나, 한계가 존재한다.

데이터가 필요할 때마다 매번 전체 파일을 읽어야 한다. 파일의 크기가 커질 수록 버겁고 비효율적이다.
또한, 파일이 손상되거나 여러 개의 파일들을 동시에 다뤄야하는 등의 복잡한 경우, 그리고 데이터의 양이 많은 경우 데이터를 불러들이는 작업이 힘들어진다.


SQL

SQL은 데이터베이스 언어로 주로 관계형 데이터베이스에서 사용한다. MySQL, Oracle, SQLite 등 다양한 데이터베이스에서 SQL 구문을 사용할 수 있다.

query(쿼리)

쿼리는 질의문이라는 의미다. 예를 들어, 검색할 때 입력하게 되는 검색어가 일종의 쿼리이다. 검색을 하면, 기존에 존재하는 데이터를 검색어로 필터링을 한다. 쿼리는 저장된 데이터를 필터링 하기 위한 질의문이라 할 수 있다.


트랜잭션

트랜잭션이란 여러 작업을 하나로 묶은 실행 유닛이다. 각 트랜잭션은 하나의 특정 작업으로 시작해 묶여있는 모든 작업들을 전부 완료해야 정상적으로 종료된다. 만일, 하나의 트랜잭션에 속해있는 여러 작업 중 단 하나의 작업이라도 실패하면, 이 트랜잭션에 속한 모든 작업을 시패한 것으로 판단한다.
즉, 작업이 하나라도 실패하게 되면 트랜잭션도 실패하는 것이다.
데이터베이스 트랜잭션은 ACID라는 특성을 갖고 있다.


ACID

ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위한 성질이다.

Atomicity(원자성)

원자성은 하나의 트랜잭션에 속한 모든 작업이 전부 성공하거나, 전부 실패해서 결과를 예측할 수 있어야 한다. 하나의 단위로 묶인 여러 작업들이 부분적으로 실행될 경우, 업데이트가 일어났지만 누가 했는지 모르거나 날짜가 누락되는 등 데이터가 오염될 수 있다.

Consistency(일관성)

일관성은 데이터베이스의 상태가 일관되어야 한다는 성질이다. 하나의 트랜잭션의 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다.
트랜잭션이 일어난 이후의 데이터베이스는 데이터베이스의 제약이나 규칙을 만족해야 한다는 것이다.

데이터베이스의 유효한 상태는 다를 수 있으나, 데이터 상태에 대한 일관성은 변하지 않아야 한다.

Isolation(격리성, 고립성)

격리성 또는 고립성은 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 뜻이다. 동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜잭션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타낸다.

Durability(지속성)

지속성은 하나의 트랜잭션이 성공적으로 수행됐을 경우, 해당 트랜잭션에 대한 로그가 남아있어야 한다는 것이다. 만일, 런타임 오류나 시스템 오류가 발생해도 해당 기록은 영구적이어야 한다.


SQL vs NoSQL

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

SQL

관계형 데이터베이스는 테이블의 구조와 데이터 타입 등을 사전에 정의하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
행(row)과 열(column)로 구성된 테이블에 데이터를 저장하며, 각 열은 하나의 속성에 대한 정보를 저장한다. 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.
관계형 데이터베이스에서는 SQL을 활용해 원하는 정보를 쿼리할 수 있다. 이 말은 관계형 데이터베이스에서는 스키마가 뚜렷하게 보인다는 것과 같다.
즉, 관계형 데이터베이스는 테이블 간의 관계를 직관적으로 파악할 수 있다.

NoSQL

NoSQL은 주로 데이터가 고정되어 있지 않은 데이터베이스를 말한다. NoSQL이 SQL과 반대되는 개념처럼 사용한다해서 NoSQL에 스키마가 반드시 없는 것은 아니다.
관계형 데이터베이스는 데이터를 입력할 때 스키마에 맞게 입력해야 하는데, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다. 이러한 방식을 schema on read라고 한다.
데이터를 입력하는 방식에 따라, 데이터를 읽어올 때 영향을 미친다.

SQAL과 NoSQL, 어떤 것을 사용해야 할까?
SQL vs NoSQL: Which one is better to use?

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

  1. 데이터베이스의 ACID 성질을 준수해야 하는 경우 (전자 상거래를 비롯한 모든 금융 서비스)
  2. 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우

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

  1. 데이터의 구조가 거의 없는 대용량의 데이터를 저장하는 경우
  2. 클라우드 컴퓨팅 및 저장 공간을 최대한 활용하는 경우
  3. 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우

참고자료

SQL 기본 문법


이미지 출처

SQL Server Database File I/O Report
Vicente's Blog
geeksforgeeks


Do It!

post-custom-banner

0개의 댓글