나의 발자취

[Node.js] ORM 시퀄라이즈(Sequelize)를 활용해서 테이블 만들고 데이터 주고받기 본문

Backend

[Node.js] ORM 시퀄라이즈(Sequelize)를 활용해서 테이블 만들고 데이터 주고받기

달모드 2024. 10. 15. 15:34

지난 포스팅: 2024.10.15 - [Backend] - [Node.js] GraphQL Schema 설계, mutation 타입

 

[Node.js] GraphQL Schema 설계, mutation 타입

일단 냅다 올리고 시작type Query { // 예약어 hello: String getPost(id: ID!): Post}type Post { // 커스텀 자료형 id: ID! title: String! content: String!}type Mutation { // 예약어 createPost(input: PostInput): Post updatePost(id: ID!, inpu

wildguess.tistory.com

 

 

 

ORM이란?

Object-Relational Mapping 

 

대표적인 ORM으로는 Python의 Django, SQLAlchemy가 있다.

JS/Node.js에는 Sequelize, TypeORM, Prisma 가 있고

Java: JPA(대표적), Hibernate

Go: GoORM

Ruby: ActiveRecord

 

 

Sequelize ORM Framework 을 사용하면 SQL을 직접 작성하지 않고도 데이터베이스 작업을 수행할 수 있다고 한다. 이제까지 코드 안에 쿼리 짜고 그러느라 번거롭고 가독성도 좋지는 않았는데, 이러한 문제점을 해결할 수 있다.

 

주요 기능

  • 모델 정의 : 테이블 == 모델
  • 쿼리 빌딩: find, create, update, destroy
  • 관계 설정: 1:1, 1:N, JOIN 쿼리 지원
  • 트랜젝션 지원
  • 마이그래이션: 스키마 버전 관리 지원

 

 

 

깃 레포지토리: https://github.com/est22/backend/commits/main/nodejs/08/ch08_01

^히스토리 참고

 

실습 준비

npm init -y

 

npm i sequelize sqlite3

 

sequelize 객체 생성

// sequelize 객체 생성 (sqlite를 사용함)
const { Sequelize, Model, DataTypes } = require("sequelize");
const sequelize = new Sequelize({
  dialect: "sqlite",
  storage: "post.db",
});

 

모델  선언

이제까지는 SQL을 이용해서 코드 안에 넣어줬지만, 시퀄라이저를 사용하면 이렇게 하지 않고 변수를 정의하면서 모델을 선언할 수 있다. 이전 방법(좌)과 시퀄라이저(우)를 비교해보면 아래와 같다.

 

 

Async/Await 선언

(async () => {
  // await를 사용하기 위해서 빈 async 함수를 정의 및 호출
  // 실제 모델 생성, 데이터 생성, 데이터를 가져오는 연습
  await sequelize.sync({ force: true });
})();

 

테이블을 싱크해줄것인데, 여러가지 옵션 중  force 옵션을 사용할 것이다. 이 값이  true 이면, (커맨드+클릭을 하면 아래와 같이 연결된 파일이 나옴.) 테이블이 존재하지 않으면 테이블을 생성하게 된다.

 

터미널에 node app.js 명령어로 실행을 하게 되면 아래와 같이 테이블이 생성된 것이 확인된다.

 

post.db 확인~

 

 

이제 매번 테이블을 생성하면 안되니까 force 옵션을 false로 고쳐준다.

그리고 샘플값을 넣어준다. 

sequelize INSERT문

 

 

참고로, 이런 콜백 함수 안에다가 await 로 더미데이터를 넣어준 것이다.

 

 

다시 실행을 해주면, 아래와 같이 값이 업데이트된 것이 확인된다.

 

 

 

sequelize SELECT문

callback함수인 await 안에 선언하는 부분인데,

 

 

sequelize UPDATE문

update문은 간단하다.

 

sequelize DELETE문

 

 

시퀄라이저 모델 생성하는 유형 두가지

참고로, 위에서 이렇게 생성을 했었는데,

 

시퀄라이저에서 모델을 생성하는 방법은 두 가지 방법이 있다.

1. Model.init()

클래스 기반 정의

ES6 문법을 지원한다.

복잡하거나 대규모 프로젝트에서 사용, 최신 프로젝트에서 선호

 

 

2. sequelize.define()

legacy type이기 때문에 좀 더 안정적이다.

작은 프로젝트, 간단한 모델 정의를 할 수 있다.

 

타입스크립트를 쓰는 사람들은 시퀄라이저보다는 TypeORM, Prisma를 사용한다.

Comments