상세 컨텐츠

본문 제목

서버 상태와 클라이언트 상태의 차이에 대해 설명해 주세요

성장일지

by 모모87 2024. 9. 25. 10:08

본문

 

서버 상태와 클라이언트 상태는 웹 애플리케이션 개발에서 관리하는 두 가지 주요 상태 유형입니다. 이 둘은 역할과 관리 방식에서 중요한 차이가 있습니다.

1. 서버 상태 (Server State)

서버 상태는 외부 서버에서 제공하는 데이터나 리소스에 대한 상태를 의미합니다. 이 상태는 클라이언트 애플리케이션이 직접 관리하지 않고 서버로부터 받아오는 정보를 사용합니다. 예를 들어, 데이터베이스에 저장된 사용자 정보나 API로부터 받아오는 상품 목록 등이 서버 상태에 해당합니다.

서버 상태의 특징:

  • 외부 소스 의존: 서버 상태는 API 요청을 통해 외부 서버에서 가져와야 하므로, 애플리케이션이 이 상태를 직접 소유하지 않습니다.
  • 비동기 처리 필요: 서버 상태는 보통 네트워크 요청을 통해 받아오기 때문에, 로딩 상태, 성공 또는 실패 상태를 비동기적으로 처리해야 합니다.
  • 즉각적인 동기화 어려움: 서버 상태는 여러 클라이언트에서 동시에 변경될 수 있기 때문에, 클라이언트에서 바로 동기화되지 않으며 데이터를 최신 상태로 유지하려면 별도의 처리(리페칭 등)가 필요합니다.
  • 캐싱과 유효성 검사: 서버 상태는 빈번한 요청을 줄이기 위해 캐싱을 사용하는 경우가 많으며, 캐시된 데이터가 유효한지 확인하는 로직이 필요합니다.
  • 수명이 짧다: 서버 상태는 언제든지 외부에서 변경될 수 있기 때문에 유효하지 않거나 오래된 상태(stale state)가 될 가능성이 높습니다.

예시:

  • API 데이터: /users 엔드포인트에서 받아온 사용자 리스트
  • DB 값: 데이터베이스에서 읽어오는 재고 정보
  • 외부 서비스: 날씨 정보 API나 지리 위치 서비스에서 받아오는 데이터

2. 클라이언트 상태 (Client State)

클라이언트 상태는 애플리케이션 내부에서 관리되는 상태로, 서버와는 무관하게 애플리케이션 내에서 생성되고 유지되는 상태를 의미합니다. 이 상태는 주로 사용자 인터페이스의 동작이나 사용자 입력에 의해 변화합니다.

클라이언트 상태의 특징:

  • 애플리케이션 내부에서 관리: 클라이언트 상태는 클라이언트 애플리케이션에서만 존재하며, 외부 서버와 직접적인 관련이 없습니다.
  • 즉각적 동기화 가능: 클라이언트 상태는 애플리케이션 내에서 즉각적으로 업데이트되며, 상태 변화에 따른 UI 업데이트도 즉각적으로 반영됩니다.
  • 주로 단기적: 클라이언트 상태는 보통 한 번의 사용자 세션에서만 유지되며, 페이지를 새로 고치거나 애플리케이션을 종료하면 사라질 수 있습니다.
  • 다양한 상태 관리 라이브러리: 클라이언트 상태는 React의 useState, useReducer, 또는 Redux 같은 전역 상태 관리 도구로 관리될 수 있습니다.

예시:

  • UI 상태: 모달의 열림/닫힘 상태, 현재 선택된 탭
  • 폼 데이터: 사용자가 입력한 폼의 값들
  • 필터링 상태: 필터 옵션 선택에 따른 데이터 정렬/필터링 값

서버 상태와 클라이언트 상태의 주요 차이점

서버 상태 (Server State)클라이언트 상태 (Client State)

출처 외부 서버 또는 API 애플리케이션 내부
데이터 소유 외부 서버가 소유 클라이언트가 소유
동기화 주기적인 리페칭 필요 실시간으로 동기화 가능
수명 외부 변화에 영향을 받음 애플리케이션 실행 중에만 유지
캐싱 필요성 네트워크 비용 절감을 위해 중요 보통 캐싱 불필요
관리 방식 React Query, SWR 등 서버 상태 관리 도구 사용 useState, Redux 등 클라이언트 상태 관리 도구 사용

요약:

서버 상태는 외부 서버에서 데이터를 가져와 관리하는 상태로, 네트워크 요청, 비동기 처리, 캐싱 등이 필요하며 데이터가 외부에서 변경될 가능성이 큽니다. 반면 클라이언트 상태는 애플리케이션 내에서 관리되는 상태로, UI 상호작용이나 로컬 상태 관리와 관련되어 있으며 즉각적이고 단기적인 특성을 갖습니다.

반응형

관련글 더보기