본문 바로가기

내일배움캠프_개발일지/Node.js 기초

Node.js 숙련 - 6

__________________________________________________

 

1-18  SQL (Structured Query Language)

 

=>  < 2.4 MySQL → Sequelize 02>

 

 

 

이번 장에서는 SQL 문에 대해 확인을 해볼거야.

SQL 문은 DB를 관리할 수 있는 표준 언어.

 

 

SQL 문은 대표적으로 세 가지로 구분된다고.

  • DDL (Data Definition Language)
  • DML (Data Manopulation Language)
  • DCL (Data Control Language)

 

 

 

1.

DDL (Data Definition Language)

=> 데이터를 정의할 때 사용하는 언어로 테이블이나 데이터베이스를 생성, 수정, 삭제와 같은 행위를 할 때 사용

ex) create, drop, alter

 

2.

DML (Data Manopulation Language)

=> 데이터베이스에 데이터를 조작할 때 사용하는 언어로 데이터의 저장, 삭제, 수정, 조회와 같은 행위

ex) select, insert, delete, update

 

3.

DCL (Data Control Language)

=> 데이터베이스에 대한 권한과 관련된 문법으로 특정 유저가 DB에 접근할 수 있는 권한을 설정할 때 사용

ex)

COMMIT

데이터베이스의 작업이 정상적으로 완료되었음을 관리자에게 알려줄 때 사용.

트랜잭션에 대한 개념을 알고 있다면 더욱 확실한 이해가 가능할거야 참고 자료

ROLLBACK

데이터베이스의 작업이 비정상적으로 완료되었음을 관리자에게 알려줄 때 사용.

트랜잭션에 대한 개념을 알고 있다면 더욱 확실한 이해가 가능할거야 참고 자료

GRANT

데이터베이스의 특정한 유저에게 사용 권한을 부여할 때 사용.

REVOKE

데이터베이스의 특정한 유저에게 사용 권한을 취소할 때 사용.

 

 

 

__________

 

— VSCode를 이용하여 SQL 사용 전 준비하기 —

=> 참고로 혹시 몰라서 vscode 새 창 띄우고 작업 중.

 

 

1.

Vscode 탐색기 상황판 -> 하단 mysql 탭-> express-database 의 “ express_db “ DB우클릭 -> “ New Query “ 클릭

-> 이렇게 하면 쿼리 입력 창이 새로 뜨는 것을 확인할 수 있어.

=> 

주의!! 

생성한 Query 파일은 MySQL을 우클릭한 기준으로 데이터베이스를 바라보고 있어. 

즉,  최상단 카테고리인 “ express-database.cop….” 을 우클릭하여 실행한 경우 No database selected 에러가 발생 할 수 있으니,

생성한 데이터베이스인 “express_db” 를 기준으로 쿼리파일을 생성해야 함!

 

 

*** 쿼리 창 저장 장소

폴더 : kimminsoo -> sparta -> node_js -> learning -> second_step -> sql_query

 

 

2.

쿼리 창 저장 후 “ SHOW TABLES; “ 입력 -> 쿼리창 우클릭, “ run mysql query “ 클릭하여 쿼리문 실행.

-> 이렇게 하면 vsc 의 우측에 쿼리문이 실행된 결과값을 보여줘.

 

 

 

 

 

__________

 

여기까지, 기본적인 MySQL 플러그인을 통해서 RDS의 MySQL 클라우드 DB 를 가져와 SQL 문법을 사용하는 것을 해봤어.

이제, 이 SQL 문을 제대로 사용하기 위해서 데이터베이스란 무엇인지에 대해 확인해보고 가자.

 

 

— VSCode MySQL 플러그인으로 SQL 사용하기 —

 

DB란?

=> 데이터베이스는 매우 고도화된 엑셀

엑셀 파일 하나가 "데이터베이스"라면, 엑셀 시트 하나는 "테이블"이라고 부르고, 엑셀 행 하나는 "데이터"라고 부를 수 있어.

 

 

 

— 실제로 sql 문을 활용하여 DB 를 조작하거나 검색해 보자 —

 

1.

CREATE DATABASE NodeJS;

=> “ express-database.cop….”  즉 MYSQL 링크 DB 안에 “express_db” 와 동 레벨에 위치하는 DB 를 하나 생성.

 

2.

courses 라는 테이블 생성.

——

CREATE TABLE IF NOT EXISTS courses (

    id bigint(5) NOT NULL AUTO_INCREMENT, 

    title varchar(255) NOT NULL,

    tutor varchar(255) NOT NULL,

    PRIMARY KEY (id)

);

——

=> 주의!!!!!!

현재 우리가 작업 중인 쿼리 창은 “ express_db “ DB 를 우클릭해서 생성한 것이기에, 

여기서 create table 을 하면 “ express_db” DB 안에 새로운 테이블이 생성되는 거야.

 

쿼리 창에 이미 존재했던 “ CREATE DATABASE NodeJS; “ 항목을 지우고, 위의 테이블 생성 쿼리를 실행.

