본문 바로가기
우아한테크코스 6기

[우아한테크코스 6기] 지원서, 프리코스, 최종 코딩테스트 합격 후기

by 당코 2024. 1. 12.

우아한 테크코스 6기 합격 후기를 작성해 보려고 한다.

지원하면서 많은 분들의 합격 후기를 통해 도움을 받았었기 때문에 다음 기수에 지원하려고 하는 분들에게 도움이 될까 싶어 작성한다.

 

지원서

이번에 작성한 지원서의 문항은 총 4가지이다.

지원서에 관한 내용은 핵심적인 내용들만 짧게 설명하도록 하겠다.

 

효과적인 학습 방식과 경험 (1000자 이내)

나는 사람들과 직접 소통하면서 학습하는 것이 효율적이라 느꼈기에 대학교 때 스터디를 진행했던 경험을 작성하였다. 스터디를 진행한 방식과 이 학습 방식이 나에게 맞다고 생각한 이유를 중점으로 서술하였다.

스터디를 진행함에 있어서 알게 된 기록하는 습관에 대해서도 작성하였다. 기록하는 것에 대해 느꼈던 필요성과 실제로 블로그에 포스팅하면서 기록했던 방식을 추가하였다. 

이 학습방식에 대한 증거로 블로그 링크를 제출하였다.

 

 

성장 중 겪은 실패와 극복 (1000자 이내)

이 문항에 대해서 작성할 때 프로그래밍에 관한 일화를 작성할지 아니면 나만의 스토리를 작성할지에 대한 고민을 하였다.

결론적으로 초등학교 때 나갔던 수영 대회에 대한 이야기를 작성하였다.

초등학교 4학년 때 학년 대표로 평영 시 대회를 나간 적이 있다. 이 시합을 준비하면서 꽤나 자만하였고 실제 시합에서 좋지 않은 성적을 받은 경험이 있다.

이 실패 경험을 통해 내가 얼마나 연습을 소홀히 하였는지에 대해 느꼈는지, 그리고 실패를 통해 배운 점을 작성하였다. 그리고 실패 경험을 통해 얻은 교훈이 내가 프로그래밍 학습을 하면서 어떻게 긍정적인 영향을 미쳤는지 실제 진행했던 프로젝트에서의 경험을 바탕으로 서술하였다.

 

오랜 시간 몰입했던 경험 그리고 도전 (1000자 이내)

우테코에서 몰입 경험에 대해 상당히 중요하게 보는 것으로 알고 있다. 그래서 어떤 주제를 작성해야 할지 실패 경험 문항과 더불어 많은 고민을 하였다.

몰입 경험에 대해서 팀 프로젝트 관련한 내용을 작성하는 분들이 많은데, 작성할만한 경험이 크게 없어 지금까지의 인생을 살아오면서 몰입했던 경험을 되새겨보았다.

초등학교 6년 동안 피아노를 배우면서 콩쿠르 대회에 나가 입상한 경험을 작성하였다. 피아노를 접하게 된 계기부터, 내가 어떻게 몰입하였는지 자세히 서술하였다.

콩쿠르 대회를 준비하기 위해 메트로놈을 켜놓고 연습하고 스스로 녹음한 연주를 분석했던 경험처럼, 내가 실제로 부족한 실력을 극복하기 위해 어떤 계획을 세우고 몰입하였는지 추상적이지 않게 작성하였다.

개인적인 생각으로는 우테코는 신뢰 기반으로 선발이 진행되기 때문에 몰입 경험에 대한 내용을 정할 때, 내가 했던 것에 대한 증거가 있는 활동이면 좀 더 좋을 것 같다. 나는 콩쿠르 입상한 트로피를 찍어 증거로 제출하였다.

 

원하는 프로그래머 모습 (1000자 이내)

내가 되고 싶은 프로그래머의 모습을 2가지 정하였는데, 가장 먼저 동료 프로그래머들이 같이 일하고 싶어 하는 프로그래머가 되고 싶었다.

자소서를 작성하던 당시 팀 프로젝트를 진행하면서 Jira라는 협업 도구를 사용하게 되었는데 이에 대한 자세한 경험과 배운 점을 작성하였다. 

두 번째로 어려움이 있을 때 도움을 줄 수 있는 프로그래머가 되고 싶었다.

고등학교 시절 수학 동아리에서 진행했던 교육 봉사 활동과 대학교에서 전공 수업의 튜터링을 담당했던 경험들과 이를 토대로 다른 사람들을 도와주면서 느꼈던 감정들을 작성하였다.

우테코가 없는 경우 어떤 방식으로 성장할 것인가에 대한 물음에는 내가 알고 있는 것들을 공유해 주는 채널을 만드는 것을 해보고 싶다는 내용을 적었다.

