일상 속 물건이나, 사치품, 자동차까지 실시간 소통 경매를 통해 원하는 가격으로 구매할 수 있는 서비스

Github

기간

인원

사용기술

https://github.com/mju-Sharper/under-draw

2023.03 - 2023.06 (3개월)

FE 2명, BE 2명

역할

✔️ 공통 컴포넌트 스타일링 및 UI 퍼블리싱

✔️ 메인 페이지 기능 제작

✔️ 로그인, 회원가입

정규식 조건을 모두 통과하는 정보만이 authentication API에 접근 가능하며,

만약 API 상 오류가 있다면, catch와 오류 토스트창을 통해 유저에게 알리도록 했습니다.

✔️ 실시간 입장∙퇴장 알림 및 채팅 기능

[입장∙퇴장]

소켓이 적용되는 컴포넌트 파일 외부에 빈 값이 들어있는 소켓을 선언합니다.

useEffect를 이용해 해당 페이지에 첫 입장 시 서버에서 전달하는 각 아이디 별 소켓 구분값, namespace에 접속해있는 유저 리스트를 받아왔습니다.

퇴장은 아래 두 동작을 통해 이루어졌습니다.

  1. 웹 브라우저 뒤로가기

    useEffect(() => {
    ...useEffect 내부 ...
    	window.addEventListener('popstate', handlePopstate);
    }, [])
    
    const handlePopstate = () => {
        if (socketInstances[id]) {
          socketInstances[id].disconnect();
          delete socketInstances[id];
        }
    };
    

    웹 브라우저 뒤로 가기로 퇴장하기는 popstate 이벤트를 이용하여 구현했습니다.

  2. 헤더에 있는 ‘사자마켓’ 로고 클릭 시

    헤더의 로고를 클릭했을 때 소켓을 disconnect 하여 연결을 끊는 형태로 구현했습니다.

    이때 경매방과 같은 소켓을 공유하지 않으면 disconnect가 제대로 이루어지지 않았기에 경매방 컴포넌트에만 예외적으로 헤더를 따로 불러와 같은 소켓값을 공유할 수 있도록 수정했습니다.