몽고 반점 아님 몽고 DB임

 

“더이상 미룰 수 없어요. 이제는 진짜 몽고DB로 이전해야 합니다.”

개발느님이 말했다.

 

…몽고 DB?

 

몽고라고 하면 몽고반점밖에 안 떠오르는데…

몽고 DB는 뭐지? DB 이름?

 

엉덩이 점이 아닌 몽고를 찾으러 떠난다.

 

 

 

 

SQL과 NoSQL

 

몽고 DB를 이해하려면 우선 SQLNoSQL의 개념을 알아야 한다.

SQL, NoSQL은 소프트웨어에서 데이터를 처리할 때 쓰는 데이터베이스를 조회하거나 수정하는 프로그래밍 언어다.

즉, 데이터베이스 자체를 나타내는 게 아니라, 특정 유형의 데이터베이스와 상호작용하는 쿼리 언어를 의미하는데 사실상 데이터베이스의 의미로도 같이 쓰이고 있다.

(이 글에서는 SQL은 관계형 데이터 베이스와, NoSQL을 비관계형 데이터 베이스와 동일한 의미로 설명한다.)

 

SQL

SQL은 Structured Query Language의 줄임말로, 관계형데이터베이스시스템(RDBMS)에서 데이터를 관리할 때 사용한다.

관계형 데이터 베이스의 특징은 아래와 같다.

 

1. 엄격한 스키마(schema)

SQL은 고정된 행(row)과 열(coulm)로 구성된 테이블에 데이터를 저장한다.

각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.

테이블의 구조 및 데이터 형식은 사전에 정의되며, 해당 형식에 맞는 데이터만 삽입할 수 있는 엄격한 구조이다.

 

 

상품 정보가 들어있는 Products 테이블을 보면 Id, Name, Price, Seller, Category라는 Column이 미리 정해져있고, 해당 필드에는 적합한 포맷의 데이터만 넣을 수 있다.

 

2. 테이블 간의 관계

데이터들을 여러 개의 테이블에 나누기 때문에, 테이블 간 데이터가 중복되지 않는다. 아래와 같이 상품정보 / 고객정보 / 주문정보를 나누어 저장하여 데이터를 관리하기 때문에 수정이 필요할 때에는 해당 테이블만 수정하면 되어, 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다.

 

 

 

 

여러 테이블의 데이터를 조합해서 사용해야 하는 경우, 테이블을 JOIN하면 된다.

예를 들어, 주문 id 145의 상품 가격을 알고 싶다면 orders 테이블과 products 테이블을 join 하면 된다.

 

NoSQL

 

NoSQL은 “NO SQL”이 아닌 “Not only SQL”의 의미로, 관계형 데이터베이스 외에도 다양한 방식으로 데이터를 저장하는 비관계형 데이터베이스의 프로그래밍 언어이다.

NoSQL의 특징은 SQL의 반대라고 보면 된다.

 

1. 스키마 없음

SQL처럼 미리 row, column 및 데이터 형식을 미리 정해놓지 않는다.

SQL에서는 정해진 스키마를 따르지 않는다면 데이터를 추가할 수 없지만, NoSQL에서는 다른 구조의 데이터를 같은 컬렉션(=SQL의 테이블)에 추가할 수 있다.

 

 

출처 : https://siyoon210.tistory.com/130

 

 

Users 컬렉션을 보면 {name: ‘Max’, age: 29}로 저장된 문서와 {firstName: ‘Manu’, age: 31}로 서론 다른 데이터가 저장되어 있는 것을 볼 수 있다.

 

2. 관계 없음

 

NoSQL은 SQL처럼 여러 테이블에 데이터를 나눠담는 게 아니라, 관련된 일반적인 정보를 모두 포함한 데이터를 컬렉션에 저장한다. (데이터 중복 허용)

따라서 여러 테이블/컬렉션을 JOIN할 필요없이 이미 필요한 데이터를 갖춘 문서를 갖는다.

 

 

출처 : https://siyoon210.tistory.com/130

 

 

SQL과 NoSQL의 장단점

 

SQL

 

  • 장점

– 스키마가 엄격하기 때문에, 데이터는 일관되어 있고 무결하다.

– 테이블 간 중복 없이 데이터가 저장되기 때문에, 데이터 수정 시 용이하다.

  • 단점

– 엄격한 스키마로 유연성이 떨어진다

– 중복된 데이터가 없기 때문에, JOIN을 사용하여 복잡한 쿼리를 짜야 한다.

 

꼼꼼하고 깐깐해서 실수는 없지만 조금 차가운… 일잘러 상사 느낌이다.

 

 

내 마음을 앗아간 주인공

 

 

NoSQL

 

  • 장점

– 스키마가 없기 때문에, 유연하다.

– 애플리케이션이 필요로 하는 형식으로 데이터가 저장되기 때문에, 데이터 처리 속도가 빠르다.

  • 단점

– 데이터가 중복될 수 있기 때문에 수정이 필요한 경우 여러 레코드를 업데이트해야 한다.

 

