회고록 - notCoderJ/job_psychology_test GitHub Wiki

2021.10.20

리펙토링 계획에 맞춰 몇가지 이슈를 추가하고 작업을 진행하는 중 큰 고민에 빠졌다.
검사 페이지에 fullpage.js를 적용하여 변경하려고 하니 다음 페이지 이동과 관련된 제어 기능이나 기존 사용하던 컴포넌트, 리덕스 구조에 변경을 가해야할 필요를 느꼈다...
어찌 이런 상황이 되었는가? fullpage 라이브러리가 지닌 특성도 있겠지만, 첫 프로젝트였던만큼 컴포넌트나 리덕스 구조를 조금 복잡하게 구현한게 아닌가라는 생각이 들었다.(프로젝트 당시에는 나름 구조를 잡았다고 생각했지만... 지금보니 아닌 것 같다는 생각이 든다😅) 그래서 현상황에 무언가를 계속 추가하여 부풀리기보다는 전체적인 구조를 한번 재정비할 필요가 있다는 생각을 했다.(리펙토링 개념을 벗어난 범위이기도하고 뭔가 다 갈아엎어야하는 느낌이라서 멘탈잡기가 쉽지 않았다.) 또 이렇게 생각한 이유 중 하나는 이번 리펙토링에서 리덕스 상태를 유지할 수 있는 Redux-Persist 기능을 추가할 계획을 하고 있기 때문이다. 이번 2차 프로젝트를 진행하며 막바지에 리덕스 상태를 유지시킬 수 있는 Redux-Persist를 알게되어 추가해보려고 했지만, 기존 구현해놓은 Selector에서 수많은 타입에러가 쏟아져나와서 추가하는데 실패했었다. 그래서 리펙토링 초반에 구조를 재정비하면서 Redux-Persist 기능을 같이 추가해보려고 한다.

2021.10.21

전체적인 Reducer 구조를 좀더 깔끔하게 재구성해보기 위해 수도없이 고민하고 코드 수정을 반복했다... 터져나오는 에러에 멘탈이 나갔다 들어왔다를 반복하며 수정을 어느정도 완료했지만, 솔직히 현재 수정한 코드가 기존보다 더 나아졌다는 걸 느끼지 못하겠다. 왜 이런 사태가 발생했는가? 초기 리펙토링 계획을 세울 때 뚜렷한 개선 목표를 정하지 않고 이것저것 모두 개선하고 싶다는 생각에 너무 광범위하게 계획을 세운 결과라고 생각한다. 이것저것 갈아엎으려고 시도하다보니 기존 코드에서 수정할 부분들이 너무 많아져서 코드를 새로 짜는 것보다 더 오랜 시간이 소모되고 비효율적인 작업이 반복된다는 느낌을 받았다. 이번 작업을 진행하며 크게 느낀 것은 리펙토링을 진행할 때에는 분명한 목적을 가지고 해당 목적 달성에만 집중해야 한다는 것이다. 그렇지 않으면 지금처럼 진행 중 엄청난 후회가 밀려올 것 같다... 모 이왕 이렇게 된거 지금으로써는 Redux-Persist를 먼저 적용한 후 다음 작업을 이어나갈 것이다.(아마 엄청난 Type 에러가 쏟아질 것 같지만 미리 적용하고 다음 작업을 하는게 나중에 추가하는 것보다 낫겠지...?)

2021.10.22

음...? Redux-Persist를 적용하는 작업은 아주 간단하게 완료되었다. 단순히 공식 문서에서 하라는대로 추가만 해주니 뚝딱 적용되는 것을 확인할 수 있었다. 그럼 왜 2차 프로젝트 때는 적용이 안되고 에러가 잔뜩 나왔을까?? 아마도 persistedReducer를 생성하는 과정에서 persistReducer의 파라미터로 잘못된 rootReducer를 넘겨준 것이 원인이라는 생각이 든다. redux-toolkit에 포함된 configureStore는 내부적으로 combineReducers를 수행한다고 하여 persistReducer에 넘겨줄 rootReducer를 combineReducers를 사용하지 않고 각 reducer 조각들로 이루어진 Object를 반환하는 함수를 임의로 만들어 넘겨줬었다. 하지만 요렇게 하면 안되고 공식 문서를 참고해보니 rootReducer를 반환하는 함수를 persistReducer의 파라미터로 넘겨줘야 한다는 것을 알게 되었다. 1차 프로젝트의 리펙토링을 마치고 2차 프로젝트의 리펙토링을 수행하게 되면 요번처럼 persist를 다시 한번 적용해봐야겠다.