이번 튜토리얼에서는 Sequelize로 MySQL 데이터베이스를 사용할 것이다. 이 글을 읽는 독자가
정도는 할 수 있을 것이라 믿으며 생략하겠다.
일단 MySQL 서버가 실행되고 있는 상태라고 가정한다. 그리고 추가적으로 ORM을 사용해서 데이터베이스 관련 작업을 했을 때, 실제로 데이터베이스의 테이블은 어떤 식으로 변하는지 확인을 해가면서 배워야 더 실감이 날 것 같다. 따라서 MySQL 서버 내부를 잘 확인할 수 있도록
를 사용하겠다.
(1) 자, 이제 MySQL 서버에 우리가 사용할 데이터베이스 하나를 생성할 것이다. 이 작업은 직접 MySQL 서버에 MySQL 클라이언트 프로그램이나 MySQL Workbench로 접속해서 할 수도 있지만 우리가 설치했던 sequelize-cli 패키지를 사용해서 할 수도 있다.
(2) 먼저 config 디렉토리에 들어가서 그 안의 config.json이라는 파일의 내용을 보자.
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"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"
}
}
이것은 sequelize가 mysql 드라이버 패키지를 사용해서 데이터베이스 서버에 접속할 때 필요한 정보들이다. 용도에 맞게
으로 나뉘어있는 것을 볼 수 있다. 우리는 일단 development를 사용한다고 가정하자.
(3) development 객체를 조금 수정해야 한다. 여러분이 MySQL 서버를 설치할 때 설정했을 사용자 이름(username)과 비밀번호(password)를 그대로 입력해주고, "database" 프로퍼티에는 여러분이 생성하고 싶은 데이터베이스 이름을 지정한다. 나는 대학교 관련 프로젝트를 만들 것이기 때문에 University라고 하겠다.
{
"development": {
"username": "root",
"password": "123123123",
"database": "University",
"host": "127.0.0.1",
"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"
}
}
이 상태로 파일을 저장하자.
(4) 이제 sequelize-cli 명령을 사용해서 데이터베이스를 생성하겠다. 아래와 같은 명령을 실행하자.
npx sequelize db:create --env "development"
이해하기 직관적인 명령 아닌가? "--env"는 어떤 모드를 적용할 것인지를 설정하는 옵션으로 방금 본 config.json 파일에서 development 객체를 사용할 것이란 뜻이다. 이 명령을 실행하면 데이터베이스가 잘 실행된다.(지면 관계상 터미널의 출력 결과는 생략하겠다, 여러분이 직접 확인하길 바란다.)
정말로 데이터베이스가 잘 생성되었는지 확인해보겠다. MySQL Workbench로 확인해보면
이렇게 University 데이터베이스가 잘 생성되었다.
(현재는 이렇게 sequelize-cli를 사용하거나 직접 데이터베이스를 생성하는 방법 말고 코드로 할 수 있는 방법은 없는 것 같다. sequelize 패키지의 코드 중 데이터베이스 생성용 API가 없는 것 같은데, 혹시 있는데 본인이 공식 문서에서 못 찾은 것일 수도 있으니 아시는 분은 제보해주시길..)