9월말부터 시작한 우아한테크코스 시험여정이 드디어 마무리되었다.
이러한 과정이 처음이기도 했고 9월 말부터 1월 중순까지 거의 4개월을 진행했기 때문에 조금 힘들었던 부분들도 있었다.
다행히도 필자는 운이 좋게 합격메일을 받을 수 있었다.

필자도 이전기수분들의 후기글들을 참고하여 많은 도움을 얻었다.
그렇기 때문에 필자또한 이후 기수를 준비하시는 분들에게 조금이라도 도움이 되기 위해 이 글을 작성하기 시작했다.
필자는 프로그래밍에 대해서 알게된지는 4년정도 됐다.
하지만 중간에 1년 반동안 아픈기간이 있어서 사실 제대로 프로그래밍을 한지는 2년 반정도 된거같다.
필자는 대학을 가지 않았다.
대학을 가지않고 바로 일을 시작해서 돈을 모으려고 했지만 막상 일을 시작하니 어렵고 작은 사건들이 터졌다.
그냥 내가 하고싶은걸 하면서 사는게 행복하지 않을까라는 생각과 동시에
하는 일을 그만두고 지금까지 하고싶은걸 하고 살아왔다.
프로그래밍도 동일하다.
아무튼 프로그래밍을 혼자하면서 다양한 프로젝트를 진행했지만 매번 실패했다.
아무래도 너무 목표를 높게 잡고 조금 완벽주의 성향이 강했다.
당시에 필자는 모든 범위를 다 커버하려했다.
풀스택을 하면서 쿠버네티스, 모니터링 까지 하려했다.
결국 남는건 얕은 지식과 실패였다.
그래서 1년반전부터 하나의 스택에 몰입하기로 했다.
그게 django였고 오픈소스 기여도 해보면서 다양한 사람들과 접하고 예상과 달리 크게 성장할 수 있었다.
(그 당시 오픈소스 기여는 나의 꿈이었다)
사실 오픈소스 기여도 주변 친구가 학교 동아리에서 하는 프로젝트 PR에서 서로 리뷰를 주고 받는 모습이 너무 부러워서 "나도 누군가에게 내 코드를 리뷰 받고 싶다"라는 마음에서 시작한것이었다.
그렇게 시작하고 어쩌다 보니 적응을 잘해서 지금의 내가 있는건가 싶다.
부트캠프에 대해서는 잘 알고있었고
나에게 꼭 필요한 과정이라고 생각했다.
오프라인에서 나와 비슷한 취미를 가진 사람들과 모여 무언가를 한다는건 너무 행복한 일이 아닐까?
1년 전에 SSAFY에 지원하려 했는데 고졸이라서 불가능했다.
놀랍게도 SSAFY 파이썬 과정을 하면 django를 아마 메인으로 배우지 않을까 싶은데 django 팀에 속해 있는 지금도 나는 고졸이라서 지원을 못한다는게 좀 아이러니하다.
당시에 스트레스도 많이 받았다.
내가 선택한 고졸인데... 아무튼 슬펐다.
(역시 부모님말은 틀린게 없었다)
그때 당시에 눈물을 뒤로하고 오픈소스에서 내가 성장할 수 있다는 확신을 가진채 django에 더 몰입하고 이후 1년 뒤에 우테코 8기를 지원하기로 마음먹었다.
(프론트엔드에 지원하게 된 과정까지 설명하면 너무 길어지기 때문에 스킵하겠다..)
이번 8기는 프리코스의 마지막주차가 오픈미션으로 변경됨에 따라 이전 기수에 비해 약간의 변수가 있었다.
오픈미션을 도입했던 이유는 프리코스를 훌륭하게 마친 참가자들이 많지만 뽑을 수 없었다는 점
즉, 프리코스만으로는 변별력이 크게 없었기 때문에 결국 지원서의 영향이 컸다는걸 알 수 있다.
그리고 그 변별력을 높이기 위해 오픈미션을 도입했지만 필자는 여전히 지원서가 가장 중요하다라고 생각한다.
(물론 프리코스를 대충해서는 안된다.)
이번에는 이전 기수와 달리 문항이 하나였다.