책상 정리정돈은 하나도 안되어있지만 물어보면 착착 찾아서 주는 … 허술한 상사 느낌이다.

(아침에 마주쳐서 인사하는데, 눈이 조금이라도 부어있으면 “무슨 일 있어요?”라고 바로 물어봐 주는 그런 상사…)

 

 

그렇게 웃지 마요… 심장 아프니까

 

 

SQL과 NoSQL의 사용 환경

 

NoSQL이 더 신기술로 인식되고 있기는 하나 각각의 장단점이 있으니 주로 어떤 데이터를 사용하는지 그리고 어떤 애플리케이션에서 사용하는지에 따라 잘 골라서 사용하면 된다.

 

SQL은 아래 환경에 적합하다.

  • 사전에 파악 가능한 논리적이고 뚜렷한 요구 사항이 있는 관계형 데이터를 처리할 때(변경될 여지가 없고, 사용자에게 명확한 데이터가 중요한 경우)
  • 앱과 데이터베이스 간에 동기화된 상태로 유지해야 하는 스키마
  • 복잡한 쿼리 또는 다중 행 트랜잭션이 필요한 앱

 

NoSQL은 아래 환경에 적합하다.

  • 대규모 데이터, 확정되지 않은 데이터 또는 빠르게 변화하는 데이터를 다룰 때
  • 스키마 중립적 데이터 또는 앱에 의해 결정되는 스키마
  • 강력한 일관성, 데이터 무결성보다는 성능과 가용성이 더 중요할 때

 

 

그래서 몽고 DB가 뭐야?

 

몽고 DB는 대표적인 NoSQL 데이터 저장소로 몽고의 뜻은 humongous(거대한)의 줄임말로 거대한 DB라는 뜻이며(몽고반점 절대 아님), 다음과 같은 세 가지 특징을 지닌다.

 

  • Open Source
  • Document
  • BASE

 

1. Open Source

오픈소스로 무료로 이용 가능하다.

 

2. Document

NoSQL은 크게 4가지로 분류할 수 있는데, 이중에 몽고 DB는 Document (문서 지향 데이터 저장소)에 해당한다.

 

 

 

 

SQL은 테이블에 열로 엄격하게 통제하여 정리된다면 몽고 DB는 컬렉션(collection) 안에 문서(document)로 저장이 되는데, 구조는 사전에 정의되지 않고, 저장되는 데이터에 따라 적합하게 저장된다.

 

 

 

 

아래는 몽고DB의 데이터 저장 예시이다.

 

 

 

 

3. BASE

 

몽고 DB의 속도가 빠른 이유는 ACID와 대립되는 BASE라는 데이터베이스 트랜잭션의 특성을 택했기 때문이다.

 

  • Basically Available

– 기본적으로 언제든지 사용할 수 있다는 의미로, 가용성이 필요하다

  • Soft state

– 외부의 개입 없이도 정보가 변경될 수 있다는 의미로, 네트워크 파티션 등 문제가 발생되어 일관성이 유지되지 않는 경우 데이터를 자동으로 수정한다

  • Eventually consistent

– 일시적으로 일관적이지 않은 상태가 되어도 일정 시간 후 일관적인 상태가 되어야한다는 의미로, 장애 발생 시 일관성을 유지하기 위한 이벤트를 발생시킨다

 

=> 일관성을 어느정도 포기하더라도 가용성을 더 우선시한다.

cf. ACID는 다음과 같은 데이터베이스 트랜잭션의 특징을 의미한다.

 

  • Atomicity(원자성) : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
  • Consistency(일관성) : 트랜잭션이 실행을 성공적을 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지해야 함
  • Isolation(독립성) : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
  • Durability(지속성) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함

 

 

기획자가 몽고DB를 안다는 것

 

오늘 공부한 내용은 개발자의 몽고DB 지식에 비하면 핫도그 겉면에 뿌린 설탕 수준이지만, 이런 내용을 이해함으로써 우리 애플리케이션에서 사용하는 DB의 특성을 이해하고 개발자와의 커뮤니케이션을 좀더 수월히 할 수 있을 것이다.

 

결론 : 어제보다 좀 더 스맡-으해진 기획자?

 

 


 

<참고 사이트>

  • https://siyoon210.tistory.com/130
  • https://www.itworld.co.kr/news/200094
  • https://www.mongodb.com/ko-kr/compare/mongodb-mysql
  • https://velog.io/@swhan9404/NoSQL-%EC%9D%98-%EC%A2%85%EB%A5%98%EB%B3%84-%ED%8A%B9%EC%A7%95
  • https://velog.io/@swhan9404/mongoDB-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0
  • https://hanamon.kr/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-sql-vs-nosql/
  • https://kciter.so/posts/about-mongodb
  • https://siyoon210.tistory.com/130
  • https://brunch.co.kr/@b30afb04c9f54dc/35 

 

 

쪼렙 서비스 기획자님이 브런치에 게재한 글을 편집한 뒤 모비인사이드에서 한 번 더 소개합니다.