개인적인 생각으로 프리코스를 통과하기 위해서는 4주 동안의 미션보다 지원서가 가장 중요하다고 생각한다.

단기간에 작성하는 것보다 주제 선정부터 오랜 시간 고민하고 지인의 첨삭을 받을 수 있다면 받아보는 것을 추천한다.

 

 

프리코스

프리코스는 총 4주 동안 4번의 미션으로 진행되는데 합격 여부를 떠나서 많은 성장을 할 수 있는 기회라고 생각한다. 나의 경우 기존의 해왔던 개발들과는 사뭇 다른 방식으로 과제를 수행하여서 큰 도움이 되었다.

프리코스를 참여하게 되면 디스코드 채널에 들어갈 수 있는데, 매주 미션이 끝날 때마다 활발하게 코드리뷰를 진행하시는 분들을 볼 수 있다. 내가 고민했던 부분들을 다른 참여자들은 어떻게 구현하였는지 볼 수 있다는 것이 시야를 넓히는데 많은 도움이 되었다. 기본적인 패키지와 클래스를 어떻게 분리하였는가부터 세부적으로는 검증로직을 어떻게, 어디에 작성하였는지까지 보면서 내가 부족한 부분을 보완할 수 있었다.

매주 미션이 끝나고 나면 공통 피드백 문서가 주어지는데 매주 미션을 진행할 때마다 피드백을 바탕으로 여러 제한사항이 추가된다. 처음부터 요구사항을 모두 지키면서 하는 것은 어렵지만, 일주일이라는 긴 시간 동안 몰입해서 수행한다면 좋은 결과를 얻을 수 있을 것이라 생각한다.

여기서부터는 개인적인 의견이다. 프리코스를 진행하면서 합격을 위해 필요하다고 생각하는 것은 가장 먼저 테스트 케이스를 통과하는 것이다.

프리코스를 진행하여 채점 시스템을 통해 일정 기준을 통과한 사람들의 지원서를 모두 보는 것으로 알고 있다. 따라서 테스트 케이스를 우선적으로 통과하게 코드를 작성하는 것이 필요하다. 하지만 기본 테스트케이스 이외의 다른 테스트케이스가 있는지는 알 수 없기 때문에 프리코스를 진행할 때 과제에서 주어진 예외사항을 꼼꼼히 보고 반영하는 것이 중요할 것 같다.

프리코스 과제를 제출할 때 작성하는 소감문이 있는데, 나는 이를 매번 1000자 이상 작성했던 것 같다. 과제를 진행하면서 내가 고민한 것들을 미리 정리해 놓고 이에 대한 스토리를 소감문에 녹였다. 내가 프리코스를 진행하면서 어떤 것이 어려웠고 이를 위해 고민한 것들과 어떻게 해결했는지 자세히 서술하였다.

작년에 우테코 5기를 지원했을 때 불합격한 경험이 있는데, 6기에는 합격한 이유가 무엇인가를 고민해 보았다. 작년에 작성한 지원서를 떠올려보면 지금과 비교해서 형편없었고 소감문도 짧게 작성하였다. 그래서 나는 2가지(특히 지원서)가 우테코 합격에 큰 요인이라고 생각한다

 

최종 코딩테스트

준비과정

디스코드를 보면 다른 분들은 스터디를 모집해서 같이 이전 기수의 문제를 풀고 코드 리뷰를 하시는 모습을 많이 봤다. 하지만 나는 기말고사를 준비하느라 모든 시험이 끝나고 2일 만에 최종 코딩테스트를 준비를 해야 하였다.

첫째 날은 프리코스 마지막 문제를 풀어보면서 최종 코딩테스트 때 사용할 나만의 문서를 만들었다. 패키지 구조부터 시작해서 OutputView, InputView, Validator 등 기본적으로 필요한 클래스들의 뼈대 코드를 작성해 놓았다. 나 같은 경우 구조를 생각하는데 많은 시간을 소비하였기 때문에 시험 전에 미리 구상을 하고 갔고, 시험 당일에 대부분의 응시자들도 준비해 온 것을 볼 수 있었다. 

둘째 날에는 이전 기수 최종 코딩테스트 문제를 풀어보았다. 처음 4기 최종 코테 문제인 페어매칭 어플리케이션을 풀어봤을 때 상당한 불안감이 엄습해 왔다. 난이도가 상당히 있어 풀이 방법을 상당히 고민해야 했다. 프리코스를 준비하면서 막힌 적이 없었기에 내가 잘할 수 있을까라는 생각을 했었다. 4기 코테 문제가 어려웠다는 사실로 마음의 위안을 삼으며 5기 코테 문제도 풀어보았다.

