diff --git a/README.md b/README.md
index 9d7f906..f3c1704 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,8 @@
_스피커를 이동하거나 최적의 위치를 찾는 것은 시간과 노력이 많이 소요됩니다._
_이러한 문제를 해결하기 위해 3D 가상 공간에서 스피커를 자유롭게 배치할 수 있는 환경을 구현하였습니다._
+[서버 레포지토리](https://github.com/soundrag/soundrag-server)
+
@@ -33,71 +35,67 @@ _이러한 문제를 해결하기 위해 3D 가상 공간에서 스피커를 자
- [1. 움직이는 스피커로 소리를 바꾸기](#1-%EC%9B%80%EC%A7%81%EC%9D%B4%EB%8A%94-%EC%8A%A4%ED%94%BC%EC%BB%A4%EB%A1%9C-%EC%86%8C%EB%A6%AC%EB%A5%BC-%EB%B0%94%EA%BE%B8%EA%B8%B0)
- [1-1. 마우스로 3D 스피커 모델 조작하기](#1-1-%EB%A7%88%EC%9A%B0%EC%8A%A4%EB%A1%9C-3d-%EC%8A%A4%ED%94%BC%EC%BB%A4-%EB%AA%A8%EB%8D%B8-%EC%A1%B0%EC%9E%91%ED%95%98%EA%B8%B0)
- [(1) 다양한 해상도에서 매끄럽게 움직이려면?](#1-%EB%8B%A4%EC%96%91%ED%95%9C-%ED%95%B4%EC%83%81%EB%8F%84%EC%97%90%EC%84%9C-%EB%A7%A4%EB%81%84%EB%9F%BD%EA%B2%8C-%EC%9B%80%EC%A7%81%EC%9D%B4%EB%A0%A4%EB%A9%B4)
- - [(2) 2D 화면에서 3D 모델의 좌표 구하기](#2-2d-%ED%99%94%EB%A9%B4%EC%97%90%EC%84%9C-3d-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%A2%8C%ED%91%9C-%EA%B5%AC%ED%95%98%EA%B8%B0)
- - [(3) 마우스와 3D 모델의 실시간 상호작용](#3-%EB%A7%88%EC%9A%B0%EC%8A%A4%EC%99%80-3d-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9)
+ - [(2) 2D 화면에서 3D 모델 좌표 구하기](#2-2d-%ED%99%94%EB%A9%B4%EC%97%90%EC%84%9C-3d-%EB%AA%A8%EB%8D%B8-%EC%A2%8C%ED%91%9C-%EA%B5%AC%ED%95%98%EA%B8%B0)
+ - [(3) 3D 모델과 마우스 움직임의 실시간 상호작용](#3-3d-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EB%A7%88%EC%9A%B0%EC%8A%A4-%EC%9B%80%EC%A7%81%EC%9E%84%EC%9D%98-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9)
- [1-2. 스피커의 위치로 소리를 바꾸는 방식](#1-2-%EC%8A%A4%ED%94%BC%EC%BB%A4%EC%9D%98-%EC%9C%84%EC%B9%98%EB%A1%9C-%EC%86%8C%EB%A6%AC%EB%A5%BC-%EB%B0%94%EA%BE%B8%EB%8A%94-%EB%B0%A9%EC%8B%9D)
- [(1) 멀리 갈수록 약해지는 소리](#1-%EB%A9%80%EB%A6%AC-%EA%B0%88%EC%88%98%EB%A1%9D-%EC%95%BD%ED%95%B4%EC%A7%80%EB%8A%94-%EC%86%8C%EB%A6%AC)
- [(2) 좌우 위치에 따라 달라지는 소리](#2-%EC%A2%8C%EC%9A%B0-%EC%9C%84%EC%B9%98%EC%97%90-%EB%94%B0%EB%9D%BC-%EB%8B%AC%EB%9D%BC%EC%A7%80%EB%8A%94-%EC%86%8C%EB%A6%AC)
- [(3) 천장과 바닥의 소리 차이: 주파수](#3-%EC%B2%9C%EC%9E%A5%EA%B3%BC-%EB%B0%94%EB%8B%A5%EC%9D%98-%EC%86%8C%EB%A6%AC-%EC%B0%A8%EC%9D%B4-%EC%A3%BC%ED%8C%8C%EC%88%98)
- [2. 사용자 편의성을 위한 도전들](#2-%EC%82%AC%EC%9A%A9%EC%9E%90-%ED%8E%B8%EC%9D%98%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8F%84%EC%A0%84%EB%93%A4)
- [2-1. 잊어버려도 괜찮아요, 자동 저장](#2-1-%EC%9E%8A%EC%96%B4%EB%B2%84%EB%A0%A4%EB%8F%84-%EA%B4%9C%EC%B0%AE%EC%95%84%EC%9A%94-%EC%9E%90%EB%8F%99-%EC%A0%80%EC%9E%A5)
- - [(1) 저장 버튼만 존재하는 불편한 세상](#1-%EC%A0%80%EC%9E%A5-%EB%B2%84%ED%8A%BC%EB%A7%8C-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EB%B6%88%ED%8E%B8%ED%95%9C-%EC%84%B8%EC%83%81)
- - [(2) 자동 저장 구현하기](#2-%EC%9E%90%EB%8F%99-%EC%A0%80%EC%9E%A5-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0)
- - [(3) 자동 저장이 가져다주는 편리함](#3-%EC%9E%90%EB%8F%99-%EC%A0%80%EC%9E%A5%EC%9D%B4-%EA%B0%80%EC%A0%B8%EB%8B%A4%EC%A3%BC%EB%8A%94-%ED%8E%B8%EB%A6%AC%ED%95%A8)
+ - [(1) [고민] 저장 버튼만 존재하는 불편한 세상](#1-%EA%B3%A0%EB%AF%BC-%EC%A0%80%EC%9E%A5-%EB%B2%84%ED%8A%BC%EB%A7%8C-%EC%A1%B4%EC%9E%AC%ED%95%98%EB%8A%94-%EB%B6%88%ED%8E%B8%ED%95%9C-%EC%84%B8%EC%83%81)
+ - [(2) [구현] 자동 저장이 실행될 조건과 저장할 위치](#2-%EA%B5%AC%ED%98%84-%EC%9E%90%EB%8F%99-%EC%A0%80%EC%9E%A5%EC%9D%B4-%EC%8B%A4%ED%96%89%EB%90%A0-%EC%A1%B0%EA%B1%B4%EA%B3%BC-%EC%A0%80%EC%9E%A5%ED%95%A0-%EC%9C%84%EC%B9%98)
+ - [(3) [결과] 자동 저장이 가져다주는 편리한 세상](#3-%EA%B2%B0%EA%B3%BC-%EC%9E%90%EB%8F%99-%EC%A0%80%EC%9E%A5%EC%9D%B4-%EA%B0%80%EC%A0%B8%EB%8B%A4%EC%A3%BC%EB%8A%94-%ED%8E%B8%EB%A6%AC%ED%95%9C-%EC%84%B8%EC%83%81)
- [2-2. 빠른 속도의 비밀, 프리로드](#2-2-%EB%B9%A0%EB%A5%B8-%EC%86%8D%EB%8F%84%EC%9D%98-%EB%B9%84%EB%B0%80-%ED%94%84%EB%A6%AC%EB%A1%9C%EB%93%9C)
- - [(1) 느린 네트워크를 극복하기 위한 고민](#1-%EB%8A%90%EB%A6%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%A5%BC-%EA%B7%B9%EB%B3%B5%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EA%B3%A0%EB%AF%BC)
- - [(2) 프리로드 구현하기](#2-%ED%94%84%EB%A6%AC%EB%A1%9C%EB%93%9C-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0)
- - [(3) 프리로드가 가져다주는 편리함](#3-%ED%94%84%EB%A6%AC%EB%A1%9C%EB%93%9C%EA%B0%80-%EA%B0%80%EC%A0%B8%EB%8B%A4%EC%A3%BC%EB%8A%94-%ED%8E%B8%EB%A6%AC%ED%95%A8)
-- [3. 구현하며 배운 점들](#3-%EA%B5%AC%ED%98%84%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B4-%EC%A0%90%EB%93%A4)
+ - [(1) [고민] 느린 네트워크를 극복하기 위한 고민](#1-%EA%B3%A0%EB%AF%BC-%EB%8A%90%EB%A6%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EB%A5%BC-%EA%B7%B9%EB%B3%B5%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EA%B3%A0%EB%AF%BC)
+ - [(2) [구현] 미리 불러오고 저장까지 해준다고?](#2-%EA%B5%AC%ED%98%84-%EB%AF%B8%EB%A6%AC-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B3%A0-%EC%A0%80%EC%9E%A5%EA%B9%8C%EC%A7%80-%ED%95%B4%EC%A4%80%EB%8B%A4%EA%B3%A0)
+ - [(3) [결과] 프리로드로 느린 네트워크 환경을 극복하기](#3-%EA%B2%B0%EA%B3%BC-%ED%94%84%EB%A6%AC%EB%A1%9C%EB%93%9C%EB%A1%9C-%EB%8A%90%EB%A6%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%99%98%EA%B2%BD%EC%9D%84-%EA%B7%B9%EB%B3%B5%ED%95%98%EA%B8%B0)
+ - [2-3. 잊지 않고 기억해요, 사용자 인증](#2-3-%EC%9E%8A%EC%A7%80-%EC%95%8A%EA%B3%A0-%EA%B8%B0%EC%96%B5%ED%95%B4%EC%9A%94-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D)
+ - [(1) [고민] 새로고침할 때마다 번거로운 인증하기](#1-%EA%B3%A0%EB%AF%BC-%EC%83%88%EB%A1%9C%EA%B3%A0%EC%B9%A8%ED%95%A0-%EB%95%8C%EB%A7%88%EB%8B%A4-%EB%B2%88%EA%B1%B0%EB%A1%9C%EC%9A%B4-%EC%9D%B8%EC%A6%9D%ED%95%98%EA%B8%B0)
+ - [(2) [구현] 사용자는 몰라도 되는 인증 기억 방법](#2-%EA%B5%AC%ED%98%84-%EC%82%AC%EC%9A%A9%EC%9E%90%EB%8A%94-%EB%AA%B0%EB%9D%BC%EB%8F%84-%EB%90%98%EB%8A%94-%EC%9D%B8%EC%A6%9D-%EA%B8%B0%EC%96%B5-%EB%B0%A9%EB%B2%95)
+ - [(3) [결과] 사용자 인증 경험을 부드럽게 이어갑니다.](#3-%EA%B2%B0%EA%B3%BC-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EC%A6%9D-%EA%B2%BD%ED%97%98%EC%9D%84-%EB%B6%80%EB%93%9C%EB%9F%BD%EA%B2%8C-%EC%9D%B4%EC%96%B4%EA%B0%91%EB%8B%88%EB%8B%A4)
+ - [2-4. 잘 될거야, 낙관적 업데이트](#2-4-%EC%9E%98-%EB%90%A0%EA%B1%B0%EC%95%BC-%EB%82%99%EA%B4%80%EC%A0%81-%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8)
+ - [(1) [고민] 서버의 응답을 기다려야만 하는 상황](#1-%EA%B3%A0%EB%AF%BC-%EC%84%9C%EB%B2%84%EC%9D%98-%EC%9D%91%EB%8B%B5%EC%9D%84-%EA%B8%B0%EB%8B%A4%EB%A0%A4%EC%95%BC%EB%A7%8C-%ED%95%98%EB%8A%94-%EC%83%81%ED%99%A9)
+ - [(2) [구현] 화면은 바꿨는데 만약 서버 요청에 실패한다면?](#2-%EA%B5%AC%ED%98%84-%ED%99%94%EB%A9%B4%EC%9D%80-%EB%B0%94%EA%BF%A8%EB%8A%94%EB%8D%B0-%EB%A7%8C%EC%95%BD-%EC%84%9C%EB%B2%84-%EC%9A%94%EC%B2%AD%EC%97%90-%EC%8B%A4%ED%8C%A8%ED%95%9C%EB%8B%A4%EB%A9%B4)
+ - [(3) [결과] 서버의 응답을 기다리지 않아도 되는 합리적인 이유](#3-%EA%B2%B0%EA%B3%BC-%EC%84%9C%EB%B2%84%EC%9D%98-%EC%9D%91%EB%8B%B5%EC%9D%84-%EA%B8%B0%EB%8B%A4%EB%A6%AC%EC%A7%80-%EC%95%8A%EC%95%84%EB%8F%84-%EB%90%98%EB%8A%94-%ED%95%A9%EB%A6%AC%EC%A0%81%EC%9D%B8-%EC%9D%B4%EC%9C%A0)
+- [3. 프로젝트 관련 정보](#3-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B4%80%EB%A0%A8-%EC%A0%95%EB%B3%B4)
+ - [3-1. 기술 스택](#3-1-%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%83%9D)
+ - [3-2. 프로젝트 구조](#3-2-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B5%AC%EC%A1%B0)
+ - [(1) 다양한 컴포넌트에서 공유되는 전역 상태](#1-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EC%97%90%EC%84%9C-%EA%B3%B5%EC%9C%A0%EB%90%98%EB%8A%94-%EC%A0%84%EC%97%AD-%EC%83%81%ED%83%9C)
+ - [(2) 중앙 집중화된 상수 데이터 파일](#2-%EC%A4%91%EC%95%99-%EC%A7%91%EC%A4%91%ED%99%94%EB%90%9C-%EC%83%81%EC%88%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%8C%8C%EC%9D%BC)
+ - [(3) 코드의 중복을 줄이는 공통 컴포넌트](#3-%EC%BD%94%EB%93%9C%EC%9D%98-%EC%A4%91%EB%B3%B5%EC%9D%84-%EC%A4%84%EC%9D%B4%EB%8A%94-%EA%B3%B5%ED%86%B5-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8)
+ - [(4) 관심사 분리를 적용한 커스텀 훅](#4-%EA%B4%80%EC%8B%AC%EC%82%AC-%EB%B6%84%EB%A6%AC%EB%A5%BC-%EC%A0%81%EC%9A%A9%ED%95%9C-%EC%BB%A4%EC%8A%A4%ED%85%80-%ED%9B%85)
+- [4. 구현하며 배운 점들](#4-%EA%B5%AC%ED%98%84%ED%95%98%EB%A9%B0-%EB%B0%B0%EC%9A%B4-%EC%A0%90%EB%93%A4)
+ - [(1) 3D 구현 도전](#1-3d-%EA%B5%AC%ED%98%84-%EB%8F%84%EC%A0%84)
+ - [(2) 소리 변화 구현](#2-%EC%86%8C%EB%A6%AC-%EB%B3%80%ED%99%94-%EA%B5%AC%ED%98%84)
+ - [(3) 사용자 중심 설계](#3-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A4%91%EC%8B%AC-%EC%84%A4%EA%B3%84)
-## 기술 스택
-
-### Client
-
-![React](https://img.shields.io/badge/react-%23404d59.svg?style=for-the-badge&logo=react&logoColor=%2361DAFB)
-![Vite](https://img.shields.io/badge/vite-%23404d59.svg?style=for-the-badge&logo=vite&logoColor=w)
-![Axios](https://img.shields.io/badge/axios-%23404d59.svg?style=for-the-badge&logo=axios&logoColor=w)
-![ThreeJS](https://img.shields.io/badge/Three.js-404d59?style=for-the-badge&logo=Three.js&logoColor=w)
-![Zustand](https://img.shields.io/badge/zustand-%23404d59.svg?style=for-the-badge&logo=react&logoColor=black)
-![Styled-components](https://img.shields.io/badge/styled_component-404d59.svg?style=for-the-badge&logo=styledcomponents&logoColor=DB7093)
-
-### Server
-
-![NodeJS](https://img.shields.io/badge/node.js-404d59?style=for-the-badge&logo=node.js&logoColor=6DA55F)
-![Express.js](https://img.shields.io/badge/express.js-%23404d59.svg?style=for-the-badge&logo=express&logoColor=%2361DAFB)
-![MongoDB & Mongoose](https://img.shields.io/badge/MongoDB%20&%20Mongoose-%23404d59.svg?style=for-the-badge&logo=mongodb&logoColor=w)
-
-### Deploy
-
-![Firebase](https://img.shields.io/badge/firebase-%23404d59.svg?style=for-the-badge&logo=firebase&logoColor=red)
-![Amazon Web Service](https://img.shields.io/badge/amazon%20web%20service-%23404d59.svg?style=for-the-badge&logo=amazon&logoColor=b)
-
-### Test
-
-![Vitest](https://img.shields.io/badge/vitest-%23404d59.svg?style=for-the-badge&logo=vitest&logoColor=sd)
-![Playwright](https://img.shields.io/badge/playwright-%23404d59.svg?style=for-the-badge&logo=playwright&logoColor=sd)
-
-
-
-
## 1. 움직이는 스피커로 소리를 바꾸기
사용자가 3D 공간에서 스피커를 움직이며 소리의 변화를 체험할 수 있도록, 다음과 같은 주요 기능을 구현하였습니다.
-- **2D 화면에서의 3D 모델 움직임**: 사용자가 마우스를 통해 3D 모델을 드래그할 수 있도록, 2D 화면과 3D 공간 간의 **좌표 변환** 및 **드래그 이벤트 처리**를 구현하였습니다.
+- **2D 화면에서의 3D 모델 움직임**
+ 사용자가 마우스를 이용해 3D 모델을 드래그할 수 있도록, **2D 화면 좌표**를 **3D 공간 좌표**로 변환하고 해당 좌표를 **마우스 드래그 이벤트**와 연결하는 방식으로 움직임을 구현하였습니다.
-- **3D 공간에서 위치에 따른 소리 변화**: 스피커의 배치에 따라 달라지는 소리의 특성을 제공하기 위해, **세 가지의 위치 기반 음향 변화**를 구현하였습니다.
+- **3D 공간에서 위치에 따른 소리 변화**
+ 스피커의 위치에 따라 소리가 어떻게 변화하는지 체험할 수 있도록 세 가지 주요 음향 특성을 적용하였습니다.
-
+ - **거리 기반 소리 변화**: 리스너와 스피커 사이의 거리에 따라 소리 **감쇠효과**를 반영
+ - **좌우 배치에 따른 변화**: 스피커가 좌우로 이동함에 따라 **스테레오 효과**를 조정
+ - **천장 및 바닥 배치에 따른 변화**: 스피커가 천장에 가까울수록 **고주파** 강조, 바닥에 가까울수록 **저주파** 강조
+
+ 세 가지 특성을 적용한 이유는 사용자가 스피커를 이동하면서 소리의 변화를 **직관적**으로 느끼기 위함입니다.
+
+
| 2D 화면에서 3D 모델 움직임 | 3D 공간에서 위치에 따른 소리 변화 |
| ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
-| | |
+| | |
@@ -108,16 +106,16 @@ _이러한 문제를 해결하기 위해 3D 가상 공간에서 스피커를 자