본문 바로가기

clone toy projects/node_express_sns

데이터베이스 세팅하기

사용자 테이블,게시글테이블, 해시태그 테이블이 필요하다.

 

소셜 로그인을 했을 경우 provider과 snsId를 저장한다.

provider의 EUM 이라는 속성은 넣을 수 있는 값을 제한하는 데이터형식

 

종류는 local, kakao이며 이를 어겼을때는 에러가 발생한다.

 

게시글의 내용과 이미지 경로를 저장

게시글 등록자의 아이디를 담은 컬럼은 나중에 관계를 설정 할 때 시퀄라이즈가 알아서 생성한다.

 

 

태그 이름을 저장( 태그로 검색을 하기 위해)

 

 

모델의 index.js  작성

 

 

같은 모델끼리도 N : M 관계를 가질 수 있다.

 

같은 테이블 간 N:M 관계에서는 모델 이름과 컬럼 이름을 따로 정해야 한다. 

모델 이름이 UserUser일수는 없으니까. 

through 옵션을 사용하여 생성할 모델 이름을 Follow로 정함.

Follow 모델에서 사용자 ID를 저장하는 컬럼 이름이 둘 다 user ID면 

누가 팔로워고 누가 팔로잉 중인지 구분되지 않으므로 따로 설정해야 한다.

foreignkey 옵션에 각각 followerId, followingId를 넣어줘서 두 사용자 ID를 구별.

같은 테이블간의 N:M 관계에서는 as 옵션도 넣어야함. 

둘 다 User 모델이라 구분되지 않기 때문. 

 

주의할 점은 as는 foreignKey와 반대되는 모델을 가리킨다는 것. 

foreignKey가 followerId(팔로워 ID)면 as는 Followings(팔로잉)이고, 

foreignkey가 followingId(팔로잉 ID)면 as는 Followers(팔로워)여야 한다. 

 

팔로워(Followers)를 찾으려면 먼저 팔로잉 하는 사람의 아이디(followingId)를 찾아야 하는 것이라 생각하면 된다.

 

 

as에 특정한 이름을 지정했으니 user.getFollowers, user.getFollowings 같은 관계 메서드를 사용할 수 있다.

include 시에도 as에 같은 값을 넣으면 관계 쿼리가 작동한다.

 

User 모델과 Post 모델은 1(User) 대 N(Post) 관계이므로 belongsTo로 연결되어 있어

시퀄라이즈는 Post 모델에 User 모델의 id를 가리키는 UserId 컬럼을 추가한다.

 

어디에 컬럼이 추가되는지는 관계를 생각해보면 쉽다. 

사용자가 한 명이고 그에 속한 게시글이 여러 개이므로 각각의 게시글에게 게시글의 주인이 누구인지 넣어야 한다. 

belongsTo는 게시글에 붙습니다. Post.getUser, post.addUser와 같은 관계 메서드가 생성된다.

 


Post 모델과 Hashtag 모델은 N:M 관계.

N:M 관계이므로 PostHashtag라는 중간 모델이 생기고, 각각 postId와 hashtagId라는 foreignKey도 추가된다.

 

 

 

 

NodeBird의 모델은 총 다섯 개로, 직접 생성한 User, Hashtag, Post와 

시퀄라이즈가 관계를 파악하여 생성한 PostHashtag, Follow까지 있다.

 자동으로 생성된 모델도 다음과 같이 접근할 수 있다. 이 모델들을 통해 쿼리 작업이나 관계 메서드 사용도 가능합니다.

 

 

이제 생성한 모델을 데이터베이스 및 서버와 연결. 

데이터베이스(nodemocabird)부터 만들고 생성한 모델을 데이터 베이스 및 서버에 연결.

 

시퀄라이즈는 config.json을 읽어 데이터베이스를 생성해주는 기능이 있습니다. 

MySQL 비밀번호를 password에 넣고 데이터베이스 이름을 nodemocabird로 바꾼다. 

 

 npx sequelize db:create

위명령어 입력해서 데이터베이스 생성

서버와 연결