[준비] 💻 우아한테크 코스 2기 지원, 프리코스, 오프라인 코딩테스트 후기

2019. 12. 11. 16:00일상/우아한테크코스

본 포스팅은 2019년 12월 11일에 처음 작성 되었으며, 이후 2020년 1월 15일에 오프라인 코딩테스트 내용을 추가하여 재작성되었습니다. 

우아한테크코스란?

우아한테크코스 2기 지원 과정

프리코스 주차별 후기

오프라인 코딩테스트 후기


우아한테크코스? 


우아한테크코스 2기 모집 포스터

위에는 이번에 진행한 우아한테크코스 2기 모집 포스터인데요,  교육 목표에서 알 수 있듯 우아한테크코스란 우아한형제들에서 진행하는 개발자들을 위한 교육프로그램입니다. 이번 2기 모집에 저도 지원을 하였고, 12월 18일인 오늘로 프리코스 과정을 마쳤습니다. 이번 글에서는 프리코스동안 제가 보고 느낀 것들을 후기로 작성해보려합니다. 

우아한테크코스 2기 지원 과정


사실 전 1기에도 지원을 했습니다. 평소 좋아하는 회사인 우아한형제들에서 개발자를 위한 교육코스를 마련했다 라는 글을 보고 얼마나 설렜는지 모릅니다. 그래서 바로 지원을 했고 결과는 코딩테스트에서 탈락했습니다. 여태 제가 봐왔던 코딩테스트보다는 쉬운 편이라 생각했는데 서류에서 부족했거나, 제 코드가 부족했었나봅니다. 그렇게 가슴속에 미련 1g..아니 100kg..을 가지고 살다, 10월 중순에 우아한테크코스 2기 모집 소식을 접하게 됩니다. 1기를 4월에 모집했기에, 2기 역시 '내년 초쯤에 하겠구나'라고 생각했는데 생각보다 빨리 모집을 해서 너무 기뻤습니다. 이번엔 꼭 코딩테스트(+서류)에서 붙겠다고 다짐하며 열심히 또 열심히 지원서를 작성하였습니다. 코딩테스트 난이도는 1기와 크게 다르지 않았고, 다 풀어서 제출한 후 결과를 기다렸습니다.

 

 

2019년 3월(1기 모집)과 11월(2기 모집)의 희비교차

결과는 1차 심사 통과였고, 그 다음은 과정은 프리코스였습니다.  프리코스 란 약 3주동안, 매주 주어진 미션을 수행하는 코스입니다. '드디어 나도 프리코스를...!'이라는 설렘 반, '내가 3주 동안 모든 미션을 다 해결할 수 있을까'라는 걱정 반으로 프리코스 1주차 미션을 메일을 통해 받았습니다. 프리코스 후기는 아래에서 주차 별로 작성해보았습니다.

 

우아한 테크코스 2기 과정

 

프리코스 후기


✍ 1주차 후기 (2019.11.27 ~ 2019.12.03)

1주차 미션은  숫자야구게임 을 구현하는 것이었습니다. 물론 그냥 구현하는 것이 아닌, 프로그래밍 요구사항을 맞춰 구현해야합니다. 프로그래밍 요구사항들 중 제게 가장 영향력 있던 것들에 대해 작성해보았습니다.

 

구현 전 기능 목록을 구체화하고, 기능에 맞추어 commit을 하는 것

사실 구현 전 기능 목록을 구체화 하는 것은 평소에 프로그래밍을 하면서 했던 일이라 대수롭지 않게 생각했습니다. 하지만 그 기능 목록 순서를 바탕으로 commit을 해야한다고 생각하니 갑자기 어렵게 느껴졌습니다. 그래서 README 작성에 가장 오랜 시간이 걸린 것 같습니다. 특히, 이러한 순서로 코드를 작성하면 되겠다 생각하고 실제로 코드를 작성하면 다른 것을 먼저 구현해야하는 문제가 발생했습니다. 그래서 중간에 readme를 수정하기도 했습니다. 하지만 이러한 작업을 통해 어떤 순서로 코드를 작성해 나갈지에 대해 조금이나마 감을 잡을 수 있었고, 정확한 명세는 실제 코드 구현시간을 단축시켜준다는 것을 느낄 수 있는 좋은 기회였습니다.

 

indent depth를 줄이는 것

부끄럽지만, 그 동안 프로그래밍을 하면서 indent depth에 대해 신경을 크게 쓰지 않았습니다. 하지만 depth가 2를 초과하지 않게 코드를 작성하다보니 더욱 함수를 분리하는데에 집중을 할 수 있었습니다. 특히, 이렇게 분리된 함수들은 코드를 작성함에 있어 중복된 코드를 제거할 수 있도록 도와주었습니다.


