본문 바로가기
개발

[Node.js] 7장

by jwcs 2024. 2. 16.
728x90

7.1 데이터베이스란?

 

  • 데이터베이스(Database): 데이터베이스는 관련성을 가지며 중복이 없는 구조화된 데이터의 집합이다. 
  • 데이터베이스 관리 시스템(DBMS): 데이터베이스에 저장된 값들을 생성, 조회, 수정, 삭제(CRUD)와 같이 관리할 수 있는 시스템이다. 
  • 관계형 데이터베이스 관리 시스템(RDBMS): DBMS의 한 종류다. 관계형 데이터베이스는 데이터를 테이블화 시킨 것이며, 각 테이블은 열과 행으로 구성된다

7.4 데이터베이스 미 테이블 생성하기

 

7.4.1 데이터베이스 생성하기: mysql 프롬프트에 `CREATE SCHEMA [데이터베이스명] CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;`를 통해 데이터베이스를 생성할 수 있다

 

7.4.2 테이블 생성하기: 데이터가 들어갈 구조를 테이블이라고한다. 테이블 구조에 맞는 데이터만 들어갈 수 있다.

예시

  • CREATE TABLE [테이블명]: `[테이블명]`에 을 이름으로 한 테이블을 생성한다
  • id INT NOT NULL AUTO_INCREMENT: `id`라는 이름의 열을 설정한다. 이 열은 정수형이며 -2147483648 ~ 2147483647의 범위를 가진다. NULL값을 허용하지 않는다. 자동으로 증가하는 값을 가진다
  • name VARCHAR(20) NOT NULL: `name`이라는 이름의 열을 설정한다. 이 열은 가변 문자열을 가지며 최대 20자까지 설정할 수 있다. NULL을 허용하지 않는다
  • age INT UNSIGNED NOT NULL: `age`라는 이름의 열을 설정한다. 이 열은 부호 없는 정수형이며 0 ~ 4294967295 의 범위를 가진다. NULL 값을 허용하지 않는다
  • married TINYINT NOT NULL: `married`라는 이름의 열을 설정한다. 이 열은 작은 정수형이며 -128 ~ 127 의 범위를 가진다. NULL 값을 허용하지 않는다
  • comment TEXT NOT NULL: `comment`라는 이름의 열을 설정한다. 이 열은 문자열 데이터 타입이며 최대 65535자까지 저장할 수 있다. NULL 값을 허용하지 않는다
  • created_at DATETIME NOT NLL DEFAULT now(): `created_at` 이라는 이름의 열을 설정한다. 날짜와 시간 데이터 타입을 가진다. NULL 값을 허용하지 않으며, 기본값을 현재 시간으로 사용한다.
  • PRIMARY KEY(id): `id` 필드를 테이블의 기본 키로 지정하여, 각 행을 유일하게 식별한다.
  • UNIQUE INDEX name_UNIQUE (name ASC): `name` 필드에 대한 고유 인덱스를 생성한다. 모든 이름 값이 유일하게 유지되도록 한다. 인덱스는 오름차순(`asc`)으로 정렬된다
  • COMMENT = '사용자 정보': 테이블에 대한 설명으로 '사용자 정보'를 추가한다
  • ENGINE = InnoDB: 테이블의 스토리지 엔진으로 InnoDB를 사용하겠다고 지정한다. InnoDB는 트랜잭션을 지원하며, 외래 키 제약 조건을 포함한 여러 고급 기능을 제공한다

7.5 CRUD 작업하기

CRUD는 생성(create), 읽기(read), 업데이트(update), 삭제(delete)의 약어다. 데이터를 관리하기 위한 네 가지 기본적인 작업을 의미한다.

 

7.5.1 Create(생성):

  • 설명: 테이블 내에 포함될 데이터를 생성한다
  • 사용법: `Insert` 문을 통해 생성할 수 있다

사용법

7.5.2 Read(조회):

  • 설명: 테이블 내에 데이터를 조회하는 작업을 수행한다
  • 사용법: `Select` 문을 통해 데이터를 조회한다

사용법

7.5.3 Update(수정):

  • 설명: 테이블 내에 데이터를 수정하는 작업을 수행한다
  • 사용법: `Update`문을 통해 수정한다

사용법

7.5.4 Delete(삭제):

  • 설명: 테이블 내에 데이터를 삭제하는 작업을 수행한다
  • 사용법: `Delete`문을 통해 삭제한다

사용법

 

7.6 시퀄라이즈 사용하기

Sequelize는 Node.js의 인기있는 ORM이다. ORM은 자바스크립트 명령을 mysql 명령으로 매핑해주는 도구이다.

  • 설치: Node.js 프로젝트 폴더에 시퀄라이즈와 필요한 데이터베이스 라이브러리를 설치한다

설치

Sequelize CLI를 사용하여 프로젝트 초기화를 진행한다. 이 과정에서 `config`, `models`, `migrations`, `seeders` 폴더와 관련 파일들이 생성된다.

