본문 바로가기

React7

eslint-config-prettier | ESLint indent 규칙과 Prettier 규칙 간의 충돌 해결 배경ESLint와 Prettier는 각각 다른 목적을 가진 도구입니다 ESLint는 코드의 품질 검사하고, Prettier는 코드의 스타일 포맷팅을 하죠하지만 두 도구가 동시에 코드 스타일을 검사하려고 하면서 충돌이 발생했습니다. 문제 정의문제를 정의하면 다음과 같습니다."ESLint의 indent 규칙과 Prettier의 들여쓰기 규칙이 충돌하고 있다" 기존에는 ESLint의 indent 규칙을 수동으로 끄는 방식으로 해결했습니다https://github.com/woowacourse-teams/2025-moitz/pull/403 하지만 이는 임시방편일 뿐, 다음과 같은 문제가 있습니다:다른 스타일 규칙들도 충돌할 수 있음충돌이 발생할 때마다 수동으로 규칙을 꺼야 함팀원들이 규칙을 다시 켤 수 있어.. 2025. 11. 24.
선언적으로 Modal 시스템 구현하기 🌀 서문이번 글에서는 모달(Modal)을 구현하는 과정 속에서 마주했던 전역 상태 관리의 복잡성과 성능 저하 문제, 그리고 이를 해결하기 위해 overlay-kit 라이브러리에서 영감을 받아 우리만의 모달 시스템을 구축한 경험을 공유해 보려고 합니다. 🌀 Modal사용자에게 중요한 정보를 알리거나, 간단한 액션을 유도할 때 모달 UI 컴포넌트를 자주 사용하죠. 프로젝트 초기, 저희는 간단한 useState 기반의 커스텀 훅(useModal)으로 모달의 열림/닫힘 상태를 관리했습니다. 처음에는 아무 문제 없어 보였습니다. 하지만 프로젝트가 성장하고 모달의 종류가 다양해지면서 문제가 발생하기 시작했습니다.여러 컴포넌트에서 동일한 모달을 제어해야 할 때 상태 관리가 복잡해졌습니다.상태를 끌어올리고(lif.. 2025. 10. 20.
useQRCode를 만들어보자 훅포넌트 스터디에서 ‘useQRCode’를 구현한 과정을 기록했습니다 🌀 배경프로젝트에서 링크 공유 기능에 QR 코드 옵션을 추가하기 위해 useQRCode 훅을 구현해보겠습니다. 🌀 문제 정의1-1. QR 코드 생성 방법우선 현재 QR 코드를 생성할 수 있는 방법을 찾아봤습니다.Google QR Codes API 에 요청 하는 방법 ❌Open Source를 통한 Local에서 생성 ✅QR Code 생성을 제공하는 기타 사이트(네이버, 어도비 등등) ❌1번에 해당하는 Open API를 사용하기에는, 여러가지 절차, 통신, 인증,인가, API Spec 등 고려해야 할 부분이 많습니다. 또한 현재는 구글 API 가 지원종료되어 사용할 수 없다는 단점이 있습니다. 이런 이유로 이번 글에서는 오픈소.. 2025. 9. 30.
requestAnimationFrame(raF), 알고 사용하시나요? 'raF()'의 등장 배경, 원래, 사용 방법에 대해 정리했습니다. 🔽 웹 애니메이션웹에서 애니메이션은 단순한 장식이 아니라, 사용자의 경험을 매끄럽게 만들어 주는 중요한 요소입니다. 예를 들어, 버튼을 클릭했을 때 부드럽게 색이 변하거나, 로딩 중에 프로그래스바가 자연스럽게 움직이는 것은 모두 애니메이션 덕분이죠. CSS의 `transition`, `animation`, `transform` 만으로도 다양한 애니메이션을 만들 수 있습니다. 하지만 CSS 애니메이션만으로는 한계가 있습니다. 예를 들어, 스크롤 위치에 따라 요소 크기를 동적으로 바꾸거나, 실시간 데이터(예: 프로그래스바, 그래프) 를 반영하는 애니메이션은 JS 제어가 필요합니다. 전통적으로는 `setInterval` 같은 .. 2025. 9. 15.
[아키텍처] FSD 아키텍처 : Feature-Sliced Design 🔽 목표늘 '팀 프로젝트를 잘하려면 어떻게 구조를 설계/분리해야할까?'라는 궁금증이 생겼다. '잘 분리'하기 위해서는 재사용성이 좋게 역할과 책임을 분리해야하고, 다른사람이 이해하기 쉬운 코드가 가장 중요하다고 생각했다. 그래서 다른 개발자가 협업함에 있어서 가독성이 좋고, 역할과 책임이 잘 분리된 구조를 설계해보는걸 목표로 진행중이던 프로젝트를 수정해봤다. 🔽 현재 구조적 문제 상황아래는 기존 프로젝트 구조로 페이지 단위로 분리되었다.react-shopping-cart├─ src│ ├─ apis 👈 api│ │ ├─ cartItems│ │ └─ httpClient.ts│ ├─ pages .. 2025. 6. 12.
[UX 개선] 낙관적 업데이트(Optimistic Update) 🔽 낙관적 업데이트란?낙관적 업데이트(Optimistic Update)는 사용자가 어떤 작업(예: 데이터 수정, 삭제, 추가 등)을 요청했을 때, 서버의 응답을 기다리지 않고 UI를 즉시 변경하여 사용자가 빠른 피드백을 받을 수 있도록 하는 기법입니다. 즉, 서버가 요청을 성공적으로 처리할 것이라고 가정하고, 미리 화면을 업데이트하는 방식입니다. 이 방식은 네트워크 지연이나 서버 응답이 느린 환경에서도 사용자 경험(UX)을 크게 개선할 수 있습니다. 다만, 서버 요청이 실패할 경우 UI와 실제 데이터가 불일치할 수 있으므로, 실패 시 원래 상태로 되돌리는(롤백) 처리가 반드시 필요합니다. 🔽 리액트에서의 낙관적 업데이트 예시 1. 직접 상태 관리 (useState 등)예를 들어, 할 일(Todo).. 2025. 6. 3.
[TanStack Query] 서버 상태 관리 라이브러리 안녕하세요오늘은 서버 상태 관리 라이브러리인 TanStack Query에 대해 정리해보고자 합니다. 🔽 TanStack QueryTanStack Query(이전 명칭 : react-query)는 웹 애플리케이션에서 서버 상태를 가져오고, 캐싱하고, 동기화하고, 업데이트하는 작업을 아주 쉽게 해줍니다. 🔽 왜 사용하는 가? (Why?)클라이언트 상태(useState, useReducer)와는 달리, 서버에서 가져온 데이터는 시간이 지나면 바뀔 수 있고, 언제든 다시 가져와야 할 필요가 있습니다.하지만 전통적인 방식(예: useEffect + axios + useState)으로 이걸 처리하려면 다음과 같은 문제가 발생합니다: ❌ 기존 방식의 문제점loading, error, data 상태를 직접 관.. 2025. 6. 2.