최종합격을 하고 적는 '1차 합격 & 최종 코테 후기' 이지만 다음 기수인 8기를 지원하시는 분들께 도움이 되고자 회고를 적습니다!
4주간의 프리코스가 끝나고 조금 타이트했던 일정을 느슨하게 풀고 쉬엄쉬엄 하루를 보냈습니다. 프리코스가 종료되고 1차 합격자 발표까지 4주 정도의 기간이 있는데, 저는 이 기간동안 다행이도 특별하게 할 일이 없어 혹시나 모를 최종 코딩테스트를 준비 했습니다.
최종 코딩 테스트 준비
프리코스가 끝나고 디스코드에 최종 코딩테스트를 준비하는 스터디가 여럿 올라왔습니다. 참여하고 싶은 마음도 있었지만 거의 모든 스터디가 서울에서 열렸기 때문에 부산에 거주하던 저는 스터디에 참여할 수 없었습니다. 그리고 대부분의 스터디가 몇날 며칠 장소를 대여해 시간을 정해놓고 스터디를 하였는데 저는 이러한 방식이 개인적으로 맞지 않아서 혼자 준비 했습니다.
최종 코딩 테스트 준비는 기출문제 풀듯이 이전 기수들의 최종 코딩테스트 문제 & 4주차 프리코스 와 7기 4주차 프리코스 문제를 푸는 것으로 하였습니다.
구분 | 문제 | 테케 통과 시간 | 시간 내 구현 | 후기 |
6기 4주 | 크리스마스 프로모션 | 5 ~ 6시간 | X | 요구사항이 많았음 |
6기 최종 | 온콜 | 5시간 30분 | X | 근무자 배치 로직에서 꼬임 |
5기 4주 | 다리 건너기 | 3시간 30분 | O | '점심 메뉴 추천'보다 할만하다고 느꼈음 |
5기 최종 | 점심 메뉴 추천 | 6시간 | X | 요구사항을 잘못 이해해서 꼬여버림 |
네.. 결과를 보시면 처참합니다..
특히 쉽다고 평가받았던 '점심 메뉴 추천'에서 6시간 이상이 소요되서 자존감은 바닥을 쳤습니다..
그렇게 지내다보니 어느덧 1차 합격자 발표일이 되었습니다. 떨리지 않을 줄 알았는데 10분정도 남았을때 부터 엄청 떨렸습니다..
자소서에 엄청난 노력을 쏟았기에 자소서는 자신이 어느정도 있었습니다. 하지만 4주차 프리코스를 워낙에 못했기 때문에 어느정도 기대를 접고 있었는데 다행이도 1차 합격 메일을 받을 수 있었습니다.
이번 우테코 7기는 저번 기수인 6기보다 지원자가 적다는 느낌을 받았습니다. 실제로 미션을 제출한 pr수도 지난 기수에 비해서 줄어든 것을 확인할 수 있었습니다. 경쟁률이 줄어들었지만 10 : 1을 웃도는 경쟁을 뚫고 1차 합격한 것이 자랑스러웠습니다. 실제로 1차합격 기쁨에 취해 당일은 공부를 하지 못했습니다..
현실 직면
1차 합격의 기쁨도 잠시 최종 코딩테스트라는 현실을 직면하게 되었습니다.
프리코스가 끝나고 혹시나 모를 마음에 최종 코딩테스트를 준비했지만 5시간 안에 구현하는 것은 고사하고, 기본적인 테케 통과도 못했기에 걱정이 이만저만이 아니었습니다. 최종 코딩테스트는 12월 14일로 1차 합격 발표 당일과 시험 당일을 제외하면 4일의 시간이 주어졌습니다.
많지 않은 시간이었기에 하루에 2문제씩 시간을 재고 풀어보기로 했습니다.
'크리스마스 프로모션'과 '온콜'은 이전에 한번씩 풀어본 경험이 있었기에 두 문제 모두 5시간 안에 구현 할 수 있었습니다.
'다리 건너기' 와 '점심 메뉴 추천'도 이전에 풀어본 경험이 있어서 5시간안에 구현하였습니다.
남은 기간동안 한번도 풀어보지 못했던 '페어매칭'과 '자판기'를 풀었습니다.
4기 최종 문제인 '페어매칭'은 다들 어렵다고 난리였던 만큼 정말 어려웠습니다. 결국 풀다가 중간에 포기 했습니다.
4기 3주차 문제인 '자판기'는 초반에 고민을 조금 했지만 요구사항이 페어매칭보다 단순해 시간안에 구현할 수 있었습니다.
마지막으로 7기 4주차 '편의점'을 다시 풀어보려고 했는데 일정상 시간이 없어 조금 풀다가 포기하고 시험장에서 시간을 아끼기 위해서 자주 사용하는 코드 템플릿을 만들고, 소감문도 미리 조금 작성했습니다.
시험 전 날인 13일 여자친구와 밥을 먹으면서도 계속 불안했던것 같아요
시험 당일날 부산에서 서울까지 가야했기에 전날엔 일찍 11시쯤 잠에 청했습니다. 사실 잠이 안왔지만 최대한 자려고 눈을 감고 있었습니다.
시험 당일
기차 파업 이슈로 기차로 가는것을 포기하고 김해공항에서 아침 비행기를 타고 서울에 가는 것을 택했습니다. 오랜만에 비행기를 타니까 놀러가는 것 같고 설렜던것 같아요.
서울에 도착하여 시험장인 잠실에 도착하니 2시간 30분정도 여유가 있었습니다. 밥을 먹을까 했지만 시험중 배가 아플까봐 시험장 옆에있는 스타벅스에서 샌드위치와 커피를 마시며 같이 시험을 치르는 친구를 기다렸습니다.
스타벅스엔 최종 코테를 치러온 사람들이 많아 보였습니다. 다들 코테 준비를 하고 있어서 저도 시험 준비를 해야 하나 싶었는데 그냥 샌드위치 먹으면서 마인드 셋을 했습니다. 문제를 더 푼다고해서 같은 문제가 나오는 것도 아니고 긴장하지 않는게 더 우선이라고 생각했어요.
시험장 입장
1시간 정도 남았을 때 시험장에 입장했습니다. 일찍 간 이유는 시험장에 도착한 순서대로 자리에 앉는다고 해서 맨 뒷 자리에 앉을 생각으로 갔습니다.
루터회관 7층에 도착하니 배민 감성 글귀가 적힌 벽과 우테코 포스터가 반겨주고 있었습니다. 신분증 검사를 하러 가는데 포비와 왼손 코치님이 앞에 계셔서 신기했습니다ㅋㅋㅋ 신분증 검사를 마치고 자리를 정하러 갔는데 이번엔 이전 기수와는 다르게 지정석이었습니다. 이전 기수 후기를 봤을때 자리가 좁다고해서 걱정이었는데 한 책상당 두명이 앉을 수 있게 자리를 지정해주셔서 편하게 시험을 치를 수 있었습니다.
시험장에 도착하고 노트북 세팅을 하고 대기하는데 생각보다 심하게 긴장이 되지는 않았습니다. 코치님께서 간식도 가져다가 먹으면서 하라고 하셔서 당이 안떨어지게끔 간식 몇개를 들고왔습니다. (결국 시험중에 하나도 못 먹었습니다..ㅋㅋㅋ)
네트워크 연결을 하고
우테코에서 제공하는 와이파이에 연결해야지만 시험을 치를 수 있다고 합니다. 다른 와이파이를 사용하면 부정행위로 간주 될 수 있다고 하니 주의하세요!
생성형 AI 사용불가에 대한 설명을 들었습니다. 이번 기수는 저번 기수와는 다르게 최종 코테에서 GPT, 코파일럿 등 생성형 AI 사용이 불가능했습니다. 아무래도 생성형 AI의 성능이 작년에 비해서 월등하게 뛰어나서 그런것 같습니다.
나중에 시험을 다 치르고 알게 되었지만 어떤 한 설정을 끄지 않았는데 다른 분들은 껏다고 해서 합격에 지장이 있지는 않을까 걱정했습니다. 생성형 AI는 아니어서 괜찮았던것 같아요
시험 시작까지 10분 정도가 남았는데 포비가 마이크를 쥐고 시험 전 간단한 이야기를 해주었습니다. 잘 기억은 안나지만 대충 '돌아가는 쓰레기'라도 만들어라고 했던 것 같아요. 이 부분은 매년 똑같이 말씀하시는 것 같네요!
마지막으로 최종 문제는 13시가 되면 '지원하기 페이지'에서 열릴 것 이라고 하고 마무리 했습니다. 시험 시작 3분 정도 남았을 때는 마음속으로 되뇌었습니다. '최종 코테 준비를 잘 못했지만 이번 최종 코테에서 예제 테스트만 통과하자' 라고 생각하면서 심호흡을 했습니다.
시험 시작
13시가 되고 지원하기 페이지를 새로고침 했는데 문제가 열리지 않아서 당황했습니다.. 주변을 보니 다른 분들도 다 열심히 새로고침을 하고 계셔서 저만 그런게 아니구나 싶었습니다. 계속 새로고침을 하고 1분정도가 지나니 문제가 공개되었습니다.
출석부
이번 최종 코딩 테스트 문제는 '출석부' 였습니다.
문제 레포와 제출한 코드는 아래와 같습니다.
GitHub - woowacourse-precourse/java-attendance-7
Contribute to woowacourse-precourse/java-attendance-7 development by creating an account on GitHub.
github.com
GitHub - dye0p/java-attendance-7-dye0p
Contribute to dye0p/java-attendance-7-dye0p development by creating an account on GitHub.
github.com
문제 정보는 이전 기수와는 다르게 레포지토리에서 볼 수 없고, 지원하기 페이지에만 볼 수 있도록 되어 있었습니다. 문제 정보는 구글링을 하면 쉽게 찾으실 수 있을 것 같아요!
최종 코테는 비공개 저장소를 만들고 우테코를 협력자로 초대하는 4주차와 동일한 방식으로 진행되었습니다.
첫번째 난관
문제를 읽기도 전에 첫번째 난관에 봉착했습니다. 레포지토리를 로컬로 가져와야 하는데 터미널에서 진행되지 않고 깃허브 아이디와 비밀번호를 입력하라는 메세지가 나왔습니다. 순간 당황했지만 평소 메모장에 아이디와 비밀번호를 기록해둔 덕에 난관을 잘 넘길 수 있었습니다.
그렇게 레포를 로컬로 옮기고 연습한대로 코드 포매팅과 자바 버전, 빌드 테스트가 정상 작동 되는것을 확인하고 문제를 읽기 시작했습니다. 이 과정까지 3분정도 걸린 것 같아요.
두번째 난관
문제를 천천히 읽는데 일단 내용이 상당히 길었습니다. 긴장해서 그런건지는 몰라도 체감상 4주차 '편의점' 미션과 비슷한 양 이었던것 같아요. 원래 1시간 동안 구현 목록 사항을 정리하고 구현에 들어가려고 했지만 구현해야할 양이 상당했기에 시간안에 풀 수 없을 것 같다고 생각이 들었습니다. 그래서 우선 핵심 기능만 정리하고, 빠르게 구현에 들어가고자 했습니다. 30분 정도 문제를 읽고, Application Test를 확인했습니다. 테스트 코드 개수도 이전 기수들은 1개, 2개 였던 반면 이번 문제는 5개나 되었습니다. 테스트 코드 통과가 1차적인 목표이기 때문에 테스트 코드를 보면서 기능을 구현하기로 했습니다.
구현해야할 기능은 크게 4가지 였습니다.
- 1. 출석 확인
- 2. 출석 수정
- 3. 크루별 출석 확인
- 4. 제적 위험자 확인
그리고 이번 문제에서 사람들이 가장 많이 낚였던 부분이 있었습니다.
이전 4주차 미션까지 사용자가 잘못된 입력을 할 경우 예외를 발생하고 그 부분부터 다시 입력을 받도록 하였지만 최종 문제에서는 예외를 발생시키고 프로그램을 종료하는 조건으로 변경되었습니다. 후기를 보면 많은 사람들이 이 부분에서 애를 먹은 것 같습니다.
저는 다행이도 처음부터 이 부분을 인지해서 애를 먹지는 않았지만 혹시라도 프리코스나 최종 코테를 치른다면 요구사항을 꼼꼼히 보시길 바랍니다!
그리고 최종 미션은 프리코스 4주차 미션과 동일하게 파일을 읽어오는 방식의 요구사항이 있었습니다. (md 파일에서 csv파일로 변경 되었지만 과정은 동일했습니다)
다행이도 전날 파일을 읽어오는 코드 템플릿을 만들어 놓은 덕에 빠르게 파일을 불러 올 수 있었습니다.
정신없이 구현
그리고는 정신없이 구현한 것 같습니다. 솔직히 어떻게 했는지 기억이 잘 나지 않습니다.. 그냥 테스트만 통과하자는 생각으로 돌아가는 쓰레기 만들기에 열중했습니다. 5개중 4개의 테스트가 통과하는데에는 3시간 조금 넘게 걸린것 같습니다. 3개는 예외처리에 관한 부분이었고, 1개는 1번 기능에 대한 부분이었습니다.
마지막 1개는 2,3 번 기능이 모두 구현되어야 통과되도록 테스트가 제공되어서 남은 시간을 다 쏟아 부었습니다.
세번째 난관
3번 기능은 크루별 출석 확인 기능 이었습니다. 생각보다 간단해 보여서 빠르게 구현을 했는데 테스트 통과가 되지 않아서 당황했습니다.
그리고 출력 형식을 자세히 보니 출석하지 않은 날 까지 모두 출력하도록 되어 있었습니다. 해당 부분을 보고 지난 4주차 미션에서 프로모션에 해당하지 않는 상품의 재고를 출력하는 부분과 비슷하다는 생각이 들었습니다. 시간적 여유가 있었다면 여유롭게 구현했겠지만 시간적 여유가 없다는 압박감에 어떻게 할지 잘 떠오르지 않았습니다. 계속해서 구현해도 원하는 대로 출력이 되지 않아 그냥 다른 기능을 구현하고, 소감문을 쓸까 했지만 한번 뿐인 기회에서 빨리 포기하고 싶지 않았습니다. 포기하지 않고 닥치는대로 하드코딩 하니 1시간 정도 걸려서 기능을 구현하고 테스트 코드를 통과할 수 있었습니다.
이때 시간이 4시간 30분 정도가 되던 시점이어서 4번 기능을 구현할지 리팩토링을 하고 소감문을 작성할지 고민했습니다. 결국 30분안에 4번 기능 구현과 리팩토링을 불가능하다고 판단하고, 우선 제출 페이지에서 테스트가 통과되는지 확인하고자 해서 제출을 먼저 했습니다. 다행이도 모든 테스트가 통과되어서 초록글자를 볼 수 있었습니다. (이때 심적으로 안정이 많이 되었습니다.) 그리고 4번 기능 구현을 포기하고 메서드 분리와 하드코딩 상수화 등을 하며 리팩토링을 했습니다. 정말 시간이 없어서 테스트 코드는 하나도 작성하지 못하고, 리팩토링도 하나마나한 수준이었습니다. 리팩토링을 어느정도 진행하다보니 5분이 남았고, 미리 작성한 소감문에 조금 덧붙혀서 제출을 완료했습니다.
시험 종료
6시가 되어 시험이 종료되니 힘이 다 빠졌습니다. 5시간 동안 말을 하지 않아서 목은 잠겨있고, 풀 집중을 하니 당은 떨어져서 그냥 온 몸에 힘이 없었습니다. 그리고 나오면서 코치님들께 수고하셨다는 인사를 남기고 퇴실 했습니다.
그래도 시험장을 나갈땐 기분이 좋았습니다. 완벽하게 기능 구현은 못 했지만 가장 목표로 하던 예제 테스트를 모두 통과했기 때문입니다. 그리고 사람들의 반응을 봤을 때 이번 문제가 어려웠다는 반응들이 많아서 내심 합격에 대한 기대도 하였습니다. 그리고 시험장을 나오니 저녁이 되어 있었고 따뜻한 부산에만 있다가 추운 서울로 오니 엄청 추웠습니다.
저녁에 서울에서 지내고 있는 대학교 동기를 오랜만에 만나서 술 한잔을 하며 저녁을 먹었습니다. 이런저런 얘기를 많이 한 것 같아요.
친구와 저녁을 먹고 부산으로 가는 새벽 버스를 타면서 시험에 대한 생각을 곱씹어 봤습니다. 아쉬운 부분도 존재했고, 분명 실수한 부분도 존재했을 거라고 생각했습니다.
다시 곱씹어 보다
시험을 치르고 다음주가 되어서야 제출했던 코드를 다시 봤습니다.
시험을 치를때 정신은 없었지만 어떤 부분을 못했는지 알고 있다고 생각했습니다. 하지만 다시 코드를 보고 큰 착각을 했다는 것을 알게 되었습니다.
실수를 해서 엉터리로 구현한 것 입니다..
이런 실수를 했는데 테스트 코드는 왜 통과가 되었을까요?.. 아직도 의문 입니다.. 원래 넣어야 하는 값인 updateHour를 넣으면 어떻게 될까요
원래 구현하려던 값을 넣으면 테스트가 통과되지 않습니다..ㅋㅋㅋㅋㅋ 그리고 당연히 테스트 코드를 제외하고 제시된 출력 예시대로 나오지 않고 엉터리 값이 나왔습니다. 아마도 시간 관련해서 로직을 엉터리로 구현한 것 같았습니다. 후에 다른 사람들의 후기를 보니 시간을 다룰때 LocalDateTime을 사용했더라구요 저는 그냥 시, 분을 하나의 int 형으로 구현했습니다..
그리고 문제에서는
이러한 요구사항이 있었는데 저는 1분만 지나도 지각으로 간주되도록 구현했습니다. 근데 이 마저도 엉터리로 한 것 같네요..ㅋㅋㅋ
이 외에도 생각하지 못한 요구사항들이 많았습니다. 이러한 실수를 보니 합격에 대한 기대를 거의 접은 것 같습니다.
많은 분들께서 최종 코딩테스트를 치르고 합격의 기대를 접는 이유가 이런것임을 알게 되었습니다.
돌아보며
최종 코딩테스트 까지 치르고 나니 이제 최종 발표만 남은 상태입니다. 지원서 작성부터 시작해서 프리코스를 마치고, 최종 코딩테스트 까지 치뤘는데 기분이 오묘하네요 제 역량에 여기까지 온 것 만으로도 감사한 일이라고 생각되지만, 마지막까지 도전하니 욕심이 생기는건 어쩔 수 없는 것 같습니다. 사람 마음이 정말 간사한것 같아요.
어쨋건 최종 코딩테스트까지 치룬 제 자신에게 수고했다고 말 하고 싶습니다. 최종 발표 회고에서 다시 돌아오겠습니다! 그 동안 수고 많으셨습니다!
'우아한 테크코스 > 프리코스' 카테고리의 다른 글
[우아한 테크코스 7기 백엔드] 프리코스 3주차 회고 - 로또 - (2) | 2024.11.23 |
---|---|
[우아한 테크코스 7기 백엔드] 프리코스 4주차 회고 - 편의점 - (1) | 2024.11.23 |
[우아한 테크코스 7기 백엔드] 프리코스 2주차 회고 - 자동차 경주- (0) | 2024.11.13 |
[우아한 테크코스 7기 백엔드] 프리코스 1주차 회고 -문자열 덧셈 계산기- (0) | 2024.10.29 |