-
#Sequelize 그것이 알고 싶다. Sequelize 이론부터 연결까지 1편Node.js 2023. 11. 19. 16:49
# Sequelize란?
Sequelize는 Node.js에서 사용할 수 있는 Promise 패턴 기반의 ORM(Object Relational Mappin) 라이브러리입니다. ORM은 데이터베이스와의 상호작용을 좀 더 추상화하여 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스를 다룰 수 있게 해줍니다. Sequelize는 주로 관계형 데이터베이스(예: PostgreSQL, MySQL, SQLite 등)와 함께 사용됩니다.
Sequelize를 사용하면 자바스크립트로 mysql을 제어할 수 있습니다.
# Sequelize 설치
** 터미널을 열어서 sequelize를 사용하기 위해 아래 3가지 패키지를 명령어로 설치해줍니다.
$ npm i sequelize mysql2 $ npm i -D sequelize-cli
1. Squelize는 Node.js에서 사용할 수 있는 ORM(Object-Relational Mapping) 라이브러리 입니다. 이를 통해 JavaScript 코드로 SQL데이터베이스를 쉽게 조작할 수 있습니다.
2. mysql2 패키지는 Sequelize가 MySQL 데이터베이스와 상호작용할 수 있도록 도와주는 MySQL 클라이언트입니다. Seqelize는 다양한 데이터베이스 유형과 호환되지만, MySQL을 사용할 때 mysql2 패키지가 설치되어 있어야 합니다. Sequelize는 이를 의존성으로 가지고 있어야 정상적으로 MySQL 데이터베이스와 상호작용할 수 있습니다.
3. sequelize-cli은 Sequelize Command Line Interface의 약자로, Sequelize 프로젝트를 더 쉽게 관리하고 데이터베이스 마이그레이션, 시딩 등을 할 수 있도록 도와주는 도구입니다. 이는 Sequelize 프로젝트를 관리하고 데이터베이스 스키마를 관리하는데 유용합니다.
정리하면, Sequelize는 데이터베이스와 상호작용할 수 있는 ORM이고, mysql2는 Sequelize가 MySQL과 상호작용할 수 있도록 도와주는 패키지입니다. sequelize- cli는 Sequelize 프로젝트를 관리하고 데이터베이스 관련 작업을 쉽게 수행할 수 있도록 도와주는 Command Line Interface 도구입니다. Sequelize를 MySQL과 함께 사용할 때에는 mysql2 패키지가 필요하며, sequelize-cli은 Sequelize 프로젝트 관리를 위한 보조 도구 입니다.
** 위에 3가지 패키지가 설치 완료되면, 아래와 같이 터미널에서 명령어로 초기화해줍니다.
npx sequelize init
** 초기화를 시키면 config, models, migrations, seeders와 같은 폴더들이 생깁니다.
.
-- README.md
|-- config
| `-- config.json
|-- migrations
|-- models |
`-- index.js
|-- package.json
|-- seeders
* config
데이터베이스 연결 설정과 관련된 파일이 위치합니다. 이 파일에는 데이터베이스 연결 정보, 호스트, 사용자명, 암호 및 Sequelize 구성과 관련된 기타 옵션을 포함합니다.
* models
`models` 폴더에는 Sequelize 모델들이 위치합니다. 각 모델은 데이터베이스의 각 테이블과 매핑되며, 데이터베이스 테이블의 구조, 관계, 유효성 검사 규칙 등을 정의합니다. 즉, 모델을 사용하기 위한 파일이라고 생각하시면 됩니다.
* migrations
데이터베이스 스키마의 버전 관리를 위한 폴더입니다. 각 마이그레이션 파일은 데이터베이스 스키마 변경을 정의하며, 새로운 테이블 생성, 칼럼 추가, 제거, 수정 등과 같은 스키마 변경을 관리합니다. 각 마이그레이션 파일은 반드시 일련의 변경사항을 정의하고, `up`과 `down` 함수를 포함하여 이전 상태로 롤백할 수 있는 기능을 제공합니다.
* seeders
데이터베이스 초기 데이터를 채우기 위한 파일을 담고 있는 폴더입니다. 개발 환경이나 테스트를 위해 초기 데이터를 데이터베이스에 추가할 때 사용됩니다. Seed 파일은 예제 데이터, 테스터 또는 기본 데이터를 생성하는데 사용됩니다.
# Sequelize 연결
** 자신의 MySQL 서버에 연결하기
실제로 MySQL과 연결하기 위해선 config 파일에 안에 있는 config.json 값을 바탕으로 데이터베이스에 연결을 할 수 있습니다. MySQL과 연결하기 위해 다르게 설정해야 할 부분은 password, host(local이아닌 RDS로 받은 엔드포인트 주소) 두가지를 수정해야 합니다.
기본적으로 `npx sequelize init`을 통해 생성되는 models - index.js 파일은 commonJS 문법으로 작성된 상태입니다. 저는 ESM 문법으로 작업을 진행하였기 때문에 전부 지우고 "development" 만 ESM 문법으로 작성하였습니다.
+++ node env를 통해 node를 시작할 때, 자신이 사용하는 node가 어떤 환경인지 설정을 해줄 수 있습니다. Sequelize는 아무런 설정을 따로 하지 않으면 "development"로 선택되며, "test" 혹은 "production"으로도 설정이 가능합니다. 여러가지 환경별로 DB를 연결할 때 설정을 해줄 수 있는 것입니다. 자신에게 해당하는 환경에 맞춰 config를 설정할 수 있다고 생각하면 됩니다.
+++ test 환경으로 연결하는 예시)
NODE_ENV=test npx sequelize db:create
수정 전, commonJS 문법의 index.js 파일
{ "development": { "username": "root", // USERNAME을 'root'로 지정했기 때문에 변경할 필요x "password": null, // 사용하는 password로 변경 "database": "database_development", "host": "127.0.0.1", // localhost가 아닌 AWS -> RDS로 발급받은 엔드포인트 주소를 입력 "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
수정 후, ESM 문법으로 다시 작성한 index.js 파일
import Sequelize from 'sequelize'; import * as configEX from '../config/config.js'; // 환경변수에 따라 config를 설정 const env = process.env.NODE_ENV || 'development'; const config = configEX[env]; const db = {}; // db 객체에 sequelize 객체를 저장 const sequelize = new Sequelize(config.database, config.username, config.password, config); db.sequelize = sequelize; export default db;
** app.js에서 실제로 데이터베이스가 연결되었는지 확인하기
// DB연결 확인하기 const SERVER_PORT = process.env.PORT || 3000; // const SERVER_PORT = 3000; const { sequelize } = db; sequelize .sync({ force: false }) .then(() => { console.log('데이터베이스 연결 성공'); }) .catch((error) => { console.log('데이터베이스 연결 실패: ', error); }); app.listen(SERVER_PORT, () => { console.log(SERVER_PORT, '포트로 서버가 열렸습니다.'); });
'Node.js' 카테고리의 다른 글
#Node.js // bcrypt 모듈 암호화 사용 방법을 알아보자 (0) 2023.11.16