주석문 및 클래스 정보 표시

이 역시 그동안 프로그래밍을 하면서 크게 신경쓰지 않았던 부분입니다. 하지만 일관성 있는 주석과 클래스 정보를 표시하는 것은 코드를 더욱 빠르게 이해하고 클래스 정보를 정확히 파악할 수 있도록 도와준다는 것을 다시 한 번 느꼈습니다.

숫자가 없는 코드 구현

코드에 최대한 숫자를 집어넣지 않기 위해 의미가 있는 숫자들은 상수로 선언하였습니다. 이런 방식으로 코드를 작성하니 가독성이 훨씬 높아지고 코드 수정 시에도 편리하게 할 수 있었습니다.

 

✍ 2주차 후기 (2019.12.04 ~ 2019.12.10)

 

2주차 미션은  자동차 경주 게임 을 구현하는 것이었습니다. 2주차 미션 메일에는 무려 1주차 미션에 대한 피드백 파일도 있었습니다. 물론 개인 코드리뷰는 아니고, 1주차 미션을 수행한 모든 지원자들의 공통 피드백이었습니다. 사실 그 동안 코드리뷰라고 하면 다른 사람이 내 코드를 평가한다는 생각에 부끄러움과 왠지 모를 두려움을 가장 먼저 느꼈지만, 이번 공통 피드백을 받고 생각이 바꼈습니다. 피드백이 정말 많은 도움이 되었고, 덕분에 이제는 '코드리뷰'라고 하면 긍정적인 생각부터 듭니다🤗 아무튼, 2번째 진행한 미션이다보니, 2주차는 1주차에 비해 어떤 부분들이 조금 더 성장했는지 느낄 수 있었고, 보람찬 감정과 함께 더 즐겁게 미션을 수행 할 수 있었습니다.

 

[1주차에서 제게 영향을 주었던 것들 인데요, 2주차에서는 어떻게 변화하였는지 대략 적어보았습니다]

구현 전 기능 목록을 구체화하고, 기능에 맞추어 commit을 하는 것

저번 주에는 README를 작성하는데 2일이 넘게 걸릴 정도로 헤맸습니다. 하지만 한 번 경험하고 나니 대략적으로 어떤 식으로 코드를 짜 나가야할지 감이 잡혔고 덕분에 이번 미션에서는 하루만에 작성을 끝낼 수 있었습니다. 또한, README와 실제 기능 구현 내용이 크게 다르지 않았습니다.

 

indent depth를 줄이는 것

1주차에서는 코드를 작성했을 때 depth가 3 이상인 부분이 존재해서 다시 코드를 수정하는 작업을 하였습니다. 하지만 지금은 최대한 메소드로 분리시키려하니 굳이 의식하지 않아도, depth가 2를 넘지는 않았습니다.

 

주석문 및 클래스 정보 표시 및 숫자가 없는 코드 구현

위를 지키면서 코드를 작성하다보니 확실히 가독성이 좋아졌고 때문에 코드를 볼 때마다 좀 신났습니다. 내가 이렇게 (깔끔하게) 짤 수 있다니! 물론 다른 분들에 비해 한없이 부족하지만 과거의 제 자신과 비교했을 때 그렇게 뿌듯하지 않을 수 없었습니다.  

 

code convention

1주차에서는 제가 하던대로 코드를 짜고, 마지막에 공백이나 변수 선언의 순서 등을 고쳐주었습니다. 정말 제출을 위해 지킨 code convention이었던 것 같습니다. 저번주를 반성하며, 이번주 미션에서는 코드를 작성하기 전에 다시 한 번 숙지하고, 작성 중 헷갈리면 다시 보면서, commit을 할 때마다 코드컨벤션을 재 점검하였습니다. 계속 이렇게 반복하다보면 습관이 될 것이라 생각하면서 더 열심히 연습할 예정입니다.

[2주차 미션에서 영향을 끼쳤던 것들]

else 예약어를 쓰지 않는다.

else를 사용안하는 경우도 종종 있었지만 프로그램 전체에서 else를 못쓴다는건 너무 어렵지 않을까 생각했습니다. 하지만 힌트대로 return하는 방식으로 구현하니 else는 굳이 필요가 없음을 깨달았습니다. 추가로 왜 else 사용 금지를 요구사항에 넣으셨을까 궁금해서 찾아보니 변경, 확장이 될 수록 코드가 점점 복잡해져서 수정할 위치를 찾기 어렵고, 실수하여 코드를 누락할 가능성이 크다는 것을 알 수 있었습니다. 즉 유지보수 측면에서 단점이 있었다는 것을 새롭게 깨달았습니다.  

 

