FEConf Korea
의 영상을 보면서 기록하는, React 컴포넌트, 다시 생각하기!!
MVP(Minimum Viable Product)를 열심히 만들고 있는 요즘,
컴포넌트 재사용에 대해 개발팀장님과 이야기 하다가 추천해주신 영상.
접속해보니 지난 날의 나도 봤긴 봤었는데.. 기억이 가물가물해서.. 이번 기회에 기록하며 다시 보기로 했다..
컴포넌트를 만드는 데에 필요한 것들과 유지보수를 방해하는 요소 살펴보기

🤔 Q1. 맛있는 케이크 만들기?!
케이크를 만드려면 밀가루, 설탕, 계란이 필요하다?!
= 케이크는 밀가루, 설탕, 계란에 의존한다.
= 케이크의 의존성: 밀가루, 설탕, 계란
React component를 만드려면 무엇이 필요할까?
💡 React component의 기능적 분류
React component는 필요한 것들을
props와hooks를 통해 받는다.
React component에
props, hooks로 넘기거나 import를 통해 가져오는 의존성에는 어떤 특징들이 있을까?

CSS 등의 파일을 외부에 작성해서 컴포넌트 내부에 import 해오는 경우
스타일은 컴포넌트에 필요한 의존성이다.

컴포넌트에서 사용되는 커스텀 로직으로

전역 상태는

리모트 데이터 스키마는
api 서버에서 내려주는 데이터를 의미api 서버에서 내려주는 json 데이터의 내용, 모양
🤔 Q2. 케이크에 딸기를 추가하면,
케이크에 딸기를 추가하려면 생크림도 필요하다?!
= 딸기 케이크는 생크림에 추가적으로 의존한다
= 딸기 케이크의 숨은 의존성: 생크림
새로운 정보를 추가하기 위해서는
props를 새로 정의할텐데
새로운 정보를 수정하기 위해서는
props drilling을 피하기 위해서 데이터 저장소를 따로 두더라도
이런 의존성들을 어떻게 정리할지 고민해보자

어떤 부분을 수정해야 할 때,
전역 상태는 다른 컴포넌트들과 함께 사용되니 스타일과 로직을 컴포넌트 안에 내재해보자

api 서버로 부터 리모트 데이터 스키마가 내려오는 모습을 살펴보면
루트 컴포넌트와 다른 컴포넌트들을 타고 내 컴포넌트까지 오게 된다
만약, props를 통해 데이터 스키마를 받게 된다면
props를 통해 ID를 받고ID를 통해 해당 데이터를 받아올 수 있게 해서 의존성을 끊어낼 수 있다

ID 기반으로 정리하기
nomalization📌 참고! 데이터 정규화(
nomalization)를 도와주는 라이브러리yarn add nomalizer
데이터 정규화(nomalization)로

Global ID (전역 ID)
전역 ID는
ID만 가지고 특정 데이터를 유일하게 식별할 수 있도록 하는 체계다
Global Object Identification, 전역 객체 식별)
전역 ID를 통해 api 서버에 요청하면 해당 객체를 가져올 수 있는데, 이러한 api를 서버측에 제공하게 되면

props naming

직관적으로 분리된 것 같지만,
한 컴포넌트에서 여러 모델의 정보를 표현하는 것은 관심사 분리가 제대로 되지 않은 것!
관심사로 분리해보면 user와 image로 분리 되겠지만

이렇게 되면 상위 컴포넌트가 해당 모양을 정확하게 맞춰야 하기 때문에
상위 컴포넌트와의 의존성이 생길 것이다
ID를 통해 필요한 객체의 레퍼런스만 받아오게 되면
컴포넌트를 재사용하는 이유를

리모트 데이터 스키마 변화에 대응하기 위해서 살펴보자.

두 컴포넌트는 비슷하게 생겼지만

한 쪽의 변화에 살펴보아야 할 곳이 많다.
함께 변해야 하는 것들과 따로 변해야 하는 것을 구분하자!

각자의 컴포넌트는 미래의 각자의 방향대로 변화하겠지만,
우리의 제품은 끊임없이 변화하더라도 유저에게 일관된 경험을 제공해야 한다


정리하면, 컴포넌트를 분리해야 할지 재사용할지 고민된다면 떠올려보자!


관점이 기술보다 중요하다!!!
잊지 말자!!!