
연말 마지막 선물로 우테코란 선물을 받게 되었습니다. 어떻게 최종 코테를 0점을 받았는데 합격을 하냐 어그로 아니냐 하실 수 있겠지만 시험 종료 전까지 제대로 구현도 못해 정확히는 테스트를 돌려보지도 못했습니다. 그래서 문제 조건에서 로컬 테스트를 통과하지 못한다면 0점으로 처리할 것을 명시했기 때문에 0점이라고 생각했습니다.
또한 프리코스 과정에서 2주 차 PR을 날려먹는 대참사가 났습니다. 그럼에도 불구하고 제가 어떻게 합격할 수 있었는지는 알 수 없지만 지난 2달간의 여정을 되돌아 돌아보려 합니다. 또한 다음 기수에 우테코에 도전하는 분들이 저처럼 큰 실수를 한다고 해서 좌절하거나 포기하지 않도록 조금이나마 도움이 되기 위해 작성합니다.

왜 우테코였을까?
사실 우테코에 처음 지원할 때 그렇게 간절함이 있었는가? 라고 되돌아 묻는다면 아니라고 대답할 것 같습니다. 필자는 25살에 대학을 입학하면서 처음 프로그래밍을 시작해 졸업 후 안드로이드 부트 캠프를 시작으로 안드로이드를 공부하기 시작했습니다. 사실 졸업 후 바로 취업하는 것이 목표였기에 부트캠프는 제게 가장 마지막 수였습니다.
하지만 70통이 넘는 이력서 제출에도 면접은 단 3번, 그나마 잘 봤다고 생각한 면접에서도 떨어지며 취업에 문턱에 막히게 되었습니다. 그래서 제게 취준이라는 타이틀은 나이와 더불어 이 글을 쓰고 있는 지금 이 순간까지 제 숨통을 막히게 하는 시한폭탄처럼 느껴졌습니다. 그래서 멋쟁이 사자처럼이라는 부트캠프에서 안드로이드 파트를 수료 후에도 저는 두 가지 모두 가능하다는 가정하에 우테코와 취업 두 가지 선택지 중 한 가지를 선택해야 했습니다.
결론적으로 우테코를 선택한 이유는 회사를 가게 되면 업무에 치이기도 하고 바쁘다 보면 많은 경험을 하기 힘들 것 같아 좀 더 많은 사람을 만나고 다양한 경험을 하고 싶어서 우테코를 선택하게 되었습니다. 막상 회사에 가면 새로운 사람들을 만날 수 있는 기회도 많이 줄어들고, 지금처럼 깊게 기술공부를 할 수 있는 여건도 안될 가능성이 높다고 생각했기 때문이죠.
물론 그만큼 회사에서만 배울 수 있는 것들도 분명 있지만 이왕 이렇게 채용 분위기가 좋지 않을 때 다른 개발자들과 만나서 많은 경험을 하고 저만의 인사이트를 구성해 나가는 시간을 갖는 게 좋을 것 같다고 생각했습니다. 저는 제 스스로가 스펀지 같은 사람이고 생각해서 어느 하나의 집단에 깊게 넣어두는 것보다는 다양한 곳에서 이것저것 흡수하는게 더 합리적일 거라고 생각했고 그렇게 우테코에 진심 어린 간절함을 갖게 되었습니다.
자기소개서는 어떻게?
사실 필자는 글을 정말 정말 못씁니다. 이 글을 보고 지원서를 쓰는 분이 계시다면 걱정하지 않아도 될 것 같습니다. 저보다 글을 오만배는 더 잘 쓰실 테니!
다만 자기소개서를 쓸 때 제 마인드는 "꾸밈없는 진심"이었습니다. 내가 프로젝트를 하면서, 지금까지 프로그래밍을 하면서 수많은 실패와 경험을 통해 얻은 것들을 있는 그대로 적어나갔습니다.
그중 핵심 키워드는 "공유를 통해 함께 성장하기"였습니다.
저는 프로젝트를 하면서 경험한 인사이트들을 팀원들과 항상 공유했고 이를 블로그에 기록해 나갔습니다. 그 결과 프로젝트를 하면서 10개의 아티클을 작성했고 팀원들에겐 팀 리더이자 멘토란 말을 들을 수 있었습니다. 이렇게 쌓아나간 소프트 스킬과 다른 사람과 협업하는 능력이 우테코가 지향하는 방향과 잘 맞지 않았을까 생각합니다. 덕분에 증빙 자료 또한 어려움 없이 선별할 수 있었습니다. 지원 과정에서 제출한 증빙 자료는 이 링크에서 확인하실 수 있습니다.

