본문 바로가기
TIL/코드스테이츠 TIL

코드스테이츠 소프트웨어 엔지니어링 부트캠프 82, SQL Intro

by 안뇽! 2021. 10. 9.
반응형

SQL와 NoSQL

주로 관계형 데이터베이스에서 사용한다. SQL을 사용하기 위해서는 데이터의 구조가 고정되어 있어야 한다.

데이터베이스 용 프로그래밍 언어이다. 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.

 

SQL은 구조화된 쿼리 언어인데, 쿼리(query)는 일종의 검색어이다.

저장되어 수많은 데이터중 쿼리문(검색어)를 기준으로 필터링하여 원하는 데이터를 가져온다.

 

Transaction(트랜잭션)

트랜잭션 : 여러개의 작업을 하나로 묶은 실행 유닛. 묶여 있는 모든 작업을 다 완료해야 정상적으로 종료한다. 만약 하나의 트랜잭션에 속해있는 여러 작업 중에서 단 하나의 작업이라도 실패하면, 이 트랜잭션안의 모든 작업을 실패한 것으로 간주한다.

ACID

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

  • Atomicity : 트랜잭션 내의 작업중 하나라도 실패하면 모든 작업을 실패한것으로 간주하여 데이터를 보호한다.
  • Consistency : 트랜잭션 이전과 이후, 데이터베이스의 상태는 일관성있게 변하지 않아야한다.
  • Isolation : 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다. 외부 영향을 받지 않아야 한다.
  • Durability : 하나의 트랜잭션이 성공적으로 수행되었다면 해당 트랜잭션에 대한 영구적인 기록이 남아야 한다.

 

SQL와 NoSQL

  • SQL : 구조화 쿼리 언어
  • NoSQL : 비구조화 쿼리 언어

데이터베이스는 크게 관계형 데이터베이스와 비관계형 데이터베이스로 구분한다.

관계형 데이터베이스는 SQL기반, 비관계형 데이터베이스는 NoSQL로 데이터를 다룬다.

이 둘은 만들어진 방식, 저장하는 정보의 종류, 저장하는 방법등에 차이가 있다.

 

 

관계형 데이터베이스 

테이블에 데이터를 저장한다. 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.

관계형 데이터베이스에는 SQL을 활용해 원하는 정보를 쿼리할 수 있다. 스키마가 뚜렷하다.

테이블간의 관계를 직관적으로 파악할 수 있다.

 

대표적 관계형 데이터베이스 : MySQL, Oracle, SQLite, PostgressSQL, MariaDB

 

비관계형 데이터베이스

데이터가 고정되어 있지 않은 데이터베이스이다. 

관계형 데이터베이스에서는 데이터를 입력할 때 스키마에 맞게 입력해야 하는 반면, NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다. 이런 방식을 schema on read 라고 한다.

읽어올 때에만 데이터 스키마가 사용된다고 하여, 데이터를 쓸 때 정해진 방식이 없다는 의미는 아니다.

데이터를 입력하는 방식에 따라, 데이터를 읽어올 때 영향을 미친다.

 

대표적 NoSQL : 몽고DB, Casandra

 

  • Key-Value 타입
  • 문서형 데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장한다. 각 문서는 속성별로 데이터를 갖고 있고, 컬렉션이라는 그룹으로 묶어서 관리한다 ex) MongoDB
  • Wide-Column 데이터베이스 : 데이터베이스의 column에 대한 데이터를 집중 관리한다. 하나의 행에 많은 열을 포함할 수 있어 유연성이 높다. 데이터 처리에 필요한 열을 유연하게 선택할 수 있다는 점에서 규모가 큰 데이터 분석에 주로 사용된다.                          ex) Cassandra, HBase
  • 그래프 데이터베이스 : 자료구조 그래프와 비슷한 형태. 노드에 속성(entities) 별로 데이터를 저장. ex) Neo4J, InfiniteGraph

 

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

 

1. ACID 성질을 준수해야 하는 경우

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

 

금융 서비스 소프트웨어 개발에서는 반드시 데이터베이스의 ACID 성질을 준수해야 한다. 그래서 이런 경우에는 일반적으로 SQL을 이용한 관계형 데이터베이스를 사용한다.

 

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

 

3. 많은 서버를 필요로 하지 않는 경우 

  다양한 데이터 유형과 높은 트래픽을 지원하도록 설계된 NoSQL 데이터베이스를 사용해야만 하는 이유가 없다.

 

 

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

 

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

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

 

2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우

  클라우드 기반으로 데이터베이스 저장소를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다. 소프트웨어에 데이터베이스의 확장성이 중요하다면 별다른 번거로움없이 확장할 수 있는 NoSQL 데이터베이스를 사용하는 것이 좋다.

 

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

  NoSQL 데이터베이스의 경우 스키마를 준비할 필요가 없기 때문에 빠르게 개발하는데 매우 유리하다. 시장에 빠르게 프로토타입을 출시해야 하는 경우가 이에 해당한다.

 

또한 다운타임(데이터베이스 서버를 오프라인으로 전환하여 데이터 처리를 진행하는 작업 시간)없이 데이터 구조를 자주 업데이트 해야하는 경우, 스키마를 매번 수정해야 하는 관계형 데이터베이스보다 NoSQL기반의 비관계형 데이터베이스를 사용하는게 적합하다.

 

반응형