https://0miiii.github.io/front_6th_chapter2-1/
과제 체크포인트
기본과제
- 코드가 Prettier를 통해 일관된 포맷팅이 적용되어 있는가?
- 적절한 줄바꿈과 주석을 사용하여 코드의 논리적 단위를 명확히 구분했는가?
- 변수명과 함수명이 그 역할을 명확히 나타내며, 일관된 네이밍 규칙을 따르는가?
- 매직 넘버와 문자열을 의미 있는 상수로 추출했는가?
- 중복 코드를 제거하고 재사용 가능한 형태로 리팩토링했는가?
- 함수가 단일 책임 원칙을 따르며, 한 가지 작업만 수행하는가?
- 조건문과 반복문이 간결하고 명확한가? 복잡한 조건을 함수로 추출했는가?
- 코드의 배치가 의존성과 실행 흐름에 따라 논리적으로 구성되어 있는가?
- 연관된 코드를 의미 있는 함수나 모듈로 그룹화했는가?
- ES6+ 문법을 활용하여 코드를 더 간결하고 명확하게 작성했는가?
- 전역 상태와 부수 효과(side effects)를 최소화했는가?
- 에러 처리와 예외 상황을 명확히 고려하고 처리했는가?
- 코드 자체가 자기 문서화되어 있어, 주석 없이도 의도를 파악할 수 있는가?
- 비즈니스 로직과 UI 로직이 적절히 분리되어 있는가?
- 코드의 각 부분이 테스트 가능하도록 구조화되어 있는가?
- 성능 개선을 위해 불필요한 연산이나 렌더링을 제거했는가?
- 새로운 기능 추가나 변경이 기존 코드에 미치는 영향을 최소화했는가?
- 코드 리뷰를 통해 다른 개발자들의 피드백을 반영하고 개선했는가?
- (핵심!) 리팩토링 시 기존 기능을 그대로 유지하면서 점진적으로 개선했는가?
심화과제
- 변경한 구조와 코드가 기존의 코드보다 가독성이 높고 이해하기 쉬운가?
- 변경한 구조와 코드가 기존의 코드보다 기능을 수정하거나 확장하기에 용이한가?
- 변경한 구조와 코드가 기존의 코드보다 테스트를 하기에 더 용이한가?
- 변경한 구조와 코드가 기존의 모든 기능은 그대로 유지했는가?
- (핵심!) 변경한 구조와 코드를 새로운 한번에 새로만들지 않고 점진적으로 개선했는가?
과제 셀프회고
과제를 하면서 내가 제일 신경 쓴 부분은 무엇인가요?
- 도메인 단위로 코드를 어떻게 나눌지 고민을 많이 했습니다.
- 함수명 변수명에 고민을 했습니다.
- 처음에는 생각하지 못했지만 발제 후 단계별로 리팩토링하는 것에 대해 신경썼습니다.
과제를 다시 해보면 더 잘 할 수 있었겠다 아쉬운 점이 있다면 무엇인가요?
위에서 작성한 내용들을 처음에는 신경을 썼지만 시간이 지날수록 잘 지켜지지 않았는 것 같습니다. 단계별로 리팩토링하는게 어느 순간부터 새로운 코드를 작성하고 있는것 같고, 시간 투자 대비 결과물이 만족스럽지 않았습니다. 특히 과제 처음 코드가 복잡하다고 하였지만, 막상 제 결과물을 보니 다른 사람이 보면 똑같이 복잡다고 느낄것 같아 아쉬웠습니다. 기존코드를 리팩토링할때 마음 급하게 하지 않고 코드 하나하나 분리를 하면서 천천히 해야겠다고 느꼈습니다.
리뷰 받고 싶은 내용이나 궁금한 것에 대한 질문 편하게 남겨주세요 :)
- 커밋단위를 최대한 작게하는게 좋다고 많이 들었습니다. 커밋 마지막으로 갈수록 잘안되긴 했는데 초반에는 리팩토링 하나하나 커밋을 나누긴 했는데 사실 기준 없이 하나의 수정있을 때마다 한 느낌이라 현재 커밋들이 잘되어있는건지 궁금합니다.
- 리팩토링을 마무리하지 못해서 더 작업해보고 싶습니다 ㅜㅜ
과제 피드백
수고했어요 영민, 이번 과제는 레거시 코드를 점진적으로 개선하면서 기존 기능을 완전히 유지하는 것이 핵심 목표였어요. 본인이 생각하기에 리팩토링을 다 완수하지 못해 아쉬웠겠지만 도메인 단위로 코드를 나누고 함수명과 변수명에 고민을 많이 하신 것, 그리고 커밋을 작은 단위로 나누려고 노력한 부분들이 보여요. 잘했습니다.
초반 커밋들을 보면 변수명 명확화, 상품목록 전역 선언, 상품 재고 총합 계산 함수 추가 등 하나하나씩 차근차근 개선해나가려고 했던것 같아요. 그런데 최종 결과물을 보이 할인률쪽의 구현이 누락되어 있네요. 리팩토링은 기존 기능을 그대로 유지하면서 내부 구조만 개선하는 것인데, 새로운 코드를 작성하는 순간 기능 누락의 위험이 생기거든요. 그런 측면에서 불합격을 드릴게요. 리팩토링의 가장 큰 핵심은 기존 로직을 변경하지 않는다니까요. 당연히 누락이 되어서도 안되겠죠.
회고에서도 "단계별로 리팩토링하는게 어느 순간부터 새로운 코드를 작성하고 있는 것 같다"고 했는데 꼭 기억해주면 좋겠습니다. 리팩토링을 하다보면 다시 하나씩 작성하고 싶다는 유혹에 빠지기 쉬운데 절대로 그렇게 하면 안됩니다. 반드시 기존 코드를 그대로 유지하면서 아주 작은 단위로 변경하는 방식을 추천해요.
합격, 불합격은 항해에서 하라고 하니까 하는 거지만, 저는 중요한 건 결국 학습이라고 생각해요. 이번에 학습을 했으니 5주차, 6주차 과제에서는 기존 코드를 유지하면서 리팩토링을 하는 방법으로 해보길 바래요. 기대할게요.
화이팅입니다