클라이언트 상태 | 서버 상태 | |
---|---|---|
위치 | 클라이언트(브라우저 또는 기기)에 저장된 데이터 | 서버나 외부 데이터 소스에 저장된 데이터 |
접근성 | 저장한 클라이언트만 접근 가능 | 접근 권한이 있는 모든 클라이언트 접근 가능 |
데이터 관리 | 클라이언트에서 관리(예: Redux와 같은 상태 관리 라이브러리 사용) | 서버에서 관리(예: 데이터베이스 사용) |
지속성 | 세션 간에 지속성이 유지되거나 유지되지 않을 수 있음 | 일반적으로 세션 간에 지속성 유지 |
네트워크 요청 | 데이터를 가져오거나 업데이트하려면 네트워크 요청이 필요할 수 있음 | 데이터 접근 또는 업데이트를 위해 네트워크 요청이 필요할 수 있음 |
보안 | 클라이언트가 액세스할 수 있고 변조 또는 가로채기의 대상이 될 수 있으므로 보안 수준이 낮을 수 있음 | 인증 및 암호화로 보호할 수 있으므로 더 안전할 수 있음 |
성능 | 네트워크 요청이 필요하지 않기 때문에 서버 상태에 비해 접근하고 업데이트하는 속도가 빠를 수 있음 | 네트워크 요청이 필요할 수 있으므로 클라이언트 상태에 비해 접근하고 업데이트하는 속도가 느릴 수 있음 |
확장성 | 클라이언트 기기의 용량에 제한을 받을 수 있기 때문에 서버 상태보다 확장성이 떨어질 수 있음 | 전용 서버나 고용량의 데이터 소스로 관리되기 때문에 클라이언트 상태보다 확장성이 더 높을 수 있음 |
예시 | 컴포넌트 상태, Redux 상태, 브라우저 쿠키 | 데이터베이스 레코드, API 응답, 서버 세션 데이터 |
💡 Infinite Query
페이지네이션(pagination)과 달리 모든 데이터를 한 번에 불러오지 않고 필요할 때마다 일부씩 불러오는 방식으로,
사용자 경험을 향상시키고, 대규모 데이터에 대한 효율적인 처리를 가능하게 함
ex) 더보기 버튼, 무한 스크롤 등
💡 Optimistic Query
사용자의 요청에 대한 응답을 기다리지 않고, 사용자의 요청에 대한 변경 사항을 즉시 UI에 반영하는 방식으로,
서버로 요청을 보낸 후 서버의 응답을 기다리지 않고, 사용자가 입력한 데이터를 즉시 UI에 반영하여 사용자에게 빠른 피드백을 제공하기 때문에 사용자 경험을 향상시키고, 서버 응답 시간에 따른 대기 시간을 최소화함
ex) 좋아요 버튼과 같이 직관적으로 눌렀는지 아닌지를 나타낼 수 있게 업데이트 되어야하는 경우 누르자마자 일단 눌렀다는 걸 알 수 있는 UI로 변경한 후 요청을 보냄