codestates / codestates/BookDam

22.01.05 Dev-Log

Open
#73 0 comments 0 reactions 1 assignee Claimed by @sangkwonkim View on GitHub
sangkwonkim Server
Dominant language
JavaScript
Stars
1
Forks
1
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?
- 유저 정보 수정 api 와 유저 검색 api를 구현했습니다.
- bcrypt 사용 방법에 대해서 학습했습니다.

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?
- 유저 검색 api 에서 해당 유저가 검색하는 유저를 follow 하고 있는 지 여부를 response에 담는 것이 어려웠습니다.
- sequelize 테이블 상에서 연관관계 설정에 실수가 있어서 해당 문제가 발생했습니다.
- 테이블 연관관계를 변경하긴 했지만, 검색된 유저가 검색하는 유저를 follow하는 지 확인하는 여부가 아직 해결되지 않았습니다.
```js
userData = await UserModel.findAll({
attributes: { exclude: ['updatedAt', 'createdAt', 'password'] },
where: {
[Op.or]: [
{ userId: { [Op.like]: `%${name}%` } },
{ userNickName: { [Op.like]: `%${name}%` } }
]
},
include: [{ model: ArticleModel }, { model : FollowModel } ]
});
```

```js
User.hasMany(models.Follow, { foreignKey: 'user_Id', sourceKey: 'id' });
=> follow 테이블에 있는 user_Id 와 follow_Id에 hasmany를 설정해줬는데,
위의 코드로 검색했을 때 아래의 hasmany가 적용되었습니다.
아래의 코드를 주석처리함으로써 해결할 수 있었는데, 검색된 유저가 follow 명단 중에 검색한 유저가 있는 지 여부만 확인할 수 있는 방법을 학습해봐야겠습니다.
// User.hasMany(models.Follow, { foreignKey: 'follow_Id', sourceKey: 'id' });
```
- 지금까지 bcrypt를 이용할 때 동기로 처리를 했습니다. 근데 앞 번에 개인적으로 학습할 때 비동기적으로 구현한 경험이 있어 두가지 방법의 차이를 알아봤습니다.

```
// 비동기적인 방법
bcrypt.genSalt(saltRounds, function(err, salt) {
bcrypt.hash(myPlaintextPassword, salt, function(err, hash) {
// Store hash in your password DB.
});
});
```
```
//동기적인 방법
const salt = bcrypt.genSaltSync(saltRounds);
const hash = bcrypt.hashSync(myPlaintextPassword, salt);
```
bcrypt 공식 페이지에서는 비동기적인 방법을 권고하며 아래와 같이 설명했습니다.
```
동기화 모드보다 비동기 모드가 권장되는 이유는 무엇입니까?
간단한 스크립트에서 bcrypt를 사용하는 경우 동기화 모드를 사용하는 것이 좋습니다. 그러나 서버에서 bcrypt를 사용하는 경우에는 비동기 모드가 권장됩니다. 이는 bcrypt에 의해 수행되는 해싱이 CPU 집약적이기 때문에 동기화 버전이 이벤트 루프를 차단하고 응용 프로그램이 다른 인바운드 요청이나 이벤트를 서비스하지 못하도록 하기 때문입니다. 비동기 버전은 메인 이벤트 루프를 차단하지 않는 스레드 풀을 사용합니다.
```
기능이 어느 정도 구현이 된다면 비동기적인 방법으로 리팩토링 할 예정입니다.

그리고 sequelize에서 attribute의 exclude도 오늘 학습하게 되어 이 부분 또한 리팩토링 할 예정입니다.
### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [ ] 유저 검색 기능을 마무리하고, article api를 작성할 예정입니다.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.