__________________________________________________
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 따로 생성할 거야.
즉, 정리 하자면,
- RDS 에서 mysql DB 서버를 만든다.
- Vsc 에서 mysql 서버와 연동한다. 플러그인을 사용해서.
- 잘 되는지 상황판에서 해당 DB 우클릭, new query 로 쿼리창 띄워서 sql 문을 적용해 본다.
- 실제로 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 |