개발자

리액트 쿼리 로직을 커스텀 훅으로 만들 때, 어디까지 추상화를 하시나요?

2024년 03월 06일조회 168

안녕하세요. 현재 프로젝트에서 기존 데이터 페칭 로직들을 전부 리액트 쿼리로 옮기면서, 고민이 생겨 질문을 드립니다. 클라이언트 상태와 서버 상태로 폴더를 나누고, 쿼리 로직들을 커스텀 훅으로 만들고 있습니다. 그런데 이 커스텀 훅의 추상화를 어디까지 해야할지 고민이 됩니다. 3개의 서비스 페이지가 있고, 사용하는 쿼리 내부의 로직이 비슷할 경우, 아래의 두 가지 방법을 생각해 봤습니다: 1. 재사용을 위해 매개변수로 URL, URL parameter, Query key를 추가 2. 유지보수를 위해 URL parameter만 매개변수로 추가하고, 개별 커스텀 훅 생성 예시 코드로, 1번의 코드는 `useDashboard('/data', startDate, endDate, 'service01/dashboard');` 이런식으로 사용을 하고, 2번의 코드는 `useService01Dashboard(startDate, endDate);, useService02Dashboard(startDate, endDate);...` 이렇게 사용을 합니다. 현재는 2번의 방식으로 구현을 하고 있습니다. 그 이유로는 불러오는 서버 데이터가 대부분 동일하지만 다른 경우도 있어서 타입을 다르게 줘야했고, URL을 쉽게 구분하기가 어려워서 한 곳에서 관리하고 싶었습니다(URL이 REST API 설계와 다소 거리가 있습니다.). 결론은, 함수 호출자의 입장(데이터를 불러오는 함수)에서 어디까지 알아야하나?가 고민입니다. 리액트 쿼리 깃허브에서 예시도 보고, 이렇게 글을 쓰다보니 현재로썬 2번이 더 맞다고 생각이 들긴 합니다. 여러분은 보통 어떤식으로 구현을 하시는지 궁금해서 이렇게 질문을 드리게 되었습니다. 어떤 의견이라도 좋으니 답변을 주시면 정말 감사할 것 같습니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

포크코딩님의 프로필 사진

정확히 내부 구현은 모르겠으나, 질문하신 부분에서 재사용성과 유지보수 두 가지 판단 기준이 있다면 언제나 유지보수쪽을 고르는 것이 좋습니다. 본론, 커스텀 훅은 어디까지 추상화 하느냐? (1) 함수 호출자 입장에서 어디까지 알아야 하느냐?(2) (1) 답: 설계 수준에서 추상화 벽을 의미하는거 같지 않습니다. 따라서 함수형 컴포넌트 상단에 훅관련 코드가 5줄 이상되면 그냥 커스텀훅으로 빼세요. (2) 답: 호출자 입장에서 ‘질의’를 하는 경우입니다. 어떤 데이터 포맷으로 결과를 얻을 수 있는지? 위 포맷을 얻기위해 어떤 설정값이 존재하는지? 어떤 방식으로 구현하는가?(3) (3)답: 함수 시그니처: useDashboardData(config: DashboardConfig) : Result - 함수 이름에 얻고자 하는 데이터가 무엇인지 명시합니다. 훅들은 관례상 use…이기 때문에 표현상 직관적이기 때문입니다. - 데이터 포맷과 범위에 대한 설정 관련 객체를 파라미터로 줍니다. - 성공적으로 얻은 데이터 혹은 에러가 담긴 모나드를 받습니다.

김병연(Vintz)님의 프로필 사진

김병연(Vintz)

작성자

프론트엔드 개발자2024년 03월 16일

두서없는 질문에 좋은 답변을 주셔서 정말 감사합니다! 유지보수를 우선적으로 생각하면서 코드를 작성하겠습니다. 너무너무 감사드립니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 03월 06일

재사용과 유지보수 모두 중요한 요인이므로, 이러한 결정을 내리는 것은 쉽지 않을 수 있습니다. 1번 방식은 재사용 가능성이 더 높지만, 구현할 때마다 필요한 매개변수를 추가로 전달해야 하는 번거로움이 있습니다. 반면, 2번 방식은 코드의 일관성과 가독성을 높여주며 유지 보수가 용이합니다. 앞서 언급하신 대로 다루는 데이터 타입이 다르고 URL 구분이 어렵다는 점 등을 고려하면, 개별 커스텀 훅을 생성하는 2번 방식이 좋아 보입니다. 각각의 커스텀 훅에서 필요한 로직과 URL 관리를 할 수 있기 때문에 함수 호출자가 URL에 대해 알 필요가 없어집니다. 그러나 프로젝트의 전반적인 구조와 요구 사항에 따라 달라질 수 있으므로 절대적인 해답은 아닙니다. 경우에 따라 첫 번째 방법처럼 특정 부분만 추상화하여 재사용하는 것이 더 낫다고 판단될 수도 있습니다. 결론적으로, 이 같은 설계 질문에서 가장 중요한 것은 개별적인 코드 라인의 성능보다는 전반적인 코드 구조의 가독성, 유지 보수성, 확장성을 고려하는 것입니다. 각각의 방식이 프로젝트에 어떤 영향을 미칠지 충분히 생각해 보고 결정하는 것이 좋습니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!