-
MongoDB 알아보기웹 프로그래밍/BE(Back-End) 2021. 7. 6. 22:21
MongoDB는 DBMS의 한 종류로 데이터의 구축과 조작을 비관계형(NoSQL)방식으로 관리하는 DBMS이다.
더보기DBMS는 대량의 데이터를 저장하고 관리하기 위해 활용되는 시스템으로 컴퓨터에 데이터가 들어가고 나오기 위한 소프트웨어 도구의 집합이다.
DBMS는 다음과 같은 역할을 한다.
- 정의: 형식, 구조, 제약을 통해 데이터를 균일하게 관리하도록 도와줌.
- 구축: 관리하는 정보를 기억 장치에 저장.
- 조작: 질의 및 다른 기능을 통해 데이터를 독립적이고 효율적으로 접근하게 해줌.
- 공유: 데이터에 동시에 접근할 수 있게 해줌.
- 보호: 보안을 유지시키고 충돌을 복구할 수 있게 해줌.
- 유지보수: 시간이 지나면서 변화하는 요구사항을 반영할 수 있게 해줌.
MongoDB의 구조는 아래의 그림과 같다.
MongoDB는 데이터베이스 안에 컬렉션, 컬렉션 안에 도큐먼드가 있는 구조로 되어 있다.
도큐먼트는 실질적인 데이터가 있는 형태이고 이러한 도큐먼트를 묶음형태로 모아놓은 것이 컬렉션이다.
컬렉션은 어떠한 특정 주제를 가지고 도큐먼트를 모아놓는다. 예를 들면 회원 정보, 회원이 구매한 물품 등이다.
도큐먼트의 구조를 구체적으로 보면 JSON과 유사한 BSON(Binary JSON)구조로 되어있다.
BSON 구조는 필드와 값쌍(필드:값)으로 이루어져 있으며 필드에는 뒤에 오는 값이 어떤 정보인지를 담고 있다.
필드와 필드 사이는 쉼표로 구분하고 도큐먼트 하나는 중괄호로 감싸져 있다.
기존의 RDBMS(MySQL, SQL Server, Postgresql...)을 대체하여 사용할 수 있는 MongoDB의 장점은 무엇일까?
1) 빠른 속도와 확장성
기존의 관계형 데이터베이스들은 1970년대에 처음 나왔기 때문에 인터넷과 클라우드 환경이 발달한 현대 애플리케션들의 일부 수요를 만족시키지 못했다.
이러한 시점에서 2000년대 이후에 등장한 NoSQL DBMS는 뛰어난 확장성이나 성능을 발전시키는 방향으로 개발되었다.
2) 친숙함과 이용의 편리성
MongoDB는 데이터 관리나 접근에 사용하는 언어로 JavaScript를 활용하고 있다.
기존의 RDBMS는 SQL이라는 언어를 따로 사용하고 있어 데이터베이스에 질의하기 위한 목적이 아니라면 사용할 일이 없어 개발자 입장에서는 SQL도 알아야하는 불편함이 존재했다.
또한, MongoDB는 웹 서버와 통신할 때 자주 쓰이는 JSON과 유사한 형태로 저장하는 방식을 택하여 웹 개발자에게는 더 친숙하게 다가오는 DB이다.
이러한 MongoDB의 구조는 테이블 구조와는 다르게 어떤 값을 가질지, 크기는 얼마나 될지를 미리 정하기 않고 데이터를 저장할 수 있다.
3) 쉽고 빠른 분산 컴퓨팅 환경 구성
MongoDB는 복제(replicate)와 샤딩(sharding)이라는 기능을 제공하고 있어 분산 컴퓨팅 환경을 구성하는데 있어 큰 장점을 가진다.
데이터베이스에서 복제는 데이터베이스가 애플리케이션과 DBMS 사이의 통신이 끊기거나 통신하던 DBMS가 들어있는 데이터센터가 정전이 일어났을 때 스스로 복제된 데이터베이스가 있다면 문제를 해결할 수있다.
샤딩은 데이터를 읽고 쓰는 속도를 향상시킬 수 있는 기능 중 하나로 정보를 분산해서 여러 대의 서버 데이터베이스에 저장하는 것이다.
이러한 복제와 샤딩을 MongoDB는 DBMS 상에서 기본적으로 제공하는 기능만으로 쉽게 구성할 수 있다.
그러면 언제 MongoDB를 써야할까?
다음과 같은 상황이라면 MongoDB사용을 고려하면 된다.
1) 스키마가 자주 바뀌는 환경
더보기스키마: 어떤 종류의 정보를 어떤 구조에 어떤 관계를 가지고 있는지 정의한 구조
MongoDB는 document지향 스토어 방식을 채택하고 있기 때문에 스키마의 변경이 자유로운 편이다.
만약에 추가될 기능이 확실하지 않고 상황에 따라 애틀리케이션에 저장될 데이터가 지속적으로 달라지는 개발이라면 MongoDB를 쓰는 것이 좋다.
그렇다고 해서 하나의 컬렉션에 여러 개의 스키마가 존재하면 코드의 효율성이 떨어지므로 개발이 완료된 후에는 결정된 스키마가 명료하고 성능상 효율성을 고려한 형태가 되어야한다.
또한, MongoDB는 스키마가 없는 구조로 되어 있기 때문에 다양한 형식의 로그를 기록할 때에도 유용하다.
2) 분산 컴퓨팅 환경
위에서 MongoDB의 장점을 봤듯이 MongoDB는 샤딩과 복제를 DBMS수준에서 지원해서 여러 대의 서버에 데이터베이스를 나누는 분산 컴퓨팅 환경을 비교적 쉽게 만들 수 있다.
복제는 고가용성(항상 사용할 수 있는 상태)환경이 필요할 때 고려해볼만한 사항이고
샤딩은 저장용량이 늘어나면서 읽기, 쓰기 속도가 필요한 만큼 나오지 않을 때 고려할만한 사항이다.
복제를 이용하면 데이터베이스가 연결이 끊기거나 망가지는 상황에서 멈추지 않고 지속적으로 서비스를 제공할 수 있게 해준다.
샤딩을 고려하는 예시는 다음과 같다.
서비스의 사용자가 많이 늘어난 상황일 때 데이터베이스의 저장용량이 늘어나고 작업량이 많아지게 되면 속도가 느려질 수 있다.
이 때, 최적화를 시도한 후에 부족하면 단일 서버의 성능을 향상시켜야할 것이다.
점점, 단일 서버의 성능을 향상시키다보면 샤딩을 하여 서버를 나누는 것이 비용적으로 저렴할 수 있다.
이러한 경우에 샤딩의 이점을 볼 수 있다.
'웹 프로그래밍 > BE(Back-End)' 카테고리의 다른 글
SSH (Secure SHell) (0) 2021.07.07 GET과 POST (0) 2021.07.03 SQL & NoSQL (0) 2021.07.02 AWS EC2 이용해보기 (0) 2021.06.30 Web Crowling & Web Scraping (0) 2021.06.28