Skip to content

Conversation

@ongheong
Copy link
Member

@ongheong ongheong commented Oct 10, 2024

미션 소감

안녕하세요, LG U+유레카 1기 프론트엔드 반 심여은입니다.
이번 주차에는 지난 주차에 작성한 코드에 채팅 목록 페이지를 추가하여 Routing을 구현하고, 상태 관리 라이브러리를 사용해보는 미션을 하였습니다. 상태 관리 라이브러리는 Recoil을 사용하였는데요, useSetRecoilState를 사용하지 못했기 때문에 사실 제대로 사용해보진 못했습니다ㅜㅜ..또한 채팅 목록 페이지에서 사용자의 이름을 검색하는 기능도 구현하지 못했네요. 이 부분은 추후 리팩토링을 통해 적용해보겠습니다...!
상태 관리 라이브러리를 어떤 것을 적용해볼지 고민하다가 Recoil을 선택했는데, 전역 상태 관리에 익숙하지 않은 제게 확실히 편리한 라이브러리인 것 같습니다! 라이브러리를 더 공부해서 React의 상태 관리에 더 익숙해졌으면 좋겠네요...!


미션에서 특별히 신경 쓴 부분들

  • ts 이미지 상대경로로 수정: 기존에는 이미지 경로를 img 태그의 속성에 모두 작성하였는데, 이미지를 상대 경로로 수정하고 import하는 방식으로 바꾸어 호환성을 높여 보았습니다!
  • user, message 객체 구조: 채팅방의 모든 정보가 담긴 messages에서 user에 쉽게 접근할 수 있도록, messages의 각 요소에 userList를 넣어 두었습니다. 이 부분은 잘 작성한 부분인지는 모르겠네요...🧐
  • 코드리뷰로 받은 피드백 적용: type을 interface로 바꾸기, any 사용 지양 등 지난번 과제에서 받은 피드백을 모두 반영해 보았습니다.

KEY QUESTION

1. SPA / MPA / CSR / SSR 이란 무엇인가요?

  • 4개의 단어는 웹 애플리케이션에 관련한 단어로, 페이지 구성 방식(SPA, MPA)와 렌더링 방식(CSR, SSR)로 나눌 수 있습니다.
  • 페이지 구성 방식
    • MPA: 여러 HTML 페이지로 어플리케이션을 구성하는 방식
    • SPA: HTML 페이지가 하나인 어플리케이션 방식
  • 렌더링 방식
    • CSR: 클라이언트에서 렌더링을 담당하는 방식 -> 서버에서 파일을 받아 클라이언트에서 실행 및 렌더링해줍니다.
    • SSR: 서버에서 렌더링을 담당하는 방식 -> 서버에서 HTML 파일을 만들고, 파일을 동적으로 제어할 수 있는 소스코드를 클라이언트에게 보내줍니다.

2. React에서 상태는 어떻게 관리할 수 있나요?

  • Context API를 사용하여 리액트 컴포넌트 트리 안에서 전역 상태를 공유합니다.
  • 전역 상태관리 라이브러리를 사용하여 전역상태를 저장하고(store), 이전 상태와 액션을 받아 다음 상태를 반환하고(reducer), reducer에게 보내는 store에 대한 행동을 정의합니다(action).
  • React Query를 사용하여 서버와 클라이언트 간의 비동기 작업(서버상태)를 관리합니다.

3. 어떤 상태관리 라이브러리를 사용했고, 그것의 특징은 무엇인가요?

  • 사용한 상태관리 라이브러리 : Recoil
  • 특징: 사용방법이 단순하고, React를 만든 FaceBook에서 나온 라이브러리이기 때문에 호환성이 좋습니다.

결과 화면

스크린샷 2024-10-10 오후 3 37 58
스크린샷 2024-10-10 오후 3 38 15

Copy link

@ZUITOPIA ZUITOPIA left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요, 여은님
몇 가지 제안 사항은 코멘트로 남겨두었습니다
이번주도 정말 고생많으셨습니다!! 👍👍

<header css={header}>
<div css={leftWrapper}>
<img src={backIcon} css={headerBtn} />
<span css={headerTitle}>{"Carat"}</span>

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분 하드코딩 보다는 사용자 데이터를 직접 불러와서 다른 계정 주인이 접속하더라도 그 user의 nickname을 가져와서 화면에 보일 수 있도록 고려해주는게 좋을 것 같아요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오 이 부분은 사용자 데이터를 atom에 정의해서 적용해 보겠습니다!

Copy link
Member

@jejukyj jejukyj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 여은님, 이번 코드리뷰를 맡게 된 고윤정입니다!
주희님께서 좋은 리뷰를 많이 남겨주셔서 저는 궁금한 점 몇가지만 추가로 달았습니다 ㅎㅎ
이번 미션도 고생 많으셨습니다~

width: 52px;
height: 36px;
border-radius: 24px;
background: var(--my-bubble-color);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

css 속성으로 var() 함수 사용한게 여러번 보여서 확인해보니 사용자 지정 속성을 지정해줄 수 있는 방법이었네요! 배워갑니다🤩

const [chatInput, setChatInput] = useState('');
const inputRef = useRef(null);
const users = useRecoilValue(userState);
const [messages, useMessages] = useRecoilState(messageState);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

메시지 state를 recoil에서 관리하고 있는데 이를 또 state에 넣은 이유가 있을까요?

default: [
{
roomId: 1,
joinedUsers: [0, 1],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 joinedUsers를 따로 설정해준 이유가 있을까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants