10월 19일부터 11월 16일까지, 4주간의 우테코 프리코스 과정이 있었다. 해당 과정을 거치면서 내가 어떤 것을 얻었는지, 전과 어떤 것이 달라졌는지에 대해 이야기해보고자 한다.
내가 본격적으로 웹 백엔드로 진로를 결정하고 자바와 스프링을 공부하게 된 것은 작년 겨울방학이었다. 사실 기술에 대한 근본적인 학습보다는 빨리 실전에서 무언가를 서비스해보고 싶은 마음이 컸기에, 자바든 스프링이든 얇고 넓게는 학습했어도 깊게는 학습하지 못했던 것 같다.
비록 자바에 대해서 각잡고 공부해본 적은 없지만, 꽤 많은 수의 알고리즘 문제를 풀기도 했고 스프링 프로젝트를 만들면서 항상 자바를 사용해왔으므로 이 정도의 실력이 딱히 문제가 되지는 않을거라 생각했었다. 이러한 마음을 기저에 가진 채로, 프리코스가 시작되기 약 일주일 전부터 기출 문제를 풀어보기 시작했다.
이후 프리코스 1주차를 거치면서 큰 충격에 휩싸이게 되었다. 우테코 프리코스 6기에서는 디스코드를 통해 프리코스 참여자간 의견을 나눌 수 있는 커뮤니티가 존재했다. 이 커뮤니티에서는 다양한 참가자들끼리 기술적 주제에 대해 토론하거나 유용한 정보를 공유하곤 했는데, 이 곳에서 내가 여태 전혀 몰랐던 객체지향적 지식들에 대해 알게 되었다.
이전까지 나는 스프링 MVC를 구현하면서 체득한 MVC 패턴에 대한 얄팍한 이해, 그리고 이전 기수의 프리코스 PR들을 뒤져보며 알게된 객체지향에 대한 약간의 잡지식(?) 정도를 가지고 있었다. 사실 그 전까지는 얄팍하거나 잡지식이라는 생각은 안 했는데, 커뮤니티에 올라오는 다양한 글들, 그리고 그 안에서 벌어지는 수많은 객체지향 장인들의 토론장을 목격하게 되면서 나는 내가 우물 안의 개구리였음을 깨닫게 되었다.
그리고 동시에 일주일 전부터 미리 구현해왔던 1주차 미션 코드를 통째로 갈아엎어야겠구나...라는 생각도 들었다 🤣
더닝 크루거 효과라는 용어가 있다. 능력이 부족한 사람은 과도한 자신감으로 자신의 능력을 과대평가하고, 능력이 뛰어난 사람은 오히려 겸손함 때문에 자신의 능력을 과소평가하는 현상을 일컫는 말이다. 이 때 부족한 능력의 사람이 배움을 거듭하다가 마치 나의 경우처럼 자신의 위치를 깨닫게 되는 순간이 오는데, 그곳을 우매함의 봉우리라고 한다.
1주차의 시작과 동시에 나는 우매함의 봉우리에 올랐고, 얼마 지나지 않아 자신감이 그대로 낙하하게 되었다. 물론 그대로 아무것도 하지 않았던 것은 아니었고, 프리코스 커뮤니티를 돌아다니면서 다양한 지식을 습득할 수 있도록 노력했다. "도메인 주도 개발", "일급 컬렉션", "TDA 원칙" 등... 생소한 개념이었지만 가능한 한에서 최대한 빠르게 학습하고 적용해보려고 했던 것 같다.
다만 이미 깊게 공부를 하고 온 사람들을 따라잡는 것은 역부족이었기에, 자신감이 떨어지는 한편 뒤쳐지지 않기 위해 남는 시간에 계속 위와 같은 개념들에 대해 찾아보고 학습했다.
2, 3주차는 앞선 객체지향적 관점을 이해하고 적용하는, 그리고 프리코스의 시스템에 점차 적응할 수 있는 시간이었다.
이전까지는 솔직히 별 생각 없이 가져다 썼던 객체지향적 개념들이 많았는데, 이러한 개념들에 대해 내 스스로 "어떨 때 쓰는 것인지?" 또는 "지금 내 프로젝트에 적용하는 것이 맞는지?" 등을 곰곰히 생각해볼 수 있는 시간이었다. 추가로 코드 리뷰를 통해 나와 다른 생각을 가진 사람
, 나보다 훨씬 잘하는 사람
, 나보다 못하는 사람
을 모두 경험하며 발전할 수 있었다.
나와 다른 생각을 가진 사람의 경우
, 생각지도 못했던 관점에서 생각할 수 있게 되어서 도움이 되었고, 나보다 훨씬 잘하는 사람
은 당연히 나에게 가르쳐줄 수 있는 것이 많기 때문에 도움이 되었다. 마지막으로 나보다 못하는 사람
은 내가 그 사람을 위해서 코드에 대해 설명해줄 때 나 스스로 떳떳하지 못했던 코드들을 발견할 수 있었기에 도움이 되었다.
여담이지만 처음엔 코드리뷰를 최대한 많이 받아야겠다는 생각에 일주일 중 리뷰에만 4일을 쏟고 나머지 3일 동안 구현을 진행했는데, 결론적으로는 시간이 너무 부족해서 거의 30분만을 남기고 과제를 제출하게 되었다. 이 때 나의 구현 속도가 별로 빠른 편이 아님을 알게 되었다. (추후 최종 코테에서는 5시간의 제한 시간 안에 구현을 완료해야 하므로, 중요하게 보완해야 할 점임을 깨닫게 되었다.)
몇 주간 끊임없이 새로운 개념을 찾아보고 적용해보면서 시행착오를 겪은 탓에, 4주차가 되었을 때는 어느 정도 나의 의도와 가치관이 담긴 코드를 짤 수 있었다.
그 전까지 주로 고민했던 부분이라고 한다면 "getter의 허용 범위는 어디까지인가?", "도메인 객체의 상태 출력은 어느 계층의 책임인가?", 그리고 "어느 정도까지의 확장을 대비하여 코드를 짜야 하는가?" 등이 있었다. 사실 이러한 부분은 정해진 정답이 있는 것이 아니라 개인의 논리와 판단에 따라 정해지는 경우가 많은데, 그러한 관점에서 봤을 때 나는 4주차에 들어서면서 이러한 고민에 대한 생각과 가치관을 어느 정도 정리했다고 볼 수 있다.
프리코스를 마치면서 이전과 크게 달라진 점은 첫 번째로 작성하는 코드의 퀄리티가 눈에 띄게 달라졌다는 점이다. 이전의 코드는 다른 사람이 알아보기 어렵고(나조차도) 유지보수가 쉽지 않은 코드였으나, 이제는 그와 반대로 남들이 쉽게 알아볼 수 있고 확장성이 뛰어난 코드를 작성할 수 있게 되었다.
두 번째로는 순수한 자바 실력 자체가 매우 상승했다. 기존에 몰랐던 문법들도 여럿 익숙해졌으며, 객체지향적인 코드에 대해서 끊임없이 고민하다보니, 자바 언어에 대한 이해도도 상당히 높아진 느낌이다.
세 번째로는 4주 동안 있는 시간 없는 시간 다 갖다 바치면서 고생한 결과, 나의 한계에 대해 다시 정의할 수 있게 되었다. 사실 우테코 프리코스라는 과정은 누가 나서서 가르쳐주는 게 아닌, 그냥 공유된 미션을 잘 풀어서 제출하는 방식의 과정이다. 참가자 본인의 의지에 따라 그 난이도는 바닥과 천장을 왔다갔다 하겠지만, 일단 나에게 있어서는 정말 극악의 난이도였다.
짧은 시간 안에 너무도 많은 지식을 흡수해야 했고, 이를 곧바로 적용하여 미션을 해결해야 했다. 심지어 미션 제출 후에도 과연 내가 옳게 구현했는지에 여러 사람들로부터 평가를 받고 해당 피드백을 다시 적용하는 과정이 계속해서 반복됐다.
부족한 실력이지만 다른 잘하는 참가자들을 따라잡고 싶다는 생각을 계속하면서 그것이 추진력이 되었고, 애초에 격차가 컸기에 그들을 따라잡지는 못했지만 그래도 나 자신은 프리코스 전에 비해 엄청난 성장을 이룰 수 있었다. 솔직히 평소에 많이 게으른 편인 나인데, 할 때는 할 수 있다라는 사실을 스스로 증명한 것 같아서 뿌듯했다.
매순간 벽에 부딪히고, 또 그 벽을 부수기 위해 노력했던 4주였던 것 같다. 이제는 12월 16일에 있는 최종 코딩 테스트를 준비해야 하는데, 사실 이번에 프리코스하면서 잘하는 사람들을 너무 많이 봐서 그 사람들을 뚫고 내가 최종 합격하는 그림이 솔직히 잘 상상이 되진 않지만, 그래도 남은 시간 동안 내 나름대로 후회가 남지 않도록 최대한 노력해보려고 한다.
가보자 가보자 !
합격하시길 바래요. 응원합니다 :)