수많은 데이터를 관리하고 또 어디서 가져오는 것일까
바로 데이터베이스(DB)다
오늘은 데이터베이스에 대해 알아보자
가장 대표적으로 사용되는 데이터베이스의 종류이다
이해를 돕기 위한 위 예제 사진을 보면
SQL은 엑셀 표처럼 데이터를 저장하는 느낌이고
NoSQL은 문서들을 폴더안에 저장하는 느낌이다
각각의 장단점이 있기때문에 차이점을 알고 상황에 따라 적절히 사용해야 한다
자세한 설명은 아래 링크를 참고 해주세요!
https://velog.io/@gmlgml98/SQL-vs-NoSQL
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 종류
ODM 종류
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 같은 관계형 데이터베이스 사용도 가능합니다.
mongodb를 효율적으로 관리하기위한 GUI 프로그램이며
위 사진처럼
직관적인 화면과 간편한 사용법으로 mongodb를 사용하기 쉽게 해주는 도구라고 생각하면 된다!
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로 찾아가게된다 -> 네임리졸루션
또한 도커 끼리 통신을 할 경우 네임리졸루션이 가능하기 때문에 포트포워딩을 할 필요가 없다!
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 -> 그룹핑 도커 실행