지난 10월인가 우아한테크코스에 들어가기 위한 첫 관문인 프리코스에 참여했다. 작년에도 프리코스에 참여하였지만, 1주차 제출일을 잘못 본 바람에 뭐 제출해보지도 못하고 바로 탈락하였다.
그래서 이번 프리코스에서는 한번 제대로 해보고자 했다. 그래서 프리코스 시작에 앞서 지난 기수들의 깃허브 여러 개를 스크랩하고 나만의 코드 템플릿을 만들어갔다. 매주차 과제가 마무리되고, 전달되는 피드백 사항들을 반영하여 점점 완성된 템플릿을 만들 수 있었고, 과제가 주어지면 요구사항 정리를 한 후, 1주차부터 4주차까지 내가 생각해왔던 일관된 사고방식에 따라 코드를 작성하기 시작했다.(하지만 지금 생각해보면, 너무 일관된 사고방식이 문제였던 것 같기도)
그렇게 4주 간의 프리코스를 마치고, 기말고사 기간이 시작되 기말공부를 하기 시작하였다. 1차 발표가 사실 언제인지도 몰랐다. 그만큼, 경쟁률이 빡센걸 알기에, 그리고 나만큼 준비한 사람들, 그리고 나보다 더 잘하는 사람들이 항상 많은 것을 알기에, 1달간의 프리코스가 나에게 값진 경험을 준 것으로 만족하고, 결과에 대한 큰 기대를 하지 않았기 때문이다. 같이 준비한 친구 덕에, 우연히 1차 발표 날짜를 발표 전날 알게 되었고, 정말 1도 기대하지 않았다. 뭐 몇시에 발표나는지도 모르긴 했지만, 뭐 0.1정도는 기대를 했을 수도.
그런데 정말 놀랍게도 1차에 붙게 되었다. 그렇다 보니, 더욱 붙고 싶었다. 물론 시험 당일까지 5일 정도의 준비시간 밖에 남지 않았고, 그 주에 3개의 기말고사가 있었음에도 불구하고, 간절했다. 그래서 최소한의 시험공부만 마친 상태로 3~4일 간은 밤을 새가며 이전 최종코딩테스트 문제들을 풀며, 내가 그동안 진행해왔던 프리코스 문제들을 다시 풀어보기 시작하였다. 물론 집에서 풀기도 하였고, 긴장감이 주어지지 않은 상황이다 보니, 크게 어렵지 않게 문제를 해결해 나갈 수 있었다.
하지만 실제 시험 환경에 들어가보니, 긴장감은 배가 되었고, 1주일 동안 해결해왔던 과제들 보다 더 난이도가 있는 과제를 5시간안에 해결해야 하다보니, 머리가 하얗게 변하고 내가 그동안 준비해왔던 템플릿, 준비과정들이 무색할 정도였으니깐.
이렇게, 시험이 끝나고 나니 정말 많은 생각이 들었다. 아, 난 아직 많이 부족하구나. 정말 이 생각 밖에 안들었다. 5시간동안 모든 것을 쏟아붇지 않았을 수도 있지만, 시험 보기 전에 나는 뭔가 모를 자신감에 차있었다. 요구사항을 해결해 나가는데 자만이 아닌 적지 않은 자신감이 있었기 때문이다. 하지만 해당 5시간은 내가 앞으로 졸업을 하고 계획하였던 공부들에 대한 방향성을 한순간에 무너트렸다. 물론 이 최종 코딩 테스트가 전부는 아니지만 그냥 기분이 그랬다.
그렇게 많은 아쉬움과 큰 깨달음을 얻은 채, 집으로 돌아왔다. 그렇게 2주가 지나고 오늘, 3시 발표시간이 다가왔다. 우아한테크코스의 메일 발송 도착 시간에 대한 얘기는 이전에도 많았기에, 정시에 메일이 도착하지 않는다고 해서 너무 조급해 할 필요는 없다. 메일은 결국 다 오게 되어있다. 그래서 나도 3시에 메일을 받지 못하고, 그렇게 4시가 조금 넘어 아래와 같은 메일을 받게 되었다. 2줄만 읽고 나는 메일을 바로 덮었다.
너무 아쉬었다. 하고 싶었다.
하지만, 뭐 마음을 좀 가다듬고 내년을 위한 계획들을 세우기 시작하였다.
위에 까지는 그냥 내 한 풀이 였다면, 밑에서 부터는 내년에 지원하는 사람들이 혹시 이 글을 보고 조금이나마 도움이 될까 하는 마음에 글을 한번 써보겠다.
지원서 내용은 총 4문항이 있었는데, 한 문항당 1000자에서 2000자 정도 분량이었다. 지원서 문항은 그냥 우테코 지원서만 쳐도 바로 나오기에 문항제목은 생략하고, 내가 문항에 대한 답변을 작성하며 가졌던 마음가짐에 대해 말해보고 싶다.
하반기 취업준비를 하며, 많지는 않지만 여러 자소서들을 작성하며 주로 내가 이룬 성과 혹은 경험들을 주로 작성했었다. 물론 우테코 지원서도 위와 같은 느낌으로 작성할 수 밖에 없지만, 분량이 많은 만큼 조금 더 내 간절함을 어필할 수 있겠다고 생각하였다. 작게는 문장의 어투 부터 시작해서, 이런 문장이 딱딱하고 형식적인 자소서에 들어가도 괜찮을까? 하는 문장까지 작성하며, 내가 평소에 어떤 고민을 하면서 살아왔고, 이런 고민과 사고방식이 우아한테크코스에서 어떤 긍정적인 영향을 미칠까하고 말이다. 그래서 이 글을 보고 내년에 지원서를 작성하는 사람이 있다면, 한번 소설 쓰듯이 문항을 차근차근 작성해나가는 것도 좋은 방법이라고 생각한다. 물론 난 최종적으로 떨어졌지만, 뭐 혹시나.
프리코스에 관한 부분은 위에서 말했듯이 템플릿을 적극적으로 이용했다. 입력 부분과 출력 부분을 철저히 분리하고(InputView, OutputView) 이 입출력 View 부분들을 Controller에서 의존하게 하였다. Controller는 주로 우리가 생각하는 비즈니스 로직들이 담겨있게 하였고, Controller 또한 입력을 받는 부분, 그리고 이 입력을 받아 우리가 작성한 로직들을 거쳐 출력되는 부분으로 분리하였다. 그리고 최종적으로 이 둘(InputController, OutputController)를 통합한 IntegretionController를 추가하였다. 최종적으로 도메인에 관한 부분은 요구사항을 분석하며, 이 요구사항을 해결하는데 어떤 개념 객체들이 필요할까를 최우선으로 고민하였다. 예를 들어, 주문이면 Order, OrderItem 등등 이렇게 말이다. 그리고 매주차 제공되는 피드백에서도 나오긴 하지만, 개념 객체(흔히 우리가 생각하는 도메인, 하지만 난 도메인이라는 용어보단 개념 객체라는 말이 더 맞는 것 같다)에 대한 검증은 개념 객체의 생성자내에 validate라는 메소들을 통해, 검증하게 하였다. 이렇게 하면 객체를 생성할 때, 검증 단계에서 예외가 발생하면, 객체가 생성되지 않기 때문이다. 그리고 요구사항 중에 입력값에 대한 검증이나, 개념 객체와 동 떨어진 부분에 대한 검증이 필요하다면 util(InputValidator)와 같은 검증 레이어를 추가하였다. 아래 해당 패키지 구조를 담은 문제풀이 링크를 첨부하겠다.
https://github.com/chahyunsoo/java-menu-5
아무튼 1차가 발표되기 전, 아무 생각이 없던 나에게 이렇게 좋은 곳에서 시험을 볼 수 있는 기회를 준 것만으로 정말 감사한 것 같다. 물론 최종적으로 떨어져서 정말 정말 아쉽긴 하지만, 많은 깨달음 또한 얻었으니 우아한테크코스가 정말 좋은 기관이라는 생각은 변함이 없다. 또 이 탈락의 쓴 맛을 뒤로한채 열심히 해봐야지!
아래 사진은 뭐 그냥 기분 전환!!...