[12팀 김현진] [Chapter 1-2] 프레임워크 없이 SPA 만들기 #43
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
과제 체크포인트
기본과제
가상돔을 기반으로 렌더링하기
이벤트 위임
심화 과제
1) Diff 알고리즘 구현
2) 포스트 추가/좋아요 기능 구현
과제 셀프회고
기술적 성장
이번 과제를 통해 React의 Virtual DOM에 대한 이해가 더욱 깊어졌습니다.
이전에는 Virtual DOM이 단순히 변경된 DOM을 비교하고, 변경된 부분만을 실제 DOM에 반영하는 방식으로만 이해하고 있었으나,
이번에 React가 이를 효율적으로 관리하기 위해 diffing 알고리즘과 최적화 기법을 사용한다는 점을 명확히 알게 되었습니다.
Virtual DOM을 바닐라 자바스크립트로 구현하면서 이론적으로만 알았던 개념을 코드로 풀어낼 수 있었고,
React가 불필요한 렌더링을 최소화하는 방식에 대해서도 학습할 수 있었습니다.
이벤트 리스너에 대해서는 아직 깊은 이해가 부족하지만, 이번 과제에서 이벤트 리스너를 중앙에서 관리하고,
JSX 형태의 컴포넌트에서 onClick과 같은 이벤트를 태그에 직접 선언하여 사용할 수 있도록 구현하는 방식이 새로웠습니다.
이 과정에서 이벤트 처리 및 위임에 대한 기초적인 부분을 배우게 되었고, 이벤트가 어떻게 전달되고 처리되는지에 대한 이해가
조금씩 생기고 있습니다. 하지만 아직 이 부분에 대한 이해도가 더 필요한 상태임으로 앞으로 이벤트 리스너와 관련된 이해를 더 쌓고,
더 효율적인 방식으로 이벤트를 관리하는 방법에 대해 학습할 계획입니다.
코드 품질
이벤트 리스너를 업데이트하는 로직을 어디에 선언해야 할지 고민한 끝에 renderElement에서 선언하게 되었지만,
이로 인해 관심사 분리가 제대로 이루어지지 않은 것 같다는 느낌을 받았습니다.
updateEventListeners 함수
이 함수는 updateAttributes 함수 내부에서 호출되는데,
이때 updateAttributes는 일반 속성 처리와 이벤트 처리를 같이 담당하고 있습니다.
현재 코드에서 forEach와 Object.entries를 많이 사용하고 있어 가독성에 어려움이 있고,
반복문을 통해 처리하는 로직이 많아 성능 저하를 일으킬 수 있는 우려가 있을것같아
리팩토링이 필요해 보이는 상황입니다.
학습 효과 분석
가장 큰 배움은 Virtual DOM과 실제 DOM의 상호작용을 직접 구현한 경험입니다. 특히 Diff 알고리즘을 통해 효율적인 DOM 업데이트 방식을 이해할 수 있었고, 이를 통해 실제 프레임워크들이 성능 최적화를 어떻게 구현하는지에 대해 깊이 있게 배울 수 있었습니다.
하지만 이벤트 관리 부분에 대해서는 아직 좀 더 이해가 필요한 상태입니다. 이벤트 리스너 처리 및 위임에 대한 추가적인 학습이 필요하다고 느꼈습니다. 이를 보완하기 위해 더 많은 학습을 진행할 계획입니다.
과제 피드백
리뷰 받고 싶은 내용
코드를 작성하는 과정에서 반복되는 코드가 많아지는 문제가 있었습니다.
특히, updateAttributes 함수가 createElement와 updateElement에서 각각 호출되고 있는데,
내부 로직을 살펴보면 비슷한 패턴이 반복되고 있습니다.
다만, 각 함수의 세부 구현이 조금씩 다르게 작성되어 있어 이런상황에서 어떻게 공통 함수로 추출할 수 있을지 고민이 됩니다.
반복 코드를 줄이고 재사용성을 높이기 위한 리팩토링 방안에 대해 조언을 부탁드립니다.
예를 들어, updateAttributes와 관련된 로직을 적절히 분리하거나, 공통화할 수 있는 함수로 만들 방법이 있을지 피드백을 받고 싶습니다.
또한, 이러한 리팩토링이 성능이나 가독성에 어떤 영향을 미칠 수 있을지도 궁금합니다.
추가적으로, 현재 코드 구조에서 관심사 분리가 잘 이루어졌는지, 개선할 점이 있다면 제안해 주시면 감사하겠습니다.