프리코스
첫 주차는 남들에게 보여주기 부끄러울 정도로 형편이 없었습니다. 과제를 제출하고 다른 분들의 코드를 보고 나서야 잘못된 것을 깨달았습니다. 다양한 엣지 케이스에 대한 예외처리, 아키텍처 등등 정말 아무것도 하지 않은 부끄러운 결과였습니다. 그래서 2주 차부턴 매 회차 미션마다 다른 아키텍처를 사용하기로 했습니다.
결과적으로 MVI, MVVM, Clean Architecture를 사용하게 되었고 이는 정말 재미있는 경험이었습니다. LiveData 같은 Android Library를 사용하지 않고 오로지 코틀린 문법 하나만 가지고 아키텍처를 구현해야 하다 보니 평소보다 훨씬 더 비즈니스 플로우에 대해 많은 고민을 해야 했고 이 과정이 저를 한층 더 성장시켜 주었습니다.
앞서 말씀드린 PR을 날려버린 미션이 바로 2주차 미션이었습니다. 과제 기한이 끝나고 신나서 리팩토링을 하고 커밋을 했는데, 문제 조건에서 기한을 넘어서 커밋하는 것을 허용하지 않는다는 것을 보고 해당 커밋을 삭제하려 했습니다. 그래서 구글링 한 방법대로 했는데 기존 PR이 닫히고 새로운 PR이 생성되는 대참사가 발생했습니다. 머리가 새하얘지고 손이 덜덜 떨렸지만 이미 벌어진 일은 어쩔 수 없으니 다음 미션에 최선을 다하기로 다짐했습니다.
3주 차 미션에선 아키텍처에 MVI를 사용했습니다. 또한 처음 사용하는 문법인 Functional Interface를 사용했습니다. Functional Interfaece는 Java의 SAM(Single Abstract Method) 즉, 하나의 추상 메서드를 가지는 인터페이스를 람다식으로 간결하게 구현할 수 있는 문법입니다.
하지만 이렇게 새로운 문법, 아키텍처에 집중하다 보니 정작 구현한 문제의 요구사항을 정확히 구현하지 못했습니다. 문제 조건에선 0에서 9 사이의 무작위 값을 생성하고 그 값이 4 이상이면 자동차가 한 칸 전진하는 것이었지만 저는 무작위 값만큼 이동하도록 구현하는 실수를 저질렀습니다.
이에 대한 원인을 스스로 고민해 보았고 원인을 과도한 아키텍처에 대한 집중이라고 생각했습니다. 그래서 이런 문제들 즉, 과도한 아키텍처와 코드 레벨 속에 매몰되지 않고 주어진 문제에 대한 요구사항을 정확히 구현하기 위해 노력했습니다.
프리코스 회고
프리코스를 진행하는 한 달 동안 굉장히 바쁜 생활을 보냈던 것 같습니다.
여러 가지 일을 병행하고 있었는데 첫 번째는 프리코스였고 두 번째 인턴십 프로그램에 참여하면서 프로젝트를 진행했습니다. 처음으로 컴포즈와 XML을 같이 사용해 봤는데 개인적으로 컴포즈에 대한 러닝 커브가 굉장히 높게 느껴져 인터넷 강의를 구매를 고려했지만 금액에 대한 부담이 너무 컸습니다.
그래서 피그마를 캡처한 뒤 GPT에게 해당 화면을 컴포즈로 만들어 달라고 한 뒤 이를 따라치며 학습하는 방법을 선택했습니다. 나중에 해당 방법을 오픈채팅방에 공유드렸더니 실제로 이 방식대로 프론트를 공부하고 계신 분도 계시고 좋은 방향이란 말을 많이 들었습니다. 저처럼 컴포즈에 대한 러닝커브가 부담되신다면 이 방법을도전하시는 것을 추천드립니다.