이후 왼쪽 상황판에서 express_db 를 우클릭, refresh 해보면 실제로 테이블이 추가된 것을 확인할 수 있어.

 

 

3.

테이블에 레코드 insert 하기.

——

INSERT INTO courses (title, tutor) VALUES

    ('Node.js 숙련반', '이용우'), ('웹개발 종합반', '이범규');

——

=> 기존의 테이블 생성 쿼리문을 모두 지우고, 해당 insert 쿼리문 만을 남긴 상태에서 실행.

 

 

4.

테이블의 데이터 조회하기.

——

SELECT * FROM courses;

——

=> 우측 Results 창에 검색 결과가 출력됨을 확인 가능.

 

 

5.

테이블 정규화 과정. 자세한 사항은 교재 참고. 테이블 끼리의 연관 관계를 형성하는 것.

 

 

 

 

 

 

 

 

 

 

__________________________________________________

 

1-19  Sequelize 설정

 

=>  < 2.4 MySQL → Sequelize 03>

 

 

npm 으로 Sequelize 모듈을 설치해서, 실제로 RDS - mysql 을 node.js 프로젝트에서 다뤄볼거야.

새롭게 프로젝트를 만들자.

 

 

폴더 : kimminsoo -> sparta -> node_js -> learning -> second_step -> shop_project_sequelize

 

 

 

— 셋팅 —

 

1.

Vsc 에서 shop_project_sequelize 폴더 열기, 터미널에서 npm init -y

 

2.

npm i sequelize mysql2 -S

npm i sequelize-cli -D

 

=> 윗 두줄을 다 복사해서 한 번에 터미널에서 실행.

첫 줄은 sequelize 와 mysql2 모듈을 설치한 것.

=> 

sequelize는 우리가 Node.js 에서 sequelize를 사용할 수 있게 해줘.

mysql2는 Node.js 에서 Sequelize를 이용해 MySQL을 더욱 쉽게 조작할 수 도록 도와주는 패키지.

만약 Sequelize를 사용할 때, mysql2 패키지가 설치되어 있지 않으면 에러가 발생!

 

둘째 줄 sequelize-cli 은 sequelize를 cli 환경에서 사용하기 위해 설치한 것.

=>

sequelize-cli는 우리가 Sequelize를 조금 더 쉽게 사용하도록 도와주는 도구를 설치하는 명령어.

 

 

 

3.

그렇다면, 이제 최초로 sequelize 를 이니셜라이즈 하는 것을 해보자.

=> 

Sequelize 사용 준비 (with sequelize-cli)
공식 문서를 참고해서 터미널에서 아래와 같은 명령어를 입력해보자.

 

——

npx sequelize init

——

=> 위의 2번에서 sequelize 모듈을 설치했잖아? 이제는 설치한 모듈을 가져와서 최초로 설정을 해주는 단계인거야.

 

터미널에서 위의 명령어를 입력해보자. 

입력하면 프로젝트 안에 파일들이 생겨. 

 

Models 라는 폴더랑 그 안에 index.js 가 자동으로 생성 되었는데,

이 index.js 에는 우리가 앞으로 설정하게 될 config 파일에 대한 설정이나 Mysql 에서 사용하게 될 다른 모델들, 

그리고 실제로 테이블을 만들게 되는 migration 에 대한 설정 같은 것들을 index.js 안에서 하게 될거야.

=> 실제로 index.js 안에서는 < module.exports = db; > 로 모듈을 내보내고 있어. 추후 우리가 편리하게 사용할 수 있도록.

우리가 ORM 인 sequelize 를 사용해서 RDS - mysql 을 쉽게 다룰 수 있도록,

sequelize의 설정들을 명시하는 js 파일인 것이지.

 

 

 

4.

이제, 우리가 sequelize 를 사용해서 실제로 RDS-MySQL 을 연결해보자.

 

npx sequelize init 을 실행하면서 여러 파일들이 생겼을 텐데, 그 중 

——

폴더 : kimminsoo -> sparta -> node_js -> learning -> second_step -> shop_project_sequelize -> config

파일 : config -> config.json

——

 

위처럼 config 폴더 안에 config.json 라는 파일이 생겼을거야.

이 안에 있는 값들을 바탕으로 데이터베이스에 연결을 할 거야. 이 값들을 내 환경에 맞게 바꿔줘야 해. 아래와 같이 말이야.

 

——

"development": {

    "username": "...",

    "password": "...",

    "database": "...",

    "host": "...",

    "dialect": "mysql"

  }

——

=> host 는 내 mysql DB인 “ express-database “ 의 엔드포인트.

 

 

 

5.

그렇다면, RDS - MySQL 이 프로젝트와 잘 연결되었는지 확인해보자.

 

실제로 연결이 잘 되어 있다면, 우리는 터미널을 통해서 DB 를 만들 수 있어.

어떤 DB? 위에서 development 키 안에 "database": "database_development" 라고 지정한 DB 를.

