본문 바로가기
ETC/우아한테크코스 3기

우아한 테크코스 3기 프리코스 후기

by 손너잘 2020. 12. 15.

우아한 테크코스 프리코스 후기

프리코스를 마무리 하며...

 

우아한 테크 코스(이하 우테코)의 3주간의 프리코스가 마무리 되었다.

우아한 테크코스에 대해서는 이곳(https://woowacourse.github.io/)에서 찾아볼 수 있다

 

어려서부터 프로그래머가 되고 싶었고 그래서 컴퓨터 관련 전공을 선택했다.

컴퓨터를 공부하며 뭔가 새로운 것을 만드는 것에만 관심이 많았고, 그래서 나의 공부는 원하는 기능의 "구현" 에만 집중하고 있었다.

그렇게 졸업을 앞둔 현재 내가 개발이란걸 할 줄 아는건가? 하는 생각이 강하게 들었다.

 

원하는걸 만들어낼 수만 있으면 그게 개발인가?, 코드의 상태가 어떻든 기능만 하면 그게 개발인가? 하는 생각이 머릿속에서 계속해서 맴돌았다.

그러다가 우연히 인터넷을 돌아다니다가 "우아한 테크 코스" 를 알게 되었고 관련 정보들을 찾아보게 되었다.

 

  • 우테코 youtube

https://www.youtube.com/channel/UC-mOekGSesms0agFntnQang

 

우테코 이전 기수 분들의 후기도 다 읽어보고, 유툽에 있는 영상도 하나도 빠짐없이 봤다.

교육장이신 포비님의 블로그에 있는 글들도 빠짐없이 읽고 느꼈다

 

"지금까지 내가 했던건 개발이 아닌것 같다"

 

단순히 기능을 동작하게 하고, 구현한다고 해서 그걸 개발이라 부를 수 없을 것 같았다.

 

자바라는 언어를 사용하고 있지만 객체지향이 무엇인지 하나도 이해하지 못했고, 디자인 패턴을 모르고 있으며

협업의 방법또한 제대로 파악하지 못하고 있었다.

 

이런 나의 부족함을 느끼고, 발전시키고 싶었다. 그래서 우테코에 지원했다.

 

 

 

 

자기소개서에 나에 대한 부족한 부분을 정말 사실대로 적었고 내 생각을 솔직하게 말했다.

진심이 통했던 걸까 아니면 운이 좋았던걸까... 1차에 통과할 수 있었고 프리코스 과정에 참여할 수 있었다.

 

 

프리코스 과정은 3주간의 미션이 주어지고, 각 미션을 해결하는 방식으로 이루어졌다.

각 주차 미션마다 요구사항이 조금씩 늘어나고 그걸 만족시켜야 한다.

 

1주차 미션은 숫자 야구 게임이었다.

 

https://github.com/woowacourse/java-baseball-precourse

기본적인 요구사항은 다음과 같았다.

 

 

 

 

 

 

 

사실 숫자 야구게임의 구현 자체는 정말 하나도 어렵지 않았다. 하지만 그렇다고 또 평소처럼 코딩을 시작하면 우테코에 지원한 이유가 퇴색될거라 생각하고 요구사항의 의미를 파악하고 

요구사항을 통해 내가 공부해야 하는게 무엇인지, 그리고 뭘 배울 수 있을지를 생각했다.

1주차의 요구항을 보면 함수의 분리를 가장 중요하게 여긴다. 그래서 무작정 클린코드(https://book.naver.com/bookdb/book_detail.nhn?bid=7390287를 사서 읽었다. 정말 좋은 내용이 많았고 축약하자면, 사람이 읽기 좋은 코드를 짜는것이 좋다는 내용었다.

그렇게 책을 읽다보니 객체지향이라는 것에 대한 내용이 등장하면서 객체지향이 무엇인지 한번 생각해 보기로 했다.

그리고 읽기 시작한 책이 "객체지향의 사실과 오해(https://book.naver.com/bookdb/book_detail.nhn?bid=9145968)" 이다.

 

처음 이 책을 읽었을때는 이게 왜 베스트셀러인지 이해가 안될정도로 지루했다. 그래서 앞부분을 계속 읽다 말고 읽다 말고 반복했던것 같다.

그렇게 꾸역꾸역 책을 완독했지만 오히려 머리에 많이 남은 내용을 클린코드의 내용이었던것 같다. 

그렇게 1주차의 미션을 제출했다.

 

그리고 2주차 과제가 도착했다. 2주차 과제는 자동차 경주 게임 미션이었다.

 

https://github.com/woowacourse/java-racingcar-precourse

2주차 과제와 함께 피드백이 도착했다.

피드백은 개별 피드백이 아닌 전체 피드백이었다.

하지만 개인별 피드백이 아님에도 불구하고 피드백의 내용은 나의 소스를 꿰뚫고 있는듯 했다.

코드 컨밴션을 나름 잘 지키고 코딩했다고 생각했는데, 피드백을 보고 나니 정말 엉망이었다.

뿐만 아니라 메소드, 변수의 이름을 적절하게 잘 지었는지에 대한 반성도 하게 되었다.

 

이번 미션의 요구사항은 이전과 비슷했지만 아래의 요구사항이 추가되었다.

 

 

 

이 요구사항에서 확실히 느낀것은 "메소드의 크기를 작게 만드는 것의 중요성" 이다. 

클린코드 책에도 나와있듯, 메소드가 한번에 하나의 일만 하도록 코드를 작성하는 것은 가독성의 관점에서 정말 효율적이다.

 

그러다 문득 생각이 들었다. 왜이렇게 한번에 하나의 일을 하는것에 집착을 하는 걸까?

그래서 관련 정보를 보다가 객체지향의 SOLID 원칙을 알게 되었다.

책에서도 몇번 나왔었지만 그냥 그렇구나.. 하고 넘어간게 깊게 생각을 해보니 다르게 느껴졌다.

왜 객체지향은 이러한 원칙을 새웠을까에 대한 깊은 고민을 하다가 

"객체지향의 사실과 오해" 를 다시 한번 읽기로 하고 공부를 시작했다.

 

이상했다. 분명 저번주만에 해도 지겹고 재미 없었던 책이 생각의 관점을 바꾸고 읽으니 정말 재미있게 읽였다.

그리고 이 책을 통해 객체지향의 역할, 책임, 협력관게를 이해할 수 있게 되었고 이를 코드에 최대한 녹여내고자 노력했다.

 

그리고 제출, 또 다시 다음 미션과 함께 피드백이 도착했다.

이번 전체 피드백 역시 나의 소스를 뼈아프게 관통했다....

비즈니스 로직과 UI로직을 한 클래스가 담당하지 않도록 한다...

2주차 관제에서 view를 담당하는 클래스에게 데이터의 가공까지 책임을 부여했는데 정말 뼈아팠다..

이 외에도 정말 많은 피드백이 있었지만, 모든걸 다 말하면 피드백 관련 내용으로만 엄처난 양이 될 것 같아 생략한다.

 

3주차 과제는 지하철 노선도 미션이었다.

 

https://github.com/woowacourse/java-subway-map-precourse

이번 요구사항은 이전과 다른점이 없었다. 하지만 프로그램의 사이즈가 정말 거대해 졌다.

1, 2주차의 다른 참가자들의 소스를 보면서 다들 패턴을 코드에 적용시킬 뿐만 아니라 TDD를 하는것을 보았다.

뭔가 조급해졌다. 나는 TDD같은거 모르는데... 그리고 MVC? MVVM 이런거 하나도 모르는데..

 

그래서 무작정 또 책을 샀다. 먼저 본 책은 자바와 JUnit을 활용한 실용주의 단위 테스트(https://book.naver.com/bookdb/book_detail.nhn?bid=15064709) 라는 책이었다. 

이 책을 통해서 TDD에 대해 간략한 내용을 파악할 수 있었다. 그런데 문제가 있었다.. 나에게 주어진 시간은 너무 짧고, 이번 주 안에 설계와 TDD를 모두 만족하는 코드를 작성하기에는

스스로가 불가능 하다고 느꼈다. TDD의 적용이 꺼려진것은 테스트 코드를 작성하는것에 대한 두려움이 많이 컷던것 같다.

사실 TDD 개발 방법론 자체는 어렵지 않았지만 좋은 테스트 코드를 작성해야 한다는 강박관념이 자꾸 나를 괴롭혔고 결국 코드를 한줄도 못짜고 계속 intellij 창만 바라보게 되는 결과로 이뤄졌다.

 

그렇게 있다가 문득 생각이 들었다. "이 과제를 통해 내가 얻을 수 있는게 뭐였지..? 이 과제의 요구사항은 왜 이렇게 주어졌을까??" 

그래서 다시 메일을 차근차근 읽었다. 그리고 내 눈에 들어온 한줄의 문장

 

 

 

결국 이번에는 객체간의 협업을 만들어내는 경험에 그 목표가 있다고 판단했다.

객체지향의 사실과 오해를 통해 그 개념은 이해하고 있었지만 조금 더 깊게 공부하고 코드에 녹여내고 싶었다.

그래서 책을 또 한권 샀다.

 

도메인 주도 설계 철저 입문(https://book.naver.com/bookdb/book_detail.nhn?bid=16778491)

 

이 책은 정말 재미있었다. 도메인에 대한 개념, 객체간의 협업 등 자세하게 풀어져 있었다.

이 책을 읽기 전에 객체지향의 사실과 오해를 읽기 정말 잘했다는 생각이 들었다. DDD 책이 자세하게 설명 돼있다고는 하나 

객체지향의 원칙, 특징들을 다 이해하고 있다는 가정하에 작성되었기 때문이다.

이 책을 통해 나는 DDD에 대한 기본적인 개념을 익혔고, DDD와 MVC를 적용해서 코드를 작성해 보기로 했다.

 

 

 

 

이쩌면 너무 과도한 욕심이 독이었을까. 코드는 결국 완성하지 못했다. 아니, 완성한줄 알았다. 버그들을 발견하기 전까지는....

나름의 변경을 해보자면, TDD와 DDD를 공부하는데 너무 많은 시간을 들였다. 그래서 코딩하는데 2일을 소모하는걸로 계획을 세웠다.

사실 2일이면 코딩 충분하다고 생각했다. 평소에 하던 구현들에 비하면 정말 아무것도 아닌 과제였기에..

하지만 이건 내 착각이었다.

 

처음 적용해 보는 설계방법, 디자인 패턴과 SOLID를 의식하는 코딩은 나를 멘붕 상태로 만들기에 충분했다.

오히려 몰랐을때가 더 편했다라는 생각이 들 정도로 기능 하나를 구현하는데 엄청난 시간이 들였다. 

 

"이 객체에게 이 역할을 할당하는게 맞나"

"이 객체의 책임이 제대로 부여 됐나"

"객체가 메시지를 보내고 있나"

"서로 협업이 적절하게 이루어지고 있나"

....

 

그렇게 하다 보니 시간은 쏜살같이 지나갔고 결국 마지막날까지 할애했다.

그리고 어찌저찌 코딩을 끝내고 거의 제출시간 막바지에 제출했던것 같다.

 

프로그램을 마감에 쫒기듯 만들어서 리팩토링 및 버그 확인 할 시간도 없었다.

그래도 많이 배웠으니까 괜찮다고 생각하고 싶지만 사실 후회도 왼다. 그냥 완성을 시키는걸 목표로 잡을껄 그랬나 하는...

 

 

 

그럼에도 불구하고 이번 3주간 나는 엄청난 성장을 이루었다.

객체지향, 설계법, TDD, DDD 클린코드 아무것도 몰랐던 내가 3주간의 미션수행을 통해 이것들을 이해하게 되었다.

또한 코드를 작성하는 방법도 달라지고 어떤 코드를 지향해야 하는지도 생각하게 되었다.

 

 

우테코는 물고기를 잡는 방법을 알려주는 교육인것 같다. 단순히 필요한것을 주는것이 아닌 학생 스스로 필요한 것을 찾아낼 수 있는 길을 알려주는..

정말 좋았다. 단순히 수업을 듣는 방식이었으면 공부했던 내용들을 금방 잊었을 것이고, 어떤 방향으로 공부해야하는지 이해할 수 없었을 것이다.

 

아직 최종 시험이 남아있지만, 프리코스만으로도 많은것을 느끼개 해준 우테코 관계자 분들에게 감사인사를 남기고 싶다.

그리고 꼭 붙어서 함께 공부하고 싶다...

 

제발..



------------------

정말 감사하게도 합격하였다.
정말 간절히 원했던 기회, 열심히 하겠습니다!

 

댓글