우테코 8기 최종 코딩테스트가 종료되어 프리코스 회고를 쓰면서 정리해보고자 한다.
프리코스 시작 전, 그 전 기수의 프리코스 진행방식을 미리 파악해보고 미리 목표를 세우게 되었다. 목표는
이렇게 3가지였다. 각각에는 나름의 이유가 있었는데
구현 과정 자세히 기록하기
구현 과정을 자세히 기록하는 과정은 제출한 이후에 내가 왜 이렇게 구현했는지 다시 생각해보기에 굉장히 좋은 방법이었으며, 다른 분들이 나의 코드를 리뷰할 때 이해하기가 굉장히 쉬워지는 방법이라고 생각했다. 또한 구현 과정을 정리해가면서 중간에 헷갈리는 순간이 왔을 때 읽어보며 도움을 받을 수 있었다.
코드 리뷰 열심히 하기
다른 사람들의 코드를 보며 알아가는 것이 많다는 생각을 하게 되었다. 다른 사람의 코드를 수월히 읽을 수 있다는 것, 그리고 배워갈 수 있다는 것도 스킬 중 하나라고 생각했다.
궁금한 점이 생기면 바로바로 알아보기
나는 그동안 궁금한 점이 생기면 AI의 도움을 받거나, 대충 알아본 후에 넘어갔던 것 같다. 하지만 이런 목표를 세우며 딥다이브를 계획하였다.
이번 8기 프리코스 1~3주차는 다른 기수와 동일하게 미션 제출 -> 코드 리뷰(자율)로 진행되었다.

매 주차별로 notion에 위와 같이 구현과정을 자세히 기록하여 리드미에 넣었고, 다른 분들의 코드리뷰도 진행하고자 꾸준히 디스코드에 글도 올리고, 서로 리뷰하는 등 활발하게 활동하려고 노력하였다.
주차별로 미션 수행하면서 궁금해진 부분이 있으면 정리해서 디스코드에 올려보기도 했다.

1주차 문제를 보고 은근 간단하면서도 어렵겠다는 생각을 했다. 문제를 봤을 때, 정규표현식으로 풀면 정말 간단한 문제인 것 같다고 생각이 들었지만, 객체지향 프로그래밍을 연습해보고자 하였기 때문에, 이 방식으로 만드는데 조금 어려움을 느꼈다.
결국 결과물은 뭐랄까... 객체지향이라고 해야돼...? 싶은 결과물이 완성되었고, 다른 분들의 코드를 리뷰해보며 예외처리에 많은 부족함을 느낄 수 있었다.

++ 회고를 하려고 다시 보다보니 리뷰에 대한 답변이 pending 상태인걸 발견했다... 내 답변들.. 지금 보내면 놀래실테니 그대로 냅두자ㅠㅠ

2주차의 경우에는 나름 만족스러운 결과물이 나오긴 했지만, 아쉬운 점은 제출할 때 써놨듯이, 목표로 했던 객체지향을 완벽하게 하지 못하고, 일부 절차지향을 사용했다는 것이다. 다른 분들과 코드리뷰를 어김없이 나눠보면서 얻은 피드백은
이렇게 정리할 수 있었다. 특히 재밌는 미션이었어서 코드 리뷰를 굉장히 많이 진행했던 것 같고, 의미있는 의견 교환도 시도할 수 있었다.

캡슐화를 위한 프라이빗 필드, 메서드 사용은 이 때 많은 분들이 사용하시는걸 보면서 필요성을 많이 체감했다.
또한 jest 테스트 시간이 매번 이상해서 알아보고 디스코드 채널에 올려보았다.

1,2주차를 진행하며 객체를 만들 때 매번 객체 생성하는게 너무 귀찮았던 나머지... 그리고 왜 해야하는지 이유를 체감하지 못했던 나머지 상태를 가지지 않는 객체들은 모두 static으로 변경하였고, 결론적으로 정적 메서드로만 만들어진 결과물을 만들게 되었다.
관련된 글도 남겨놨었다.

