✍🏻 회고/🍀 우테코

[우테코] 31편 : 최종 코딩테스트 후기

pangil_kim 2026. 1. 11. 18:18
728x90
반응형

| 서론

안녕하세요, 팡일입니다!

 

드디어 오늘은 우아한 테크코스 8기 최종 테스트가 있는 날이었는데요? 이번 포스팅에서는 최종 테스트를 준비하는 과정과 실제 시험장에 다녀온 후기를 공유해보려고 합니다. 오늘의 포스팅이 훗날 우아한 테크코스 9기를 준비하시는 분들께 도움이 되기를 바라며, 시작해 보겠습니다.

 

 

 

| 준비 과정

1) 계획 세우기

12월 29일에 1차 합격 발표자가 나온 뒤에, 가장 먼저 진행한 일은 1월 10일까지 남은 기간에 대한 계획을 세우는 것이었습니다. 7기의 경우에는 1차 합격으로부터 약 6일 뒤에 바로 최종 테스트가 진행된 반면, 이번 8기의 경우에는 약 2주라는 시간이 주어졌기에, 더욱 체계적으로 계획을 세워야 한다는 느낌이 확 들었습니다.

 

감사하게도, 함께 프리코스를 참여하면서 스터디를 함께 했던 분들 중에서 스터디를 같이 진행하면 좋겠다는 얘기가 나와서 같이 계획을 세우고 공유할 수 있었습니다. 2주 동안의 큰 목표는 바로 5, 6, 7기의 최종 테스트 문제들을 풀어보는 것이었습니다.

 

12월 29일에 온보딩을 진행하고, 30일에는 오랜만에 JavaScript를 사용하는 만큼 감을 찾기로 했습니다. 그리고 12월 31일부터 2일(문제 풀기), 1일(코드 리뷰)을 진행하는 것으로 계획을 세웠습니다. 또한, 단순히 일정만 세운 것이 아니라, 미루지 않고 꾸준히 문제를 풀 수 있는 환경을 마련하기 위해서, 단톡방을 개설하여 리마인드도 진행했습니다. 

 

 

2) 문제 찾기

이제 마일스톤을 세운 만큼, 실제로 풀어야 할 문제를 찾아야 했습니다. 그래서 구글 검색에서 '우아한 테크코스 7기 최종 테스트 문제'와 같은 형식으로 검색하면서 수십 개의 후기들을 찾아본 결과, 감사하게도 문제 리스트를 뽑을 수 있었습니다. 

 

또한, 스터디 구성원 중 한 분께서 프리코스가 끝나고 1차 합격 전까지 남은 기간 동안 구글링하면서 정리한 이전 기수들의 프리코스 문제 리스트까지 공유해 주신 덕분에 더 도움이 됐습니다.

 

문제 리스트가 원하시는 분들은 비공개로 댓글 남겨주시면 확인하는 대로 공유드리겠습니다.

 

 

3) 문제 풀기

앞서 세운 계획에 맞춰서 최대한 미루지 않고 문제를 풀려고 했습니다. 하지만 몇 가지 우려 사항들도 존재했었는데요?

 

(1) 부족한 시간에 대한 어려움

먼저, 시간이 상당히 부족하다는 점이었습니다. 프리코스의 경우에는 일주일이라는 시간이 주어진 만큼, 문제 풀이에 투자할 수 있는 시간도 길었고, 클린 코드에 가깝게 구성하기 위해 SRP를 고려하거나, 재사용이 가능한 구조를 만들기 위해 신경 쓸 수 있었습니다. 하지만, 5시간이라는 시간 안에 문제 파악, 데이터 설계, 기능 명세서 작성, 실제 코드 작성, 테스트까지 고려하기에는 턱없이 부족했습니다. 그렇다 보니, 시간 관리와 리소스 분배에 있어서 계획을 세워야 했습니다.

 

(2) 테스트와 구현을 병행하는 것에 대한 어려움

또한, 테스트 코드와 구현 코드를 병행하기란 참으로 어려운 일이었습니다. TDD 방식에 맞춰서 실패할 코드를 짜고, 최소한의 기능을 만들고, 리팩터링 하는 식으로 진행을 해왔지만, 이 과정에서 소요되는 시간이 상당히 길었습니다. 그렇다 보니, 구현해야 할 기능에 비해서 흘러간 시간은 너무 빨랐고, 이로 인해 멘탈이 흔들리는 순간이 자주 찾아왔습니다. 모든 기능에 대한 테스트 코드를 작성하는 것이 아니라, 문제에서 요구하는 주요 핵심 기능에 대한 테스트 코드를 짜는 것을 목표로 세우게 되었고, 테스트 코드 작성에 대해 고민할 수 있었습니다.

 

