Open
Conversation
|
폴더 구조가 정말 가독성이 좋네요...! 한 주간 고생 많으셨습니다! |
|
|
||
| const isBulkDiscount = getCartTotalCount(cartItems) >= 30; | ||
|
|
||
| const isTuesday = new Date().getDay() === TUESDAY_DAY_OF_WEEK; |
There was a problem hiding this comment.
isTuseday 를 utils 함수로 빼는 것도 좋을 것 같아요
e.g.)
import { isTuesday } from '@/advanced/utils/day';
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://angielxx.github.io/front_6th_chapter2-1/
기본과제
심화과제
과제 셀프회고
주요 변경사항
이번 주 회사 일이 바쁜 탓에 절대적인 시간 부족으로 기본 과제의 경우 AI를 최대한 활용하여 진행했습니다. 심화과제의 경우 아주 일부를 제외하곤 직접 설계하고 구현하려고 노력했습니다.
1. 컴포넌트 기반 UI 구조
UI로직을 컴포넌트 기반으로 모듈화하여 분리했습니다.
재사용 가능한 컴포넌트들:
CartItem.js: 장바구니 아이템 렌더링ProductPrice.js: 가격 표시 (할인가 계산 포함)OrderSummary.js: 주문 요약 섹션BasicDiscount.js: 기본 할인 정보 표시SpecialDiscount.js: 특별 할인 정보 표시2. Hook 기반 비즈니스 로직 분리
계산하는 로직은 각 관심사 별로 훅을 만들어 사용했습니다.
Before:
After:
3. 유틸리티 함수 모듈화
관심사 별로 매직넘버를 상수화하고 유틸함수를 분리하여 관리했습니다.
상수 및 설정값 분리:
순수 함수 유틸리티:
과제를 하면서 내가 제일 신경 쓴 부분은 무엇인가요?
Advanced 버전에서 TypeScript를 도입하며 현대적 아키텍처 기반의 확장성, 유지보수성을 고민했습니다.
1. 타입 시스템 및 API 구현
기존 제품의 프로퍼티가 어떤 의미인지 알아보기 힘든 축약 명칭을 사용하고 있어, 프론트엔드 앱 내부에서 명시적으로 데이터를 사용할 수 있게 가공하여 사용했습니다. 서버에서 주는 인터페이스를 프론트엔드 앱 내부에서 사용하기 적절하게 가공하여 사용할 수 있도록, 원본
ProductData와Product타입을 따로 정의하고, API를 구현하여 데이터 요청 후 프론트엔드 앱에 맞게 가공하여 데이터를 저장하여 사용하도록 설계했습니다.타입 정의 (product.type.ts):
API 구현 (getProducts.ts):
2. 관심사에 따른 분리
컴포넌트 및 스토어, 타입, 유틸 함수 등을 관심사에 따라 분리했습니다. UI의 근본이 되는 데이터인 제품 목록, 장바구니 목록은 전역 상태로 저장하고 그 외의 계산하는 로직은 커스텀 훅으로 분리하여 사용했습니다.
타입 기반 아키텍처:
상태 관리 (Zustand):
관심사별 커스텀 훅
3. 확장 가능한 구조 (할인 정책)
할인 및 포인트 정책 관리와 적용 시 정책이 추가되거나 삭제되어도 확장 가능하도록 설계하고자 했습니다. 코드를 읽기만해도 어떤 정책 종류가 있고, 각 정책별 로직을 파악할 수 있도록 작성하고자 했습니다.
포인트 정책 타입 정의:
포인트 정책 타입별 계산 로직 유틸
복수의 포인트 정책 적용
포인트 정책이 새롭게 추가될 것을 고려하여 적용할 포인트 정책을 배열에 저장하고, 해당 배열을 순회하며 포인트 정책별 로직을 결과값에 적용할 수 있도록 설계했습니다.
과제를 다시 해보면 더 잘 할 수 있었겠다 아쉬운 점이 있다면 무엇인가요?
1. 데이터 구조 설계의 아쉬움
할인, 적립 정책을 실제 이커머스 서비스를 관찰하여 데이터 구조를 설계했으면 좋았을 것 같다.
2. 더욱 효과적인 AI 활용
천재적인 항해 동료들 덕분에 AI 활용 꿀팁들을 많이 얻었지만 아직 다른 분들에 비해 AI를 효과적으로 활용하지 못하고 있는 것 같아 아쉽습니다.
AI 활용에 대한 발전 방향
리뷰 받고 싶은 내용이나 궁금한 것에 대한 질문 편하게 남겨주세요 :)