[우아한 테크코스 프리코스] 2주차 회고

박세진·2023년 11월 2일
0

2주차 회고

2주차에는 자동차 경주 게임 미션이었다. 기능 요구 사항과 프로그래밍 요구 사항, 과제 진행 요구 사항을 충족하는 미션이었다. 이번 미션에는 1주차 같은 일이 발생되지 않도록 메일과 README를 정독했다. 그러다보니 1주차에 Node.js 버전이 신경쓰이게 되었다.

1주차에서 봤을 때는 테스트로 인해서 Node.js 버전이 18.17.1 이상이 필요하다고 하여 18.18 LTS 버전으로 설치해서 진행했었다. 하지만 글을 읽던 중 18.17.1 버전에서 실행 가능해야 된다는 부분이 걸렸고, 2주차에 NVM을 설치해서 18.17.1 버전으로 맞춰주었다. 맞춰주는 과정이 수월하지는 않았다. NVM 설치하는 방법에 대해서 많이 찾아보았고, 해당 Git repository에 들어가서 확인해봐도 쉽게 설치되지 않아서 힘들었다.

2주차에는 추가로 테스트까지 구현해야 됐었는데, 전에 코드숨을 통해서 TDD(테스트 주도 개발)에 대해서 학습한 적이 있었기 때문에 어렵지 않을거라고 생각했었다. 하지만 내가 한 것도 테스트라고 말할 수 있을까...? 싶었다... 테스트 코드를 구현하는 게 너무 어려웠다... 하... 정말 힘들었다.

좋았던 점

테스트 코드를 구현하여 동작을 확인하는 것

JavaScript code convention을 지키려고 노력

이번에는 JavaScript code convention을 지켜보려고 노력했다. clone한 파일에 eslint를 설정하기에는 문제가 생길 것 같아서, 설정하지 않고 Airbnb JavaScript Style Guide에 있는 글을 찾아보면서 어떻게 작성해야 되는지 확인하면서 구현하였다.

이번 과제에서 조건문을 검사하면서 이 부분을 자세히 읽어보면서 진행했었다.

1주차에 비해 코드를 구현할 때 고민을 더 많이 한 것

1주차에는 일단 먼저 코드를 구현해보는 게 나에게는 중요하다고 생각이 들었었다. 그렇기 때문에 1주차에는 성능 부분이라든가 동일한 결과를 만들어도 어떤 코드가 여기에는 더 맞을까 이런 고민을 할 시간까지는 없었다.

하지만 2주차에는 이런 부분을 조금 더 고민하는 시간을 가지면서 진행하였다. 과제를 구현하면서 입력값이 string으로 들어오다 보니 숫자 같은 경우는 number type으로 변환을 해줘야 됐는데, 이런 부분에서 NumberparseInt 중 어느 것을 사용하면 더 좋을까 고민하다가 parseInt의 경우 radix를 표기해야 된다. 10진수를 변환할 것이기 때문에 Number를 이용하여 변환했다.

또한 승점만큼 하이픈 문자열을 반환할 때 처음에는 Array(number).fill('-').join('') 이런식으로 접근해야 되나 생각이 들었다. 조금 코드가 복잡한 느낌이 들었고, 찾아보니 String.repeat() 메서드가 더 간편하고 가독성이 좋아보여 적용하였다.

고민을 하면서 코드를 구현해보니 새롭게 알게 된 메서드들도 있었다. 하지만... 약간 아쉬운 건 너무 미시적 관점에서 봤던 점...? 이런 작은 부분의 고민도 중요하지만, 코드 구조나 로직에 대한 고민이 좀 더 필요할 것 같다.

힘들었던 점

테스트 코드

jest를 사용해본 적이 있기 때문에 작성하는 방법은 어느정도 알고 있었지만 Mocking이나 비동기 동작 테스트를 하는 건... 학습할 당시에도 너무 힘들어 한 부분이라서 이번에도 너무 힘들었다. 아직도 너무 힘들다. Mocking이랑 비동기 동작에 대해서는 조금 더 공부하고 적용해볼 필요가 있을 것 같다.

그리고 내가 짠 테스트가 계속 실패할 때는 절망감이 엄청나다. 제발 되라고!! 제발 되라고!! 이렇게 간절하게 요청하지만 테스트는 계속 fail이다. 그런 부분에 있어 스트레스를 받았지만... 그래도 재밌긴 하다. 하지만 너무 힘들어...

생각보다 테스트 코드를 만드는데 시간이 많이 들어 리팩토링을 못했지만 beforeEach를 사용해서 중복되는 부분들을 하나로 묶어줬더라면... 아주 좋았을 것 같다는 아쉬움이 든다.

배우게 된 점

이미 구현한 코드가 테스트 코드를 만들기에 좋은 코드는 아니었다

구현을 완료하고 테스트도 확인해보니 통과하여 이제 테스트 코드를 구현해서 함수의 동작을 검증해야지 하면서 테스트 코드를 구현하는데 여기서 정말 고난이 있었다. 내가 구현한 코드는 테스트를 하기에 적합하지 않은 코드였다. 코드를 구현하면서 함수에서 값을 반환하지 않는 경우가 있었는데 테스트로 검증하기 힘들었고, 그러다보니 테스트 코드를 구현할 수 있도록 함수 로직을 변경하는 일이 발생했었다.

구현한 코드에 맞게 테스트 코드를 만드는 것이 아니라 테스트 코드에 맞게 로직을 변경하면서 느꼈다... 이미 구현한 코드가 생각보다 좋은 코드는 아니었다는 것을... 내 기준에서는 역할 분리를 했다고 생각했는데 테스트를 구현하려고 보니 하나의 함수에 생각보다 많은 역할이 있었고... 그러다보니 테스트 코드를 만드는 게 쉽지 않았고... 좋지 않은 코드라는 것을 깨달았다...

앞으로 바라는 점

3주차에는 과제를 진행하면서 다른 사람들의 코드를 리뷰해보는 게 좋을 것 같다. 2주차 과제를 제출하는 과정에 있어 다른 사람들의 코드를 보았는데, 함수별로 파일을 분리한 것을 보고 나도 이렇게 분리할 걸 생각이 들었다. 다른 사람들의 코드를 보면서 배울 수 있는 부분들이 많으니 3주차에는 꼭 다른 사람의 코드를 1개는 리뷰해봐야지.

이렇게 무사히 2주차도 끝났다. 이제 다시 3주차 과제를 하러 가야지~

profile
경험한 것을 기록

0개의 댓글