MacOS | MongoDB 설치 및 설계

리진아·2024년 12월 23일
0

PolishPix

목록 보기
2/7

DB 선택 이유는 NoSQL을 사용해 보고 싶었던 이유가 전부이다.
지금까지 사용해본 데이터베이스는 Oracle, MySql,Altibase, Tibero 등이 있는데 NoSQL를 한 번도 사용해 본 적이 없었고, 은근 회사 자격 요건에 NoSQL 경험자를 보았기 때문이다.

1. 우선 brew로 몽고디비 설치

brew tap mongodb/brew
brew install mongodb-community

2. 몽고디비 시작

//시작
brew services start mongodb-community 

//종료
brew services stop mongodb-community

default 포트는 27017이다.

3. GUI 설치하기

https://www.mongodb.com/try/download/compass

공식사이트에 접속하여 Compass 다운

몽고DB Compass : MongoDB를 위한 GUI로 데이터를 시각적으로 조작이 가능합니다. CRUD 기능을 사용해 데이터와 상호 작용이 가능합니다.
또한, 실행하는 쿼리의 성능을 볼 수 있으며 이를 통하여 최적화가 가능합니다.

자 그럼 모든 준비는 끝났어요.
이제 몽고DB에 대해 어느정도 지식이 있어야겠죠?

4. MonggoDB 장단점

몽고DB는 데이터베이스 시스템 중 문서 지향적(Document-oriented)이라는 종류에 해당하는 DB입니다.
문서(Document)라는 개념을 중심으로 데이터를 구성하는 겁니다.

데이터를 JSON형식으로 저장합니다. 하나의 문서에는 여러 필드와 값이 포함될 수 있으며 요구사항에 맞게 데이터를 조직화할 수 있습니다.

또한, 가장 큰 특징인 NoSQL인 점이죠.
NoSQL은 쿼리가 아닌 메서드로 데이터를 조작합니다.


장점

  • 다양한 형태의 데이터 저장 가능
  • Read/Write 성능이 뛰어남
  • JSON 구조 :  데이터를 직관적으로  이해 가능
  • 사용 방법이 쉽고, 개발이 편리함

단점

  • 데이터 업데이트 중 장애 발생 시, 데이터 손실 가능
  • 많은 인덱스 사용 시, 충분한 메모리 확보 필요
  • 트랜잭션 지원이 RDBMS 대비 미약함

5. 스키마 설계

RDBMS와 다르게 mongoDB의 경우 유연하게 스키마를 수정이 가능!

스키마 디자인을 할 때 고려할 수 있는 디자인 방식은 Embedding or Referencing 방식입니다.


우선 가장 메인이 될 테이블은 게시물 테이블들이에요.

이런 식으로 화면에 뿌려줄 거에요.

post : post_id(포스터 고유 아이디), post_contetnt(포스터 내용), user_id(회원 아이디)
image : image_id(이미지 아이디), image_content(이미지 저장 방식 결정 후 판단), post_id(포스터 고유 아이디)
user : user_id(회원 아이디), email, password, phone, name, profile(프로필 사진)
comment : comment_id(댓글 아이디), comment_contetnt(댓글 내용), parents_comment(부모 아이디), user_id(회원 아이디), post_id(포스터 고유 아이디)
like : user_id(회원 아이디), post_id(포스터 아이디)

간단하게 우선 생각나는대로 정리해봤습니다. 이는 RDB식 설계 방식입니다.
이제 여기서 엔티티 간의 관계를 Embedding 방식과 Referencing 방식 중 선택해야 합니다.

Reference : collection 간 참조할 수 있도록 id를 저장하는 것
Embed : 관계된 document를 통째로 저장하는 것

어떤 방식을 선택해야 하는지는 프로그램에 따라 다릅니다.
잦은 조회로 테이블 간 조인하는 경우가 많은 상황 : embed
데이터에 대한 변경이 잦은 상황 : reference


사실 제 상황에선 embed방식이 적합합니다. 그런데 처음에 게시물에 대한 좋아요 갯수를 post 테이블에 likes 컬럼으로 넣으려고 했다가 그럼 변경이 잦아질 것 같아서 구조를 바꿨습니다. ㅎㅎ

장단점을 간단하게 적으면 위와 같습니다.

6. DB 연결 및 생성

https://account.mongodb.com/account/register
우선 위 링크에 접속하여 가입을 해줍니다.

https://cloud.mongodb.com/
이후 New Project를 만들어줍니다.

무료 버전으로 클러스터를 만들어줍니다.

그럼 이렇게 만들어져 있는데 connect를 눌러 연결해줍니다.

이후, MongoDB Compass에 접속하여 클러스터에 연결합니다.

mongodb+srv://mnb2098:<db_password>@polishpix.54gxv.mongodb.net/

Compass에서 Url을 입력할 때 비밀번호에 괄호는 빼주세요. 이걸로 30분간 삽질함.. -_-;;

연결이 잘 되었습니다.


이후 기본으로 세팅되어 있는 거 외 database를 하나 더 만들어줬습니다.

이제 user 컬렉션에 데이터를 넣어볼건데, 그러기 전 이미지 파일을 저장하기 위한 형식을 먼저 알아야 합니다.


7. 이미지 파일 저장 및 데이터 생성하기

application 특성 상 이미지 데이터가 많을 예정입니다.
base64로 변환 시 용량이 커지고 가독성이 떨어집니다.
그렇기 때문에 웹 서버에 업로드 후 URL을 db에 저장하는 방식으로 하겠습니다.

https://imgbb.com/
링크에 접속하여 계정 생성 후 임시 이미지를 업로드 해주었습니다.

이후 다시 compass로 돌아와서 임의의 user와 post데이터를 추가해주겠습니다.



마무리

이렇게 해서 프로젝트 초기 세팅은 마쳤습니다.
긴 글 읽어주셔서 감사합니다.

profile
알맹이가 가득 찬 개발자가 되기 위해 한 걸음 더 다가가는,

0개의 댓글