(3) 디자인 패턴에 대한 미숙함

마지막으로는, 패턴 별 관심사 분리에 대해 더 공부해야 했습니다. MVC 패턴을 통해 흐름을 Controller에게, 입출력을 View에게 상태를 Model에게 주는 방식을 고려했으나, 프리코스 기간 동안 Service를 도입하여 View와 Model 사이를 연결하고, 이를 Controller에서 사용하는 방식을 택했습니다. 도메인 별로 Controller, Service를 만들어 사용해보기도 했고, Service를 없애고 MVC만 사용하려고 했지만, 결국에는 프리코스에서 사용한 방식을 선택하기로 했습니다. 

 

만약 이 과정을 거치지 않고, 더욱 애를 쓰면서 문제를 풀었을 것을 생각하면 정말 끔찍했습니다. 시간이 흐름에 따라 크게 늘지 않는 실력을 보면서 회의감도 들기도 했지만, 그래도 나만의 플로우를 찾고 방식을 준비할 수 있어서 한편으로는 위안이 되었습니다. 

 

 

4) 템플릿 준비

이전 기수의 최종 테스트 후기를 남긴 여러 블로그 포스팅들을 보면서 '템플릿 준비'에 대해서 접할 수 있었는데요? 대부분 주어진 시간이 기능 구현에 집중해야 하다 보니, 최대한 미리 준비해 갈 수 있는 것들을 마련해서 시간을 준비하는 것이 좋다는 이야기들이 많았습니다. 그래서 어떤 템플릿과 어떤 것들을 준비하면 좋을지에 대해서 찾아보고 고민한 결과 아래와 같은 것들을 준비하게 되었습니다.

 

(1) 코드 템플릿

기본적으로 기능 구현에 필요한 아키텍처 측면에서 여러 폴더와 기본 파일들을 생성하는 시간도 합쳐보면 적지 않았습니다. 제가 자주 사용하고 익숙했던 디자인 패턴에 맞춰서 코드 파일과 폴더를 미리 생성해놓고자 했습니다. 또한, 지원 사이트에서 제공해 주는 과제 설명을 보고, 해당 과제에서 요구되는 사항과 구현해야 할 기능들에 대해서 정리할 수 있도록 docs 폴더를 생성하여 md 파일로 구성했습니다. AI를 사용할 수 없다 보니, 저에게 가장 취약했던 부분 중 하나인 '테스트'와 '정규식' 이렇게 두 가지에 대한 기본적인 사용 방법이나 예시들을 정리해 두어서, test 폴더와 utils 폴더로 만들어 각 파일을 구성했습니다.

 

이는 감사하게도 실제 최종 테스트를 응시할 때, Fork 후 Clone 한 초기 프로젝트에 복사 붙여 넣기 하면서 초기 시간을 빠르게 생성할 수 있었습니다. 

 

(2) 소감문

기능 구현과 테스트 케이스 작성 및 점검 등 사실상 코드를 작성하는 시간에 더 집중하기 위해서 소감문을 따로 준비할 수 있었습니다. 많은 내용을 작성하기보다는 어떤 상황에서도 무리 없이 활용할 수 있는 범용적인 내용으로 소감문을 미리 준비해 두었습니다. 과제나 평가의 성격에 따라 세부적인 경험은 달라질 수 있다고 생각했기 때문에, 특정 구현이나 한 가지 상황에만 국한되지 않도록 전반적인 준비 과정과 느낀 점 위주로 정리했습니다. 그 덕분에 실제 상황에서는 핵심 흐름을 유지한 채, 요구되는 맥락에 맞게 조금씩 조정하여 활용할 수 있었고, 준비 과정에서도 부담을 줄일 수 있었습니다.

 

하지만, 이는 실제 최종 테스트를 응시할 때 사용하지 않았습니다. 그렇게 된 이유는 아래에서 더 구체적으로 설명드리겠습니다.

 

 

 

| 시험장 입장

