TIL 08

김지우·2022년 11월 10일
0

TIL

목록 보기
8/16
post-thumbnail

TD: reviwe

SQL 과 NoSQL의 차이, Docker-compose를 이용한 mongodb 연결

오늘은 프론트엔드와 백엔드의 전체 구조, 데이터베이스의 종류인 SQL과 NoSQL의 차이에 대해서 배웠으며 Docker-compose를 이용한 mongodb를 통해서 여러 개의 Docker를 동시에 사용하는 법을 실습했습니다.
한 개의 Docker 프로그램만 작동하더라도 가상 프로그램이 내 컴퓨터 안에서 실행된다는 것이 신기했는데, 그걸 동시에 여러 대를 사용할 수 있다는 걸 알게 된 후 서버의 구조가 배우면 배울수록 매우 복잡하다는 걸 체감했습니다. 그와 동시에 Docker file을 통해 여러 사람이 동시에 같은 개발 환경을 가질 수 있는 점에서 매우 흥미로웠습니다.


프론트엔드와 백엔드의 전체 구조

많은 프론트엔드(브라우저) 에서 백엔드 서버로 API를 요청하며, 백엔드 서버는 데이터 베이스에서 정보를 저장하거나, 가져와 브라우저에 응답을 보내는 구조를 가집니다.



SQL vs NoSql

DB의 종류에는 크게 SQL, NoSQL 2가지 형태로 나뉜다.

SQL

  • 엑셀 표 형식의 구조로 되어있습니다.(row/ colunm/ table)

  • 테이블들 간에 관계가 있을 경우 (관계형 데이터베이스, RDB(Relational DataBase)) 합쳐서 데이터를 쉽게 통합할 수 있습니다.

  • 데이터를 조회하거나 통합할 때 아주 유용하지만 table 형식에 맞는 데이터만 입력할 수 있으므로 유연하지 못합니다.


NoSQL

  • Collection 안에 Document 안에 {}안에 객체 형식의 구조로 저장합니다.
  • 객체 안에 키, 밸류로 데이터를 저장하고 사용할 수 있으므로 유연하게 사용 가능합니다.

출처 : SQL vs NoSQL


프로그램 종류

  • SQL 종류 : Oracle, MySQL, MSSQL, Postgresql...
  • NoSQL 종류 : MongoDB, Firebase, Redis, Elasticsearch...


쿼리문, ORM, ODM

쿼리문 : 데이터베이스를 사용할때 쓰는 라이브러리
ORM : SQL의 쿼리문을 외우지 않고도 사용할 수 있게끔 만들어주는 라이브러리
ODM : NoSQL 의 쿼리문을 외우지 않고도 사용할 수 있게끔 만들어주는 라이브러리

쿼리문

  • 데이터베이스를 사용할때 쓰는 라이브러리 입니다.
  • 기본 명령어
    Insert, into, Board(num, write, title…), values(2, U02…)
    조회할때 쓰는 명령어
    Select writer, title from Board…
  • 매우 복잡하고 다양한 쿼리문을 외워야 사용이 가능하다는 단점이 있습니다.

ORM

  • table로 이루어진 데이터베이스를 다룰 떄 사용하는 SQL을 다른 언어에서 쉽게 사용하도록 해줍니다.

ODM

  • document와 collection으로 이루어진 NoSQL 데이터 베이스를 다룰 수 있도록 해줍니다.


Mongodb

mongoDB는 문서지향(Document-Oriented) 저장소를 제공하는 NoSQL 데이터베이스 시스템입니다.
이외에도 NoSQL 데이터베이스 10gen, Couchbse, CouchDB 등이 있지만 인지도 1위를 유지하고 있습니다.

특징

mongoDB에서는 데이터가 Document로 불리며, 이 데이터의 집합을 Collection(RDMS에서는 Table)이라고 합니다.

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


MongoDB Compass

MongoDB에서 텍스트로만 되어있는 데이터들을 보기 쉽고 자작하기 쉽게 해주는 DB 관리 프로그램입니다.
MongoDB Compass에서 데이터를 생성 가능하지만, 이는 MongoDB Compass에서 데이터를 바로 생성하는 것이 아니라 MongoDB Compass에서 MongoDB로 데이터 생성을 요청한 뒤 생성된 데이터를 다시 요청하여 받아오는 것입니다.



Docker-compose

Docker-compose란 복수 개의 컨테이너를 실행시키는 도커 애플리케이션이 정의를 하기 위한 툴입니다.


.yaml

여러개의 서버를 동시에 실행시키기 위해서는 전용 파일인 야믈(.yaml or .yml) 파일을 정의해주어야 합니다.

version: "3.7"

services:
    my-backend: 
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 3000:3000

    my-database:
        build:
            context: .
            dockerfile: Dockerfile.mongo
        ports:
            - 27017:27017

위와 같은 형식으로 작성되며, version, servicesvolumes, networks를 정의합니다.

services : 각각의 컨테이너에 적용되는 configuration을 포함

  • context : Dockerfile을 포함하는 디렉토리 경로 또는 git repo의 url입니다.
  • dockerfile : Dockerfile을 대체하는 파일을 지정해 줍니다.

ports : Host OS와 컨테이너의 포트를 바인딩 시켜줍니다.


Dockerfile.mongodb를 image로 변경

version: "3.7"

services:
    my-backend: 
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - 3000:3000

    my-database:
        image: mongo:5
        ports:
            - 27017:27017

처음 지정해 준 Dockerfile.mongo파일을 삭제해 준 뒤에 my-databaseimage를 사용하여 정의해 주면 하나의 Dockerfile로 두 개의 데이터베이스를 작동시킬 수 있습니다.

profile
백엔드 성장 기록

0개의 댓글