codestates / codestates/Reciper-client

[✍️ Dev Log] 이우성 / 2021-05-29

Open
#243 0 comments 0 reactions 1 assignee Claimed by @useonglee View on GitHub
@useonglee/기록은 성장의 밑거름 💨 Dev Log
Dominant language
TypeScript
Stars
13
Forks
7
PR merge metrics
No merged PRs in 30d

Description

### 오늘은 어떻게 프로젝트에 기여했나요?

- #234 Chat socket을 통해 서버에게 전해주는 데이터를 유틸함수로 만들기
- #236 채팅 image upload 기능 구현하기
- #239 채팅 마운트 시 빈 문자열 데이터 저장 에러 해결
- #240 chat 실시간으로 저장되지 않는 에러 해결

![채팅 이미지 업로드](https://user-images.githubusercontent.com/75570915/120073371-f3bf5580-c0d2-11eb-96a7-45d8ba57ad2b.gif)

![채팅 바로 수정 가능](https://user-images.githubusercontent.com/75570915/120073379-f7eb7300-c0d2-11eb-9399-fe5b1596c9b2.gif)

### 오늘의 프로젝트에서 힘든 점은 무엇인가요?

![채팅 이미지 업로드 오류](https://user-images.githubusercontent.com/75570915/120071029-421b2700-c0c8-11eb-9ab8-ff7bf4bdc2e5.png)

이게 무슨 일인가... 빈 문자열 형태로 계속 채팅이 추가가 되고 있었다.

원인은 이미지 업로드를 `useEffect`로 하고 있어서 값이 없어도 `emit`이 되고 있었던 것이다. 그래서 서버에서 데이터를 받아오는 socket `on`에서 빈문자열일때는 값이 저장되지 않도록 해보았다.

그래도 값은 계속 추가가 되었다. 어차피 `emit`을 해서 데이터에 이미 저장되는데 오는 데이터를 막으면 무슨 소용이겠는가...

1시간 가까이 고민을 한 끝에 해결을 할 수 가 있었다!!!!!!!!

`useEffect`에서 애초에 빈 값이면 데이터를 보내지 않으면 되는 것이였다!! 이게 해결하고 나니 정말 쉬운 문제였는데, 막상 에러가 터지고 어디서부터 손을 봐줘야할지 막막할 때는 바로 찾기 힘든 것 같다..

그래도 천천히 잘 생각해 본 끝에 문제를 해결할 수 있어서 기분이 정말 좋았다 ㅠㅠㅠ

```js
useEffect(() => {
if (chatUploadImage) {
//변수 생략..

setChatBucket([...chatBucket, newChat]);
socket?.emit("sendImage", getImageData);
}
}, [chatUploadImage]);
```

이런식으로 upload할 image의 값이 있을 때만 `emit`을 보내주면 되는 것이였다 ㅜㅜㅜ!!!

이후 채팅 이미지 업로드 기능은 더 이상 문제가 없었다~




그 다음은 채팅을 하자마자 수정 및 삭제가 안되는 문제가 있었다.

![새로고침 해야만 변경가능](https://user-images.githubusercontent.com/75570915/120073375-f5891900-c0d2-11eb-9369-39e638bda296.gif){: width="100%" height="100%"}

위에 gif 처럼 새로고침을 해야만 변경 사항이 적용되었다.

원인 분석을 한 끝에 원인을 찾을 수 있었다.

바로 서버의 `broadcast` 때문인데, 채팅을 입력하고 엔터를 누르는 순간 emit을 보내고 서버에서 `on`이 아직 오지 않은 상태에서 일단 채팅에 기록을 남겨두는 방식을 사용하고 있기 때문이다.

그래서 `useEffect`의 트리거 부분에 chat이 추가될 때 마다 마운팅되도록 설계를 했다. 그러면 채팅이 입력되고 추가 될 때마다 서버에서 `on`으로 데이터를 즉각적으로 받을 수 있었다.

그러면 서버에도 데이터가 바로 받아서 저장이 되기 때문에 그 데이터를 또 다시 수정 및 삭제가 가능한 것이다.

이 점을 활용하여 채팅을 남기고 즉각적으로 또 수정하거나 삭제할 수 있는 기능을 구현하였다.

### 내일은 프로젝트에 기여하기 위해 무엇을 해야 하나요?

- [x] 드래그 앤 드랍으로 채팅 이미지 업로드 기능 구현하기
- [x] 인피니티 스크롤 기능 구현하기

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.