NextBlog

toss의 usefunnel 도입기

투표화면 페이지에는 몇가지 페이지를 거쳐야하는 기능이 있습니다.
notion image
투표의 상세정보를 확인하고 일정을 결정하고, 투표까지 크게는 총 4가지의 페이지를 거치게 됩니다.
 

문제사항

이 페이지의 구현을 다른 개발자분에게 부탁드렸고 개발한 결과물은 다음과 같습니다.
이로인해 다음과 같은 문제점이 있었습니다.
 

해결 방법

Toss 기술 블로그에서 소개된 퍼널(Funnel) 패턴을 참고하여, 여러 단계의 페이지를 하나의 컴포넌트에서 관리할 수 있는 Custom Hook을 구현했습니다.
step이라는 queryString으로 현재 스텝을 관리하고 Step 컴포넌트에 이름을 부여합니다.
setStep으로 현재 렌더링할 step을 지정해줄 수 있고 Funnel에서는 렌더링할 Step 컴포넌트를 찾아 렌더링합니다.
 

도입

이를 위의 다중 페이지에 적용하였고 다음과 같은 결과를 얻었습니다.
  • 7개로 나누어졌던 라우트를 한 라우트로 구조 단순화
  • Vote Page 응집도 개선
    • 페이지 상태관리를 한 곳에서 하여 데이터 흐름 명확
  • 퍼널에서 사용하는 컴포넌트 추상화
    • 조건부 렌더링을 담당하는 Step 컴포넌트 생성
괜찮아 보이죠? 코드가 전보다 추상화 되어있고 응집도 또한 전보다 많이 높아졌습니다.
 

다른 문제

하지만 해당 코드도 다음과 같은 문제점이 존재합니다. 이를 코드를 통해 확인해보겠습니다.
즉 다음과 같은 문제들이 있었습니다.
 

개선 방안

그래서 해당 문제들을 해결하기 위해 다음과 같이 해결하고자 합니다
 
이를 해결하기 위해 toss의 useFunnel 라이브러리를 확인해 본 결과, 이 문제들은 당연히 토스 내에서도 인지하고 있었고 토스에서는 다음과 같은 방법으로 해결하였습니다.
두가지 버전이 존재하였습니다
 
 
이 두 버전을 고려했을 때, 각 버전의 장점들만 취합하기로 결정했습니다.
 
이 내용은 다음 포스트에서 이어 작성하겠습니다.