그리고, 먼저 제공되었던 파일에 private 필드가 사용되어서, 사용해보는 경험을 할 수 있었는데, 위에 써놨듯이 그렇게 잘.. 사용할 수 있는 결과물이 아니었기에 완벽한 경험에는 실패했다.
이 때 좀 신랄한 리뷰를 많이 받았던 것 같고, 이 방법의 장단점에 대해서도 많이 고민해봤던 것 같은데, 이 과제를 한 이후에 다른 분들의 작업물을 보고, getter setter 메서드에 대해서도 많이 학습해봤던 것 같다.
이번 8기부터 새롭게 도입되었던 미션으로, 내가 진행한 내용은 디스코드 봇이다.
정말 처음보는 discordjs라는 라이브러리 사용에 도전하였으며, 웹에만 치중되었던 경험을 봇이라는 새로운 분야에 도전해보며 확장시킬 수 있다는 점에서 괜찮은 시도인 것 같다 생각이 들어 시작하게 되었다.
또한 도전이라는 키워드에 걸맞는 부분 2가지를 추가로 시도하였는데,
봇의 상용화
기존 봇은 환경변수에 우리가 사용할 서버의 아이디를 넣어 사용하였는데, 다른 서버에서도 이용 가능하도록 변경하였다. 이게 왜 도전이냐면
이걸 했어야했는데 우리는 FE 2명이었기 때문이다... 특히 db 세팅을 내가 담당하였고, 추가할 때 세팅을 해야하는 것도 나였기 때문에 부담감이 조금 있었다. 그래도 차분히 어떤 데이터가 필요한지 함께 미션을 진행한 크루분과 이야기해가며 만들어나갔던 것 같다.
리드미에 넣을 문서도 정말 꼼꼼히 작성하였다. 프리코스 내내 문서화에 대해 계속 고민해왔었고, 문서화를 제대로 하는 것이 기능 개발의 마무리라고 생각했기 때문에, 정말 꼼꼼히 하려고 노력했다. 추가로 아침마다 동료분과 데일리 스크럼을 진행, 각자 개발일지도 작성하면서 서로가 얼마나 진행하고 있는지 계속 확인했다.

이렇게 오픈 미션을 완료하고, 봇을 배포한 다음 같이 미션을 진행한 여빈님과 함께 모각코 서버에서 잘 사용하고 있다.

오픈 미션 제출부터 1차 결과까지는 한달 이상의 시간이 남아있었다. 이 시간동안 나는 다른 면접도 보고, 쉬는 시간도 가지며 결과를 기다렸다.

결과는 합격!
합격 메일을 받기 전까지 아.. 붙지 않을까? 나 정말 열심히 했는데? 하는 생각과 그래도 이 많은 사람들 중에서 내가 붙을 수 있을까?하는 생각을 가지고 있었다. 결국 1차를 붙어 최종 코테를 가게 되면서 아 열심히 한만큼 정말 좋은 결과가 있었구나 싶은 생각이 들었고, 바로 최종 코테 준비를 시작하게 되었다.
최종 코테 준비 전에 깃허브를 돌아다니면서 이전 기수 기출문제들을 찾아보기 시작하였다. 나는 FE에 지원하였기 때문에 특정 기수 이전의 문제들은 HTML이 함께 나오는 문제들이 나왔었고, 이런 문제들의 경우에는 BE 문제들을 가져와서 풀었다.

하루에 한문제 이상은 기본으로 풀려고 노력하였고, 시간은 오픈미션 때 만들어놓은 디스코드 봇을 사용하여

이런식으로 시간을 잴 수 있었다. 물론 언제부턴가 음성채널에 누적시간이 표시되기 시작하긴 했지만, 우리가 만든 봇을 사용해서 시간을 잴 수 있다는건 좋은 경험이었다.

그리고 공부시간도 확인할 수 있는 것!! 음성채널을 사용하지 않은 시간들도 있어서 확실한 시간은 아니지만 그래도 그 때의 기록을 확인할 수 있다는 것도 너무 좋았다.
개발 공부를 시작하고 처음으로 AI없이 1부터 10까지 내가 구현하는 연습을 시작하였다. 처음에는 객체지향 프로그래밍의 사용 이유조차 체감하지 못했고, 함께 오픈 미션을 진행했던 여빈님에게 물어보고, 계속 구현 연습을 해나가면서 많이 발전하게 된 것 같다.
실제로 1차 합격을 확인하고 바로 풀었던 온보딩 미션들의 코드를 지금 보면 많이 개판이다.