위 글이 실제로 쓰인 문항은 아니였는데 거의 유사하다.(사진을 찾지 못했다..)
간단하게 말하면 자신이 "도전"했던 것에 대해 쓰는것이었다.
필자도 지원서를 준비하는 단계에서 지원서가 많이 중요하다는걸 이전 기수분들을 통해 알고 있었다.
필자가 지원서를 어떤식으로 작성할지에 대해 분석할때 문항을 하나하나 생각해서 키워드를 찾으려고 했던거 같다.
위 글을 예시로 하면 "왜 그 일에 빠져들었는지", "직면한 가장 큰 난관과 이를 어떻게 극복했는지"인거 같다.
그리고 그 부분들에 대해서 글을 작성할때 우테코의 인재상을 고려하여 작성했다.
그래서 뭔가 "내가 우테코에 가서 잘할 수 있는 사람"이라는 걸 최대한 내포하려고 했다.
8기의 핵심 키워드가 "도전"인 만큼 "도전"한 부분에 대해서 설명하고 "도전"을 통해 배웠던 부분들또한 같이 설명하려고 했다.
...
그러던 중, 대학을 다니는 친구가 동아리에서 진행하는 협업 프로젝트를 우연히 보게 되었습니다. 깃허브에서 활발히 Pull Request를 주고받으며 서로의 코드를 검토하고 더 나은 방식을 제안하는 모습이 인상 깊었습니다. 그때 깨달았습니다. 혼자서는 절대 성장할 수 없다는 것. 저도 협업을 통해 문제를 함께 해결하고, 피드백을 받으며 성장하고 싶다는 마음이 생겼습니다.
그 무렵 Django 관련 블로그 글을 작성하다가 사소한 개선점을 발견했고, 이를 Django에 제보하면서 처음으로 오픈소스에 발을 들이게 되었습니다. 그 작은 제보는 제 개발 인생의 전환점이 되었고, 지금은 Maintainer의 초대를 받아 Django Triage & Review 팀의 일원으로서 더 깊은 수준의 협업을 경험하고 있습니다. 하지만 그 자리에 오기까지의 과정은 결코 쉽지 않았습니다.
첫 오픈소스 기여는 Django Admin의 ‘사용자 추가 페이지’에서 입력 안내 문구를 수정하는 작업이었습니다. 평소 Django를 애정하며 사용해왔지만, 실제 소스 코드를 마주했을 때는 거대한 벽과 마주한 듯했습니다. Django는 백만 줄에 가까운 코드로 이루어져 있었고, 필요한 로직을 찾는 과정은 매우 어려웠습니다. 저는 내부 구조를 이해하기 위해 의도적으로 코드를 수정하며 디버깅했고, 내부 모듈을 따라가며 추상화 구조를 파악했습니다. 이 과정을 통해 복잡한 코드베이스에서는 구조를 이해하는 능력이 필수적임을 깨달았습니다.
결국 입력 안내 문구가 존재하는 파일을 찾아 수정한 뒤 첫 Pull Request를 제출했습니다. 기존에는 정적인 문장이었지만, 특정 부분을 동적으로 바꾸어 필수 값 변화에도 자연스러운 문장이 되도록 수정했습니다.
얼마 지나지 않아 Django의 Maintainer와 다른 기여자분들로부터 피드백을 받았습니다. 그들이 제안한 코드는 내부 객체 구조를 훨씬 더 효과적으로 활용한 방식이었습니다. “왜 이런 방식을 떠올리지 못했을까?” 하는 생각이 들었고,
내부 구조를 이해하고 객체의 형태를 파악해 적절히 활용하는 능력이 중요하다는 사실을 알게 되었습니다. 이후로는 문제를 해결하기에 앞서 항상 코드베이스를 먼저 이해하려 노력했습니다. 그럴수록 제 해결 방식의 깊이와 퀄리티가 눈에 띄게 달라졌습니다.
...
위 글은 실자로 필자가 지원서에 작성했던 내용이다.
모든 내용은 부끄럽기 때문에🙈 전부 다 올리지 않았지만 그래도 어떤식으로 작성했는지 참고하는데 조금이라도 도움이 되지 않을까 싶다.
물론 필자의 지원서가 무조건 정답은 아닐것이기 때문에 너무 편향되면 좋을게 없다라고 생각한다.
아 그리고 꼭 검수자가 있으면 좋다라고 느껴진다.
필자는 이런 지원서를 작성해보는게 태어나서 처음이었다.
그래서 정말 지원서 작성하는게 너무 어려웠다.
필자는 친구 그리고 큰누나한테 검수를 받았다.
지금은 공기업에 다니는 큰누나가 과거 프로 면접러였다는걸 알기 때문에 부탁했다.
지금 생각해보면 큰누나의 덕이 정말 크다.
솔직히 처음 지원서 초안 작성했을때 내 맘에 들었고 바로 제출하고 싶었다.
아마 그랬으면 1차도 떨어지지 않았을까 싶다.
큰누나는 예상한대로 노하우가 많았고 그 노하우를 나에게 알려주면서 지원서 마감 전까지 많이 보충하고 수정하여 제출할 수 있었다.
(그렇게 내 추석은 날아갔다..)
필자는 django 오픈소스에 1년 동안 기여하면서 django Triage & Review팀에 합류하기 전까지의 과정을 담았다.
놀랍게도 지원서 작성 1주일전에 Sarah에게 제안받으면서 운이 아주좋게 지원서에 힘을 좀 더 실을 수 있었다.
이번 8기 지원서의 최대 글자수는 1만자였다.
필자는 4000자 정도 채웠다.
다른 분들을 보면 1만자를 꽉 채운 분들도 있다는걸 들었다.
대단하신 분들이라고 느껴진다.
필자는 글자수에 크게 연연하지 말라는 말을 하고 싶다.
그리고 필자는 실제 작성할때 글자수에 크게 연연하지 않았다.
(솔직히 거짓말이고 조금 연연했다.)
왜냐하면 내가 코치라고 생각했을때 너무 긴 글이 도착하게 되면 보기전부터 피곤하지 않을까? 라는 쓸때없는 생각이 들었기 때문이다.
물론 본인이 표현할 내용이 1만자도 부족하다면 1만자를 다 채우는게 당연한 걸 수도 있다.
필자가 말하고 싶은건 억지로 글자 수를 채울 필요는 없을거 같다는 것이다.
프리코스는 재밌었다.
(물론 힘든점도 많았다)
우테코에 대한 생각이 없더라도 한 번쯤은 해보는걸 추천드리고 싶다.

