[우아한테크코스 6기] 1차 합격 & 최종 코딩 테스트 회고록
프리코스 종료 후
프리코스가 종료된 후 약 한달 후 최종 코딩테스트가 있었다. 물론 1차 합인지 불합인지 모른채 최선을 다해야겠다는 생각을 했다. 디스코드를 통해 최종 코딩테스트 스터디를 구하는 글이 올라왔고, 솔직히 말해서 나는 우물쭈물 했었다. 지금까지 스터디를 진행해본 경험이 없었고, 혼자 공부하는 것에 익숙해져 있었기에 혼자 하는게 편할거라는 생각을 했다. 하지만 프리코스 기간동안 몇 번의 코드리뷰를 해본 결과 다른 사람들과 스터디를 하면서 서로 리뷰를 주고 받으면 실력이 더욱 빠르게 향상될 것이라고 생각했다. 나는 바로 스터디를 구하는 글을 올리고 나를 포함 4명과 함께 최종 코딩테스트 스터디를 진행했다.
스터디는 1주차를 제외한 2~4주차 미션 재구현, 4기/5기 최종 코딩테스트 구현을 진행했다. 스터디를 진행하면서 프리코스를 진행했을 때 만큼이나 실력이 향상된게 느껴졌다. 다만 아쉬웠던 점은 더 많은 문제를 풀어보지 못한 것과 다른 분들과의 리뷰를 더 진행했다면 어땠을까 하는 점이었다.
1차 합격 발표 이후
12월 11일 15시가 되자마자 메일이 도착했다.. 다시 생각해도 저때 메일을 열기 전엔 미친듯이 긴장하고 손발에 땀이 났었던게 생생하다... 메일을 열어보는 순간!!!!!!
그 동안의 노력에 대한 보답을 받았다. 프리코스를 진행하면서 부족했던 프로그래밍 실력이 많이 상승됐고, 내가 생각했던 계획과 목표에 한걸음 다가갈 수 있는 기회가 생겼다는 생각을 했다. 최종 코딩테스트는 1차 합격 발표날 기준으로 5일 뒤에 예정되어있었고, 나는 기존에 진행하던 스터디를 1차 발표가 난 주 수요일에 끝내고 남은 시간동안 그동안 진행했던 미션들을 다시 구현해보고 시간을 재며 풀어보기도 했다.
하지만 시험 보기 3일 전까지는 정말 절망적이었다. 구현을 하는데 싱글톤 사용은 물론이고, 객체들의 정보가 저장된 repository에서 값들 조차 불러오는데 어려움을 겪었다. 나는 여기서 끝인가하고 생각했다... 하지만 다음날 그 문제를 풀기 전 프리코스와 스터디를 진행하면서 많이 참고했던 5기 기수분의 블로그를 보면서 뭔가 머릿속으로 깨달은게 느껴졌고, 다시 풀어보니 내가 어떤 부분이 잘못됐었는지 눈에 보였고 그 부분을 수정하자 내가 원하던 대로 값을 불러다 사용할 수 있었다. 그 순간의 희열은 정말 짜릿했다. 자존감과 자신감은 하늘을 찔렀고 최종 코딩테스트도 가뿐하게 성공할 수 있을 것만 같았다.
최종 코딩테스트
최종 코딩테스트는 12월 16일(토) 13시 ~ 18시로 5시간 동안 진행이 예정돼있었다. 전날 긴장해서 잠을 잘 못잘 것 같았는데 너무 잘잤다....ㅋㅋㅋ...
얘기를 들어보니 최종 코딩테스트는 선릉캠퍼스와 잠실캠퍼스 두 장소에서 진행됐고, 나는 선릉캠퍼스에서 진행했다! 시험장에 12시부터 입장 가능이었어서 11시 15분쯤 선릉역에 도착해 간단하게 밥을 먹고 시험을 보러 가려고 했는데 우테코 측에서 다과류를 준비해준다는 후기들을 봤었어서 긴장되는 마음도 진정시킬겸 스벅가서 티만 마시는 걸로 계획을 변경했다. 선릉캠퍼스 바로 앞건물에 스벅이 있어서 거길로 갔는데 최종 코딩테스트를 보러온 사람들이 꽉 차있었다.. 거기서 더 긴장돼서 미치는줄 알았다...
12시 5분전에 시험장에 도착한 후 본인 확인을 하고 시험장에 들어섰다. 엄청난 긴장감이 몰려왔고, 최종 코테에서 볼 문서들을 한 번 더 읽어보며 정리하고 있었다. 인터넷 연결을 하는 도중 무슨 문제가 발생했던 탓인지 우테코 측에서 오류가 발생해 모든 사람이 인터넷 연결이 안되는 상황이 발생했다. 그로 인해 시간이 지체되고 시험 시작 시간이 30분이 미뤄지는 소소한 이벤트가 발생했다.
GitHub - woowacourse-precourse/java-oncall-6
Contribute to woowacourse-precourse/java-oncall-6 development by creating an account on GitHub.
github.com
이번 6기 최종 코딩테스트 미션은 '개발자 비상근무'였다. 나는 침착하게 연습했던 대로 기능 요구사항을 읽어보며 기능 목록 작성을 하고 천천히 구현해나갔다. 이번 미션에서는 이전 미션들과는 다른 점이 있었다.
1. 입력을 받는 부분에서 중간에 입력 오류가 발생하면 처음부터 입력을 받도록 구현
기존 프리코스나 이전 미션들을 보면 입력 중 오류가 발생하면 그 부분부터 입력을 다시 받도록 구현하라고 요구 사항에 나와있었다. 하지만 이번 미션에서는 입력 중 오류가 발생하면 처음부터 입력을 받도록 구현하라는 요구 사항이 있었고, 조금 당황하여 시간이 지체됐지만 큰 어려움은 없었다.
2. 코딩테스트 + 프리코스
이건 시험이 다 끝나고 다른 분들의 구현 방식을 보고서 느낀 점이다. 기존의 미션들은 요구 사항에 적혀있는 대로 구현하면 복잡한 사고없이 해결해 나갈 수 있었다. 하지만 이번 미션은 데큐를 통해 구현한 분들이 많았다. 요구 사항에 근무자들의 순서를 바꾸는 부분을 데큐를 통해 해결한 것인데 이 부분이 이번 최종 코테에서 합/불합을 결정하는 큰 요소가 아니었나 싶었다. 나같은 경우는 근무자가 2일 연속 배정될 경우 Collection.swap()를 통해 근무자 순서를 일시적으로 바꾼 후 순서를 바꾼 두 근무자가 배정이 끝나면 다시 원래대로 되돌려 놓는 방식으로 구현했다. 하지만 이렇게 구현하다 보니 swap인덱스 활용을 했어야했는데 여기서 시간이 많이 걸렸다. 데큐를 사용했으면 큰 어려움 없이 빠르게 구현했겠다고 생각했다.
3. 미션 해결 전략 문항 작성하기
이번 미션에서 어떻게 전략을 세워서 해결했는지에 대해 작성하라는 요구 사항이 있었다. 나는 시간이 부족했던 탓에 정말 간단하게 작성하고 끝냈다.
모든 기능 구현을 완료하고 테스트를 돌려봤는데 성공!!!! 이 순간 정말 짜릿함을 느꼈다. 아마 테스트 종료 한시간을 남겨두고 테스트를 성공했던 걸로 기억한다. 중간에 미리 제출하고 싶어서 리팩토링을 미루고 제출 먼저 해놔야겠다고 생각했다.
문제는 여기서 발생했다. 이번 최종 코딩테스트는 비공개 저장소로 진행되어 4주차 미션처럼 따로 브랜치를 생성하지 않고 main브랜치에 구현하면 됐다. 하지만 나는 너무 긴장했던 탓인지 분명 시작 전 그 문구를 봤음에도 불구하고 아무생각 없이 클론하자마자 브랜치를 따로 만들어서 진행하고 있었던 것이다. 여기서 머리가 새하얘졌다. 빠르게 main브랜치로 복사하는 방법을 찾아보다가 방법을 찾지 못해 그냥 복사/붙이기를 하자고 생각 했는데 어떤 이유 때문인지 붙이기가 안됐고, 심지어 메인 패키지를 삭제를 해버려 따로 생성한 브랜치에서도 오류가 발생했다.
정말 절망적이었다. 이대로 내 노력들이 끝나나 싶었고, 울고싶었다. 이대로 포기할 수는 없겠다 싶어서 레포지토리를 삭제하고 다시 생성해서 클래스 하나하나 복사/붙이기를 하는 방법을 선택했다. 이전에 코치분이 아직 콜라보레이터에 초대를 안했으면 6시에 일괄 수락해주겠다는 안내가 있었어서 이 방법을 선택했다. 하지만 문제는 이것만이 아니었다. 커밋을 다시 처음부터 했어야했고, 돌아가는 쓰레기만이라도 제출하자는 마음에 기능 별 클래스만 묶어서 대충 커밋한 후 푸시했다.
다행히 새로 만든 레포지토리에서 테스트까지 성공적으로 돌아갔고, 테스트 종료까지 20분정도 남은 시점이었다. 리팩토링은 정말 간단한 것만 진행했다. 혹시라도 리팩토링하다가 테스트가 안돌아가면 어쩌나 하는 걱정에 그랬던 것 같다.
최종 발표 불합격
최종 발표는 약 10일 뒤에 예정돼있었다. 시험을 보고 난 후 후회없이 봤다고 생각했고, 최선을 다했다고 생각해서 떨어져도 괜찮다는 생각을 했다. 최종 발표를 기다리면서 내가 구현했던 코드를 리팩토링 하려고 다시 봤는데 몇몇 요구사항을 빼먹고 구현을 한 부분이 보였다. 이게 무서워서 리팩토링을 피하려고 했던 것도 있었다.
먼저 평일이고 휴일인 경우에만 뒤에 '(휴일)'을 출력했어야 했는데 그냥 휴일이면 출력하도록 구현했다. swap인덱스를 저장하는 과정에서 한 번 사용됐던 인덱스는 해당 인덱스랑 일치하는 근무자를 배정할 때 제외되고 배정하는 것이었다. 하지만 이를 수정했더라도 아마 이 방법은 연속 근무자가 4일 이상 있는 경우에는 오류가 발생했을 것이다.
드디어 대망의 최종 발표날!!! 이 날 알바가 끝나고 여자친구와 같이 보고싶어서 5시쯤 발표 확인을 했다.
예상했던 결과였다. 기능 요구사항을 최우선으로 신경써야 했는데 다 충족하지 못했다. 예상했던 결과였지만 너무 아쉬움이 컸다. 2600명의 지원자 중에 200명도 안되는 1차 합격자 명단에 들어서 너무나도 기뻤고, 자소서 또한 스스로도 너무 잘썼다고 생각했기에 어느정도 합격이라는 기대를 했다. 하지만 그 벽은 너무나도 높았다. 몇 번이고 다시 봤다. 잘못 온건 아닐까, 추가 합격이 있진 않을까.. 하지만 받아들이기로 했다. 발표가 난 후 다른 사람들의 최종 합격 후기글을 보면서 다른 분들의 코드를 보았다. 이 정도는 해야 붙는구나 하고 생각했다. 내 코드와는 비교가 안될 정도로 너무나 깔끔하고 정교한 코드였다. 내 코드는 진짜 쓰레기같이 느껴졌다. 이 때 나는 내 부족함을 인정하고, 실력 향상을 위해 더 노력해야 겠다는 생각을 했다.
싸피를 준비하던 도중 우연히 우테코 관련 글을 보고 지원하게 돼서 최종 코딩테스트까지 2개월간의 여정이 막을 내렸다. 정말 열심히 했다. 최선을 다했다. 아쉬웠다. 하지만 이게 현재 내 지표라고 생각한다. 아직 나는 개발자로써 역량이 부족하다. 계획적으로 공부를 해야겠다고 다짐했고, 기회가 된다면 내년에 다시 한 번 우테코에 도전해보고싶다.