3주차 로또 미션처럼 여전한 static 사랑을 엿볼 수가 있다...
어느정도 감을 잡았던 시점은 편의점 문제에 도전하면서부터였다. 편의점 문제는 7기 4주차 문제로 꽤 악명이 높던 문제였는데, 그 전까지는 뭔가 데이터를 가지고 있는 개체 생성의 필요성을 체감하지 못했다. 하지만 이 문제는 이 부분이 필수적이었고, 지금 되돌아보면 부족한 점이 많지만, 그래도 구현할 수 있었다는 것 자체가 큰 발전이었던 것 같다.

편의점 구현에 성공하고 며칠이 지난 후, 7기 최종코테 문제에 도전하게 되었다. 실전 경험을 한다 생각하고, 시간을 재면서 했는데 5시간 안에는 무슨 3시간을 지나갈 때 아예 파일들을 다 삭제해버리는 일이 생겼다. 결국 구현을 2번 갈아엎고, 3번째를 시도하기 전에 집에 갔는데 집 가는 길에 그 차가운 길바닥을 걸으며 (당시 밤 10~11시 경) map을 사용하여 구현하는 방식에 대해 생각해보게 되었고, 이 방식을 사용하며 풀 수 있었다.
당시 고민의 흔적들....
그리고 생각보다 디버깅에 시간을 많이 쏟았고, 한번 감이 잡혔을 때 바로 구현 성공해야겠다는 생각에 결국 새벽에 완성하였다.


ㅋㅋㅋㅋㅋ 새벽에 구현 완료한 후 소리지르면서 pr올리고 잠들었던 기억이 있다.
어떻게 풀어야 더 쉽고 효율적이고 빠르게 풀 수 있는가에 대해 계속해서 고민을 했었다. 결론은
이렇게 내리게 되었다. 1번은 그렇다 치고 2번은 왜? 싶을 수 있는데, 자바스크립트를 처음 공부하면서 알고리즘 문제를 풀기 시작했을 때, 나는 배열을 정말 사랑했다. 다른 자료구조를 사용할 생각을 하지 않고 배열만을 사랑했기에, 이 배열만으로 풀기가 힘든 문제들에서 벽을 마주하게 되었던 것 같다.
편의점 문제를 통해 obj를 사용하는 방법, 출석부 문제를 통해 map을 사용하는 방법을 공부하게 되었고, 배열만을 사용하던 기존 방식을 버려야겠다는 확신이 들게 되었다.
프리코스 초반에 디스코드에 설계에 대한 내용이 올라왔었다. 그에 대한 나의 답변은

이러했다. 그리고 최종코테를 진행하면서도 설계에 쏟는 시간이 점점 길어졌고, 5시간 중 2시간 이상을 설계에 쏟을 정도로, 생각을 많이 해보게 되었다.
초반에 연습한 미션들은 사실상 설계를 진행하지 않았다. 리드미에 구현할 기능 체크리스트를 작성하면서 순서를 결정하였고, 그냥 냅다 들이대는 방식을 사용했었다. 그나마 설계를 했다 할 수 있는 내용은 이런 내용이다.

음... 그냥 프로그램 순서 정도...? 만들 파일 정도...? 정리했다고 보면된다.
연습 후반에는 손으로 쓰지 않으면 설계가 진행되지 않을 정도로 설계에 많은 시간을 쏟았고, 그만큼 구현에 쓰이는 시간이 많이 줄었다.
연습의 기록들....
단순 프로그램 실행 순서 뿐만 아니라, 사용할 자료 구조, return할 결과 내용에 대해서도 미리 생각해보고, 생성할 파일들도 생각해보게 되었다.
최종코테를 준비하던 그 기간이 내가 개발을 공부하며 가장 프로그래밍 그 자체에 몰입했던 시간이 아닐까 생각하고 있다. 또한 궁금한점이 생기면 알아보고, 이야기해보면서 프로그래밍 자체의 많은 부분을 알아갈 수 있었다.
그 예시로 들 수 있는 글은 이 글인데, 읽어보면 알 수 있듯이 모르는 부분에 대해서 자세히 찾아보고, 다른 크루와 이야기도 나눠보고, 상의해보면서 결론에 도달하는 재미를 많이 느낄 수 있었다.
최종코테 날 오히려 긴장을 덜 한채로 시험장에 도착했다. 약간 따수운 느낌의 우테코 교육장이 나왔고, 우테코스러운 가글이 있어서 찍어봤다.

