개발/우아한테크코스 6기

[우아한테크코스 6기] 최종 코딩 테스트 회고

hanuuny 2024. 8. 25. 22:36
해당 글은 우아한테크코스 레벨1 과정을 진행하던 3월 중에 적어 두었기 때문에, 현재와 시간선이 맞지 않는 표현이 다소 있음을 미리 알려드립니다.

 

뒷북도 이만한 뒷북이 없는 최종 코딩 테스트 회고 💧

 

이제는 시간이 많이 흘러서 당시의 기억이 선명하지 않지만, 하루라도 빨리 남겨 두는 게 맞겠다 싶어서 지금에라도 회고를 작성한다.


🗓️ 최종 코딩 테스트 일정

1️⃣ 1차 합격자 발표 - 2023년 12월 11일(월) 오후 3시, 개별 E-mail 통보
2️⃣ 최종 코딩 테스트 - 2023년 12월 16일(토)
3️⃣ 최종 합격자 발표 - 2023년 12월 27일(수) 오후 3시, 개별 E-mail 통보

 

1차 합격자 발표, 12월 11일. 그리고 최종 코딩 테스트, 12월 16일. 1차 합격자 발표 이후 최종 코딩 테스트까지 단 5일의 시간이 주어졌다.

 

이전 회고에서도 잠시 언급했지만 솔직하게 최종 코딩 테스트 준비는 얼마 하지 못했다. 정확하게는 '하지 않았다'는 말이 더 맞을지도 모르겠다. 나의 큰 단점 중 하나는 모든 상황을 쉽게 합리화한다는 것인데, 최종 코딩 테스트를 준비하면서도 나의 꾸준한 합리화가 발목을 잡았다.

여기서 더 공부해봤자 얼마나 더 바뀌겠어? 지금 당장 급한 프로젝트에 집중하자.

 

최종 코딩 테스트에 대한 정보를 얻기 위해 이 글을 읽고 있다면 어처구니가 없을지도 모르겠다. (이런 사람이 우아한테크코스에 합격했다고?) 그렇지만 당시 나의 진실된 모습은 그랬다. 졸업 프로젝트의 공모전이 코앞이었고, 내주에는 5개의 기말고사 시험이 잡혀 있었다. 결국 상당히 준비가 부족한 상태로 시험장에 들어가게 되었다.

 

그렇다고 아예 안 했다는 얘기는 아니고…….

 

🐣 최종 코딩 테스트 준비

1. 프리코스 과정을 최대한 활용한다.

 

최종 코딩 테스트에서는 5시간 동안 하나의 미션을 구현하게 된다. 여기서 미션은 프리코스 미션과 유사한 형태로 제공된다. 미션의 난이도 또한 크게 다르지 않다. 5시간이라는 시간이 어떻게 보면 길다고 생각될 수도 있지만, 프리코스 미션도 1주일 내내 머리를 부여잡고 해결한 나에게 굉장히 짧은 시간일 거란 생각이 들었다. 그래서 프리코스 때 자주 사용했던 함수나, 미션 해결 패턴을 미리 파일로 정리해서 시간을 단축할 수 있도록 했다.

 

 

특히 리드미 문서의 경우 양식화하는 걸 추천한다. 생각보다 기능 명세를 설계하는 과정에서 시간이 꽤 소요되기 때문에, 시간을 허비하지 않고 미션 자체에만 집중할 수 있는 환경을 조성하는 게 좋다. 비슷한 맥락에서 그동안 프리코스 미션을 수행하면서 적은 회고의 핵심 키워드를 추출하고 관련된 레퍼런스 자료들을 모아 두었다.

 

2. 한 문제라도 다시 풀어 본다. (되도록 프리코스 4주차 미션으로)

 

사실 프리코스 미션은 차치하고 이전 기출문제까지 모두 찾아서 풀어 본 사람도 많았던 것 같지만, 나에게는 그만큼의 여유가 없었다. 여러 미션을 가볍게 훑기보단 하나의 문제를 실전처럼 풀어 보는 게 최선이라고 생각했다. 그리고 대체로 프리코스 4주차 미션과 비슷하게 출제된다는 후기가 많아서, 코딩 테스트 전날 시끄러운 카페에 앉아 5시간 타이머를 맞춰 두고 다시 풀어 보았다.

 

실제로도 최종 코딩 테스트 미션이 프리코스 4주차 미션과 유사하다는 느낌을 받았고, 시험장이라는 공간 자체가 생각보다 더 어색했기 때문에 결론적으로 나쁘지 않은 선택이었다.

 

🐥 최종 코딩 테스트 당일

프론트엔드는 잠실역 근처 루터회관 14층에서 코딩 테스트를 치르게 되었다.

 

 

나는 테스트 시작 20분 전에 도착했는데, 나름 일찍 갔다고 생각했지만 빈 자리가 얼마 없었다. 역시 빨리 빨리의 민족인가? (배달의 민족)

 

애시당초 인원에 비해 배치된 자리가 넉넉하지 않아서 좋은 자리를 선점하고 싶다면 1시간은 일찍 와야할 것 같다. 나는 어쩔 수 없이 가운데 자리에 앉게 되었다.

 

 

당 보충을 위한 간단한 간식이 준비되어 있다.

 

 

시험 시작 전, 포비가 인생에서 마지막 루터회관이 될 수도 있지 않느냐며 사진이라도 좀 찍어 두라고 하셨는데 이런 사진들 뿐 😅

 

생각보다 많이 긴장되지는 않았다. 영 젬병인 알고리즘 테스트가 아니여서 그랬을까? 당시 네트워크 문제로 시험이 약 30분 정도 지연되었는데, 그동안의 프리코스 미션 코드를 다시 보며 무슨 일이 있어도 돌아가는 쓰레기는 만들고 가겠다고 다짐했다!

 

 