설치법

 

7.6.1 MySQL 연결하기

  • 설정 파일 구성: 시퀄라이즈 설정 파일인 `config/config.json`을 다음과 같이 작성할 수 있다.

config 예시

비밀번호와 같은 민감한 정보는 환경변수를 통해 관리하는 것이 좋다. `process.env.DB_PASSWORD`를 사용할 수 있다.

  • 시퀄라이즈 인스턴스 초기화: `models/index.js` 파일에서 시퀄라이즈 인스턴스를 생성하고, 설정 파일에서 데이터베이스 설정을 불러온다.

설정 예씨

  • 데이터베이스 연결: `sequelize.sync()` 메소드를 호출하여 정의된 모델을 바탕으로 데이터베이스 테이블을 생성하거나 업데이트할 수 있다

데이터베이스 연결 설정 예시

  • 서버 실행: `app.js` 파일에서 서버를 시작하고 시퀄라이즈를 통해 데이터베이스 연결을 시도한다

 

7.6.2 모델 정의하기: 시퀄라이즈에서 모델은 데이터베이스 테이블을 추상화한 것이다. 즉, 하나의 모델은 데이터베이스 내의 하나의 테이블과 일대일로 대응된다. 모델의 인스턴스는 테이블의 행에 해당한다.

  • 모델 파일 생성: 모델마다 별도의 파일을 생성한다. 예를 들어 `user.js` 파일에서 USER 모델을 정의한다
  • 모델 정의: `sequelize.define` 메소드를 사용하거나 `Sequelize.Model`을 확장하여 클래스로 모델을 정의한다.
  • 모델 초기화: 모델 파일 내에서 `init` 메소드를 사용하여 모델을 초기화한다. 이 메소드는 속성 정의와 함께 호출된다
  • 모델 옵션 설정: 타임 스탬프, 테이블 이름, 문자셋 등과 같은 추가 옵션을 설정할 수 있다
  • 모델 관계 정의: `associate` 메소드를 통해 다른 모델과의 관계를 정의한다. 예를 들어, 사용자와 댓글 간의 관계를 정의할 수 있다.

생성 예시

 

7.6.3 관계 정의하기

일반적으로 시퀄라이즈에서는 세 가지 기본적인 관계 유형이 있다. 1:1, 1:N, N:M

  • 1:1 관계: 두 모델 각각이 서로에게 하나의 관계를 가지고 있다. 예를 들어 하나의 `user` 모델이 하나의 `profile`을 가질 수 있는 경우가 있다. 시퀄라이즈에서는 `hasOne`과 `belongTo` 메서드를 사용하여 이 관계를 설정한다
  • 1:N 관계: 한 모델이 다른 모델에 대해 여러 관계를 가지고 있는 것이다. 예를 들어, 하나의 `user` 모델이 여러개의 `comment` 모델을 가질 수 있는 경우가 있다. 시퀄라이즈에서는 `hasMany`와 `belongsTo`를 사용하여 이 관계를 설정한다
  • N:M 관계: 두 모델이 서로에게 여러 관계를 가지고 있다. 예를 들어 `post`와 `hashtag`의 관계에서는 하나의 `post` 모델에 여러 `hashtag`가 있을 수 있으면서, 하나의 `hashtag`에 여러 `post`가 있을 수 있다. `belongsToMany`를 사용하여 이 관계를 설정할 수 있다. `throuh` 옵션을 통해 조인할 테이블을 만들 수 있다.

각 관계 유형을 정의할 때, `foreignKey`와 `source-targetKey`옵션을 사용하여 관계의 외래 키를 명시적으로 지정할 수 있다. 이를 통해 시퀄라이즈가 생성하는 SQL 쿼리가 어떤 컬럼을 참조해야 하는지 알 수 있다.

예시

 

7.6.4 쿼리 알아보기: 

  • 생성(create)

생성 시퀄 예시
생성 mysql 예시

  • 읽기(read)

모든 사용자 조회 예시
특정 조건을 만족하는 사용자 조회
기본 키로 단일 레코드 조회
특정 칼럼 조회

  • 업데이트(update):

업데이트 예시

  • 삭제(delete):

삭제 예시

  • 정렬, 제한 옵션 사용:

정렬, 제한 사용 예시

  • 조인 사용:

조인 예시

 

7.6.5 쿼리 수행하기: 로그인 회원가입을 구현해보며 실습해보겠다. 실습에 대한 글은 따로 다루겠다.

728x90
반응형

'개발' 카테고리의 다른 글

[Node.js] 로그인, 회원가입 기능 구현  (0) 2024.02.18
[Node.js] 8장  (0) 2024.02.16
[Node.js] 1~6장 복습  (0) 2024.02.15
[Node.js] 6장  (0) 2024.02.08
[Node.js] 5장  (0) 2024.02.07