[기술면접] Top29부분 1

Boyoung Lee·2024년 10월 4일

기술면접

목록 보기
8/49
post-thumbnail

<목차>

  1. 상태관리
  2. Redux
  3. Redux 외 상태관리

1. 상태관리

  • 상태관리 : State Management
  • 데이터를 관리하는 방법
  • 상태관리가 필요한 이유
    -> 데이터가 바뀌어도 페이지가 렌더링 되지 않기 위해
    -> 상태가 복잡한 경우 상호 의존성이 증가하여 UI 관리가 어려워짐
    -> 데이터의 흐름제어에 탁월
    -> 일관성 유지 : 데이터의 일관성 유지
    ex) 닉네임 변경시 모든 닉네임이 변경될 수 있다.
    -> 디버깅 용이 : 어느시점에서 어떤 데이터가 변경되었는지 추적하기 쉬움 => 버그를 빠르게 찾고 수정하는데 도움
    -> 테스트 용이 : 컴포넌트의 상태로직분리 => 컴포넌트를 독립적으로 테스트 할 수 있음
    -> 코드 재사용 : 다양한 컴포넌트에서 동일한 상태로직을 재사용할 수 있음
    -> 데이터 흐름 명확 : 어디서 데이터가 업데이트되고 흐르는지 쉽게 파악, 더 나은 아키텍처 설계 가능
    -> 비동기 작업관리 : 네트워크 요청과 같은 비동기 작업을 더 체계적으로 다룰 수 있음
    -> 유지보수 : 상태를 중앙관리, 어플리케이션 전체에 상태의 일관성 유지, 각 컴포넌트나 모듈이 상태 변경에 대해 독립적으로 작동할수록 도움
    -> 확장성 : 상태관리 로직을 중앙화함으로써 애플리케이션의 규모가 커져도 관리가 용이
    -> 재사용성 : 중앙 관리하는 로직은 다른 부분의 어플리케이션에서도 재사용될 수 있음
    -> 디버깅 : 상태 변화의 흐름을 추적하기 용이, 버그발생시 원인을 파악하고 해결하기 쉬위짐

Q. 상태관리를 왜 할까요? 그리고 평소 state 관리는 어떻게 하시나요?

상태관리는 크게 네가지 장점이 있습니다. 첫번째는 유지보수가 용이합니다. 상태관리를 통해 애플리케이션 전체에 데이터의 일관성을 유지할 수 있습니다. 한 줄의 코드만 바꿔도 전체 데이터가 변경될 수 있기 때문에 유지보수에 매우 유리합니다. 두번째는 확정성이 있습니다. 상태관리 로직을 중앙화 하여 애플리케이션의 규모가 커져도 한곳에서 관리할 수있습니다. 세번째 장점은 재사용성으로 중앙에서 관리하는 상태로직은 다른 부분에서도 재사용될 수 있기에 효율을 극대화 할 수 있습니다. 마지막 네번째 장점은 디버깅에 용이하다는 점입니다. 상대적으로 상태변화의 흐름을 파악하기 쉽기 때문에 버그 발생시 원인을 파악하고 해결하기 쉬워집니다. 저는 평소 상태관리를 중요하게 생각합니다. 이전 작은 프로젝트에서 모든 상태를 중앙에서 관리하려 시도했었습니다. 하지만 저의 프로젝트에서는 모든 상태를 일관성있게 관리하면 안됐었기 때문에 오히려 다양한 상태가 공유된 경험이 있습니다. 그 경험을 통해 무조건 중앙에서 상태를 관리하기 보단 작은 프로젝트나 다양한 데이터가 사용되야 하는 경우를 파악하고 상태관리를 신중히 하게 되었습니다.

