대망의 DB 파트다. 상당히 장기 시리즈가 될 것으로 예상 되는 파트.
백엔드 개발자에게 중요한 게 한두가지가 아니겠지만, DB 활용 능력이 중요하다는 사실은 자명하다. 웹 애플리케이션 아키텍쳐 상에서 WAS 는 DBMS에 데이터를 요청하고 그에 맞는 데이터가 전달되어 최종적으로 HTTP를 통해 Response 메시지가 전달된다. 이 로직을 백엔드 개발자가 담당하고 백엔드 개발자의 판단 미스 하나가 서비스를 느리게 만들 수도 있으니까.
DB 파트의 첫 번째 포스팅 시작하겠다. 벌써부터 머리가 띵하지만....이왕 시작한 시리즈 끝까지 연재 해 보자.
Structured Query Language. 우리가 RDBMS에서 뭔가 데이터를 불러올 때 정말 많이 쓰는 그것 맞다.
DDL, DML, DCL 세 가지 종류로 명령어들이 나뉘고 Oracle, MySQL, MSSQL, PostgreSQL 등 관계형 데이터베이스에서 주로 쓰인다.
관계형 데이터베이스에서는 행과 열로 구분 된 테이블에 데이터를 저장하고, 테이블의 구조와 타입등이 사전에 정의된다. 즉 이 정의에 어긋나는 데이터는 해당 테이블에 저장할 수 없다. 또한 테이블 간에 관계 또한 명확하게 정해져있으므로 한번 설계 해 두면 데이터를 집어넣는 데 상당히 편리하다.
물론 SQL이라는 게 표준이 명확하게 정해져있다고 볼 순 없다. MySQL에서나 Oracle에서나 조금 씩 다르다. 그렇지만 SQL 형태의 언어를 통해 이러한 RDBMS를 제어하기 때문에 관계형 데이터베이스를 SQL 데이터베이스라고도 부를 수 있다.
RDBMS가 아닌 나머지를 통틀어 NoSQL 데이터베이스라고 한다. SQL을 사용하지 않는다는 의미에서 NoSQL이 아닌, Not only SQL이라는 의미에서 NoSQL이라는 이름을 가진다.
데이터가 고정되어있는 형태가 아니다. 즉 정말 다양한 데이터 형태를 저장 할 수 있다.
RDBMS는 경직 된 스키마가 존재하지만, NoSQL은 그렇지 않다. RDBMS는 스키마에 맞게 데이터를 입력해야 저장이 되지만 NoSQL에서는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다.
종류로는 크게 네 가지가 있다.
마치 Map 자료구조와 같이 Key 하나에 value 데이터가 전달되는 구조다.
대표적으로 redis
, Dynamo
등이 있다.
데이터를 테이블이 아닌 문서처럼 저장하는 데이터베이스며, JSON 형태의 데이터를 문서화 하여 저장한다.
각각의 문서는 하나의 속성에 대한 데이터를 가지고 있고, 컬렉션이라고 하는 그룹으로 묶여서 관리된다.
대표적으로 mongoDB
가 있다.
데이터베이스의 column에 대한 데이터를 집중적으로 관리하는 데이터베이스다.
각 열에 key-value 형태로 데이터가 저장되고 컬럼 패밀리라는 열의 집합체 단위로 데이터를 처리할 수 있다.
데이터 처리에 필요한 열의 선택에 유연성이 크기 때문에 데이터 분석에 주로 사용되고 대표적으론 Cassandra
, HBase
가 있다.
그래프 형태로 데이터간에 관계를 구성하는 데이터베이스다.
노드에 속성 별로 데이터를 저장하며, 각 노드간 관계를 edge로 표현한다.
대표적으로 Neo4J
, InfiniteGraph
가 있다.
SQL 데이터베이스는 앞서 말했듯이 고정 된 스키마를 기반으로 데이터가 저장이 되지만 NoSQL은 그렇지 않고 다양한 방법으로 데이터를 저장 할 수 있다.
그리고 스키마 그 자체가 변경되는 경우 SQL 형 데이터베이스는 모든 데이터에 변경이 필요하게 될 수 있지만, NoSQL 데이터베이스는 스키마의 형태를 조금 더 동적으로 관리할 수 있다.
SQL 데이터베이스는 확실히 구조화 된 SQL 쿼리를 사용해야 하지만, NoSQL은 데이터 그룹 자체를 조회하는 데 초점을 두고 있다. 그러므로 반드시 SQL을 쓸 필요는 없다.
SQL 기반 데이터베이스는 수직적으로 확장한다. 하지만 NoSQL 데이터베이스는 수평적으로 확장 시킬 수 있다. 상대적으로 SQL 기반 데이터베이스가 하드웨어 성능을 많이 이용하는 편이다. NoSQL 기반 데이터베이스는 클라우드 서비스를 통해 DB를 운용하는 데 조금 더 유리하다.
확장성이나 속도 면에서 NoSQL이 조금 더 유리해보이지만, 항상 그렇지는 않다. 구조가 명확하게 정해져있다면 SQL 데이터베이스가 훨씬 유리 할 수도 있기에 상황에 따라 적절한 데이터베이스를 사용해야 한다.
정리하면 아래와 같다.
간단하게 SQL 과 NoSQL 데이터베이스의 차이를 알아 보았다.
다음 포스팅은 ORM에 대해 알아 보도록 하겠다.
https://www.oracle.com/kr/database/what-is-database/
https://www.mongodb.com/scale/nosql-vs-relational-databases
http://www.incodom.kr/SQL