이름을 통해 의도를 드러내라.

제가 약한 부분 중 하나인 네이밍입니다. 최대한 data, value와 같은 추상적인 이름들은 피하고 있지만, 아직까지도 많은 시간이 소모되고, 골치아픈 부분입니다. 가끔 이름을 생각하다가 그냥 대충 짓고 코드부터 구현하자. 이름은 나중에 수정하지 뭐~ 이러고 넘어간 적이 있습니다. 하지만 네이밍에 시간을 투자하라고 하신 걸 보고, 아 시간을 투자하는 건 당연한 일이었고 그만큼의 가치가 있는 작업이었음을 깨달았고 지금은 더 신중히 이름을 지으려 노력중입니다.

 

✍ 3주차 후기 (2019.12.11 ~ 2019.12.17)

벌써 마지막 미션 후기네요. 12월동안 매 주 미션을 수행해서 그런지 시간이 참 빠르게 간 것 같습니다. 3주차 미션은  블랙잭 게임 구현입니다. 사실 저는 이번 미션을 통해 블랙잭이라는 게임을 처음 접했습니다. 블랙잭이라는 게임을 모르기도 하고, 워낙 나라마다 룰이 다양해서 게임을 이해하고 구현할 기능 목록을 작성하는데 2~3일 정도가 걸린 것 같습니다. 따로 용어도 찾아보고, 실제로 게임도 해보았지만 제대로 이해를 못해서 중간에 README도 계속해서 수정해야 했습니다. 블랙잭 미션을 통해 요구사항에 대한 확실한 이해가 있어야 더 정확하고, 덜 수고스럽게 프로그램을 만들 수 있다는 것을 깨달았습니다. 3주차에서 제게 가장 큰 영향을 주었던 것은 바로 상속이었고, 그에 대해 짧게 리뷰를 작성하였습니다.

 

상속

3주차 미션에는 상속 개념을 직접 코드에 적용하여 프로그램을 구현했습니다. 딜러와 플레이어의 공통 기능을 담는 User 클래스를 만들어서 공통멤버를 넣어주었습니다. 예를 들어, 딜러와 플레이어가 모두 갖고있는 카드 리스트, 카드를 한장 더 가지는 행위, 현재 카드의 합을 계산하는 행위 등을 말이죠. 공통된 행위를 상속시킴으로써 딜러와 플레이어 클래스의 코드가 간결해져서 보기 좋았던 것은 물론, 하위 클래스에서 오버라이딩을 하여 각각 다르게 동작시키는데에서 사소한 재미를 느낄 수 있었습니다.

 

프리코스를 마무리하며

사실, 처음 지원했을 때에는 프리코스에 대한 기대가 크지 않았습니다. 그저 지원과정 중 하나라고 생각했습니다.  하지만 프리코스 전 보내주신 [프리코스를 진행하는 목적과 사전 준비] 메일을 읽고, 프리코스에 임하는 마음가짐을 조금 바꾸었습니다. 기존엔 "평가자를 만족시키는 결과물을 만들어야지" 였다면, 메일을 읽은 후에는 "내가 성장할 수 있고, 평가자도 만족시킬 수 있도록 열심히 공부하고 최선을 다해야겠다."라고 말입니다. 그리고 실제로, 프리코스를 수행하면서 제 자신이 3주전에 비해 많은 성장을 했음을 느끼고 있습니다. 우테코를 지원하고 프리코스를 시작할 때 까지만 해도 제가 이렇게까지 성장할 것이라 생각도 못했습니다. 프리코스를 진행했던 3주는 정말 가치있는 시간이 되었고, 프리코스가 끝난 지금 너무나 후련하고 뿌듯합니다.

 

오프라인 코딩테스트

문제를 공개해도 되는지 모르겠어서 그 당시 했던 생각들과 느낀 점 위주로 써내려갈게요! 물론 우아한테크코스 깃허브에 여러 지원자분들이 날려주신 pr 코드로 문제는 대충 짐작은 할 수 있으실거예요.


 

크으.jpg

 

