/web-chat

πŸ“Œ web-chat

Primary LanguageTypeScript

πŸ“¬ web-socket

μ„œλ²„ 및 API

  • heroku λ₯Ό μ‚¬μš©ν•˜μ—¬ socket.io μ„œλ²„ 생성

λͺ¨λ“ˆ

  • Socket.io : μ„œλ²„μ—μ„œ λŠ₯λ™μ μœΌλ‘œ μ „λ‹¬ν•˜λŠ” 값을 μˆ˜μ‹ ν•˜κΈ° μœ„ν•œ λͺ¨λ“ˆ
  • Jest, React-testing-library : Unit test
  • styled-components : CSS-in-JS

src 디렉토리 ꡬ쑰

  • components : μž¬ν™œμš©κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ 관리. λŒ€λΆ€λΆ„ λ‹¨μˆœ UIλ₯Ό 그리기 μœ„ν•œ μ»΄ν¬λ„ŒνŠΈ
  • hooks : κΈ°λŠ₯에 λ”°λΌμ„œ μΆ”μƒν™”λœ λ‘œμ§λ“€μ„ 관리
  • json : 정적인 json데이터 관리
  • pages : 각쒅 둜직이 μ—°κ²°λ˜λŠ” μ΅œμƒμœ„ μ»΄ν¬λ„ŒνŠΈ

    Route κ°œλ…

  • socket : socket.io ꡬ성 μš”μ†Œ. 이후에 μΆ”κ°€λ˜λŠ” socket κ΄€λ ¨ reducer 도 포함
  • styles : global Style
  • types : types

Components κ·œμΉ™

  1. Text, Input, Buttonκ³Ό 같은 κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ μ»΄ν¬λ„ŒνŠΈλ“€μ€ μ΅œλŒ€ν•œμ˜ μž¬μ‚¬μš©μ„±μ„ μœ„ν•΄ κΈ°λ³Έ Element듀을 ν™•μž₯ν•˜μ—¬ μ‚¬μš©
import { ButtonHTMLAttributes } from "react";
import * as Styled from "./index.style";

interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
  border?: string;
}

function Button({ border = "borderless", children, ...props }: ButtonProps) {
  return (
    <Styled.Button border={border} {...props}>
      {children}
    </Styled.Button>
  );
}

export default Button;
  1. marginκ³Ό 같은 컨텐츠 외뢀에 영ν–₯을 μ£ΌλŠ” μŠ€νƒ€μΌλ“€μ€ μƒμœ„μ»΄ν¬λ„ŒνŠΈμ—μ„œ 지정
  2. μ΅œλŒ€ν•œ 좔상화 단계 톡일화
  3. UIλ₯Ό κ΅¬μ„±ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μƒνƒœκ°’μ„ κ³„μ‚°ν•˜λŠ” λ‘œμ§μ„ μ΅œλŒ€ν•œ hooks둜 좔상화 ν•˜μ—¬ μ„ μ–Έν˜•μœΌλ‘œ μ‚¬μš©

useReducer

μƒνƒœκ°’ 관리 hook을 useStateκ°€ μ•„λ‹Œ useReducer μ‚¬μš©

  1. μƒνƒœκ°’μ΄ μ—…λ°μ΄νŠΈ 됨에 μžˆμ–΄, μ΄μ „μ˜ κ°’κ³Ό λ‹€λ₯Έ μƒνƒœκ°’μ— λŒ€ν•œ μ˜μ‘΄μ„ κ°–κ²Œλ˜λŠ” 상황이 λ§Žμ•„μ„œ μ‚¬μš©

    μ˜μ‘΄μ„± 배열을 μ‚¬μš©ν•˜λŠ” useEffect, useCallbackκ³Ό 같은 라이프 μ‚¬μ΄ν΄μ—μ„œλ„ μ„±λŠ₯이 κ°œμ„ λ¨

고민사항

  1. Redux
  • μ»΄ν¬λ„ŒνŠΈ κ΅¬μ‘°λ©΄μ—μ„œ 쑰합을 μ‚¬μš©ν•˜μ—¬ props depth에 λŒ€ν•œ λ¬Έμ œλŠ” μ—†μ—ˆκΈ° λ•Œλ¬Έμ—, μ „μ—­ μƒνƒœκ΄€λ¦¬μ˜ ν•„μš”λ₯Ό λͺ»λŠλ‚Œ.
  • useReducer둜 Redux의 reducerκΈ°λŠ₯을 μΆ©λΆ„νžˆ λŒ€μ²΄ κ°€λŠ₯
  1. Redux-Saga
  • Redux의 μ‚¬μš©μ΄ κ°•μ œλ¨
  • take와 같은 κΈ°λŠ₯으둜 connect, disconnect λ‘œμ§μ„ flow ν˜•μ‹μœΌλ‘œ μž‘μ„±ν•  수 μžˆμ„κ²ƒ κ°™μŒ.
  • channelκΈ°λŠ₯이 socketκ³Ό μƒλ‹Ήνžˆ ꢁ합이 μž˜λ§žλŠ”λ‹€κ³  함.

    action이 짧은 ν…€ 내에 μ—¬λŸ¬λ²ˆ ν˜ΈμΆœλ˜μ—ˆμ„ λ•Œ, que ν˜•μ‹μ˜ 자료ꡬ쑰λ₯Ό 가진 μƒνƒœλ‘œ 순차적으둜 진행될 수 μžˆλ„λ‘ 버퍼링 socket.onκ³Ό 같은 μ™ΈλΆ€ 이벀트λ₯Ό saga의 take에 μ—°κ²°ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” κΈ°λŠ₯ buffer에 λˆ„μ λœ 값듀을 μ €μž₯ν•˜κ³ , flush둜 κ·Έ 값듀을 가져와 μ‚¬μš©

μ°Έμ‘°ν•˜κΈ° 쒋은 μ‚¬μ΄νŠΈ