우아한 테크코스 마지막 주차, 4주차를 진행했다.
4주차는 다리건너기 문제로, 마찬가지로 도메인 로직, 서비스로직을 분리하고 단위테스트를 수행하는 것이 주요 목표였다.
저번주차와 다른 점은 대부분의 파일이 이미 작성되어있었고, 이것을 기반으로 작성해야 했다.
이번 주차에도 MVC 모델을 사용은 하였으나, 명확하게 디렉토리로 나누지는 않았다.
문제의 디렉토리를 이동하지 말란 조건때문이다.
그래서 App이 Controller 역할을 하고, BridgeGame과 Bridge가 모델로써 핵심 도메인 로직을 수행했다.
App을 Controller로 채용한 이유는 몇개의 파일을 이동시킬 수 없어서 명확하게 컨트롤러와 모델을 구분할 수 없다고 생각했기 때문이다.
그래서 결국 App은 입출력의 흐름제어만 하고, BridgeGame이 게임 결과나 상태, 유횻값 검증을 관리하며, Bridge가 다리 모델을 관리하게 된다.
처음에는 inputView에서 입출력 흐름 또한 제어해주었지만, 생각해보니 View에서 기대되는 기능과는 조금 멀어지는 것 같고, 입력 흐름 제어가 비즈니스 로직과도 조금 멀며, 서비스로직에 가깝다고 생각하여 그 기능을 controller인 App으로 이동시키게 되었다.
try catch
이번 주차 미션의 다른 점은 try catch였다. 이전주차까지는 그냥 error만 throw하면 됐었지만 지금은 그것을 출력하고 재입력을 받아야 했다.
js의 특성상 콜백 함수 내에서 try catch가 되어야 다음 입출력이 제대로 되고, 함수 길이제한은 10줄이기에 엄청 많은 시간을 고민했던 것 같다.
결론은 CustomError Class를 통해 Error의 name을 받고, name으로 오류를 분류하여 입력을 분기시켜주었다.
이를 통해 Error 클래스의 프로토타입을 공부할 수 있었다.
입출력 호출하는 함수를 tryCatch함수의 콜백으로 전달하고, error에 name을 통해 다음 입력흐름을 제어해주었다.
이러면 controller가 입출력을 제어하게 된다.
테스트코드
또한 이번 주차는 테스트 코드 작성에 좀 더 노력했다.
이전 주차까지는 설계를 구성하는 데에만 급급했다면, 이번 주차는 파일 구조가 어느 정도 나와 있어 설계에 대한 고민을 조금이나마 덜 수 있어 그런 것 같다.
jest 학습에 사용한 블로그
https://velog.io/@modolee/jest-user-guide-07
처음에는 생성자 함수를 mock 함수로 바꾸어서 private 변숫값을 어떻게 바꿀 수 있지 않을까? 라고 생각했었는데 이전 주차 피드백과 서치를 하며 공부해보니 private 함수보다는 그 외부에서, 테스트하기 용이한 부분에서 mock 함수를 새로 작성해 주는 것이 더 낫다는 것을 확인하고, 방향을 틀 수 있었다.
테스트 코드를 작성하며, 설계와 코드 작성 시에 가독성, 구조뿐만 아니라 테스트까지 고려하게 되었다.
우테코 사전미션을 진행하며 정말 본 미션에 참여하지 못한다고 해도 후회하지 않을 정도로 많은 시간을 투자했고, 설계, 코드 작성, 테스트코드 작성까지 뭐 하나 빠지지 않고, 실력이 정말 많이 향상되었다.
이전까지 자바스크립트로 개발을 해왔지만, 지금까지 도대체 뭘 했나 싶어질 정도로 실력이 많이 부족한 것을 느낄 수 있었다. 또한 개인적으로 기능구현을 하며 공부하고 여러 사람과 피어리뷰를 하면서 그 부족한 것들을 조금이나마 채워갈 수 있는 정말 뜻깊은 시간이었다.
사전 미션을 참가할 수 있어서 너무나도 감사하다.