이번 프로젝트를 진행하며 사실 DB는 전혀 신경을 쓰지 않고 있었는데 이번에 DB를 연결하려고 하다보니 문제가 발생해 해결 하려다 보니 이 데이터베이스에 대한 지식이 없어 GPT가 하라는대로 하는것 말고는 할 수 있는게 없어 너무 답답해 조금 더 돌아 가기로 했다. 그래서 알아보자. 도대체 이 녀석이 뭐고 어떻게 작동하는건지. 항상 기억하자. 코더가 아닌 문제해결, 사고 능력을 기르려면 GPT에 의존하지 말고 공부를 해야 한다는 것을!
🖇️ MongoDB란 무엇일까?
사실 이름만 들어도 그냥 데이터베이스 인것을 예측 할 수 있다. 데이터를 담는 데이터 저장소... 정도로 생각을 하고 있었다. 하지만 좀 더 자세히 알아보자.
우선, 이 mongoDB 의 가장 큰 특징은 NoSql 데이터베이스로, sql커맨드를 사용하지 않고 상호 작용 할 수 있다는것을 의미한다. 대표적인 sql(관계형) 데이터베이스의 예로는 MySQL이다.
여기서 MySQL과 SQL(관계형) 데이터 베이스는 아래와 같이 테이블의 형태로 데이터를 표시한다.
각 데이터는 행과 열로 구분되어 있으며, 각 테이블은 특정 데이터 타입을 저장하는데 쓰인다. 위 이미지를 보면 Users와 Blog Posts는 서로 다른 타입이므로 서로 다른 테이블에 저장되어 있다. 여기서 각 행은 일련의 데이터들을 나타낸다. 예를들어, Users테이블의 첫번째 행의 데이터와 두번째 행의 데이터는 서로 다른 데이터이다. 여기서 각 열은 그 특정 레코드의 특성을 정의한다. email, name과 같다.
또한, 위 이미지와 같이 하나의 데이터 테이블은 다른 데이터 테이블에 종속되거나, 서로 연관을 지을 수 있다. 위 그림을 예로 들면,
Authors의 1번에 있는 유저가 Books 데이터 테이블의 1,2,4,6 책을 가지고 있을 수 있다. 보통, 이런 상황에서 query(데이터베이스에서 특정 정보를 검색하거나 추출하는 작업을 의미. 쉽게 말해, 데이터베이스에 저장된 데이터 중에서 원하는 데이터를 찾아내는 것을 의미함.) 를 할때, SQL을 사용하는 관계형 데이터베이스의 경우, 데이터를 조회하기 위해 SELECT 문을 사용한다.
예시 :
SELECT * FROM employees WHERE department = 'Sales';
이 쿼리는 employees 테이블에서 department가 'Sales'인 모든 행을 검색한다.
SELECT * FROM authors
이 쿼리는 authors 테이블에 있는 모든 레코드를 반환한다.
그렇다면,
NOSQL 데이터베이스인 MongoDB는 위의 예시와 전혀 다른 형태를 가지고 있다.
위 이미지와 같이, 행,열로 나뉜 테이블과 달리 NOSQL 데이터베이스는 collections와 document를 사용한다. 위의 이미지에서 Users, Authors, Books는 각각 collection이고, Users 컬렉션은 user타입의 데이터들을 담고 있다. collection에 담긴 각각의 이러한 데이터들은 documents라고 불리운다.
이러한 문서는 대부분 JSON 형식을 띄고 있으며, 위의 이미지와 같이 중첩된(nested) 문서 형식으로도 데이터를 관리할 수 있다. 위 이미지에서 중첩된 부분은 author이며, 이는 NoSQL을 설명할 때 테이블이 다른 테이블과 연관되어 여러 개의 테이블이 상호작용하는 것과 달리, 중첩된 속성으로 이러한 점을 보완해준다.
mongoDB를 손쉽게 관리 할 수 있는 GUI툴인 MongoDB Compass와 mongoDB shell을 설치해 사용법을 간단히 익혀보기 전에, mongoDB에서는 데이터가 어떤 구조로 되어있고, 어떻게 저장이 되는지 알아보자.
📎 Collections & Documents
먼저, mongoDB는 데이터를 컬렉션에 저장하고, 이 컬렉션은 내가 원하는 만큼 여러개를 가질 수 있다. 예를들어, 데이터베이스에 저장 해야 할 데이터의 종류가 3개라면(유저, 댓글, 포스팅), 각각의 타입들을 서로 다른 컬렉션에 넣어 보관 할 수 있다. 이렇게 하면 내가 원하는 데이터들을 한번에 가져올 수 있어 편리하다. 예를 들어, 데이터베이스에 담긴 댓글을 모두 가져오고싶다면, 댓글 컬렉션에 있는 모든 데이터들을 가져오면 된다.
다음으로, 이 각각의 컬렉션에 담긴 하나하나의 데이터 조각들은 documents라고 불리운다. 아래의 이미지와 같이, Blog Posts 컬렉션에서 document를 하나 살펴보면 아래와 같은 형태로 저장이 되어 있을 것이다. json에 익숙한 사람이라면 데이터 포맷을 보고 json 타입 이라는것을 바로 알아 볼 수 있을 것이다.
여기서 각각의 title, author, tags같은 변수들은 property라고 불리운다. 여기서 또다른 mongoDB의 특징이 등장하는데,
여기서 저 보라색으로 표시된 _id는 mongoDB에서 자체적으로 부여한 id이다. 이 id는 컬렉션에서 documents들을 식별하는데 사용되며, 아이디 값은 고유하다.
다음 포스팅에서는 MongoDB 컴파스를 이용해 조금 더 자세히 들여다 보자.
'Database' 카테고리의 다른 글
[MongoDB] 연산자, $in, $nin - (4) (3) | 2024.07.25 |
---|---|
[MongoDB] 데이터 필터링, Nested Document - (3) (4) | 2024.07.25 |
[MongoDB] MongoDB - Compass, Shell을 이용한 데이터 삽입 - (2) (3) | 2024.07.24 |