Node.js 교과서 - 4 TIL

김민지·2023년 11월 6일
0

Node.js

목록 보기
5/8

MYSQL 설치하기

사용자들의 정보를 객체(메모리)에 저장했기 때문에 서버를 껐다 켜면 메모리가 날아가 데이터가 유실되는 문제 발생

데이터베이스란

위의 문제를 해결하고 데이터를 영구적으로 저장할 공간이 필요함.

데이터베이스란 관련성을 가지며 중복이 없는 데이터들의 집합이다.

용어

  • DBMS: 데이터베이스를 관리하는 시스템
  • RDBMS: 관계형 데이터베이스를 관리하는 시스템

서버의 하드디스크나 SSD 등의 저장 매체에 데이터를 저장한다.
서버 종료 여부와 상관 없이 데이터를 계속 사용할 수 있다.
여러 사람이 동시에 접근할 수 있고, 권한을 따로 줄 수 있다.

게시글에 댓글을 쓴다,로그, 엑셀 등 ➡️ 관계형 데이터베이스 (MYSQL)
인공지능에게 학습 시킬 채팅 데이터 같이 비정형, 수집에 목적 ➡️ 비관계형 (MongoDB)


테이블 만들기

MYSQL 접속

스키마 생성

테이블 생성

다음과 같이 테이블을 생성할 수 있다. 그러나 문법 오류가 났다.

테이블 생성 확인

mysql> DESC users;

테이블 삭제하기

mysql> DROP TABLE users;

칼럼의 옵션들

  • CASCADE: 같이 지울거냐?를 물어보는 것.
    예를 들어 회원 삭제시 회원이 쓴 게시글, 댓글들을 같이 삭제할 것을 물어봄


CRUD 작업하기

CRUD?

Create, Read, Update, Delete 데이터베이스에서 많이 하는 작업 4가지

생성, 조회, 수정, 삭제

Create

INSERT INTO 테이블 (컬럼명들) VALUES (값들)

Read

SELECT 컬럼 FROM 테이블명

SELECT * FROM nodejs.users;

SELECT * 은 모든 컬럼을 선택한다는 의미

SELECT name, married FROM nodejs.users;

컬럼만 따로 추리는 것도 가능하다

WHERE로 조건을 주어 선택 가능

  • AND로 여러가지 조건을 동시에 만족하는 것을 찾음
SELECT name, age FROM nodejs.users WHERE married = 1 AND age > 30;
  • OR로 여러가지 조건 중 하나 이상을 만족하는 것을 찾음
SELECT id, name FROM nodejs.users WHERE married = 0 OR age > 30;

ORDER BY로 특정 컬럼 값 순서대로 정렬 가능

  • DESC는 내림차순, ASC는 오름차순
SELECT id, name FROM nodejs.users ORDER BY age DESC;

LIMIT으로 조회할 개수 제한

SELECT id, name FROM nodejs.users ORDER BY age DESC LIMIT 1;

OFFSET으로 앞의 로우들 스킵 가능(OFFSET 2면 세 번째 것부터 찾음)

SELECT id, name FROM nodejs.users ORDER BY age DESC LIMIT 1 OFFSET 1;

Update

데이터베이스에 있는 데이터를 수정하는 작업

UPDATE 테이블명 SET 컬럼=새값 WHERE 조건

UPDATE nodejs.users SET comment = '바꿀 내용' WHERE id = 2;

Delete

데이터베이스에 있는 데이터를 삭제하는 작업

DELETE FROM 테이블명 WHERE 조건

DELETE FROM nodejs.users WHERE id = 2;

시퀄라이즈 사용하기

시퀄라이즈 ORM

MYSQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리

  • ORM: Object Relational Mapping: 객체와 데이터를 1대1로 짝지음(매핑)
  • MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환됨
  • 자바스크립트 문법으로 데이터베이스 조작 가능

➡️ 초기 규모의 프로젝트만 사용 가능

시퀄라이즈 CLI 사용하기

  1. mysql2는 MySQL DB가 아닌 드라이버(노드와 Mysql을 이어주는 역할)

  2. 시퀄라이즈 구조 생성


시퀄라이즈 모델 만들기


테이블 관계 이해하기

관계 정의하기

users 모델과 comments 모델 간의 관계를 정의

  • 1:N 관계 (사용자 한 명이 댓글 여러 개 작성)
  • 시퀄라이즈에서는 1:N 관계를 hasMany로 표현(사용자.hasMany(댓글))
  • 반대의 입장에서는 belongsTo(댓글.belongsTo(사용자))
  • belongsTo가 있는 테이블에 컬럼이 생김(댓글 테이블에 commenter 컬럼)

1대 1 관계

사용자 테이블과 사용자 정보 테이블

다대다 관계

게시글과 해시태그 테이블

  • 하나의 게시글이 여러 개의 해시태그를 가질 수 있고 하나의 해시태그가 여러 개의 게시글을 가질 수 있음

  • DB 특성상 다대다 관계는 중간 테이블이 생김

한 컬럼에는 한 가지의 데이터만 들어있어야 한다.
중간 테이블이 없으면 정규화 원칙을 위반하여 이를 해결하기 위해 중간 테이블을 만들어 연결해주는 방법이 존재하는 것.


시퀄라이즈 쿼리 알아보기

married: true 오타 수정!
gt >
lt <
gte >=
lte <=


업데이트, 삭제할 땐 조건이 꼭 있어야한다. Where 필수!!!

profile
안녕하세요

0개의 댓글