Front-End (16) 썸네일형 리스트형 [React / Next.js + Zustand] StompJS로 채팅 구현하기 (2) - 실시간 채팅 방 상태 관리하기 지난 포스팅에서 채팅방을 구현하기 위한 stomp 웹소켓 연결 과정을 다뤘었다. 이번에는 백엔드에서 개발한 웹 소켓 서버에 맞춰 유저 입장, 채팅, 게임 시작 준비 상태 받기를 구현해 볼 것이다. 1. 소켓에 연결이 되면 `/sub/rooms/${roomId}` 엔드포인트를 subscribe하고, `/pub/rooms/${roomId}/join`로 publish를 한 번 보내서 접속이 되었다는 신호를 보내준다. 서버는 이런 식으로 해당 채팅 방에 새로운 유저가 들어올 때마다 접속한 유저 리스트를 메시지로 보내줄 것이다. 2. 업데이트 된 유저 리스트를 받을 때 마다 화면도 업데이트 시켜준다. 3. 채팅으로 메시지를 받으면 해당 메시지를 보낸 유저프로필 위로 말풍선을 띄운다. 완성되어야하는 페이지의 모습... [모던 자바스크립트 Deep Dive] 11장 원시 값과 객체의 비교 12장을 먼저 읽긴 했지만 보다 보니 내가 자바스크립트의 원시 값, 객체 타입에 대해서도 잘 모르는 것 같아 다시 11장으로 돌아오게 됐다. ㅎㅎ 자바스크립트가 제공하는 데이터 7가지(number, string, boolean, null, undefined, symbol, object) 타입은 크게 원시타입, 객체타입으로 구분한다. 원시 타입과 객체 타입의 차이 원시 타입의 값은 변경 불가능한 값이고, 객체 타입의 값은 변경 가능한 값이다. 원시 값을 변수에 할당하면 변수에는 실제 값이 저장되고, 객체를 변수에 할당하면 변수에는 참조 값이 저장된다. 값에 의한 전달 - 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달 / 참조에 의한 전달 - 객체를 가리키는 변수를 다른 변수에.. [React / Next.js] StompJS로 채팅 구현하기 (1) - 웹 소켓 연결 실시간 채팅을 구현하기위해 웹 소켓을 이용해 볼 것이다! 웹소켓이란? 웹 브라우저와 서버 간의 양방향 통신을 가능하게 하는 프로토콜이다. HTTP 프로토콜과 달리 웹소켓은 단일 TCP연결을 통해 지속적인 양방향 통신을 할 수 있다. HTTP 프로토콜과 더 비교을 해보자면... HTTP프로토콜은 기본적으로 클라이언트 - 서버 모델을 따르며, 요청 - 응답 방식으로 동작한다. 클라이언트가 서버에 요청을 보내면 서버가 그에 대한 응답을 반환하는 식이고, 클라이언트가 서버의 데이터 변경 사항을 실시간으로 확인하려면 주기적으로 요청을 보내야 한다. 반면에, 웹소켓은 클라이언트와 서버 간에 단일 TCP 연결을 유지하면서 양방향(전이중 full-duplex)으로 데이터를 실시간으로 주고 받을 수 있다. 이 연결은 열.. [모던 자바스크립트 Deep Dive] 12장 함수 한 학기 목표를 “매주 를 읽고 공부해서 기록하기” 로 정해 보았다. 앞서 9장까지 천천히 읽긴 했지만, 사실 궁금한 부분을 먼저 찾아서 읽는 게 더 공부가 잘되니까! 목차를 쭉 읽어보며 11장 객체를 볼까 하다가 “12.7 다양한 함수의 형태”에 끌려 12장을 보기로 결정했다. 먼저 함수의… 개념 : 재료를 투입받아 제품을 생산하는 기계와 같은 것 : 일련의 과정을 statement로 구현하고 코드블록으로 감싸서 하나의 실행 단위로 정의한 것 : 함수 호출 시 받는 입력을 인수, 함수에서 입력을 전달받는 변수를 매개변수, 출력은 반환 값 솔직히 이렇게만 보면 이미 아는 개념인데.. 뒤에 내용이 뭐가 이렇게 많은거지? 계속 읽어보자… 왜 함수를 사용하는가? : 코드의 재사용성 - 몇 번이든 호출 가능하다.. Next.js에서 Axios Interceptor 작성하기 (feat. Zustand, localStorage) Axios Interceptor 란? HTTP 요청이나 응답을 가로채고 수정할 수 있는 중간 단계를 의미합니다. 이를 통해 전역적으로 요청과 응답을 처리하거나 특정 요청이나 응답에 대해 특별한 로직을 적용할 수 있습니다. Interceptor를 사용하면 다양한 용도로 활용할 수 있으며, 예를 들어 토큰을 자동으로 추가하거나 에러를 처리하는 등의 작업을 수행할 수 있습니다. 이를 통해 코드의 중복을 줄이고 유지보수성을 향상시킬 수 있습니다. Axios 공식 문서도 참고해보자 ↓ https://www.npmjs.com/package/axios/v/1.4.0#interceptors axios Promise based HTTP client for the browser and node.js. Latest vers.. [Next.js + Vanilla Extract css + Storybook] 공용 컴포넌트 만들기 (feat. 절대경로) 페이지들을 구현하기 전에 공용 컴포넌트들을 만들어 두기로 했다. 스토리북을 쓰면 만든 컴포넌트들을 미리보기의 형태로 정리해 놓을 수 있어서 함께 사용하기로! 처음 storybook을 설치하면 작성되어있는 main.ts 이다. import type { StorybookConfig } from '@storybook/nextjs' const config: StorybookConfig = { stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], addons: [ '@storybook/addon-links', '@storybook/addon-essentials', '@storybook/addon-onboarding', '@storybo.. [Peer 스터디] 웹 접근성에 대해 알아보자... 23.9.6 ~ 23.9.25 까지 진행했던 스터디 기록 Ex00 - 웹 접근성의 정의와 의의 : 시각, 청각, 신체, 언어, 인지, 학습 및 신경장애 등을 가진 사람들이 웹을 더 쉽게 이용할 수 있도록 만드는 방법. : 접근성이란 장애인 뿐만 아니라 모든 사람이 정보 통신 기기나 서비스를 손쉽게 활용(사용성을 증진)할 수 있도록 만드는 것. 웹 접근성의 필요성 웹의 힘은 그것의 보편성에 있다. 장애에 구애없이 모든 사람이 접근할 수 있는 것이 필수적인 요소이다. (The power of the Web is in its universality, Access by everyone regardless of disability is an essential aspect.) 팀 버너스 리 경 - 웹의 창시자 (T.. 컴포넌트 랜덤 분포 애니메이션 구현하기 폭죽이 터지는 듯한 배경화면을 구현하기 위해 서로 다른 여러 랜덤 사이즈의 컴포넌트들을 화면 중앙에서 랜덤 위치로 퍼뜨리는 애니메이션을 만들어보았다. 우선 각 엘리먼트의 사이즈는 1~30사이의 랜덤 사이즈, 컨테이너의 크기는 500 * 1000으로 설정했기때문에 top위치는 0~500, left위치는 0~1000사이의 랜덤값을 설정해주는 함수를 만들었다. 그리고 초기값은 화면 중앙인 250, 500으로 설정했다. 그리고 초기 랜더링 후 1초동안 해당 랜덤위치로 이동하도록 useEffect를 이용해 처리해주었다. 'use client'; import React, { useEffect, useState } from 'react'; import './styles.css'; // 위의 CSS 코드를 포함한 CS.. 이전 1 2 다음