기존의 우아한테크코스 프리코스는 서류 합격을 한 예비 교육생들을 위한 코스로 알고 있었다. 하지만 이번 5기 모집 프리코스는 신청한 인원 모두에게 프리코스를 밟아볼 수 있는 기회가 주어졌다. 모두에게 교육 받을 기회를 주려고 노력하신 우테코 크루분들 존경합니다.
나는 우테코 지원하기를 눌렀고 일주일 동안 자소서를 고민하고 제출을 완료했다. 그리고 저만의 프리코스가 시작되었습니다.
첫번째 과제가 주어졌고 8개의 알고리즘 문제가 주어졌습니다.
한 문제에 시간은 두 시간 이상씩 소요되었습니다. 난이도가 쉬운 문제도 있었지만 대체적으로 어려운 문제들이 많았습니다.
요구사항 중 특히 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋하는 방식으로 진행한다.
라는 문구가 있어 문제마다 우선 기능 목록을 주석으로 작성하고 매 기능마다 커밋을 하도록 노력했습니다. 기존에 우아한테크코스의 과제로 자바스크립트를 공부했었는데 습관적으로 기능마다 커밋을 하고 있어 어렵지 않게 커밋을 할 수 있었습니다.
그리고 기능 요구 사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.
라는 문구가 있어 이 부분을 저는 엉뚱한 입력 값이 들어올 수 있다고 판단하여 문제마다 입력 값을 모두 유효성 검사를 하도록 코드를 작성했습니다. 이 부분 때문에 코드가 꽤나 길어졌고 파일을 분리해볼까 생각했지만 이 생각을 했을 때 제출기한이 하루채 남지 않아서 생각만 하고 구현해보지는 못했습니다.😅
너무 당연한 말이면서도 제대로 지켰나 돌아보게 되었습니다.
평소에 집중해서 한 문장씩 정독해도 놓치는 부분이 하나씩 있었습니다. 한번씩 다시 리마인드하면서 요구사항을 하나라도 놓치지 않게 노력해야겠습니다.
이 피드백도 당연한 말이었다. 커밋 메시지를 당장 나만 알아보게 써놓으면 동료 혹은 미래의 내가 다시 봤을 때 이해할 수 없다면 그 커밋 메시지는 실패한 메시지일 것입니다.
PR을 이미 한 번 보냈다면 새로운 PR을 생성할 필요가 없다! 코드 수정을 하고 커밋을 하면 자동으로 반영된다.
추가적으로 많은 공통 피드백이 있었지만 그 중에서 도움이 많이 되었던 세 가지만 추려보았습니다.
8문제 모두 기능 구현을 하고 테스트를 모두 통과한 시점에서 중간에 테스트를 추가해도 된다는 얘기를 듣게 되었습니다.
개발하면서 테스트 코드를 작성하고 테스트하며 코딩할 기회가 많지 않았는데 이번 기회에 테스트 코드를 작성해보고 학습해보자! 라는 생각에 도전해보았습니다. 미리 요구사항대로 결과값을 작성하게 이에 맞춰 기능 구현을 하니 좀 더 과감하게 코드를 작성해볼 수 있었고 여러번의 테스트 시도로 빠른 실패를 할 수 있어 바로바로 수정해내어 구현을 완료하는 경험을 해볼 수 있어 너무 좋았습니다.
일주일이라는 시간이 주어져서 널널히 수행할 수 있다고 생각했던 것은 오산이었습니다. 주어진 테스트, 구현까지 시간이 남았지만 추가적인 테스트, 엣지케이스를 고민하다보니 금방 제출기한이 다가왔습니다. 다음 과제들은 부지런히 구현하고 추가적인 리팩토링 목표 검토를 해야겠습니다.
두번째 과제로 숫자 야구 게임이 주어졌습니다. 처음 과제를 받았을 땐 드디어 게임을 하나 만드는 과제가 나왔구나! 여지껏 해왔던 과제 스타일이어서 들떴습니다. 불과 몇 분만에 들떠있는 기분은 충격과 공포에 휩싸이고 말았습니다.
과제를 살펴보던 중 이러한 요구사항을 보게 되었습니다.
프로그램 실행의 시작점은 App.js의 play 메서드이다. 아래와 같이 프로그램을 실행시킬 수 있어야 한다.
// 예시
const app = new App();
app.play();
처음 App.js의 상태...
// App.js
class App {
play() {}
}
module.exports = App;
JavaScript 책에서만 보던 클래스를 이번 과제로 구현해보게 되었습니다!😂😂 기대반 두려움반이었지만 별 수 있습니까? 해봐야죠! 클래스 구현방법을 계속해서 고민하고 컴퓨터의 답과 사용자의 답은 어떻게 관리해야할지... 보던 차에 엎친데 덮친격 이 과제의 게임은 뭔가 달랐습니다.
여지껏 과제를 수행하면 항상 웹 브라우저에서 사용자에게 값을 받아오고 필요한 기능을 수행하고 웹 브라우저에 다시 뿌려주는 식으로 해왔지만 이번엔 또 다른 변수가 생겼습니다. 터미널에서 node.js로 App.js를 실행하여 터미널로 입력 출력을 주고 받는 게임이었습니다...
그리고 터미널로 입력을 받다보니 MissionUtils 라이브러리를 이용해 사용자의 입력 값을 받을 수 있었습니다.
Console
, Random
등 라이브러리 README.md에 잘 정리되어 있어 쉽게 코드에 적용해볼 수 있었습니다.
기능 목록을 재검토한다.
기능 목록을 설계와 구현을 상세히 작성하지 않는다. 언제든 요구사항은 변할 수 있고 그에 따라 설계와 구현도 똑같이 변할 수 있기 때문. 추가적으로 예외적인 상황도 기능 목록에 작성한다.
처음부터 큰 단위의 테스트를 만들지 않는다.
테스트의 중요한 목적 중 하나는 내가 작성하는 코드에 대해 빠르게 피드백을 받는 것이다. 큰 단위의 테스트를 작성하면 피드백을 받기까지 많은 시간이 걸린다.
이번 숫자 야구 게임을 통해 많은 것을 경험하고 공부할 수 있었다.
클래스, nodejs, throw Error 등 많은 것을 공부하고 적용해볼 수 있어 너무 좋다. 여지껏 프로그래밍 학습하면서 짧은 시간 많은 것을 경험해본게 처음이다.
회고를 쓰다가 알아낸 실수가 있다. 너무 심각한 실수를 해버렸다. 2주차의 목표는 함수를 분리하고, 각 함수별로 테스트를 작성하는 것
이었다. 습관처럼 함수는 한 함수가 한 가지 기능만 하도록 작성했지만 테스트 코드를 추가적으로 작성할 때 함수를 테스트해보지 않았다.😭🫠 1주차에도 실수했던 그 부분이다... 이번에는 꼭 노션이든 메모장이든 중요하다 생각되는 목표는 꼭 기록하여 리마인드 해나가며 과제를 수행해나가야겠다...