여러 후기들 중에서 시험이 시작되기 전에 최소한 30분 먼저 입장하는 것을 추천하는 후기들이 많았습니다. 이번 기수의 경우에는 시험 시작 1시간 전인 12시부터 입장이 가능했습니다. 시험장에 도착하니 대략 11시 50분 정도였고, 시험장에 도착하니 약 열 명 정도 되는 지원자 분들께서 대기하고 계셨습니다. 12시부터 입장이 가능하다는 안내 문구를 확인한 뒤 약 10분 정도 대기한 뒤에 입장할 수 있었습니다. 입장 시에는 신분증을 입장을 체크하고 계신 코치 분께 보여드리고, 신분 확인을 거친 뒤에 시험장소로 들어갈 수 있었습니다.

 

시험장 내부는 기존 우아한 테크코스의 잠실캠퍼스였는데요? 내부 인테리어들을 보면서 "와 정말 너무 멋지다. 드라마에서만 보던 모습들이네"라는 생각이 들곤 했습니다. 여러 곳곳에서 우아한 형제들이 갖고 있는 문화들을 볼 수 있었고, 하나하나 구경하면서 들었던 긴장은 점점 풀리기 시작했습니다. 어쩌면 이전 기수 지원자 분들께서 미리 오는 것을 추천하셨던 이유도 이러한 긴장 풀기 위함이지 않을까 싶었습니다.

 

또한, 지원한 파트 별로 시험이 진행되는 건물 및 장소도 달랐습니다. 함께 1차 합격을 하고 시험을 보러 온 지인 중 한 명은 백엔드 파트를 지원했었는데, 웹 프론트엔드 파트의 시험이 진행되는 건물이 아닌, 옆 건물에서 진행된다는 점을 시험장에 도착하고서야 재확인할 수 있었습니다. 그래서 혹시라도, 최종 테스트를 응시하러 가시는 이후 기수 지원자 분들께서는 이 점을 필히 신경 쓰시면 더욱 좋을 것 같습니다. 제가 배정 받았던 건물 내에서는 웹 프론트엔드 파트와 백엔드 파트가 양갈래로 나뉘어서 위치하게 되었고, 웹 프론트엔드 파트의 경우에는 2개의 강의실로 나누어서 배정받았습니다. 자리의 경우에는 지정된 좌석이었고, 강의실을 나눈 기준이 무엇일지 살펴보니 이름 순으로 나눈 것 같았습니다.

 

배정된 강의실에 도착해 보니, 웰컴 기프트가 있었습니다. 우아한 형제들을 보면서 항상 든 생각은 "이런 조직문화가 참 좋다"라는 생각이었는데, 실제로 웰컴 기프트를 이렇게 받아보니 사용자 경험이 참 좋다고 느껴졌습니다. 어떤 선물일지 열어봤더니, 비누와 떼수건이 있었습니다. 사실 어떤 의미를 가졌을지에 대해서는 아직까지도 잘 이해가 되지 않지만,, 그래도 시험을 보러 온 응시자들을 위해 준비해 준 점이 참 고마웠습니다. 이외에도 물과 여러 간식들을 배치해 놓으면서, 시험을 응시하면서 당이 땡기거나 리프레쉬할 수 있도록 지원해 준 점이 인상 깊었습니다.

 

대략 12시 30분 정도 되었을 때부터는 한 가지 안내 사항을 들을 수 있었습니다. 바로 와이파이 연결이었습니다. 개인용 핫스팟은 사용이 불가했고, 사내에서 사용하고 있는 와이파이에 연결해야 했습니다. 지원했을 당시 사용된 이메일을 사용해서 username, password를 입력하여 와이파이를 연결했고, 남은 시간 동안에는 간단한 안내사항들을 들을 수 있었습니다. 특히나 이번 기수의 경우에도 AI를 사용하는 것이 불가능했기에,  AI 사용 관련해서도 강조해서 안내해 주셨습니다.

 

 

 

| 시험 후기

13시부터 시작된 시험은 이전 기수와 동일하게 18시가 되어서 종료되었습니다. 하지만, 이번 기수의 경우에는 이전 기수들과 달라진 점들이 몇 가지 있었는데요? 달라진 점으로 해서 사실상 이번 8기 최종 테스트를 응시하는 과정 속 전략이 많이 바뀌게 되었습니다. 

 

1) 시간 구성의 변경

 

이전까지는 시간 구성의 경우 코딩 테스트가 13:00~18:00 총 5시간이 주어졌지만, 이전과 다르게 이번 기수의 경우에는 17시까지로 총 4시간이 주어지게 되었습니다. 이 시간 이후에는 추가 푸시를 허용하지 않았습니다. 즉, 사실상 코딩 테스를 진행할 수 있는 시간이 1시간 줄어든 상황을 마주해야 했습니다. 이는 문제를 파악하기 전부터 많은 고민들을 가져다주었습니다. 이전 기수들의 최종 테스트 문제를 풀어보았을 때에는 주어진 5시간도 많이 부족했었기에, 1시간이 줄어든 점이 어떤 파장을 가져올지 염려되곤 했습니다.

 

