[우아한 테크코스] 우아한 테크코스 7기 백엔드 합격
읽기 전에
이 글은 불특정 다수에게 우아한 테크코스에 대한 어떠한 정보나, 팁 같은 것을 알려주려는 글은 아닙니다.
자소서 꿀팁도 없고, 제가 제출한 코드도 없습니다. 그냥 2번에 걸쳐 우테코를 하면서 느꼈던 제 생각을 일기 형식으로 정리한 글입니다.
23년 6월
꿈이었던 천문학 연구를 포기했다. 오랫동안 준비했지만, 벽을 느꼈다. 대학교를 졸업할때까지만 하더라도 천문학 연구 외에 다른 길을 생각해본 적이 없었기에 앞으로의 길이 막막했다.
천문학 연구를 하면서 Python을 다뤄봤기 때문에 그나마 개발자 쪽이 낫지 않을까 막연히 생각했다.
23년 8월
군대에서 같이 농구를 했던 친구들과 만나 농구 동호회(?)를 만들었다. 여담이지만 오늘날까지 매주 밖으로 나가 운동했던것이 멘탈 관리와 체력 관리에 큰 힘이 됐다.
23년 9월
Java를 처음 접했다. 친구가 우아한 테크코스를 같이 하자고 알려줘서 참가하기 위해 Java 기본 문법을 공부했다.
마침 이때 3주 준비했던 SQLD도 합격 소식을 들어서 자신감이 조금 올라갔다. 잘 풀릴것만 같은 예감이 들었다.
23년 10월 ~ 11월
6기 프리코스에서 백엔드 과정에 참여했다. 이전까지는 여러 개념들(OOP, TDD, DI, 책임 분리 등등…) 에 대하여 하나도 몰랐기 때문에 지금 보면 코드 퀄리티가 처참하다.(그렇다고 지금 엄청나게 잘하는 것은 아니다.)
프리코스에 참여하면서 열정있는 참가자들이 서로 코드 리뷰를 하는 것이 너무 마음에 들었다. 비전공자들은 공감하겠지만, 주변에서 열정과 실력을 모두 겸비한 동료를 다수 만나는 것은 정말 쉬운 일이 아니다. 내 코드를 리뷰받는것 뿐만 아니라 다른 실력있는 참가자들이 상호리뷰한 것들까지 찾아봤다. 4주 내에 공부하기는 쉽지 않은 정보량이었지만, 나는 내 실력을 늘리고 싶었다.
그렇기 때문에 정말 열심히 했었다.
23년 12월
프리코스 1차 통과 & 최종테스트
운이 좋게도 1차를 통과했다. 아직도 이때 어떻게 통과했는지 감이 오지 않는다. 아무래도 진정성 있는 자기소개서와 프리코스에서의 나의 성장세를 봐주신 것 같았다. (사실 이게 아니라면 말이 되지 않는다.)
프리코스를 마친날부터 이미 최종테스트에 대한 준비를 하고 있었다. 6기의 문제를 다시 풀어보고, 이전 기수들의 최종 테스트들도 찾아서 풀어봤다. 당시 감상으로는 문제들이 크게 어렵지 않다는 생각이 들었다. 충분히 할 수 있을 것 같았다.
이런 내 생각이 완전한 오판이라는 것이 밝혀지기까진 긴 시간이 걸리지 않았다. 최종 테스트 장소는 잠실이었다. 40분 전에 도착해 준비했다. 미리 써둔 감상문과 자주 쓰이는 코드 템플릿까지 준비했다. 6기 테스트에서는 생성형 AI 사용이 허가됐기 때문에, 이 부분도 미리 준비했다.
나는 시간이 부족할 것이라고 판단해 필요한 기능 정리에 큰 시간을 투자하지 않았다. 대략 10분에서 15분 정도를 투자한 것 같다. 그 다음 바로 구현에 들어갔다. 사실 10분에서 15분이면 주어진 문제에 대해 정확히 파악하기도 어려운 시간이다. 결국 코드가 꼬이게 됐다. 코드가 꼬이니 AI의 도움을 받았다. 당시 내가 사용하던 AI의 성능으로는 문제를 제대로 풀지 못했다. 코딩을 시작한지 3개월차였던 나는 멘붕이 왔다. 어디서 에러를 뿜어내는지도 파악하지 못했다. AI가 짜준 코드가 어떻게 동작하는지도 몰랐다. 그렇게 어이없을 정도로 빠르게 지나간 5시간의 끝은 테스트 코드 0/2의 빨간 글씨였다.
최종테스트 이후
결과는 보나마나 탈락이었다. 아주 일말의 희망에 걸어보지 않은 것은 아니었지만, 불보듯 뻔한 결과였다. 좌절했다. 운이 따라줬지만, 내 실력으로 그것을 잡을 타이밍이 아니었던 것이다. 이런 운이 다시 따라줄 것이라고 생각하기는 어렵다. 그렇기 때문에 실력을 늘려야 했다.
- 개인 블로그 개설
- 백준 계정 생성
- 1인 프로젝트
블로그에 내가 공부한 것을 정리해서 기록하자. 코딩 문제에 대한 두려움을 없애고, PS문제를 풀기 위해 백준으로 공부하자.
진짜 내가 재밌어 할 만한 것을 만들어보자.
그때 내가 생각한 것이었다.
24년 1월 ~ 8월
이 기간동안 코딩 공부는 꾸준히 해왔다. 축구 팬사이트를 만들겠다고 다짐하고 팔자에도 없는 프론트엔드 코드까지 공부해서 만들었다.
백준은 12/28일 기준 345일 스트릭을 기록했다. 이건 꽤나 내세울만한 업적 같다. 아픈날도 있었고, 힘든 날도 있었지만 꾸준히 시도했다. 심지어 예비군에 가는 날에도 했다. 결국 플레티넘 4까지 기록했다.
남들이 다 만드는 Velog, 티스토리는 만들기 싫어서 깃허브io로 블로그를 만들었다. 초반 세팅이 진짜 짜증났다. 프로젝트를 하면서 막힌 부분에 대해 정리하고, PS개념들과 백준 문제들에 대해 정리했다.
앞에서는 그럴듯하게 계획을 세워서 공부하겠다고 했지만, 이 시기에 멘탈적으로 상당히 불안정했다. 아마 상기한 농구 동호회가 없었다면 이미 무너지고도 충분했을 것이다. 사실 아무것도 없는 내가 프로그래밍을 직업으로 갖는 것에 대해 불안이 있었다. 나만 뭔가 정체되어 있다고 생각했다. 그래서 뭐라도 해보기 위해 일본 워홀을 준비했다. 이미 어느정도 일본어 능력이 있고, 문화에 대해 이해가 있어서 워홀 비자까지 받는 것은 수월했다. 아무도 나를 모르는 곳에서 새로 시작하면 뭔가 바뀔 것이라 생각했던 것이다.
결국 현실적인 이유에 부딪혀 가진 못하게 됐다. 앞으로 어떻게 해야할지 막막했다.
24년 9월
사실, 우테코에 다시 도전할 생각은 없었다. 이미 이 글을 읽는 분들은 모두 아시겠지만 우테코 선발 과정은 겪는 것만으로도 에너지를 굉장히 소모하는 일이다. 매주 코드 퀄리티에 신경쓰면서 4주간 문제를 풀어야하고, 선택이지만 많은 사람들의 코드 리뷰와 리딩을 해야 한다. 합격할지 떨어질지도 모르지만 1차 발표 전까지 최종 테스트에 대비해야 한다. 최종 테스트에서는 5시간이라는 비교적 짧은 시간내에 기능을 구현해야만 한다. 글만 써도 지친다.
하지만 큰 이유는 너무 높은 경쟁률과 다시 떨어졌을때 회복하지 못할 것 같았기 때문이다.
우테코에 대한 기억이 희미해질때 즈음에 내 유튜브 알고리즘에 7기 우테코 입학 설명회가 등장했다. 나는 어떠한 외력에 의해 이끌린 듯이 썸네일을 눌렀다.
이유는 알 수 없지만 위 불안요소들을 모두 지워버릴 수 있었다. 왠지 다시 도전해보고 싶어졌다.
24년 10월 ~ 11월
프리코스
프리코스는 이전과 크게 달라진 점은 없었다. 똑같이 열정 있는 참가자들이 가득했고, 똑같이 열기를 띄며 서로에게 도움이 됐다.
1,2,3 주차는 저번과 크게 다르지 않은 문제들이 나왔다.(2,3주차는 아예 같았다.) 그렇기 때문에 어느 정도 생각의 방향을 잡을 수 있었다.
문제는 4주차였다. 작년 4주차 크리스마스 문제에 비견될 만큼, 아니 그것보다 더 복잡한 요구사항의 문제가 출제됐다. 솔직히 문제가 아무리 어려워도 1주일이나 시간이 주어지므로 테스트코드를 통과하는건 큰 일이 아니라고 생각했다. 하지만 이번엔 달랐다.
문제를 구현하다 일요일 저녁쯤 됐을 때, 처음 테스트 코드를 돌려봤다. 로컬에서는 모두 만족했지만 왜인지 웹사이트 테스트에서는 하나가 통과하지 못했다. 이때까지만 해도 쉽게 통과할 수 있을 줄 알았다.
이 생각이 잘못됐다고 느낀 건 월요일 새벽 4시쯤이었다. 아무리 찾아도 어디가 잘못된 것인지 알지 못했다. 이제 20시간 정도 남았는데 통과할 수 있을까? 하는 의문이 머릿속에 들기 시작했다.
밥 먹는 시간도 아끼면서 무한 버그 찾기에 들어갔다. 저녁은 12시 이후에 먹기로 하고 걸렀더니 배가 너무 고팠다. 하지만 시간이 없었다. 아직 소감문도 쓰지 못했는데… 최소한 소감문을 쓰려면 1시간반~ 2시간은 잡아야 하니 22시 이전에는 끝내야 했다. 18~19 시 쯤만 하더라도 버그를 찾지 못해서, ‘아 이번 우테코도 이렇게 끝이구나’ 라고 생각했다.
그때 버그를 찾으면서 든 한가지 생각이 형세를 바꿨다. md 파일을 읽어올때, 재고가 없는 상품에 대해서 직접 수정한 후 불러왔다. 이 것을 원래 상태로 되돌린 후 재고가 없는 파일을 표현하고자 했다. 이것만이 남은 유일한 수 였다.
정말 다행히도 이게 정답이었다. 프리코스에서 리팩토링을 덜한 코드를 제출할 줄은 꿈에도 생각하지 못했지만, 밥을 먹어서 허기를 달랠 수 있음에 감사했다.
프리코스 이후
최종에서는 2배수의 인원을 뽑으니, 프리코스 → 최종테스트 의 경쟁률은 대략 10:1 정도 된다고 생각한다. 1주차의 포크 수가 1.7k 정도 됐던 것 같다. 참 쉽지 않은 과정이다. 내가 이 사람들 10명 중 1명이 될 수 있을까? 그 만큼 디스코드 커뮤니티에는 잘 하는 사람들이 많았다. 오히려 최종테스트보다 1차 통과가 더 수치상 빡세다고 생각했다.
그 동안은 최종 테스트를 준비하는 것 외에는 다른 수가 없었다. 난 이게 마지막 기회라는 것을 직감했다. 7기의 문제들을 다른 방식으로 다시 풀어보고, 이전 기수 최종 문제들, 4주차 문제들을 풀어봤다.
0/2를 받았던 6기 최종 문제는 Collection의 rotate 메서드를 사용해 다시 풀어봤다. 정말 어이없게도 2시간 안에 문제가 풀렸다. 뭔가 내가 성장했음을 느꼈지만, 다른 한편으로는 생각보다 쉬웠던 문제였다는 것이 허탈했다.
1차 발표날에는 오후 3시까지 시간이 너무 가지 않았다. 그래서 밥을 먹고 근력 운동을 하러 갔다. 무게를 치는 와중에도 시계에 계속 눈이 갔다.
메일은 3시 정각에 딱 맞춰 도착했다. 일단 통과했다. 앞으로 남은 과정을 알고 있기에, 또 실수를 반복하면 안된다는 생각에 크게 마음이 움직이지는 않았다. 남은 운동 세트를 마친 후 최종 테스트 준비에 들어갔다.
24년 12월
최종테스트
테스트 1주일 전에 라이프사이클을 돌리려고 했다. 현재는 부엉이 상태인데, 시험 날에는 1시 ~ 6시에 최상의 집중력을 발휘해야 했다. 잠에 쉽게 들지 못하는 나에게는 이것마저도 큰 미션이다. 하지만 걱정했던것 보다는 쉽게 돌릴 수 있었다. 생각보다 큰 긴장은 되지 않았다.
아침에 어제 사왔던 초코우유를 마시고, 초콜릿을 가방에 넣어 출발했다. 아침 겸 점심으로는 이삭토스트를 사먹었다.
시험 장소는 저번과 같은 잠실이었고, 저번처럼 40분 전에 도착했다. 시험보는 방도 저번과 같았지만 자리는 달랐다.
처음 문제를 마주하고 파악할 때는 이정도로 어려울 줄은 몰랐다. 그저 기능을 제대로 이해하기에 바빴다. 그 당시 문제를 파악할 때 들었던 생각은 아래와 같다.
- 4기 최종문제 페어매칭과 비슷하다. (기능선택, 검색 면에서)
- 4주차에 사용했던 우테코 DateTimes 라이브러리를 사용해야 한다.
- 파일을 읽어와야 한다.
- 즉 4주차 미션과 유사하다.
- 대다수의 기능이 2번 기능에 의존하고 있다. (2번을 먼저 구현하면 나머지는 쉽게 구현 가능하다.)
- 2번 기능을 먼저 구현한 후 다른 기능을 구현하자.
지난번에는 제대로 기능 파악을 하지 못했던 것이 문제였다고 생각했기 때문에, 억지로 30분을 꽉 채워 기능을 정리했다.
문제가 진짜 어렵다고 느낀 것은 대략 2시간쯤 지났을때였다. 구현해야할 절대적인 양이 너무 많았다. 파일에서 불러온 출석 기록이 내 생각처럼 작동하는지도 신경쓰였다. 이때쯤에 테스트 코드를 작성하겠다는 마음가짐을 버렸다. 오직 기능구현에만 초점을 맞췄다.
3시간쯤 지나니, 포비님이 들어오셔서 휴식을 권하셨고 만약 콜라보를 초대하지 않았다면 하라고 하셨다. 나는 안해놨었는데, 그 말을 듣고 화들짝 놀라서 초대했다. 만약 하지 않았다면… 상상도 하기 싫다.
3시간 반쯤을 지나는 시간이었다. 의외로 기능 구현이 순조로웠다. 엣지케이스를 제외한 대략적인 기능은 모두 구현했다. 약간 찜찜한 점은, 결석 기록이 불러와지지 않는 것이었다. 일단 무시하고 기능을 구현했지만, 결석 기능이 아무래도 불러올 수가 없었다. 알고보니 4주차에서 없는 재고가 아예 존재하지 않는 것 처럼, 결석 기록또한 존재하지 않았다. 이것을 알아챈게 4시간이 지났을 때였다. 좌절감이 나를 덮쳐오기 시작했다.
내가 이 문제를 한시간 내로 처리할 수 있을까? 이것만이 문제가 아닌데, 시간이 충분할까? 내가 할 수 있을까? 또 저번처럼 다 망치는건가?
그건 싫었다. 다 망치는건 싫었다. 그래서 마지막 1시간은 정말 접신한 것 처럼 문제를 해결했다. 지금 다시 하라면 아마 못할것이다. 결석 기록은 운이 좋게도 2번의 구현만에 해결했다. 에러 메세지에 변수를 넣는 것도 바로 생각해내서 풀었다. 결국 마지막 1분이 남았을 때, 5/5의 테스트케이스를 받았다.
여러 엣지 케이스에 대해 구현하지 못했지만, 일단 4개의 기능은 모두 구현했고 테스트케이스도 5/5를 받아서 기분이 정말 좋았다.
밖으로 나오니 날씨가 제법 추웠다. 간단히 요기를 하고 집으로 가기 위해 잠실역에 향했다. 작년에 봤던 현대백화점의 일루미네이션은 정말 보기 싫었는데, 이번 일루미네이션은 꽤나 아름다웠다.
최종테스트 이후
지난 1년반 동안 팽팽했던 고무줄이 탁 하고 풀린 것 처럼, 나 또한 탁 하고 풀어졌다. 우테코 및 코딩에 대한생각을 별로 하기 싫었다. 그런 것들에 대해 생각하면 더욱 시간이 가지 않을 것 같았다. 그냥 밥을 먹고, 게임하고, 운동을 하면서 2주를 보냈다. (스트릭은 이어야 하니 간단한 백준 문제들은 풀었다.)
26일은 시간이 정말 가지 않았다. 할 수 있는 것이 없지만 긴장돼서 잠도 제대로 자지 못했다.
27일 오후 3시까지 너무 긴장됐다. 긴장을 달래려고 운동을 가볼까 생각했지만, 수면이 부족했기에 운동에 집중하지 못할 것 같았다. 지난 메일들은 모두 3시에 바로바로 왔기 때문에 메일이 늦게 오는 것은 정말 피가 말렸다. 3시에서 4시반까진 컴퓨터 앞에 앉아서 새로고침만 계속 했던 것 같다. 결국 너무 늦는 바람에 다른 할 일을 했다. 메일이 온 것은 6시였다.
합격했다. 실감이 나지 않았다. 대학을 졸업하고 정말 되는 일들이 없었는데, 오랫만에 성취의 기쁨을 느끼게 됐다. 내가 지난 기간을 무의미하게 지내지 않았다는 증거가 됐다고 느껴서 뭔가 가슴이 채워지는 느낌이 들었다.
우아한 테크코스 7기 과정은 2월부터 시작된다. 대략 1개월 반의 시간이 있다. 내년은 10개월동안 쉴 틈 없이 달려야 하니, 일단 에너지를 충전할 예정이다. 아마 비전공에, 프로그래밍 수학 이력도 짧은 내가 아마 제일 못할것이라 예상된다. 오히려 그렇기에 배울 점이 많다. 기대된다.