세 번째는 동아리 지원이었습니다. 개인적으로 개발 동아리에 들어가는 것이 오랜 꿈이었기에 지원서에도 정말 많은 노력을 기울였고 최종 면접까지 갔지만 아쉽게 탈락하였습니다. 하지만 이 면접을 통해 제가 부족한 부분을 너무나 명확히 알 수 있었기 때문에 정말 많은 도움이 됐던 것 같습니다.
네 번째는 블로그 챌린지였습니다. 2024년 한 해가 가기 전 총 4개의 아티클을 작성하는 챌린지였습니다. 빡빡한 일정 속 4개의 아티클을 작성하는 것은 생각하는 것보다 너무나 힘들었습니다. 특히나 함께 챌린지를 진행하는 분들이 안드로이드 개발에 있어서 너무나 큰 족적을 남기시고 정말 대단하신 분들이었기에, 각종 커뮤니티와 오픈채팅방에 챌린지 주차별 아티클이 게시되기 때문에 좋은 글을 써야 한다, 글을 잘 써야 한다는 압박감과 부담감이 크게 다가왔습니다.
이런 바쁜 일정 속 모든 것들을 완벽하게 해낼 순 없었기에 우선순위를 정하게 되었는데 1순위는 프로젝트, 2순위는 우테코 3순위가 블로그 챌린지였습니다. 혼자가 아닌 다른 사람과 함께 하는 일인 만큼 최대한 폐를 끼치지 않도록 힘을 조절해 가며 프리코스보단 프로젝트 진행에 조금 더 집중했고, 1차 합격이 난 시점부터 최종 테스트까지 진행되는 스프린트는 팀원들에게 양해를 구해 딜레이 하는 방향으로 진행했습니다.
최종 테스트
최종 테스트를 준비하기 위해서 우선 기존 문제부터 리팩토링 하는 과정을 가졌습니다. 그리고 이전 기수들의 최종 테스트 문제들도 5시간 타이머를 잡고 풀었습니다. 우테코에서 말하길 기존의 코드를 리팩터링 하며 4주 동안 풀었던 프리코스 문제들을 다시 풀어볼 것을 권장했던 것으로 기억합니다. 최종 테스트를 마치고 크게 느낀 점은 앞서 말씀드린 권장사항은 "당연한 것"입니다.
위에 기재된 리팩토링 Repository Link 외에도 저는 기존의 풀이 방식을 재해석하거나 다른 분들의 결과물들을 클론해 클론 코딩해보기도 하면서 다양한 풀이 방식을 조합해 저만의 최적화 방법을 찾아냈습니다. 하지만 이런 것들은 당연한 것일 뿐만 아니라 스스로 생각하기에 최종 테스트를 열심히 준비했다고 생각했음에도 0점을 받은 저로써는 "다른 무언가"를 했어야 한다고 생각합니다.
저는 단순히 실력이 부족해서 뿐만 아니라 다른 무언가가 무엇인지 알지 못했고 그래서 빵점이었던 것 같습니다. 아마 이건 본인 스스로가 찾아야 하는 문제겠죠? 개인적으로 시간을 되돌려 다시 돌아간다면 "년, 월, 일, " 같은 날짜와 시간을 다루는 방법에 대해 깊이 고민해 볼 것 같습니다. 최종 테스트를 보고 나니 이번 기수 최종 테스트, 6기 최종 테스트, 이전 기수의 크리스마스 프로모션 등 모두 날짜와 관련된 문제입니다. 그렇다면 LocalDate 같은 라이브러리를 잘 다룬다면 해당 문제가 나와도 조금 더 수월하게 풀 수 있지 않았을까 생각합니다.
앞으로의 목표
우테코에서 앞으로 10개월 동안 어떻게 성장할지 조금 깊이 고민해 봤습니다. 저는 안드로이드를 시작한 지 1년이 밖에 되지 않아 부족한 점이 정말 많고 다른 좋은 대학, 유명한 개발 동아리에서 배우지도 못했습니다. 그리고 이런 제 부족함을 알기에 뒤처지지 않기 위해 정말 처절히 2024년을 보냈던 것 같습니다. 그 결과 다온길이라는 프로젝트를 완성하게 되었습니다. 함께 다온길을 개발한 팀원분께서 이 프로젝트로 회사 면접을 갔을 때 프로젝트의 볼륨으로 인해 매번 이 프로젝트가 정말 5명이서 한 게 맞는지 질문을 받았다고 하더군요! 그만큼 정말 다 같이 열심히 한 프로젝트였던 것 같습니다.
조금 이야기가 샌 것 같지만 다시 돌아와서... 다른 분들의 최종 테스트 후기를 보면 문제를 다 푼 분들이 정말 많았던 것 같습니다. 그에 비해 저는 빵점... 아직 실력적으로 부족함을 너무나 잘 알기에 한결같은 마음 가짐으로 더욱 처절하게 열심히 하려 합니다. 그리고 단순히 열심히 하는 것을 넘어서 실력적으로는 당연 우테코에서 만날 다른 동료분들에 비해 부족하겠지만 적어도 우테코에서 "가장 열심히 하는 사람"이 되는 것이 목표입니다.