어느덧 프리온보딩도 3/4만큼 진행했다. 여섯번째 과제는 이전의 과제들보다 비교적 도전적인 과제가 출제되었다. 전동킥보드 공유서비스를 운영하는 디어코퍼레이션의 과제였는데, 자유도가 꽤 높고 약간의 창의성도 요구되었다. 여러 할인 혜택과 벌금이 추후 추가되거나 변경되거나 할 수 있는 데, 어떻게 시스템 설계를 해야 확장성에 도움이 될지 고려해야 했다.
성연 팀원님께서 책임연쇄패턴을 활용해서 확장성을 향상시켜보자는 의견을 주셨다. 우리 팀이 활용하는 express 프레임워크에서 영감을 받았는데, express의 경우 일련의 연속된 미들웨어 함수 호출로 이루어져 중간 중간에 여러 작업을 끼워맞출 수 있다. 이처럼 중간중간 체인 구조로 끼워넣을 수 있는 구조를 만든다면, 할인이나 벌금 같은 조건들이 추가/변경/삭제 되더라도 유연하게 대처할 수 있을 거라 생각했다.
이를 위해 체인 전체를 관리하는 매니저 역할을 하는 CostChainManager 클래스와, 요금 계산을 위한 체인들의 추상 클래스 역할을 할 CostChainBase 클래스를 두었다.
CostChainManager.js
CostChainBase
이후 도메인 별로 역할을 나누어 작업을 진행했다. 나는 기본 요금 파트를 담당하였다. class를 상속받아 코드를 작성하는 걸 실제 프로젝트에서 적용해 본 적이 없는데, 좋은 공부가 되었다.