2. Redux

  • 자바스크립트 애플리케이션의 상태관리 라이브러리
  • 애플리케이션의 상태를 예측가능한 방식으로 설계
  • 큰 규모에 효과적
  • 단일상태트리 : 애플리케이션의 전체 상태를 하나의 객체 트리로 저장, 모든 상태 정보를 중앙에서 관리, 상태를 쉽게 추적하고 디버깅에 유리
  • 읽기 전용 상태 : 상태를 직접 변경할수 없다, 액션객체 사용, 모든 상태 변화는 순수한 함수인 히듀서를 통해
  • 사용 이유
  1. 일관성 : 중앙에서 관리, 일관성있음
  2. 디버깅 : 상태변화 주적
  3. 테스트 : 순수 함수인 리듀서는 독립적으로 테스트하기 쉽다.
  • 대규모 애플리케이션에서 특히 유용, 상태변화의 예측 가능성과 유지보수성을 높이는데 큰 도움을 준다.
  • 학습곡선이 높다.
  • 작은 프로젝트엔 과도한 설정일 수 있다.
  • 리덕스의 가장 큰 특징은 예측이 가능하다.
  • 시간 여행 디버깅등 고급 기능을 사용할 수 있다.
  • 강력한 디버깅 도구를 제공한다.
  • 미들웨어를 통해 확장 가능
  • 로깅, 비동기처리, 지속성 등 다양한 기능을 추가할 수 있다.
  • 복잡한 애플리케이션과 큰 규모의 상태관리에 적합
  • 일관된 패턴 제공

Q. Redux가 무엇인가요, 왜 Redux를 사용하시나요?

리덕스는 자바스크립트 애플리케이션의 상태관리 라이브러리입니다. 상태변화의 예측가능성과 유지보수성이 높고 일관된 패턴을 제공한다는 점 때문에 대규모 애플리케이션에 특히 유용합니다. 그 뿐만 아니라 시간 여행 디버깅등 고급기능을 제공하고있습니다. 학습곡선이 높고 초기 설정이 복잡하기 때문에 작은 프로젝트엔 과한 설정이 될 수 있는 등 단점도 존재하지만 방금 말씀드렸다시피 예측가능한 상태관리, 중앙집중화, 우수한 디버깅 도구 제공, 이미 수많은 개발자가 사용하고 있다는 점등 다양한 장점도 있기 때문에 여전히 개발자들에게 인기있는 상태관리 라이브러리입니다.

3. Redux 외 상태관리

redux

  • 상대적으로 높은 복잡성, 학습 곡선
  • 리덕스는 액션, 리듀서, 스토어등 다양한 개념을 포함
  • 미들웨어를 사용하여 비동기 로직을 처리
  • 전역 상태관리를 위한 하나의 큰 스토어를 사용
  • 크고 복잡한 애플리케이션에 적합
  • 시간여행 디버깅, 상태 기록 등 고급기능 제공

zustand

  • 간단하고 직관적인 API제공
  • 배우기 쉽고 구현도 간단
  • 스토어 설정이 매우 단순, 훅 기반의 접근 방식 사용
  • 필요에 따라 여러개의 작은 스토어를 생성할 수 있음
  • 작거나 중간 규모의 프로젝트에 적합
  • 설정이 간단하고 유연성이 높다,

Q. Redux 말고 다른 전역 상태관리 아는 것 하나와 차이점을 말해주세요

저는 다양한 프로젝트에서 주스탠드를 사용해왔습니다. 주스탠드는 리덕스와 비교해서 볼 때 다양한 장점이 있습니다. 주스탠드의 가장 큰 장점은 간결함과 직관성입니다. 기존 리덕스가 학습곡선이 높고 사용하기 복잡하다는 단점이 있던 것에 비해 주스탠드는 학습곡선이 낮고 직관적인 API를 제공합니다. 리덕스의 액션, 리듀서, 스토어등과는 달리 간단한 설정과 몇 개의 훅을 통해 상태를 관리할 수 있습니다. 이런 설정의 간편함 덕분에 초기 세팅시간을 단축하고 코드의 가독성을 높여줄 수 있습니다. 주스탠드는 특히 중소규모 프로젝트나 복잡한 상태관리가 필요없는 경우 적합합니다. 이러한 이유로 인해 개인프로젝트처럼 작은 프로젝트를 주로 해왔던 저는 리덕스보단 주스탠드를 더 많이 사용해왔습니다.

profile
정리정돈을 잘하는 개발자가 꿈

0개의 댓글