5기 최종 코테 문제인 점심 메뉴 추천은 페어매칭 문제보다 난이도가 쉬워 비교적 쉽게 풀 수 있었다. 기존에 만들어 놨던 문서를 참고하여 구현하니 내가 신경 써야 할 것은 핵심적인 알고리즘뿐이기 때문에 5시간이라는 시간은 나름 넉넉하다는 생각을 했다.

 

시험 당일

최종 코딩테스트는 온콜 문제였다. 간단히 설명하면 평일과 휴일의 비상근무 시간표가 주어졌을 때, 해당 월의 휴일을 고려하여 같은 비상 근무자가 연달아 근무하지 않도록 특정 월의 근무 시간표를 작성하는 문제이다.  이번 코딩테스트에는 새로운 요구사항이 생겼는데 문제 해결 전략 문항을 작성하는 것이다. 문제에 대한 이해를 확인하는 문항이었기 때문에 풀기 전 어느 정도 인지를 하고 풀이를 시작하였다.

첫 30분 정도는 문제를 읽으며 기능 목록을 정리하였다. 기능 목록을 정리하는 것이 시간이 걸리더라도 처음에 꼼꼼하게 문제에 대해 이해하는 것이 효율적이라 생각하여 문제를 천천히 읽어나갔다.

구현을 시작하면서 준비해 온 문서를 참고하여 기본적인 입출력과 그에 대한 검증 로직을 작성하였고 핵심 알고리즘을 작성하기 전 1시간 반정도 지나있었다. 다른 지원자 중에는 자료구조를 이용하여 푼 분도 계셨지만, 나는 말 그대로 쌩 구현을 하였다. 리팩토링은 나중에 신경 쓰자는 생각으로 하나의 함수에 모두 넣다 보니 엄청난 길이의 코드를 볼 수 있었다. 기쁘게도 3시간이 지날 무렵 테스트 케이스가 통과하였고 리팩토링을 진행하여 함수가 15라인 이내로 구성되게 만들었다

시험이 1시간 정도 남았을 무렵 기존의 테스트 케이스가 아닌 임의의 값을 입력해 보았는데 정상적으로 출력되지 않는 것을 발견하였다. 다 마무리된 줄 알고 있던 나는 상당히 불안해졌고 끝내 해당 케이스에 대한 오류는 수정하지 못하였다. 시간이 얼마 남지 않아 문제 해결 전략 문항에 대한 답변을 급히 작성하였고, 제출할 때 쓸 소감문에는 '.' 하나만 작성하였다.

시험이 끝나고 오류를 잡아내지 못하였기 때문에 떨어질 것이라 생각하였고 아쉬움도 많이 남았다. 집에 가서 확인해 봤을 때 문제의 요구사항 1개를 놓친 것을 알게 되어 더욱 기대를 하지 않고 있었다.

발표 당일에 긴장되는 마음으로 메일을 열어봤을 때 다행히도 합격 소식을 전달받을 수 있었다. 오랜만에 느껴보는 합격이라는 단어가 정말 기뻤고 열심히 한 보상을 받는 기분이었다.

최종 코딩테스트를 보고 난 후에 생각해 본 중요한 요소는 리팩토링, 문제 해결 전략 문항이라고 생각한다.

기능 목록을 작성하고 기본 테스트 케이스를 통과하는 것은 당연한 것이기에 제외하겠다. 아무래도 우아한 테크코스에서 강조하는 부분 중 하나가 클린 코드이기 때문에 하나의 메서드가 하나의 일만 하게 만드는 것이 중요한 것 같다. 또한 이번에 처음 추가된 문제 해결 전략 문항도 문제에 대한 이해도를 판별할 수 있기 때문에 점수에 반영되기 쉽지 않을까 라는 생각을 해본다.

시간상의 문제로 테스트 케이스를 핵심 기능 1가지만 작성한 채로 제출하였다. 시간이 넉넉하다면 추가적으로 작성하는 것도 좋지만 나 같이 시간이 촉박한 상황이라면 너무 부담 같지 않아도 좋을 것 같다.

최종 코딩테스트 코드는 아래 링크에서 볼 수 있다.

 

GitHub - tkdgur0906/java-oncall-6-tkdgur0906

Contribute to tkdgur0906/java-oncall-6-tkdgur0906 development by creating an account on GitHub.

github.com

 

 

이제 막연히 취업 준비를 하려고 했던 나에게 정말 좋은 기회가 온 것 같다.

아직 실력의 부족함을 느끼고 있고 여러 방면에서 배우고 싶은 것이 많았기에 한걸음 발돋움할 시간이 될 수 있다고 생각한다.

10개월 동안의 교육이 끝나고 이 글을 다시 봤을 때 지금을 회상하며 성장한 내 모습을 볼 수 있었으면 좋겠다.