프리코스가 끝나고 4일 뒤 오프라인 코딩테스트를 보게 되었습니다. 사실 이 때 개인적인 여러 일들이 겹쳐서 준비할 시간이 없었고, 3주차 미션도 어렵게 느껴졌고 (핑계1, 핑계2...) 여러모로 약간 자신감이 떨어져있었습니다. 집이 멀어서 여유롭게 나왔더니 1시간정도 일찍 도착을 했고, 1등으로 도착을 했습니다. 덕분에 여기 저기 둘러보면서 "꼭 붙고 싶다"라는 의욕을 더더욱 충전할 수 있었습니다. 물과 다과가 준비되어 있었고, 펜과 노트도 주셨습니다. 펜에 재치있는 문구와 함께 "우리는 당신의 팬입니다"라는 문구가 있었는데, 긴장한 탓이었는지 정말 감동적으로 느껴졌습니다.. 😥

 

노트 고르기 너무 힘들었어요.. 다 예뻐

 

 어쨌거나 저쨌거나, 1등으로 도착했기에 제가 원하는 자리를 고를 수 있었습니다. 그래서 저는 다른 사람들을 신경 안쓰고 저에게만 집중하기 위해 맨 앞 오른쪽에 앉았어요. 그렇게 코딩테스트가 시작되었고 형식은 프리코스와 같았습니다. 메일로 미션이 전달되며, PR을 날리는 형식 그대로여서 조금 더 편안하게 시험을 치룰 수 있었습니다. 

 

참고로 코딩테스트 시간은 1기때는 4시간, 2기에는 5시간이었습니다. 남과 이야기를 나눌 수 있는 프로그램은 당연히 사용불가이며, 구글링은 가능합니다! 개인 노트북으로 시험을 보구요, 화장실은 원할 때마다 갈 수 있습니다. 따로 쉬는시간을 두지 않아서인지 모두 너무 과열정이라며 10분간 다같이 쉬는 시간을 강제로 가지기도 했습니다. (이때, 우테코 과정에 관련된 질문도 받아주셨습니다.)

 

사실, 3주차 미션보다 어려울 것이라 생각했는데 처음 문제를 보고 "다행이다" 라는 생각을 먼저 했습니다. 3주차만큼 복잡한 프로그램은 아니었기 때문인데, 주제는 woowacourse Github에서 확인할 수 있듯,  치킨집 이었습니다. 문제는 왠지 공개하면 안될 것 같아 대충 말씀드리면, 치킨 포스기를 만드는 것이었는데 주문받고 계산하는 기능이 있는 프로그램이었습니다.

 

코딩테스트 시작 전 메일에도 그리고 당일에도  모든 기능을 완성하려 하기 보다는 한 가지 기능을 완벽하게 구현하는데에 집중하라 라는 문구가 있었습니다. 그래서 저는 시험날에는 아무래도 긴장하게 되니, 프리코스에서 배웠던 것들 다 기억이 안날 것 같아 미리 정리해갔습니다. 특히 제가 가장 신경 써야 할 부분들을 중심으로 요약해갔고, 메일 하나하나 찾으면서 다시 피드백을 확인하는 것보다 훨씬 효율적으로 프리코스 내용을 참고 할 수 있었습니다.

 

특히 코드 컨벤션과 예외처리, 상수 선언 등 최소한으로 지켜야 할 것들에 신경을 많이 썼던 것 같아요. 시간을 넉넉히 주신 덕분에(..착각이었다고 한다..) 4시간동안 열심히 구현을 하고 1시간 동안 재점검을 할 수 있었습니다.  제가 실수하거나, 놓친 부분들을 발견했고 3번째 에러를 수정하여 커밋하고 push를 하려니 시간이 다 되어 push는 못한채로 제출하게 되었습니다. 하.. 이 때 얼마나 슬프던지.. 이 때는 제 코드가 이 것만 문제인지 알았지요... ^^ 나중에 보니 더 한 문제가 많았고.. 그 날은 몇 시간동안 멘탈이 나가있었습니다. 프리코스때도 안하던 실수를 하질 않나............................ 😱 다른 분들 pr날리신걸 보니 다들 기능 구현을 하신 거 같더라구요.. 그래서 거의 포기상태로 결과를 기다렸는데 합격메일을 받게 되었습니다. 프리코스기간동안 얼만큼 성장했는지가 포인트라고 하셨는데 정말 그런 것 같았습니다.

 

어쨌든 제가 그토록 원하던 우아한테크코스에 합격하게 되었고, 저처럼 우테코 정보에 목이 마르신 분들을 위하여.. 포스팅을 하게 되었습니다! 도움이 되었으면 좋겠고, 궁금한 점이 있다면 댓글로 남겨주시거나 jnsorn@gmail.com으로 메일 주시면 아는 부분에 한해서 답변드리겠습니다!