본 캠프 8일차 TIL

정희준·2023년 3월 22일
0
post-thumbnail

📌 오늘의 내용

수많은 데이터를 관리하고 또 어디서 가져오는 것일까
바로 데이터베이스(DB)다
오늘은 데이터베이스에 대해 알아보자

SQL vs NoSQL

가장 대표적으로 사용되는 데이터베이스의 종류이다

이해를 돕기 위한 위 예제 사진을 보면
SQL은 엑셀 표처럼 데이터를 저장하는 느낌이고
NoSQL은 문서들을 폴더안에 저장하는 느낌이다

각각의 장단점이 있기때문에 차이점을 알고 상황에 따라 적절히 사용해야 한다

자세한 설명은 아래 링크를 참고 해주세요!
https://velog.io/@gmlgml98/SQL-vs-NoSQL


ORM,ODM

SQL과 NoSQL 둘다 적절히 사용해야 하기때문에 두 문법의 구문을 모두 다 외워야 할까?
물론 둘 모두 잘 사용하는것이 가장 좋지만
쉽게 사용하기 위해 나온 도구를 활용하는 방법이 있다!

ORM(Object Relation Mapping) -> SQL

select email from user where id = 'U01' 
-> User.find({id : U01})

ODM(Object Document Mapping) -> NoSQL

db.user.find({id: 'U01'}) 
-> User.find({id : U01}) 

위 예시 처럼 간단하게 사용 할 수 있다!

ORM 종류

  • sequalize(가장유명한 javascript ORM) , typeorm(가장 유명한 typescript ORM), prisma 등등

ODM 종류

  • mongoose 등등

MongoDB

mongoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템입니다.

이외에도 NoSQL 데이터베이스 10gen, Couchbse, CouchDB 등이 있지만 인지도 1위를 유지하고 있습니다.

mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS에서는 Table)이라고 합니다. 스키마 제약 없이 자유롭고, BSON(Binary JSON) 형태로 각 문서가 저장되며 배열(Array)이나 날짜(Date) 등 기존 RDMS에서 지원하지 않던 형태로도 저장할 수 있기 때문에 관계를 연결하는 JOIN이 필요 없이 한 문서에 좀 더 이해하기 쉬운 형태 그대로 정보를 저장할 수 있다는 것이 특징입니다.

문서지향 데이터베이스로, 객체지향 프로그래밍과 잘 맞고 JSON을 사용할 때 아주 유용합니다. 따라서 자바스크립트를 기반으로 하는 Node.js와 호환이 매우 좋기 때문에, Node.js에서 가장 많이 사용되는 데이터베이스입니다. 물론 mysql 같은 관계형 데이터베이스 사용도 가능합니다.

  • Join이 없으므로 Join이 필요 없도록 데이터 구조화가 필요
  • 다양한 종류의 쿼리문을 지원(필터링, 수집, 정렬, 정규표현식 등)
  • 관리의 편의성
  • 스키마 없는(Schemaless) 데이터베이스를 이용한 신속 개발. 필드를 추가하거나 제거하는 것이 매우 쉬워짐
  • 쉬운 수평 확장성
  • 인덱싱 제공



MongoDB Compass

mongodb를 효율적으로 관리하기위한 GUI 프로그램이며

위 사진처럼
직관적인 화면과 간편한 사용법으로 mongodb를 사용하기 쉽게 해주는 도구라고 생각하면 된다!


Docker-compose

Docker를 그룹핑 하는 것으로
.yaml 파일안에 작성하여 docker그룹을 같이 빌드,실행 가능하게 해준다

version: "3.7"

# 컴퓨터들
services:
  # 컴퓨터이름
  my-backend:
    build:
      # 도커파일경로
      context: .
      # 도커파일명
      dockerfile: Dockerfile
    #포트 포워딩 기능 - 는 배열을 의미 - 배열요소 추가가능 
    ports:
    - 4000:4000  

  # 컴퓨터이름
  my-database:
    # 도커파일 없이 이미지만 바로 생성
    image: mongo:5
    # ports:
    # - 27017:27017  => 몽고디비컴패스에서는 접속 x 
    #                => my-backend 도커에서는 네임리졸루션 사용 시 접속 가능! 

위 예제코드처럼 작성 하며 빌드시 두개의 docker가 생성 되며
도커파일 안에 이미지생성 기능명령만 있는경우 도커파일이 존재할 필요가 없고 .yaml 파일에 바로 적어줄 수 있다


네임리졸루션

두개의 도커를 만들고 mongoose 모듈을 활용 해 mongoDB를 실행 해보았는데 에러가 발생했다
왜일까? 이유를 알아보자
백엔드 서버 도커에서 몽고디비를 localhost로 커넥트 시 본인 로컬에서 찾을수 없기때문에 오류가난다

여기서 해결 방안은 도커 컴퓨터의 ip를 직접 적어주는 방법도 있지만 우리는 도커컴포즈 기능인 네임 리졸류션을 활용 할 수 있었다

도커컴포즈는 그룹핑이기때문에 localhost가아닌 DB서버 도커명을 적어주면 도커컴포즈가 ip로 찾아가게된다 -> 네임리졸루션

또한 도커 끼리 통신을 할 경우 네임리졸루션이 가능하기 때문에 포트포워딩을 할 필요가 없다!


터미널,docker-compose 명령어 모음

brew services list -> 실행중인 service 목록 
brew services start  mongodb-community -> mongodb-community 실행
brew services stop mongodb-community -> mongodb-community 종료

// mongo 쉘 명령어
show databases -> 데이터베이스 목록
use local ->  local로 이동
show collections -> collection 목록
mongo -> mongo 실행

docker-compose build -> .yaml 파일 빌드
docker-compose up -> 그룹핑 도커 실행
profile
같이 일하고 싶은 사람이 되어보자! 다시 시작하는 개발 블로그.

0개의 댓글