
오늘은 지니 공공 아카데미 ( https://jiny.academy/ ) 에서 진행하는 node.js 강의 9회차 수업을 진행했다.
MVC 디자인패턴에서 V(view)와 C(controller)는 앞서 배웠고, 오늘은 M(model)에 대해 배웠다.
강의 들을때는 대충이라도 이해가 가는데 듣고 나면 금새 잊어버린다. 그렇기 때문에 블로그를 통해 복습 해본다.
Node.js express의 Model과 MySQL DB 테이블을 node express프로젝트에서 Sequelize ORM 패키지를 설치해 연결해보았다. 이후, code(model) first 방식으로 데이터를 주고받아보았다.
1 ) Sequelize ORM 관련 패키지를 설치
해당 노드 익스프레스 프로젝트 터미널에서 root 경로를 지정해 Sequelize ORM 관련 패키지를 설치한다.
① npm install sequelize mysql2 : sequelize,mysql2 노드 패키지 2개 동시 설치
② npm install -g sequelize-cli : sequelize 명령어 패키지 전역설치
③ sequelize init : 현재 노드 프로젝트에 ORM(모델기반) 사용 프로젝트 개발 환경 구성해주는 sequelize 명령어
설치 하고나면 config , models , migrations , seeders 총 4개의 폴더가 생성된다.
config : DB 연결정보 환경설정 파일이다.
models : 데이터베이스 테이블과 매핑되는 모델을 정의하고 파일을 보관하고 모델기반 프로그래밍 처리 모듈을 제공한다.
migrations , seeders 폴더는 나의 뇌가 폭발직전이므로 나중에 알아보도록 할거다..★
2 ) MySQL Database(Schema) 생성한다.
MySQL Workbench에서 스키마를 생성하고 스키마 생성시 기본설정 사항을 설정해준다.


3 ) Sequelize DB 연결 및 환경구성
① config 폴더내 config.json 파일 오픈후 환경에 맞는 db 연결정보 수정 - MySQL 스키마 생성후 MySQL 비밀번호와 SCHEMA 명을 각각 "development"의 "password"와 "database"에 입력해 연결한다.
② models 폴더내 index.js 모듈 구성 - 시퀄라이즈 오알엠 패키지 설치 후 자동으로 생성되는 models 폴더 안의 index 파일은 데이터 매핑에 필요한 여러 객체 및 모델을 정의하고 외부로 노출하는 중요한 파일이다.
models\index.js
③ app.js 환경 구성
//시퀄라이즈 ORM DB 연결 객체를 정의 , index.js 모듈 참조 연동 - DB 연결 완료.
4 ) Sequelize 모델 관리
① 모델모듈 정의 : models 폴더내에 모델모듈을 정의한다.
필자는 member라는 이름의 모델모듈을 정의할것이므로 models 폴더 내에 member.js 파일을 생성한다.
member.js 파일은 zooputer_chat 스키마(데이터베이스)의 테이블 명과 매핑됨
모델이름은 단수형, 테이블명은 복수형으로 관리되기 때문에 스키마내의 테이블명은 members가 된다.
timestamps: true, //createdAT,updatedAT컬럼이 자동추가되고 등록일시 수정일시 자동으로 생성해주는 속성
paranoid: true //테이블에 자동으로 deletedAt 컬럼이 생성되고 물리적 테이블에는 데이터 남아있지만 orm을 통해 데이터 가져올때 삭제된것처럼 보여짐
회원모델 모듈파일 참조하고 db 속성 정의하기
db.Member = require('./member.js')(sequelize,Sequelize);
③ 라우터 파일에서 모델 사용
var db = require('../models/index'); ==> 인덱스 모듈 파일 참조해 해당 라우터에서 ORM db 객체를 참조한다.
아래와 같은 sequelize orm 문법으로 회원정보 신규 등록,수정,조회,삭제가 가능하다. 라잌어 SQL CRUD 문법
sequelize orm 문법으로 작성한 코드는 실제 SQL 구문으로 변환되어 DB에서 실행된다.
await db.Member.create(); = INSERT INTO 테이블명.(컬럼1,컬럼2)VALUES(값,1,값2);
await db.Member.findAll(); = SELECT*FROM 테이블명;
await db.Member.update(); = UPDATE 테이블명 SET 컬럼명=’값’;