본문 바로가기
Books/Node.js 프로젝트 일주일 ✔️

[Node.js 프로젝트 투입 일주일 전] 8장 - 데이터베이스 사용하기

by Aaron-Kim 2022. 5. 10.

8.1 MySQL

  - 맥에서 MySQL 설치하기

  - Homebrew 설치

    - Homebrew: 맥 OS용 패키지 관리자

  - MySQL 설치

    - brew search mysql

    - brew install mysql

    - brew list

  - MySQL 설정

    - brew services start mysql

    - mysql -h localhost -u root -p

    - exit

    - brew services stop mysql

  - 윈도우에서 MySQL 설치하기

  - MySQL 설치

    - MySQL shell을 통해 사용자 생성, 권한 설정, SQL 실행 등 할 수 있음

  - MySQL 실행 및 종료

  - Workbench 설치하기

    - Workbench: MySQL 서버에 접속해서 데이터베이스 테이블을 모델링하고 SQL을 사용해서

                              DB 작업을 할 수 있도록 도와주는 GUI 기반의 MySQL 통합 관리 프로그램

  - 데이터베이스 및 테이블 생성하기

    - 데이터베이스 생성

    - 테이블 생성

  - MySQL 모듈 사용하기

    - mysql 모듈 설치

      - npm install mysql

    - MySQL 연결

      - createConnection() 함수를 이용해서 DB 접속을 위해 연결하고 쿼리 수행

      - 흐름: 데이터베이스에 연결 -> 쿼리 수행 -> 결과 받은 후 -> 연결 종료

      - Connection Pool: DB에 연결된 Connection을 미리 여러 개 만들어 Pool에 보관한 후,

                            필요할 때마다 Pool에서 Connection을 가져와서 사용하고 사용이 끝나면 다시 Pool로 반환
                           (여러 Connection 동시에 처리 가능 -> 동시 접속자 수 많은 경우 서버 좀 더 안정적으로 운영 가능)

      - MySQL 사용자 계정 생성

        - CREATE USER '사용자ID'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '비밀번호';

        - GRAT ALL PRIVILEGES ON 데이터베이스명.* to '사용자ID'@'%' WITH GRANT OPTION;

           flush privileges;

    - dotenv 모듈 사용

      - dotenv 모듈: 접속 정보처럼 보안상 중요한 데이터를 .env 파일로 저장하고 Node.js가 실행될 때,

                               .env 파일에 저장되어 있는 데이터를 환경 변수에 등록시켜서 사용할 수 있게 해줌

    - 데이터 조회

    - 데이터 추가

      - 클라이언트에서 body에 담아서 전송한 JSON 데이터를 사용하기 위해서는 express.json() 모듈 사용 필요

         (body-parser 모듈을 express 내장 모듈로 담아 놓은 것)

      - insert into customer set ?

        - ?는 클라이언트에서 전송한 데이터가 오브젝트형인 경우, 각 키를 컬럼명으로, 값은 컬럼에 들어갈 값으로 변환

    - 데이터 수정

      - Node.js 서버로 요청 시 전송하는 JSON 데이터를 'param' 키로 배열에 담아서 보냄

      - 배열에 담긴 데이터 순서대로 쿼리문의 각 물음표에 데이터가 매핑되어 적용됨

    - 데이터 삭제

    - nodemon 모듈 설치

      - node monitor

      - 특정 디렉터리 혹은 파일을 감시하고 있다가 변경사항 발생 시 Node.js 애플리케이션 재시작하는 모듈

  - Sequelize

    - Sequelize 설치

      - Sequelize: RDB를 위한 promise 기반의 Node.js ORM 도구

        - Node.js로 구현한 JS 객체와 DB의 데이터를 매핑하여 쿼리문 작성 없이 손쉽게 조작 가능

        - JS 함수를 통해서 DB 조작 가능 (SQL 쿼리문 필요 없음)

    - config/config.json

      - config/config.json: DB 연결 정보 관리를 위한 파일 (개발/테스트/운영 환경)

    - models/index.js

      - models/index.js: DB 연결을 위한 접속 정보 가져오기, Sequelize 객체 생성, 모델 생성, ...

    - model 만들기

    - 데이터 조회

      - findAll(조건), findByPK(pk), findOne(조건)

    - 데이터 추가

      - create()

    - 데이터 수정

      - update()

    - 데이터 삭제

      - destroy()

    - ORM의 장단점

      - 규모가 큰 애플리케이션의 경우 ORM으로 원하는 데이터를 추출하기 위한 코드를 구현하는 것이 쉽지 않고,

         잘못 구현하면 오히려 성능에 치명적일 수 있음

8.2 MongoDB

  - 맥에서 MongoDB 설치하기

    - Homebrew tab 등록

    - MongoDB 설치

    - MongoDB 시작

    - shell 실행

    - 관리자 계정 추가

    - 인증을 사용하도록 설정 변경

    - 참고 사항

  - 윈도우에서 MongoDB 설치하기

    - MongoDB 설치

    - 환경 변수 설정

    - 관리자 계정 추가

    - 인증을 사용하도록 설정 변경

  - DB 툴 설치하기

    - Compass: MongoDB 데이터 탐색 조작 위한 공식적인 툴

  - 데이터베이스 및 컬렉션 생성하기

    - 컬렉션 (RDB의 테이블), 문서 (RDB의 열, 데이터)

  - mongoose 모듈 사용하기

    - Node.js에서 MongoDB 데이터 조작하는 데 가장 많이 사용하는 모듈

    - MongoDB를 위한 ODM 모듈 (Object Document Mapping)

      - JS 객체 <-> MongoDB의 Document (데이터)

  - mongoose 설치

  - MongoDB 연결

  - 스키마와 모델 생성

    - 스키마: MongoDB 컬렉션에 들어가는 문서 내부의 각 필드가 어떤 형식으로 되어 있는지 정의하는 객체

    - 스키마를 사용해서 만든 모델을 이용하여 MongoDB의 데이터에 대한 CRUD 처리 가능한 다양한 함수 내장

    - 스키마 이름이 정의되면 MongoDB의 DB에서 스키마 이름의 소문자 복수 형태로 컬렉션이 만들어짐

  - 문서 검색

    - Model.find()

    - Model.findById()

    - Model.findOne()

  - 문서 추가

    - Model.create()

  - 문서 수정

    - Model.findByIdAndUpdate()

    - Model.updateMany()

    - Model.updateOne()

  - 문서 삭제

    - Model.deleteMany

    - Model.deleteOne()


[Source Code] - Ch 08. 데이터베이스 사용하기

반응형

댓글