필자가 프리코스에 대해서 하고싶은말은 그냥 "즐기자"라는 것이다.
(필자는 즐기지 못했다. 솔직히 힘들었다. 하지만 배운건 많았다고 확신한다.)
물론 이 "즐기자"에는 아무렇게나 즐기자가 아니다.
프리코스 과정속에서 우테코가 제안하는 방식을 따르면서 평소에 프로그래밍을 했던 태도의 변화를 느껴보는것이다.
그리고 주마다 과제를 수행하면서 "어떻게 하면 더 좋은 코드를 작성할 수 있을까?"라는 것에 많이 고민해보는 것이다.
물론 이 부분은 아키텍처, 클린코드, 객체지향.. 과 같은 다소 복잡한 이론이 껴있을 수도 있다.
하지만 이건 필자의 개인적으로 냉정한 생각이지만 우테코 프리코스는 이론과 무관하게 좋은 코드를 작성할 수 있는 수준이라고 느껴진다.
즉, 구현 과제가 그 정도로 복잡하지는 않기 때문에 객체지향만 고려한 뒤 만약 내 코드를 동료에게 보여줘야하고 어떻게 하면 내 코드가 잘 읽힐 수 있는지 그리고 추상화가 적당한지에 대해 고민하는 수준이면 충분할거 같다.
어쩌면 "시험"이기 때문에 약간의 보여주기식이 필요할 수도 있다.
하지만 필자는 담백한 코드를 좋아한다.
물론 입맛처럼 개인적인 취향일 수 있다.
그래서 사실 어떻게 하는게 좋을지에 대해서 어떤 말을 해야할지 잘 모르겠다.
가장 좋은 방법이 있다면 이전 기수 합격자의 프리코스 코드를 참고하면 되지 않을까?
그리고 필자가 즐기지 못한 이유에 대해서 설명하면...
그냥 마지막 주가 오픈미션으로 대체되면서 프리코스기간이 길었다.
그래서 힘들었다..
하지만 배운건 정말 많았다.
우테코에서 리뷰가 필수과정은 아니지만 권장되는 레벨이다.
필자는 django 오픈소스에 참여하면서 리뷰를 그래도 자주 해본편인거 같다.(Review팀에 있기도 하고..)
그래서 리뷰하는 과정이 조금은 익숙했고 재밌었다.
물론 처음만 재밌고 하면할수록 계속 똑같은 구현을 4,5개 봐야하기 때문에 이 부분은 조금 힘들었다.
사실 리뷰라는게 우테코와 별개로 정말 큰 도움이 되는 과정이라고 생각한다.
(고퀄리티의 코드를 만들어 가는 과정에서는 정말 아름답고 핵심적인 과정이라고 생각된다.)
리뷰를 하는 사람도 그렇고 받는 사람도 그렇다.
그래서 결론으로 필자는 리뷰하는걸 추천한다.
물론 너무 매몰되어서 10명 치를 억지로 리뷰할 필요는 없는거 같다.
참고로 리뷰에서 가장 중요하게 생각되는건 "매너"라고 생각한다.
아무리 잘하는 사람이 리뷰해줘도 매너가 밥맛이면 정이 떨어진다.
서로의 생각을 리스펙하고 자연스럽게 나의 생각에 대해 어때? 라고 물어보는게 좋은 시작이라고 생각된다.
필자는 소감문을 매주 1000자 정도 작성한거 같다.
그냥 하면서 느꼈던것들을 솔직하게 표현했던거 같다.
https://github.com/woowacourse-precourse/javascript-calculator-8/pull/76
https://github.com/woowacourse-precourse/javascript-racingcar-8/pull/55
https://github.com/woowacourse-precourse/javascript-lotto-8/pull/24
어쩌면 이번 우테코에서 최고의 변수였다.
물론 실제로 얼마나 오픈미션에 참여했는지는 모르지만 아마도 오픈미션 때문에 이탈하는 사람도 있었지 않았을까? 라는 생각이 들정도로 변수였다.
필자도 오픈미션 주제를 정하는 기간만 1주였다.
그래도 다행인건 오픈미션은 시간을 길게 주기 때문에(3주) 천천히 생각하고 진행하면 되지 않을까 라는 생각이 든다.
오픈미션에 대해서 딱히 할말은 없다.
이번 키워드가 "도전"이고 오픈미션도 "도전"의 성향이 깊기 때문에 자연스럽게 새로운 도전을 하고 그 과정속에서 배운걸 표현하면 되지 않을까 싶다.
필자는 django 웹사이트에 사용되는 이미지를 자동으로 업데이트하는 기능을 구현했다.
오픈미션과 관련되어서 따로 글을 작성했기 때문에 궁금하신 분들은 이 글을 참고하시기 바란다.

