오늘은 Sequelize를 사용하여 클라이언트에게서 URL주소를 받아 데이터베이스에 저장한뒤, 해당 id를 params로 GET 요청을 보내면 원래의 URL로 리디렉션하는 기능을 하는 서버&데이터베이스를 구현하는 스프린트를 진행하였다. 생소한 Sequelize를 직접 설치하고 모델 및 마이그레이션을 생성하고 명령문을 작성하는 과정을 통해 생소한 Sequelize를 쉽게 익힐 수 있었다.
SQL :
SELECT name FROM user
-> Sequelize :
const user = await db.user.findAll({ attributes: {'name'} })
SQL :
SELECT * FROM user ORDER BY id DESC
-> Sequelize :
const user = await db.user.findAll({ order: 'id DESC' })
SQL :
SELECT * FROM user LIMIT 1 OFFSET 1
-> Sequelize :
const user = await db.user.findAll({ offset: 1, limit: 1, })
SQL :
INSERT INTO user (name, email) VALUES ("GWANGUIAN", "bbaa3128@gmail.com")
-> Sequelize :
const user = await db.user.create({ name: "GWANGUIAN", email: "bbaa3128@gmail.com" })
SQL :
UPDATE user SET email="bbaa3128@naver.com" WHERE name="GWANGUIAN"
-> Sequelize :
const user = await db.user.update({ where: {name: "GWANGUIAN"}, email: "bbaa3128@naver.com" })
SQL :
DELETE FROM user WHERE id="1"
-> Sequelize :
const user = await db.user.destroy({ where: {id: 1}, })
hasOne(), belongTo() 두 가지 메소드가 모두 1:1 관계를 정의하는 메소이지만 관계의 기준이 되는 모델이 다르다.
Source.hasOne(Target) //OR Target.belongTo(Source)
Source.hasMany(Target, {foreignKey: 'KeyName'})
N:M 관계를 사용하게 되면 정규화 과정을 통해 중간에 테이블이 생성되며, 테이블은 별칭을 통하여 이름을 지정할 수 있으며 foreignKey와 otherKey도 지정이 가능하다.
Source.belongsToMany(Target, { as: NMId, foreignKey: KeyId, otherKey: KeyId })
앞서 SQL을 학습한 후여서, Sequelize 메소드를 쿼리 대신에 사용하는 것이 어색하고 사용법과 옵션을 찾아보는 과정이 번거로웠지만, SQL을 모르는 사람에게는 매우 유용하다고 생각했다. 그리고 오랜만에 Express를 사용하여 복습할 수 있었고, mysql2를 통해 비동기 함수로 Sequelize를 사용한 코드를 작성할 수 있어서 여러 부분에서 유익했다.