[8팀 현지수] Chapter 2-1. 클린코드와 리팩토링#46
Open
hyunzsu wants to merge 58 commits into
Open
Conversation
- var → let/const 변경 - 사용되지 않는 변수 제거 - 빈 블록문 → TODO 주석 변경 - 변수명 중복 해결 - 괄호 표기법 → 점 표기법 변경 - 매직 넘버 상수화 - 불필요한 IIFE 및 중복 로직 제거
Member
|
지수님 고생하셨어요..! 코드가 딱 알아보기 좋고 잘 분리되어있게 추상화가 잘되어있네요 보고 배웁니다 !! |
|
BP 축하드립니다 지수님👏 |
|
???: 봐봐 할 수 있잖아 BP |
unseoJang
reviewed
Aug 8, 2025
unseoJang
left a comment
There was a problem hiding this comment.
한번 썻다 지워서...그냥 여기에다가 전체 코멘트 남길게요
미리 다음 과제를 해놓은 느낌이 커요
FSD를 통한 추상화도 잘햊쉬고 분기점도 저보다 훨씬 잘 나눠 놓으신것같아요오
저번에 처음 봣을떄보다도 훨씬더 세부적으로 작업을 해놓으셧네요
1년차때 좋은 선임 만나보면 이정도 까지도 작업을 할수있다는게 느껴지네요 BP는 역시 달라요
다음과제도 화이팅입니다!
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://hyunzsu.github.io/front_6th_chapter2-1/
과제를 하면서 내가 제일 신경 쓴 부분은 무엇인가요?
📍 기본 과제
1. 전체 아키텍처 개요
2. 메인 엔트리 포인트 분석
main.basic.js
3. 공통 모듈 분석 (shared/)
A. 상태 관리 핵심 (core/)
business-state.js - 전역 상태 저장소
dom-refs.js - DOM 요소 참조 관리
B. DOM 구조 생성 (core/)
dom.js - 전체 DOM 구조를 프로그래밍 방식으로 생성
C. 이벤트 관리 (core/)
events.js - 중앙화된 이벤트 핸들러
D. 컴포넌트 (components/)
UI 컴포넌트를 함수로 생성
4. 도메인별 기능 분석 (features/) - Cart 도메인
Cart 도메인 구조
A. Model 폴더 상세 분석
CartController.js - 장바구니 전체 오케스트레이션
B. Service 레이어 분석
CartService.js - 순수 함수로 비즈니스 로직 처리
C. Renderer 레이어 분석
CartRenderer.js - DOM 조작을 통한 UI 렌더링
D. Components 폴더 분석
CartItem.js - 장바구니 아이템 HTML 생성
5. 아키텍처 설계 원칙
A. 도메인 분리
B. 레이어 분리 (MVC 패턴)
C. 데이터 흐름
📍 심화 과제
1. 전체 아키텍처 개요
2. 메인 컴포넌트 분석
App.tsx
useShoppingCart()로 모든 상태와 액션을 관리3. 공통 모듈 분석 (shared/)
A. 상태 관리 핵심 (core/)
combinedReducer.ts - 모든 도메인의 리듀서를 하나로 결합
B. 통합 훅 (hooks/)
useShoppingCart.ts - 모든 도메인을 하나로 묶는 최상위 훅
C. 서비스 레이어
stockService.ts - 재고 검증과 에러 처리:
calculationService.ts - 전체 주문 계산을 담당:
D. 타입 시스템 (types/)
타입들을 도메인별로 분리하고 중앙에서 관리
기본 엔티티 예시:
4. 도메인별 기능 분석 (features/) - Cart 도메인 중심
Cart 도메인 구조
A. Model 폴더 상세 분석
actions.ts - 장바구니에서 발생할 수 있는 모든 액션들
reducer.ts - 순수 함수로 상태 변화를 관리
selectors.ts - 상태에서 필요한 데이터를 효율적으로 추출
B. Hooks 폴더 분석
useCart.ts - 장바구니 비즈니스 로직
C. Services 폴더 분석
CartService.ts - 순수 함수로 장바구니 계산 담당
D. Components 폴더 분석
CartContainer.tsx - 장바구니 전체를 렌더링하는 컨테이너
5. 아키텍처 설계 원칙
A. 도메인 분리
B. 레이어 분리
C. 데이터 흐름
실제 개발하면서 가장 고민했던 부분들
1. 레거시 코드 점진적 개선
270줄짜리 거대한
main()함수를 보고 어디서부터 손대야 할지 막막했습니다.테스트코드를 참고해 단계별로 접근했어요:
appState객체로 모으기매번 리팩토링 후 테스트가 모두 통과하는지 확인하는 게 필수였어요.. 🥲
2. React 마이그레이션을 고려한 설계
기본과제 진행 중에도 "이 구조가 React로 전환할 때 자연스러울까?"를 계속 고민했습니다.
CartController.updateCartDisplay()→useCart()훅으로 바뀔 거고CartRenderer.renderOrderSummary()→<OrderSummary />컴포넌트가 될 거고CartService.calculateCart()→ 그대로 비즈니스 로직으로 쓸 수 있고그래서 기본과제에서도 Controller-Service-Renderer 패턴으로 나누어서 React 전환이 쉽도록 했습니다.
3. 상태관리 설계
기존 코드의 10개 넘는 전역변수를 어떻게 정리할지가 큰 과제였습니다. appState 객체로 통합하고 접근자 함수를 만든 후, 심화과제에서 useReducer로 자연스럽게 전환할 수 있었습니다.
기본과제 단계에서 React 전환을 염두에 둔 구조 설계가 심화과제 진행에 큰 도움이 되었습니다.
과제를 다시 해보면 더 잘 할 수 있었겠다 아쉬운 점이 있다면 무엇인가요?
리뷰 받고 싶은 내용이나 궁금한 것에 대한 질문 편하게 남겨주세요 :)
1. 도메인 중심 설계 + MVC 패턴의 적절성
Controller-Service-Renderer 3계층으로 나눈 구조가 적절적절했는지, 그리고 React로 마이그레이션할 때 이런 레이어 분리가 도움이 되었는지 궁금합니다!
2. React 상태 관리
하나의 combinedReducer로 모든 상태를 관리하는 방식이 적절한지 궁금합니다. 장바구니만 변경되어도 전체 상태가 업데이트되는데, Context 분리나 다른 상태 관리 패턴을 고려해야 할까요?
3. 전체적인 개선 방향
심화과제 React+TypeScript로 마이그레이션하면서 useReducer로 재설계했는데, 현재 구조가 React다운 설계인지 아니면 더 React스러운 패턴으로 개선할 부분이 있는지 피드백 받고 싶습니다! 🤔
그리고 Javascript → React 마이그레이션 과정에서 놓친 React 베스트 프랙티스가 있다면 알고 싶습니다!