필자는 5,6,7기 최종코딩 테스트, 4주차 문제를 풀어보았다.
추가로 프리코스 3주차(본인기수)도 한 번 다시 풀어보았다.
3주차를 푼 이유는 이전기수분들에 의하면 최종코테는 프리코스 마지막주의 스타일이 많이 첨가된다는걸 봤기 때문이다.
(8기 기준으로는 사실이었다)
참고로 4시간에 맞춰서 풀으려고 노력했다.
그리고 최대한 ApplicationTest 통과에 집중했다.
생각보다 ApplicationTest통과 조건이 빡세지 않기 때문에 테스트에 대해 이해하고 테스트를 해결할 방안에 대해 고민하면 좋은거 같다.
그리고 필자는 흔히 말하는 "스니펫"을 준비해 갔다.
내가 주로 사용한 코드패턴들을 github저장소에 기록해서 시험때 참고하려고 했다.
추가로 8기는 최종코딩테스트와 1차 합격 발표사이 기간이 2주정도 주어졌다.
그래서 필자는 딱히 발표전까지 최종코딩테스트를 준비하지 않았다.
(합격할지 불합격할지도 불확실하기 때문이다.)
하지만 이전 기수분들은 최종코딩테스트와 1차 합격 발표사이 기간이 1주도 안된걸로 알고있다.
당연히 이런 상황에서는 1차 합격 1주전에는 준비해야하지 않을까 싶다.
물론 본인의 실력에 맞게 알잘딱하면 될거같다.
필자는 잠실 루터회관에서 시험을 치뤘다.
아마 프론트엔드 지원자는 전부 루터회관에서 시험을 치룬거 같다.
필자는 프리코스 과정에서 리뷰 스터디를 구했는데 우리 스터디에서 70%이상이 최종시험을 보러온거 같았다.
그래서 내심 기뻤다.
아쉽게도 필자는 루터회관에서 찍은 사진이 없다.
대신 최종코테를 보면서 받은 굿즈를 첨부한다.

