비즈니스 로직이 들어간 첫 프로덕트에서 마주한 것들


Configuration

Library, Solution


문서화가 잘 돼있어야한다. stackoverflow, YouTube, google에서 내가 원하는 접근, 형태, 로직을 찾는 것은 생각보다 쉽지 않았다. ex) Library의 객체가 반환하는 object와 실제의 object의 프로퍼티가 다르다던지, 만들어진 그래프 object에 style을 새로 입힌다던지 등등

Component


이를 해결하기 위해 로직 | UI | Type을 나누었는데, 로직 안에서 다른 컴포넌트의 function을 부르는게 맞나? 아니면 function을 중복되더라도 새롭게 파는 것이 맞나? → 정답은 이미 잘 알고 있는 분들이 많으시겠지만 공용으로 분리해야한다. 문제는 이제 모듈을 보는 시점과 상태관리가 더해진다는 건데.. 이것은 아래에 상태관리에 더 적어야겠다.

의존을 줄이다보면 깊이가 깊어지게 되고, 깊이가 깊어지면 가독성이 떨어진다. 지금도 늘 고민하는 주제다. 어디까지 분리돼있어야 좋은 코드일까?

상태관리


여기에 기획의 요구가 들어간다. ”최초 오픈에는 오늘로 보여졌으면 좋겠어요.” ”수정때는 지난 일정이면 무조건 최초의 일정일 시작부터 보여졌으면 좋겠어요.” ”그리고 이 일정에 따라 유동적인 그래프가 있으면 좋겠네요.” ”아, 그래프에 y축 값을 카테고리 별로 볼 수 있었으면 좋겠어요.” ”달력은 기간으로 선택할 수 있는게 있고, 일별로 선택할 수 있으면 좋겠어요”

그리고 나는 그 달력 안의 Period를 가져와 달력에도 그리고, 달력의 상위 컴포넌트에 Period에도 표기를 해줘야하고, 그래프도 그려야한다. 그리고 날짜 변경때마다 그래프는 변해야한다.

나는 어떻게 상태를 관리하고, 컴포넌트를 나누어야할까?

이처럼 로직과 상태관리 시점이 혼합되어 버리는 경우가 꽤 많았다. 특히 꼭 개별로 만들고나서…

중요했던 것은 데이터가 관측되는 시점과 변경되는 시점을 명확히 분리해주고, 가능성을 정리하는 것이었다. → ex: 달력이 열림 : data가 있? A : B. A라면 originData를 useMemo로 고정하고 내부에 변경되는 Data를 위한 상태를 따로 관리 → 취소 or 확인에따라 데이터 반환 B라면면 초기 값을 가지고 상태 관리 블라블라

당연한 장단점이 있지만, 내가 제일 크게 공감한 장점은 다음과 같다.

장점

  1. Slice를 만들지 않아도 된다.
  2. Data의 중복, 유효성, 신선함을 쉽게 관리할 수 있다.
  3. dataFetch → try-catch → wrapping → data → data edit로 이어지는 플로우가 간결해질 수 있다. 3-1. data fetching을 위한 try-catch 보일러 플레이트, 인스턴스 등을 안 만들어 줘도 된다!!!
  4. 왜 data fetching과 HTTP Method, REST API를 위한 상태관리라고 말하는지 이해할 수 있다.

단점

  1. Data의 흐름이 개별적이다.
  2. slice가 없는 만큼 interface가 많아진다.

이 외의 것들..