[백엔드 로드맵 - DB] SQL vs NoSQL

Sierra·2022년 8월 5일
0

Backend-Roadmap

목록 보기
28/43
post-thumbnail

Intro

대망의 DB 파트다. 상당히 장기 시리즈가 될 것으로 예상 되는 파트.

백엔드 개발자에게 중요한 게 한두가지가 아니겠지만, DB 활용 능력이 중요하다는 사실은 자명하다. 웹 애플리케이션 아키텍쳐 상에서 WAS 는 DBMS에 데이터를 요청하고 그에 맞는 데이터가 전달되어 최종적으로 HTTP를 통해 Response 메시지가 전달된다. 이 로직을 백엔드 개발자가 담당하고 백엔드 개발자의 판단 미스 하나가 서비스를 느리게 만들 수도 있으니까.

DB 파트의 첫 번째 포스팅 시작하겠다. 벌써부터 머리가 띵하지만....이왕 시작한 시리즈 끝까지 연재 해 보자.

SQL

Structured Query Language. 우리가 RDBMS에서 뭔가 데이터를 불러올 때 정말 많이 쓰는 그것 맞다.

DDL, DML, DCL 세 가지 종류로 명령어들이 나뉘고 Oracle, MySQL, MSSQL, PostgreSQL 등 관계형 데이터베이스에서 주로 쓰인다.

관계형 데이터베이스에서는 행과 열로 구분 된 테이블에 데이터를 저장하고, 테이블의 구조와 타입등이 사전에 정의된다. 즉 이 정의에 어긋나는 데이터는 해당 테이블에 저장할 수 없다. 또한 테이블 간에 관계 또한 명확하게 정해져있으므로 한번 설계 해 두면 데이터를 집어넣는 데 상당히 편리하다.

물론 SQL이라는 게 표준이 명확하게 정해져있다고 볼 순 없다. MySQL에서나 Oracle에서나 조금 씩 다르다. 그렇지만 SQL 형태의 언어를 통해 이러한 RDBMS를 제어하기 때문에 관계형 데이터베이스를 SQL 데이터베이스라고도 부를 수 있다.

NoSQL

RDBMS가 아닌 나머지를 통틀어 NoSQL 데이터베이스라고 한다. SQL을 사용하지 않는다는 의미에서 NoSQL이 아닌, Not only SQL이라는 의미에서 NoSQL이라는 이름을 가진다.

데이터가 고정되어있는 형태가 아니다. 즉 정말 다양한 데이터 형태를 저장 할 수 있다.

RDBMS는 경직 된 스키마가 존재하지만, NoSQL은 그렇지 않다. RDBMS는 스키마에 맞게 데이터를 입력해야 저장이 되지만 NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다.

종류로는 크게 네 가지가 있다.

Key-value

마치 Map 자료구조와 같이 Key 하나에 value 데이터가 전달되는 구조다.
대표적으로 redis, Dynamo 등이 있다.

Document

데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스며, JSON 형태의 데이터를 문서화 하여 저장한다.
각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶여서 관리된다.
대표적으로 mongoDB가 있다.

Wide Column Store

데이터베이스의 column에 대한 데이터를 집중적으로 관리하는 데이터베이스다.
각 열에 key-value 형태로 데이터가 저장되고 컬럼 패밀리라는 열의 집합체 단위로 데이터를 처리할 수 있다.
데이터 처리에 필요한 열의 선택에 유연성이 크기 때문에 데이터 분석에 주로 사용되고 대표적으론 Cassandra, HBase가 있다.

Graph

그래프 형태로 데이터간에 관계를 구성하는 데이터베이스다.
노드에 속성 별로 데이터를 저장하며, 각 노드간 관계를 edge로 표현한다.
대표적으로 Neo4J, InfiniteGraph 가 있다.

SQL VS NoSQL

SQL 데이터베이스는 앞서 말했듯이 고정 된 스키마를 기반으로 데이터가 저장이 되지만 NoSQL은 그렇지 않고 다양한 방법으로 데이터를 저장 할 수 있다.

그리고 스키마 그 자체가 변경되는 경우 SQL 형 데이터베이스는 모든 데이터에 변경이 필요하게 될 수 있지만, NoSQL 데이터베이스는 스키마의 형태를 조금 더 동적으로 관리할 수 있다.

SQL 데이터베이스는 확실히 구조화 된 SQL 쿼리를 사용해야 하지만, NoSQL은 데이터 그룹 자체를 조회하는 데 초점을 두고 있다. 그러므로 반드시 SQL을 쓸 필요는 없다.

SQL 기반 데이터베이스는 수직적으로 확장한다. 하지만 NoSQL 데이터베이스는 수평적으로 확장 시킬 수 있다. 상대적으로 SQL 기반 데이터베이스가 하드웨어 성능을 많이 이용하는 편이다. NoSQL 기반 데이터베이스는 클라우드 서비스를 통해 DB를 운용하는 데 조금 더 유리하다.

확장성이나 속도 면에서 NoSQL이 조금 더 유리해보이지만, 항상 그렇지는 않다. 구조가 명확하게 정해져있다면 SQL 데이터베이스가 훨씬 유리 할 수도 있기에 상황에 따라 적절한 데이터베이스를 사용해야 한다.

정리하면 아래와 같다.

  • SQL 데이터베이스가 유리한 경우
    • ACID(원자성, 일관성, 격리성, 지속성) 등을 준수해야 하는 경우
    • 데이터가 구조적이고 일관적인 경우
  • NoSQL 데이터베이스가 유리한 경우
    • 데이터의 구조가 명확하지 않은 대용량 데이터를 저장하는 경우
    • 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
    • 빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트 하는 경우

Outro

간단하게 SQL 과 NoSQL 데이터베이스의 차이를 알아 보았다.
다음 포스팅은 ORM에 대해 알아 보도록 하겠다.

Reference

https://www.oracle.com/kr/database/what-is-database/
https://www.mongodb.com/scale/nosql-vs-relational-databases
http://www.incodom.kr/SQL

profile
블로그 이전합니다 : https://swj-techblog.vercel.app/

0개의 댓글