[4팀 김수민] Chapter 1-1. 프레임워크 없이 SPA 만들기 - #69
Open
nimusmix wants to merge 72 commits into
Open
Conversation
- Toast 컴포넌트 개선 - RelatedProducts 컴포넌트 추가 - ProductDetailController 제거 (사용되지 않음)
- popstate 이벤트 리스너 중복 등록 방지 - 동일한 URL로 이동 시 히스토리 엔트리 중복 생성 방지 - E2E 테스트 통과 확인
JunilHwang
force-pushed
the
main
branch
2 times, most recently
from
September 26, 2025 01:13
a90ad7b to
d5eb31b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
과제 체크포인트
배포 링크
https://nimusmix.github.io/front_6th_chapter1-1/
기본과제
상품목록
상품 목록 로딩
상품 목록 조회
한 페이지에 보여질 상품 수 선택
상품 정렬 기능
무한 스크롤 페이지네이션
상품을 장바구니에 담기
상품 검색
카테고리 선택
카테고리 네비게이션
현재 상품 수 표시
장바구니
장바구니 모달
장바구니 수량 조절
장바구니 삭제
장바구니 선택 삭제
장바구니 전체 선택
장바구니 비우기
상품 상세
상품 클릭시 상세 페이지 이동
/product/{productId}형태로 변경된다상품 상세 페이지 기능
상품 상세 - 장바구니 담기
관련 상품 기능
상품 상세 페이지 내 네비게이션
사용자 피드백 시스템
토스트 메시지
심화과제
SPA 네비게이션 및 URL 관리
페이지 이동
상품 목록 - URL 쿼리 반영
상품 목록 - 새로고침 시 상태 유지
장바구니 - 새로고침 시 데이터 유지
상품 상세 - URL에 ID 반영
/product/{productId})상품 상세 - 새로고침시 유지
404 페이지
AI로 한 번 더 구현하기
과제 셀프회고
과제를 처음 받았을 때
어 생각보다 어렵진 않네? 재밌겠다!했어요 우매함의 봉우리라고 하죠..?고작 일주일 동안 한 과젠데 아쉬운 점이 생각보다 많아요.
SPA에 대해 좀 더 생각하고 시작했어야 했다.
처음 main.js를 봤을 때 일단 페이지를 분리하고 라우터를 만든 뒤
어디서 data fetching을 해야 할까?고민했습니다.presentation과 container를 분리해야 한다고 생각해서 일단 페이지에서는 fetching 하고 싶지 않았어요.
그리고 데이터가 바뀌었을 때 전체를 렌더링시키고 싶지 않았어요.
그게 재앙의 시작이었습니다..
MVC 패턴을 도입하자!하고 Controller를 만들기 시작합니다.Controller에서 컴포넌트를 조합하고, DOM 조작은 Controller의 역할이라며
Controller에
updateFilter(),updateSort()같은 함수들을 마구 만들었어요.결국 Controller는 비대해지고 저는 현타가 왔습니다.
리액트였으면 진짜 금방인데..하다가그럼 리액트처럼 만들어보자!했어요.그 때부터 과제가 진도가 나가기 시작했습니다..~
아 코치님이 작성해주신 자료 읽을 걸! 이라는 생각이 들었어요 ..
갈아 엎을까 말까 할 때 엎을 걸
위 MVC 이슈로.. 회사에서도 과제 생각 밖에 안 나서 반차 쓰고 오고 자려고 누워도 잠이 안 왔어요 (ㅋㅋㅋ)
너무 마음에 안 들어서 갈아엎고 싶은데, 지금 엎으면 과제 완성 못할 것 같고 그런 거 있죠
그래서 괴로워하다가 시간이 꽤 지났는데 차라리 그 때 확 엎고 다시 시작했어야 했다고 생각해요 ㅠ_ㅠ
렌더링과 이벤트 리스너는 항상 어렵다.
렌더링이 여러 번 되면서 이벤트 리스너가 반복해서 붙어서 브라우저가 엄청 느려지기도 하고,
환장의 조합으로 렌더링이 여러 번 반복되면서 테스트 코드를 줄기차게 실패하기도 했습니다.
이거.. 어떻게 하면 더 잘 이해할 수 있을까요?
기술적 성장
자랑하고 싶은 코드
구조에 대한 고민을 엄청 하다가 결국 이렇게 구성했어요
template 부분이 깔끔하고 예뻐서 묵은 체증이 확 내려간 코드였답니다!
ProductDetail도 이렇게 하고 싶었는데 시간이 부족해서 아쉬워요 ㅠ_ㅠ
개선이 필요하다고 생각하는 코드
역설적이게도 위랑 같은 코드인데요..
useProducts()hook을 만들어두고 this.productsHook = useProducts() 이런 식으로 써야 한다는 것이 싫었어요필요한 부분에서 각자 useProducts()를 호출하게 하고 싶었는데, subsribe 이슈를 해결하지 못해 그러지 못했어요
또, products만 변경되어도 전체가 리렌더링 되기 때문에 변경된 부분만 리렌더링되면 좋을 것 같아요
학습 효과 분석
SPA에서 가장 중요한 것은 상태 관리다 라는 걸 알게 되었습니다.
그리고 코치님께서 주신 발제 자료가 참 흥미로웠는데요!
어떤 문제를 해결하기 위해 나왔는지 그래서 어떻게 해결했는지
이런 것들을 중심으로 공부해보면 기억에 잘 남고 재밌을 것 같아요!
과제 피드백
단위 테스트에 자꾸 실패해서 시간을 좀 낭비했는데 e2e 테스트에서는 잘 돌아가더라구요
테스트를 엄격하게 작성할 거라면 그런 부분까지 고려하는 게 당연히 맞지만,
아직 테스트에 대해 잘 모르는 상태인지라 거기에 시간을 많이 쏟아서 hard까지 다 못해낸 게 좀 아쉽습니다ㅠㅠ
AI 활용 경험 공유하기
Cursor를 이용했어요. 특별히 학습시키지는 않았고, 작성하기 귀찮은 부분들 짜달라고 부탁했습니다!
리뷰 받고 싶은 내용