시험볼 자리를 확인하고, 세팅을 한 뒤 계속 스트레칭을 하고 화장실을 가면서 준비를 했다. 오히려 시험 시작하기 3분 전에 갑자기 더워져서 안에 입은 옷을 벗어야 하나 고민하게 되었다....
어떤 문제가 나올지 긴장하며 문제를 확인했는데, 상당히 익숙한 문제가 나와 반가웠다. 그리고, 새로 생긴 도전 미션을 확인하게 되었다. 익숙한 문제였기에, 도전 미션을 반갑게 맞이할 수 있었고, 빠르게 구현한 후에 어떻게 도전을 해볼지 고민해보기로 하였다. 사전 목표로 세웠던 내용을 공유해보자면
이렇게 사전 목표를 세우고 들어갔다.
사전 설계를 완료하고, 구현을 하는데 초반부터 약간 멘붕이 왔다. 테스트 케이스 2번을 도저히 통과를 못 시키겠어서... 멘탈이 흔들렸지만, 이 부분을 리드미에 기록해둔 뒤에 다른 방식을 사용하여 통과시켰다. 추후 이 부분에 대해서는 공지가 올라왔다.
구현을 1차로 완료한 다음, 디버깅을 하며 생겼던 문제점인 결과 출력에 대해서도 리드미에 기록하고 해결한 다음 테스트 통과를 확인하였다.
도전 과제로는 크게
이렇게 2가지가 제시되었다. 그리고 나는 둘 다 진행하기로 하였다. 리팩토링의 경우, 프리코스 초반 3주동안 받았던 피드백인 상수화, 프라이빗 필드 및 메서드 사용을 목표로 하여 리팩토링 하였다.
리팩토링을 완료한 다음, 테스트코드에 영향이 가지 않게 추가 기능을 구현하는 방식에 대해 고민을 해보았고, 테스트 코드를 분석 -> 영향이 가지 않게 추가하는 방법을 알아낸 다음에 추가 기능을 구현하였다.
처음에는 수동 구매와 등수 계산 조건 입력(현재는 제시되어 있음)을 생각하였고, 시간 관계상 수동 구매에 대한 내용만 진행하게 되었다.
결과를 제출하기 3분 전에 추가 기능 구현이 완료되었고, 테스트까지 완료되었다. 추가 기능 구현에 들어간 시간도 그렇게 여유가 많은 상황이 아니었기에, 고민을 많이 하였지만 도전이라는 말에 걸맞게 도전!을 외치며 추가 기능 구현에 들어갔었다.
제출 10분전부터 안내가 나왔는데, 난 여전히 디버깅 중이었고... 정말 제출 직전에 추가 구현한 부분까지 실행이 되어 바로 제출하였다.

제출 후에 예제 테스트 실행 버튼을 누르고 얼마나 긴장했는지... 2/2 뜨자마자 너무 기뻤다. 테스트 결과를 확인하고, 내가 어떤 마음가짐과 의도로 이렇게 작업을 하였는지, 프리코스 동안 어떤 생각을 했는지 소감문에 작성하고 홀가분한 기분으로 시험장을 나왔다.
우테코 프리코스는 나에게 정말 큰 도전이었다. 아 그냥 해보면 되지 라는 생각이 아닌 제대로 된 공부를 해보고 싶다 라는 생각으로 시작하였고, 실제로도 1~3주차 미션, 오픈미션, 그리고 최종코테까지 새로운 지식과 프로그래밍 스킬 습득으로 꽉 찬 시간을 보냈던 것 같다.
이제 최종 코테까지 끝나서 결과를 기다리는 시간이지만, 하고 싶은 것들은 더욱 많아진 상태고 오픈 미션에서 만들었던 봇의 추가 개발을 진행하고 있다.
프리코스에서 끝나지 않고, 최종코테까지 갈 수 있어서 최종코테 준비라는 큰 학습의 기회를 얻었던 것도 지금 되돌아보면 큰 행운이었던 것 같다. 결과가 어떻게 되든 앞으로도 이런 태도를 가지고 발전하는 사람이 되었으면 좋겠다.
추가로 오픈미션부터 최종 코테까지 함께 해준 동료분에게 감사의 인사를 드리고 싶습니다!!!!