ORM이란?
ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다.
객체(클래스)와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다.
따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.
ORM의 특징
- ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어,개발자가 객체 모델만 이용해서 프로그래밍을 하는 데 집중할 수 있게한다.
- ORM을 사용하는 것은 매우 편리하지만 그만큼 신중하게 설계해야한다. 프로젝트의 복잡성이 커질 수록 난이도도 올라가고 부족한 설계로 잘못 구현되었을 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다. 또한 일부 자주 사용되는 대형 SQL문은 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다
sequelize는 Postgres, MySQL, MariaDB, SQLite 등을 지원하는 Promise에 기반한 비동기로 동작하는 Node.js ORM이다.
공식문서와 Sequelize를 이용한 스프린트를통해 살펴보자초기셋팅
1.Sequelize 설치
- Sequelize ORM 공식홈페이지 참고
npm install --save sequelize
2.sequelize-cli 설치
Sequelize - Migrations
- 데이터베이스 다루고 변경 사항을 추적할수있는 Migrations를 이용하기위해 sequelize-cli을 설치할 할것입니다.
- Sequelize의 migrations은 데이터의 이주를 수행(up)하거나 실행을 취소(down)를 지시하는 자바스크립트 파일이다
- sequelize-cli를 설치하고 sequelize.query를 통해 migrations를 조작할 수 있다
npm install --save-dev sequelize-cli
Sequelize CLI를 설치npx sequelize-cli --help
를통해 명령의 종류를 파악할 수 있습니다.
ORM 설정
1.Project bootstrapping
npx sequelize-cli init
커맨드 실행시 아래와 같은 폴더들이 생성된다
config
, 데이터베이스에 연결하는 방법을 CLI에 알려주는 구성 파일이 포함되어 있습니다.
- "dialect"옵션을 통해 데이터베이스서버를 선택할수 있다.default는 mysql
models
프로젝트의 모든 모델을 포함합니다.
npx sequelize-cli init
커맨드로 생성된 models 디렉토리에는 index.js(테이블 연결정의) 파일이 자동생성됨
migrations
모든 마이그레이션 파일 포함/빈폴더 생성
seeders
모든 시드 파일을 포함합니다./빈 폴더 생성
데이터베이스 생성
npx sequelize db:create
- config.json에서 설정한 데이터베이스 이름 "testgo"가 스키마에 자동으로 추가
모델생성
npx sequelize-cli model:generate --name url --attributes url:string,title:string,visits:integer
name
: 모델명
attributes
: 모델 속성 목록입니다.
- models디렉토리에 url.js 생성됨
- id, createdAt, updatedAt 필드는 자동으로 생성됩니다.
- 필드가 가지는 특별한 요구 사항(기본값 등)은 모델 파일을 직접 수정해서 정의해야 합니다
- migrations디렉토리에 파일생성됨
Migrations 실행
- 모델디렉토리가 해당 커맨드로 생성되었지만, 아직까지는 실제 데이터베이스에 삽입되지 않은 상태이기에 마이그레이션을 해주어야한다
npx sequelize-cli db:migrate
- 스키마 변경이 있을 때마다 마이그레이션을 실행해 줘야 합니다.
ApI