=> express-database.cop0… 이건 일종의 DB 서버.  가장 큰 단위의 DB 인 것이지.

우리는 이 가장 큰 데이터베이스 안에서 여러 개의 가상의 DB 를 만들고, 그 안에 테이블을 만드는 거지.

 

어케 저 Db 를 생성할 수 있는가. 다음의 명령어를 터미널에 입력. (당연히 해당 node.js 프로젝트 경로에서)

 

 

——

npx sequelize db:create

 

 

 

// 터미널 결과

 

Sequelize CLI [Node: 18.12.0, CLI: 6.5.2, ORM: 6.27.0]

 

Loaded configuration file "config/config.json".

Using environment "development".

Database database_development created.

——

 

=> "config/config.json" 파일 안의 "development" 라는 키의 설정을 바탕으로,

database_development 라는 이름의 DB 를 만들었어.

 

실재로 vsc 탐색기 상황판의 MYSQL 탭 -> express-database.cop9…. 를 확인해보면

database_development 라는 DB가 새로 생긴 것을 확인할 수 있어.

 

 

 

6.

"config/config.json" 파일 안에는 “development” 외에도 “test”, “production” 이라는 키들이 존재해.

이 키 들은 우리가 node 를 시작할 때, 내가 지금 사용하는 node 가 어떤 환경인지에 대해서 설정을 해줄 수 있는 부분들이야.

 

기본적으로 Sequelize 는 아무런 설정도 하지 않았을 때에는 “development” 키의 값들을 설정값으로 인지하고,

Node env 라는 걸 “test” 로 설정했다면 “test” 키의 값들을 설정값으로 인지해.

그리고 production 으로 설정했다면 “production” 키의 값들을.

 

이런 식으로, 환경 뱔로 Db 연결 시의 환경 설정들을 해줄 수 있어.

 

예를 들어서,

——

NODE_ENV=test npx sequelize db:create

——

=> 이렇게 한다면 에러가 발생할거야.

왜? “test” 키의 설정값들은 최초 기본값 그대로 이니까. 

즉, DB 를 생성하거나 연결할 때 앞에 NODE_ENV= 를 붙임으로서 해당하는 속성 값들을 바꿔서 설정할 수 있다.

 

 

 

 

— 현재 폴더 구성 상황 —

 

——

 

show_project_sequelize

├── models

  └── index.js

├── config

  └── config.json

├── migrations

├── seeders

├── package-lock.json

└── package.json

 

——

 

1.

models 폴더 안에 index.js가 생성됨
이 파일은 우리가 구현할 sequelize 모델을 편리하게 사용할 수 있게 해주는 파일이니 절대 지우면 안돼.

 

2.

config 폴더 안에 config.json 파일이 생성됨 

이 파일을 열어보면 데이터베이스에 연결하기 위한 설정 데이터가 JSON 형식으로 들어가있어요.

 

3.

migrations 폴더가 생성됨

 

4.

seeder 폴더가 생성됨

 

 

**** 주의 사항 ****

=> sequelize-cli는 정해진 경로에 있는 파일을 사용하고 저장하기 때문에 임의로 옮기면 오동작 할 가능성이 높아

 

=> mongoose 의 경우 우리가 별도로 DB 를 만들어주지 않아도 연결만 하면 바로 컬렉션을 만들 수 있었어.

헌데 ORM 인 sequelize의 경우, 우리가 이걸 사용하기 위해선 처음에 DB 를 생성하고 table 도 생성해야 해.

지금은 직접 npx sequelize db:create 로 DB 를 생성했지만,

  다음에는 migrations 에 해당하는 것을 바탕으로 테이블을 생성하게 될 것.

 

정말로 나중에 우리가 숙련자가 된다면, DB와 테이블을 동시에 생성하고 없애고 막 하겠지.

헌데 지금으로서는 DB 따로, table 따로 생성할 거야.

 

 

 

즉, 정리 하자면,

 

  1. RDS 에서 mysql DB 서버를 만든다.
  2. Vsc 에서 mysql 서버와 연동한다. 플러그인을 사용해서.
  3. 잘 되는지 상황판에서 해당 DB 우클릭, new query 로 쿼리창 띄워서 sql 문을 적용해 본다.
  4. 실제로 node.js 프로젝트에서 Mysql 과 연동하기 위해, npm i sequelize mysql2 -S npm i sequelize-cli -D 로 sequelize 모듈 다운,

그리고 npx sequelize init 로 시퀄라이즈 기본 설정을 진행한다.

필요하다면 npx sequelize db:create 로 DB도 만든다.

 

 

 

 

 

 

 

 

 

'내일배움캠프_개발일지 > Node.js 기초' 카테고리의 다른 글

Node.js 숙련 -8  (0) 2022.12.23
Node.js 숙련 - 7  (0) 2022.12.23
Node.js 숙련 - 5  (1) 2022.12.20
Node.js 숙련 - 4  (0) 2022.12.20
Node.js 숙련 - 3  (0) 2022.12.19