TIL 52일차

안광의·2021년 9월 2일
0

Today I Learned

목록 보기
52/64
post-thumbnail
post-custom-banner

시작하며

오늘은 Sequelize를 사용하여 클라이언트에게서 URL주소를 받아 데이터베이스에 저장한뒤, 해당 id를 params로 GET 요청을 보내면 원래의 URL로 리디렉션하는 기능을 하는 서버&데이터베이스를 구현하는 스프린트를 진행하였다. 생소한 Sequelize를 직접 설치하고 모델 및 마이그레이션을 생성하고 명령문을 작성하는 과정을 통해 생소한 Sequelize를 쉽게 익힐 수 있었다.

Sequelize

Sequelize CRUD

SELECT

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,
	})


INSERT INTO

SQL : INSERT INTO user (name, email) VALUES ("GWANGUIAN", "bbaa3128@gmail.com")

-> Sequelize :

const user = await db.user.create({
		name: "GWANGUIAN",
		email: "bbaa3128@gmail.com"
	})


UPDATE

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"
	})


DELETE

SQL : DELETE FROM user WHERE id="1"

-> Sequelize :

const user = await db.user.destroy({
		where: {id: 1},
	})

Associations

1:1

hasOne(), belongTo() 두 가지 메소드가 모두 1:1 관계를 정의하는 메소이지만 관계의 기준이 되는 모델이 다르다.

Source.hasOne(Target)
//OR
Target.belongTo(Source)

1:N

Source.hasMany(Target, {foreignKey: 'KeyName'})

N:M

N:M 관계를 사용하게 되면 정규화 과정을 통해 중간에 테이블이 생성되며, 테이블은 별칭을 통하여 이름을 지정할 수 있으며 foreignKey와 otherKey도 지정이 가능하다.

Source.belongsToMany(Target, {
 as: NMId,
 foreignKey: KeyId,
 otherKey: KeyId
})

마치며

앞서 SQL을 학습한 후여서, Sequelize 메소드를 쿼리 대신에 사용하는 것이 어색하고 사용법과 옵션을 찾아보는 과정이 번거로웠지만, SQL을 모르는 사람에게는 매우 유용하다고 생각했다. 그리고 오랜만에 Express를 사용하여 복습할 수 있었고, mysql2를 통해 비동기 함수로 Sequelize를 사용한 코드를 작성할 수 있어서 여러 부분에서 유익했다.

profile
개발자로 성장하기
post-custom-banner

0개의 댓글