최종 코테는 정말정말 떨렸다.
근데 막상 시작하고 시험문제가 프리코스 3주차와 거의 90% 동일해서 마음이 조금 편안해졌다.
하지만 변수가 존재했는데
프론트엔드 파트는 ApplicationTest에서 한 문제가 조금 문제가 있어서 통과할 수 없었다.
필자는 특정 함수를 오버라이딩하여 통과시켰지만 이 부분에 시간을 조금 많이썼다.
8기 최종 코테는 3주차와 거의 비슷한 만큼 다른 조건이 추가되었다.
추가 기능을 구현하거나 깊은 수준의 리팩토링을 하거나 둘 중 하나를 수행해야했다.
즉, 과제를 완성하고 난 뒤에도 자율적으로 뭔가를 할게 주어졌다.
필자는 추가 기능을 선택했다.
사실 리팩토링은 프리코스 단계에서 많이 고민해봤지만 추가 기능에 대해서는 고민하지 않았던거 같다.
필자는 잔돈, 6, 7등 추가, 최종 상금 계산과 같이 조금 예상되는 뻔한 추가 기능을 구현했다.
그래서 조금 아쉬운 마음이 있었다.
이전 기수분들처럼 똑같은 말을 하려고 한다.
5시간안에 풀어보는 연습을하고 해당 기수의 마지막 프리코스문제를 다시 풀어보는 것이다.
(+ AI사용 X)
"떨지마라"라는 말을 하고싶지만 사실상 불가능하기 때문에 무시하면 된다.
https://github.com/woowacourse-precourse/javascript-planetlotto-8/pull/10
최종 코딩 테스트를 보고 2주쯤 지난 시점에 필자는 합격 메일을 받을 수 있었다.

운이 좋았다.
21살 이후로 정말 히키코모리처럼 1층 사무실에서 5년 동안 살았는데
드디어 그 생활을 마무리하고 밖에 나갈(판교) 생각에 기쁘다.
부모님도 너무 좋아하셨다.(누나들도 좋아했다)
조금 TMI지만 필자는 어렸을때부터 몸이 조금 안좋았다.
그래서 그런지 더 좋아하셨다.
1층 사무실에서 뭘 하는지도 모르고 키보드만 두드리고 있는 나를 믿어준 부모님에게 감사하고
이 기회를 준 우형에게도 감사하다.
그리고 정말 가족같이 느끼는 django 조직원들에게도 너무 감사하다.
정말정말정말정말 많이 날 성장시켜줬다.
아! 그리고
필자는 우테코 합격전까지 과정중에서 가장 힘들었을때가 최종 발표나기전 2주다.
진짜 피말렸다.
2주동안 시간 태울려고 드라마를 많이 본거같다.
넷플릭스 사냥개들, 스토브리그 정말 재밌었다.