또한, 회고 작성의 경우에도 1시간이라는 시간 동안 작성할 수 있도록 구성한 점도 새로웠습니다. 이전까지는 제출해야 하는 소감문에 대한 큰 안내 사항은 없었던 것으로 알고 있었지만, 이번 기수의 경우에는 무려 1시간이라는 시간 동안 회고를 작성해야 했습니다. 이 변화는 어떤 의미를 가지고 있을지 명확하게 알 수는 없지만, 이번 8기의 경우 이전 기수와 달리 새로 도전하는 점들이 많았다 보니 그러한 변화의 영향을 받았을 것이라고 예상했습니다.

 

 

2) 시험 문제 

가장 크게 놀랐던 점 중 하나는 바로 시험 문제였습니다. 이 부분에서도 크게 두 가지 부분이 예상하지 못했었는데요? 바로 '시험 난이도'와 '추가 도전 과제'이었습니다.

 

(1) 시험 문제의 난이도

5기의 '점심 메뉴 추천' 문제, 6기의 '온콜' 문제, 7기의 '출석부' 문제들의 대부분은 프리코스 기간 동안 배운 내용을 한 곳에 모아놓은 조금 더 어려운 난이도였다고 생각했습니다. 해당 문제들을 이전에 풀어보면서 이는 더욱 체감되었던 부분이었는데요? 반면에, 이번에 출제된 시험 문제의 경우에는 개인적으로는 어렵지 않게 구현할 수 있는 난이도라고 느껴졌습니다. 과제 내용의 경우에는 프리코스 때 진행되었던 '로또 생성기'와 아주 유사한 기능들을 갖고 있었으며, 심지어 기존 '로또 생성기' 과제에서 구현해야 할 기능들 중에서도 약 80% 정도의 분량만 구현하면 되는 것처럼 보였습니다. 

 

그렇다 보니, 시간 관리와 같이 세운 전략 측면에 있어서 변화가 생기게 되었고, 이는 지원자들로 하여금 여러 고민들을 가져다주었다고 생각합니다. 시험을 마친 뒤에 시험을 같이 응시했던 지인들과 추측해 보았을 때에는, 프리코스 기간 동안 AI 사용에 대한 큰 규제가 없었던 만큼, 구현 능력에 있어서 AI 의존도가 얼마나 있는지, 혹은 구현해야 할 요구사항을 잘 파악하고 있는지 등에 대해서 전략적으로 나온 문제인 것 같다는 이야기를 나누곤 했습니다. 특히나 입출력을 담당하는 view의 경우에는 미리 완성이 되어 있는 코드를 제공해 주었고, 해당 코드는 수정할 수 없는 상황이었다 보니, 이전 코드를 사용하더라도 구조를 이해하고 이번 과제에 맞춰서 수정할 수 있는 능력이 필요하다고 생각했습니다. 

 

(2) 추가 도전 과제

문제 난이도가 조금 낮아서일까? 혹은 다른 의도가 있었을 수도 있겠지만, 추가적으로 더 진행해야 할 부분이 있었습니다. 

 

바로 '도전 과제'였습니다. 기본적으로 구현해야 하는 요구 사항을 모두 충족한 뒤에 2가지 중 하나를 선택해서 도전해야 했습니다. 

 

1. 리팩토링 : 작동은 그대로 유지하면서 코드 품질을 높이는 방향

2. 기능 확장 : 기본 기능 위해 새로운 기능을 추가하는 방향

 

이 두 가지 중 하나를 선택해야 했는데, 저 같은 경우에는 리팩터링을 진행하는 것을 선택했습니다. 사실 추가하고 싶은 기능 확장의 아이디어도 존재했지만, 전반적인 흐름과 시간 관리에 있어서 하나라도 완성도 있게 마무리하는 것이 더 좋을 것 같다고 판단하곤 했습니다. 이러한 추가 도전 과제를 가지게 된 만큼 더더욱이 기본 요구 사항을 구현하는 시간이 상당히 중요했습니다. 13시부터 시작된 시험에서 감사하게도 15시 30분 정도 즈음에 기본 기능이 구현이 다 되었고, 남은 1시간 반 동안 리팩토링을 진행하고, README.md를 작성하는 시간을 가질 수 있었습니다. 

 

