개인 프로젝트를 진행하다가 뭔가를 놓치고 있다는 불안감이 강하게 들었다.
중복 로직, Props Drilling, 점점 길어지는 파일...
코드는 늘어나는데 확신은 줄어드는 기묘한 상황

처음엔 상태관리 탓을 했다.
Zustand를 더 활용했어야 했나...?
useQuery에 대한 이해도가 부족해서 쓰레기 코드를 만들어버린건가...?
결국 반은 맞은 셈이다.
컴포넌트 분리가 제대로 되지 않아 모든 역할을 다 맡고있는 페이지가 생겼고,
분리를 했다면 재사용이 가능했던 로직들도 불러올 수 없으니 재작성하게되는 상황.
이것부터 제대로 잡고 가야 프로젝트가 커져도 정신이 아프지 않다.
더 있을 수 있지만 내가 느낀 필요한 기준만 모아봤다. (반박 시 님말맞...반박할 수가 없을텐데?)
컴포넌트는 한 가지 이유로만 변경되어야한다.
고로, 한 가지 책임만 져야한다.
검색창이면 검색창만, 모달이면 모달... 화면에 띄우는건 해당페이지에 조립만.
처음 진행했던 팀 프로젝트에서 컴포넌트를 거의 사혼의 구슬조각 마냥 나눴던 기억이 있다(나말고).

그때는 이해가 되지 않았다.
하지만 혼자 다 해보니 왜 그렇게 분리를 했는지... 그때 그 분이 했던
"이렇게 작성하면 하나 빠그러졌을때 고치기 힘들다"
가 너무 와닿는다. 너무 미안한 마음이다.
그래서 UI와 로직이 한 파일에 섞여있으면
작은 디자인 수정에도 로직 파일을 건드리게 되고 PR diff가 커진다.
그러니 그 순간부터 수정이 무서워질 수 밖에.
UI를 분리시켜놓으면, 가독성 면에서도 행복해질 수 있다.
React return문만 봐도 그렇듯이 디자인 요소가 늘어나면 화면에 div 밖에 보이지 않는 놀라운 일이 일어난다(상단에 중요한 로직들이 있는데! 하지만 분리가 되지 않았으면 거기도 이미 스파게티 코드 파티).
그러다가 잘못해서 디자인 수정을 잘못 건드려버리면

지금 상황 기준 가장 중요하다 느끼는 부분이다.
이걸 잘 지키면
이지만, 적당히 나누고 적당히 갖다써야지 행코 가능하기 때문에 상대적 이라는 표현을 사용했다.
지금 프로젝트에서 내가 인지하고 분리했던 부분은
부족했던 부분은
예를 들면,
유저 정보 변경 제출 폼 페이지가 있다고 치자.
여기서 제출되는 부분들은
정도를 예를 들어보자.
유저 정보 변경 페이지는 실제로 한 페이지지만, 사용자 입장에서도 이미 영역이 나뉜다.
즉, 이 페이지는 본질적으로 여러 개의 독립 기능이 한 화면에 모여있는 형태다.
그래서 나는 페이지를 다음처럼 쪼개는 게 가장 자연스럽다고 판단했다.
1. Page는 레이아웃(조립) 만 담당
function AccountPage() {
return (
<div>
<ProfileImageSection />
<UsernameSection />
<EmailVerifySection />
<PasswordChangeSection />
</div>
)
}
export default AccountPage
페이지는 순서대로 배치만 하고 각 섹션의 내부구현은 모른다.
2. 각 섹션은 '기능 단위' 로 완결
예를 들어 비밀번호 변경 섹션은
이렇게 하면 다른페이지에서 해당 로직이 다시 필요해져도, 섹션 컴포넌트만 그대로 쏙 가져다 쓰면 된다.
해당 예시와 같이 재사용성은 공용 컴포넌트로만 생기는 게 아니라,
기능이 완결된 섹션 컴포넌트에서도 발생한다.
그래서 나는 "모든걸 나눠" 방식의 도입은 아직 어색하다(아마도 앞으론 친해져야겠지만).

섹션을 나누면 페이지는 짧아지지만 섹션 내부가 또 길어질 수 있다.
이게 내가 겪은 문제의 본질이다.
프로필 이미지 변경같은 부분은 (파일 선택 -> 크롭 -> 업로드 -> 저장) 처럼 단계가 많아서 꼴보기 싫은 코드가 완성된다.
그래서 섹션 내부는 다시 이렇게 나뉜다.
UI 컴포넌트(Presentational)
로직(컨테이너/훅)
이렇게 했을 때 내가 부딪혔던 요소들이 줄어들었다.

프론트 컴포넌트 분리가 뭐가 대수냐 할 수 있지만, 프로젝트 규모가 커지고 로직이 길어지면서 초단위로 번아웃이 올 것 같았다...
백과 프론트를 번갈아가며 추가해야 할 로직이 산더미인데, 나는 아직 코드를 정확하고 효율적으로 굴리는 법을 공부하는 초기 단계다.
그래서 지금 내 상황에서 최대한 위험 비용이 적게, 로직은 줄이고 가독성은 늘리는 방법은 결국 프론트 컴포넌트를 깔끔하게 분리시키는 것이라고 생각이 들었다.
물론, 더 효율적이고 좋은 방법들은 존재할거지만 그건 앞으로 부딪혀보면서 배우면 개선되리라 믿는다! 아자아자 화이팅~