최종 코딩 테스트 미션은 비상 근무 표 생성 프로그램을 구현하는 것이었다. 편의상 온콜이라고 부르겠다.

 

예상대로 프리코스 4주차 미션과 서술 방식이 매우 유사했다. 프리코스 4주차 때는 이메일 형식으로 기능 요구 사항이 주어졌다면, 온콜은 이미지와 줄글로부터 필요한 기능 요구 사항을 뽑아야 하는 방식이었다.

 

 

다만 변수가 있었다면 이번 기수에서 새로 생겼다는 how-to-solved.md 였다.

1. 본인이 이해하고 구현한 내용에 기반해 '다른 근무자와 순서를 바꿔야 하는 경우'를 자신만의 예시를 들어 설명하세요. (필수)

2. 요구사항에서 제시한 앞의 날짜부터 순서를 변경하는 방법 외에 다른 방법이 있다면 어떤 방식이 있는지, 이 방법은 기존에 제시된 방식과 비교해 어떤 차이가 있는지 설명하세요. (선택)

 

구현한 과정을 완벽하게 이해하는 걸 넘어 남에게 설명할 수 있을 정도가 되어야만 작성할 수 있는 질문이기 때문에 많은 시간을 할애하게 되겠구나 예감했다. 더군다나 답변을 위해서는 무작정 코드부터 작성하기 전에 어떻게 기능을 구현할지 충분히 고민하고 시작해야 했다.

 

원래 나의 목표는 30분 동안 기능 목록을 정리하고, 1시간 전까지 기능 구현을 마친 후, 시간이 될 때까지 테스트 코드를 작성하고 제출하는 것이었는데 황급히 테스트 코드를 작성할 생각을 날려 버렸다.

 

 

사용자 입력과 관련된 기능부터 빠르게 구현을 시작했다. 이 부분은 기존에 여러 번 구현하기도 했고, 이미 패턴을 파일로 정리해 두었기 때문에 큰 문제 없이 구현이 가능했다.

 

 

그리고 대망의 근무표 순서 변경 기능을 구현하게 되는데…….

 

처음에는 중복을 고려하지 않고 입력된 달의 비상 근무표를 생성한 다음, 이를 순회하며 한꺼번에 순서를 변경하는 편이 간단하지 않을까 생각했다. 물론 효율은 가져다 버린 방법이지만 다른 대책이 떠오르지 않았다.

 

문제는 이것이 딱히 간단하지 않았다는 것이다.

 

 

처음에는 1번의 경우만 생각했다. 

 

대다수가 평일 - 주말 - 주말 또는 주말 - 평일 - 평일이므로, 특정 근무자가 연속으로 근무하게 되는 경우가 생기면, 단순히 다음 근무자와 교환시키면 되겠다고 생각했다.

 

그런데 이렇게 구현하고 나니 2번의 경우가 마저 떠올랐다. 평일 - 법정공휴일 - 평일 또는 주말 - 평일 - 법정공휴일 등의 경우에는 1번과 같이 해결할 수 없다. 같은 특성인 다음 근무자를 찾아서 교환시켜야 한다.

 

여기서부터 멘붕이었다. 50분 가량을 남기고 겨우 기능 구현을 완료하니 20줄을 넘어가는 함수가 대부분이었다. 그 와중에 테스트 코드에서는 정상적으로 통과하는데, 실제로 돌려 보니 출력이 하나도 되지 않던 에러도 발생했다. 리팩토링은 고사하고 자꾸만 터지는 에러를 처리하기 급급했다. 마감 10분 전까지 코드를 붙잡고 있다가 제출 사이트에서 성공이 뜨는 걸 확인하고 바로 제출해 버렸다. 

 

이렇게 글로 작성하니 당시의 상황을 잘 전달하기 힘든 거 같다. 사실 지금 생각했을 때 테스트 코드를 문제 없이 통과했던 걸 보면 그렇게 큰 에러는 없지 않았을까 싶다. 다만 본질적으로 준비가 덜 되어 있었기 때문에, 나의 코드를 믿지 못하고 반드시 휴먼 에러가 있을 거라는 강박에 빠져 시간을 많이 잡아 먹었다.


🍗 최종 합격, 그리고

제, 제가 최종 합격이라고요?

 

과정부터 당일까지 굉장히 아쉬움이 컸던 최종 코딩 테스트다.

 

그렇지만 나름대로 하나의 성과를 올렸다고 한다면, 어떻게 해서든 돌아가는 쓰레기를 만들고자 했고 실제로 돌아가는 쓰레기라도 만들어서 제출했다는 점이다.

결국 우리가 프리코스에서 배운 것들은 소프트웨어가 제대로 작동할 때 의미가 있지 않을까요? (……) 안 돌아가는 프로그램보다 돌아가는 쓰레기를 만들어도 괜찮아요.

 

합격장을 받고 우아한테크코스를 진행하고 있는 지금, 더욱 뼈저리게 위의 말에 공감한다. 

 

아직도 미션은 어렵기만 하고, 주어진 시간은 짧고, 새로 공부해야 할 개념들이 넘치지만, 우선 돌아가는 코드를 만들자. 그 과정에서 실수나 시행착오가 있더라도 결국 문제를 해결하고 앞으로 나아가는 것이 중요하니까. 그렇게 단순하게 생각하면 마음도 한결 가벼워지고, 더 많은 것을 배워 갈 수 있는 것 같다고 느낀다.

 

아직도 내가 왜 합격했는지 모르겠는, 최종 코딩 테스트 회고 끝!