어쩌면, 추가 도전 과제를 제공한 이유는 더더욱이 제공된 것만을 구현하고 그치는 것이 아니라, 더욱 개발자의 설계 능력에 대해 집중할 수 있게 한 데에 있지 않을까 싶었습니다. AI가 많이 발달된 시점에서, 우리가 가져야 할 역량은 목표를 세우고 이를 도전하고, 이를 이해할 수 있는 역량이라는 것을 이야기해 주는 느낌도 들었습니다. 

 

(3) 테스트 케이스 개수

사소할 수 있지만, 이전과 달라졌던 또 다른 한 가지로는 바로 테스트 케이스의 개수였습니다. 이전 후기들을 보면 대부분 5개 중 4개는 맞췄거나, 5개를 맞춰서 합격 목걸이를 받으신 분들이 많았었는데, 이번 8기의 경우에는 테스크케이스가 2개였습니다. 어쩌면 코딩테스트의 완성도 측면을 더 많이 평가하지 않을까 싶은 생각도 들었습니다. 적어진 테스트 케이스로 인해서 'Passed'된 테스트 케이스의 개수만을 가지고 합불 여부를 어느 정도 짐작할 수 있는 부분은 사라졌다고 생각했습니다.

 

 

3) 최종 테스트 회고

 

17시에 코딩 테스트를 마친 뒤에는 18시까지 1시간 동안 최종 테스트 회고를 작성해야 했습니다. 최종 테스트 회고의 가장 큰 핵심은 앞서 진행한 코딩테스트 과정을 잘 풀어내는 것에 있다고 생각했습니다. 예시로 제공된 질문들처럼, 어떤 상황에서 어떤 생각을 가지고 어떻게 판단했는지에 대한 스토리텔링을 하는 것이 중요해 보였습니다.

 

저 같은 경우에는 리팩토링을 선택한 만큼, 전반적으로 리팩토링에 대한 이야기를 많이 적었습니다. 작성한 회고의 소제목은 아래와 같습니다. 

 

"도전1(기능 요구사항 파악) : 요구사항 좀 잘 읽어라,,"

"도전2(아키텍처 설계) : MVC,, MVCS ???"

"도전3(Model 분리) : 너무 변수가 많아!!!"

"도전4(상수 분리) : 상수 관리 안하면 정상수 된다"

"도전5(테스트 코드) : 테스트는 진짜 항상 어려워"

"도전6(새로운 기능 추가) : 아 진짜 너무 아쉽다,,"

 

저는 평소 글쓰기를 좋아했고, 머릿속에 있는 이야기들을 풀어내는 것에 익숙했던 덕분에 사실 회고를 작성해 나가는 것은 크게 어렵진 않았던 것 같습니다. 다만, 어떤 구조로 이야기를 스토리텔링할 것인지, 어떤 식으로 강조할 것인지에 대해서 고민하게 되었고, 그 결과 위에 있는 것처럼 소제목을 작성해서 문단의 주제를 제공하는 식으로 회고를 작성할 수 있었습니다. 

 

 

 

| 마무리하며

 

18시 전에 최종 제출을 마무리 지은 뒤에, 비로소 최종 테스트는 끝이 나게 되었습니다. 약 4시간 동안 진행된 코딩 테스트와 1시간 동안 진행된 회고 작성까지 마무리를 짓고 나니 몰려오는 후련함과 피곤함이 묘한 기분을 만들어주곤 했습니다.

 

드디어 지난해 10월에 진행된 우아한 테크코스 2026 입학설명회부터 시작된 우아한테크코스 8기의 지원 과정의 여정은 이제 '최종 합격 결과'만을 기다리게 되었습니다. 다음 포스팅으로는 1월 23일 오후 3시에 발표하게 될 최종합격 여부에 대한 이야기로 찾아오겠습니다. 어떤 결과를 마주하든 최선을 다하고 새로운 경험을 한 지금까지의 모든 과정이 우아한테크코스 8기 지원과정을 경험하기 이전과 이후를 다르게 만들어주었기에, 이 글을 보고 계신 이후 9기 지원자 분들께서도 많은 도움이 되셨으면 좋겠습니다.

 

또한, 사진을 공유해주신 순재님께 감사드리고, 이번 8기 최종 테스트 응시하신 모든 분들도 고생 많으셨습니다.

728x90
반응형